> ## Documentation Index
> Fetch the complete documentation index at: https://docs.idmetagroup.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Dukcapil Full sandbox

> Predetermined API payloads to retrieve every Dukcapil Full status in sandbox mode.

Sandbox payloads for the [Stateless Dukcapil Full](https://docs.idmetagroup.com/stateless-verification-api/indonesia-government/dukcapil-data-full.md) endpoint.

```http theme={null}
POST /api/v3/verifications/indonesia/dukcapil-full-passthrough
```

When your account is in sandbox mode, these payloads return the outcomes shown below. Any other valid payload is answered as a no-match — HTTP `200` with `isValid` set to `false`.

Values are case-sensitive. `transactionId` and `createdAt` are generated per request, and `metadata` is echoed back from your request. See [Sandbox introduction](https://docs.idmetagroup.com/stateless-verification-api/sandbox.md) for the full matching rules.

> [!NOTE]
>
> `selfieImage` is required but **ignored for matching** — send any valid base64 image or image upload. The scenario is chosen by `nik`, `name` and `dateOfBirth`, so you can test with a real selfie from your capture flow.

> [!WARNING]
>
> Send **only** the keys shown in each request. Matching is exact on the key set, so adding an optional field such as `gender` or `address` to a documented payload turns it into a no-match.

A face match passes at a `selfieImagePercentage` of `70` or higher.

### Verified

> [accordion] VERIFIED — Identity and face match
>
> **Request**
>
> ```json theme={null}
> {
>   "nik": "3171010101900011",
>   "name": "BUDI SANTOSO",
>   "dateOfBirth": "1990-01-01",
>   "selfieImage": "aSDinaTvuI8gbWludGxpZnk="
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "Indonesia Dukcapil Full processed successfully",
>   "data": {
>     "isValid": true,
>     "nik": "3171010101900011",
>     "name": "BUDI SANTOSO",
>     "dateOfBirth": "1990-01-01",
>     "selfieImagePercentage": 95.4
>   },
>   "verificationStatus": "VERIFIED",
>   "verificationStatusCode": 3,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "dukcapil_full",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```

> [accordion] VERIFIED — Identity, optional fields and face match
>
> **Request**
>
> ```json theme={null}
> {
>   "nik": "3171010101900015",
>   "name": "HENDRA GUNAWAN",
>   "dateOfBirth": "1987-02-14",
>   "placeOfBirth": "SURABAYA",
>   "gender": "Male",
>   "selfieImage": "aSDinaTvuI8gbWludGxpZnk="
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "Indonesia Dukcapil Full processed successfully",
>   "data": {
>     "isValid": true,
>     "nik": "3171010101900015",
>     "name": "HENDRA GUNAWAN",
>     "dateOfBirth": "1987-02-14",
>     "selfieImagePercentage": 97.1
>   },
>   "verificationStatus": "VERIFIED",
>   "verificationStatusCode": 3,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "dukcapil_full",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> Optional fields are checked against the Dukcapil record but are not echoed in the response. Send them exactly as shown — this payload only matches with both `placeOfBirth` and `gender` present.

### Rejected

A rejection is a completed verification, not an error: `success` is `true` and HTTP status is `200`. In live mode a rejection is billed.

> [accordion] REJECTED — Face does not match
>
> **Request**
>
> ```json theme={null}
> {
>   "nik": "3171010101900012",
>   "name": "SITI RAHAYU",
>   "dateOfBirth": "1992-05-12",
>   "selfieImage": "aSDinaTvuI8gbWludGxpZnk="
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "Indonesia Dukcapil Full processed successfully",
>   "data": {
>     "isValid": false,
>     "nik": "3171010101900012",
>     "name": "SITI RAHAYU",
>     "dateOfBirth": "1992-05-12",
>     "selfieImagePercentage": 38.2
>   },
>   "verificationStatus": "REJECTED",
>   "verificationStatusCode": 1,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "dukcapil_full",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> Identity matched, but the face score is below `70`.

> [accordion] REJECTED — Name does not match
>
> **Request**
>
> ```json theme={null}
> {
>   "nik": "3171010101900013",
>   "name": "BUDI SANTOSA",
>   "dateOfBirth": "1988-11-30",
>   "selfieImage": "aSDinaTvuI8gbWludGxpZnk="
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "Indonesia Dukcapil Full processed successfully",
>   "data": {
>     "isValid": false,
>     "nik": "3171010101900013",
>     "name": "WRONG NAME",
>     "dateOfBirth": "1988-11-30",
>     "selfieImagePercentage": 91.0
>   },
>   "verificationStatus": "REJECTED",
>   "verificationStatusCode": 1,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "dukcapil_full",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```

> [accordion] REJECTED — Date of birth does not match
>
> **Request**
>
> ```json theme={null}
> {
>   "nik": "3171010101900014",
>   "name": "AGUS PRATAMA",
>   "dateOfBirth": "1980-01-01",
>   "selfieImage": "aSDinaTvuI8gbWludGxpZnk="
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "Indonesia Dukcapil Full processed successfully",
>   "data": {
>     "isValid": false,
>     "nik": "3171010101900014",
>     "name": "AGUS PRATAMA",
>     "dateOfBirth": "1980-01-01",
>     "selfieImagePercentage": 93.7
>   },
>   "verificationStatus": "REJECTED",
>   "verificationStatusCode": 1,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "dukcapil_full",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```

> [accordion] REJECTED — Not verified, unmatched payload fallback
>
> **Request**
>
> ```json theme={null}
> {
>   "nik": "3171019999999999",
>   "name": "BUDI SANTOSO",
>   "dateOfBirth": "1990-01-01",
>   "selfieImage": "aSDinaTvuI8gbWludGxpZnk="
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "Indonesia Dukcapil Full processed successfully",
>   "data": {
>     "isValid": false,
>     "nik": "3171019999999999",
>     "name": "BUDI SANTOSO",
>     "dateOfBirth": "1990-01-01",
>     "selfieImagePercentage": null
>   },
>   "verificationStatus": "REJECTED",
>   "verificationStatusCode": 1,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "dukcapil_full",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> This NIK matches no documented scenario, so it takes the no-match fallback. No face comparison took place, so `selfieImagePercentage` is `null`.

### Validation failures

All validation failures return HTTP `400` with `code` set to `VALIDATION_FAILED` and the same message; only `errors` differs. Validation runs before any fixture matching, so these behave identically in sandbox and live. `transactionId` is `null` and no transaction row is written.

> [accordion] VALIDATION\_FAILED — Selfie image missing
>
> **Request**
>
> ```json theme={null}
> {
>   "nik": "3171010101900011",
>   "name": "BUDI SANTOSO",
>   "dateOfBirth": "1990-01-01"
> }
> ```
>
> **Response** — HTTP `400`
>
> ```json theme={null}
> {
>   "success": false,
>   "code": "VALIDATION_FAILED",
>   "message": "The request could not be validated. Please check the submitted fields.",
>   "errors": {
>     "selfieImage": ["The selfie image field is required."]
>   },
>   "transactionId": null,
>   "verificationType": "dukcapil_full",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```

> [accordion] VALIDATION\_FAILED — Selfie image not a valid image
>
> **Request**
>
> ```json theme={null}
> {
>   "nik": "3171010101900011",
>   "name": "BUDI SANTOSO",
>   "dateOfBirth": "1990-01-01",
>   "selfieImage": "not-an-image!"
> }
> ```
>
> **Response** — HTTP `400`
>
> ```json theme={null}
> {
>   "success": false,
>   "code": "VALIDATION_FAILED",
>   "message": "The request could not be validated. Please check the submitted fields.",
>   "errors": {
>     "selfieImage": ["The selfie image must be a valid image upload or base64 image."]
>   },
>   "transactionId": null,
>   "verificationType": "dukcapil_full",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```

> [accordion] VALIDATION\_FAILED — NIK missing
>
> **Request**
>
> ```json theme={null}
> {
>   "name": "BUDI SANTOSO",
>   "dateOfBirth": "1990-01-01",
>   "selfieImage": "aSDinaTvuI8gbWludGxpZnk="
> }
> ```
>
> **Response** — HTTP `400`
>
> ```json theme={null}
> {
>   "success": false,
>   "code": "VALIDATION_FAILED",
>   "message": "The request could not be validated. Please check the submitted fields.",
>   "errors": {
>     "nik": ["The nik field is required."]
>   },
>   "transactionId": null,
>   "verificationType": "dukcapil_full",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```

> [accordion] VALIDATION\_FAILED — NIK not 16 digits
>
> **Request**
>
> ```json theme={null}
> {
>   "nik": "31710101",
>   "name": "BUDI SANTOSO",
>   "dateOfBirth": "1990-01-01",
>   "selfieImage": "aSDinaTvuI8gbWludGxpZnk="
> }
> ```
>
> **Response** — HTTP `400`
>
> ```json theme={null}
> {
>   "success": false,
>   "code": "VALIDATION_FAILED",
>   "message": "The request could not be validated. Please check the submitted fields.",
>   "errors": {
>     "nik": ["The nik must be 16 digits."]
>   },
>   "transactionId": null,
>   "verificationType": "dukcapil_full",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```

> [accordion] VALIDATION\_FAILED — Name missing
>
> **Request**
>
> ```json theme={null}
> {
>   "nik": "3171010101900011",
>   "dateOfBirth": "1990-01-01",
>   "selfieImage": "aSDinaTvuI8gbWludGxpZnk="
> }
> ```
>
> **Response** — HTTP `400`
>
> ```json theme={null}
> {
>   "success": false,
>   "code": "VALIDATION_FAILED",
>   "message": "The request could not be validated. Please check the submitted fields.",
>   "errors": {
>     "name": ["The name field is required."]
>   },
>   "transactionId": null,
>   "verificationType": "dukcapil_full",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```

> [accordion] VALIDATION\_FAILED — Date of birth missing
>
> **Request**
>
> ```json theme={null}
> {
>   "nik": "3171010101900011",
>   "name": "BUDI SANTOSO",
>   "selfieImage": "aSDinaTvuI8gbWludGxpZnk="
> }
> ```
>
> **Response** — HTTP `400`
>
> ```json theme={null}
> {
>   "success": false,
>   "code": "VALIDATION_FAILED",
>   "message": "The request could not be validated. Please check the submitted fields.",
>   "errors": {
>     "dateOfBirth": ["The date of birth field is required."]
>   },
>   "transactionId": null,
>   "verificationType": "dukcapil_full",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```

> [accordion] VALIDATION\_FAILED — Trust flow fields sent to a stateless endpoint
>
> **Request**
>
> ```json theme={null}
> {
>   "nik": "3171010101900011",
>   "name": "BUDI SANTOSO",
>   "dateOfBirth": "1990-01-01",
>   "selfieImage": "aSDinaTvuI8gbWludGxpZnk=",
>   "trustFlowId": "anything"
> }
> ```
>
> **Response** — HTTP `400`
>
> ```json theme={null}
> {
>   "success": false,
>   "code": "VALIDATION_FAILED",
>   "message": "The request could not be validated. Please check the submitted fields.",
>   "errors": {
>     "trustFlowId": ["The trust flow id field is prohibited."]
>   },
>   "transactionId": null,
>   "verificationType": "dukcapil_full",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> > [!WARNING]
> >
> > `trustFlowId` and `trustValidationId` are prohibited on stateless endpoints. Sending either is a validation failure, not a silently ignored field.

### Source unavailable

> [accordion] FAILED — Dukcapil source unavailable
>
> **Request**
>
> ```json theme={null}
> {
>   "nik": "3171010101900019",
>   "name": "BUDI SANTOSO",
>   "dateOfBirth": "1990-01-01",
>   "selfieImage": "aSDinaTvuI8gbWludGxpZnk="
> }
> ```
>
> **Response** — HTTP `500`
>
> ```json theme={null}
> {
>   "success": false,
>   "code": "IDN_GOV_UNAVAILABLE",
>   "message": "The Indonesian verification source is currently unavailable. Please try again later.",
>   "verificationStatus": "FAILED",
>   "verificationStatusCode": 6,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "dukcapil_full",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> There is no `data` key at all. Branch on `code`, not on the presence of `data`. In live mode this failure is not billed.

### Account-level responses

A missing or invalid `Authorization` header returns HTTP `401`, and an account without the `dukcapil_full` plan returns HTTP `403` — both enforced in sandbox exactly as in live. See [Sandbox introduction](https://docs.idmetagroup.com/stateless-verification-api/sandbox.md#non-verification-responses) for their envelopes.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.