> ## 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.

# Philippines NDRP sandbox

> Predetermined API payloads to retrieve every Philippines NDRP status in sandbox mode.

Sandbox payloads for the [Stateless NDRP](https://docs.idmetagroup.com/stateless-verification-api/philippines-government/ndrp.md) endpoint.

```http theme={null}
POST /api/v3/verifications/philippines/ndrp-passthrough
```

When your account is in sandbox mode, these payloads return the outcomes shown below. Any other valid payload is answered as NDRP finding no records — HTTP `200` with `verificationStatus` set to `VERIFIED`.

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.

### Verified

NDRP returned no records for the name.

> **VERIFIED — sample 1**
>
> **Request**
>
> ```json theme={null}
> {
>   "fullName": "Juan Dela Cruz"
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "Philippines NDRP check processed successfully",
>   "data": {
>     "isValid": true,
>     "isRestricted": false,
>     "totalNumberOfRecords": 0,
>     "numberOfGelRecords": 0,
>     "numberOfGuestRecords": 0,
>     "numberOfGovtRecords": 0,
>     "records": []
>   },
>   "verificationStatus": "VERIFIED",
>   "verificationStatusCode": 3,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "philippines_ndrp",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```

> **VERIFIED — sample 2, with birth date**
>
> **Request**
>
> ```json theme={null}
> {
>   "fullName": "Maria Lopez Reyes",
>   "dateOfBirth": "1985-07-22"
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "Philippines NDRP check processed successfully",
>   "data": {
>     "isValid": true,
>     "isRestricted": false,
>     "totalNumberOfRecords": 0,
>     "numberOfGelRecords": 0,
>     "numberOfGuestRecords": 0,
>     "numberOfGovtRecords": 0,
>     "records": []
>   },
>   "verificationStatus": "VERIFIED",
>   "verificationStatusCode": 3,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "philippines_ndrp",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> With no records returned, `dateOfBirth` has nothing to compare against and does not change the outcome.

> **VERIFIED — Unmatched payload fallback**
>
> **Request**
>
> ```json theme={null}
> {
>   "fullName": "Carlos Bautista"
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "Philippines NDRP check processed successfully",
>   "data": {
>     "isValid": true,
>     "isRestricted": false,
>     "totalNumberOfRecords": 0,
>     "numberOfGelRecords": 0,
>     "numberOfGuestRecords": 0,
>     "numberOfGovtRecords": 0,
>     "records": []
>   },
>   "verificationStatus": "VERIFIED",
>   "verificationStatusCode": 3,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "philippines_ndrp",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> This name matches no documented scenario, so it is answered as NDRP finding no records. Fire it once to confirm that an unknown name never reaches the live NDRP source.

### Review needed

NDRP returned at least one record for the name, but no record's birth date matches `dateOfBirth`. A person with the same name may not be the same person, so the result is sent for manual review. This is the default when `restrictedMatchAction` is omitted or set to `manual`.

> **REVIEW\_NEEDED — Name match, no birth date sent**
>
> **Request**
>
> ```json theme={null}
> {
>   "fullName": "Pedro Santos Garcia"
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "Philippines NDRP check processed successfully",
>   "data": {
>     "isValid": false,
>     "isRestricted": true,
>     "totalNumberOfRecords": 1,
>     "numberOfGelRecords": 1,
>     "numberOfGuestRecords": 0,
>     "numberOfGovtRecords": 0,
>     "records": [
>       {
>         "firstName": "PEDRO",
>         "middleName": "SANTOS",
>         "lastName": "GARCIA",
>         "birthdate": "1980-03-10",
>         "source": "GEL",
>         "photoPath": null
>       }
>     ]
>   },
>   "verificationStatus": "REVIEW_NEEDED",
>   "verificationStatusCode": 2,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "philippines_ndrp",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> NDRP returns `Unavailable` when it has no photo or birth date. The response shows these as `null`.

> **REVIEW\_NEEDED — Name match, birth date differs**
>
> **Request**
>
> ```json theme={null}
> {
>   "fullName": "Ana Cruz Mendoza",
>   "dateOfBirth": "1990-01-01",
>   "restrictedMatchAction": "manual"
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "Philippines NDRP check processed successfully",
>   "data": {
>     "isValid": false,
>     "isRestricted": true,
>     "totalNumberOfRecords": 2,
>     "numberOfGelRecords": 1,
>     "numberOfGuestRecords": 0,
>     "numberOfGovtRecords": 1,
>     "records": [
>       {
>         "firstName": "ANA",
>         "middleName": "CRUZ",
>         "lastName": "MENDOZA",
>         "birthdate": "1975-11-02",
>         "source": "GEL",
>         "photoPath": null
>       },
>       {
>         "firstName": "ANA",
>         "middleName": "CRUZ",
>         "lastName": "MENDOZA",
>         "birthdate": null,
>         "source": "GOVT",
>         "photoPath": null
>       }
>     ]
>   },
>   "verificationStatus": "REVIEW_NEEDED",
>   "verificationStatusCode": 2,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "philippines_ndrp",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```

### 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.

> **REJECTED — Name and birth date match**
>
> **Request**
>
> ```json theme={null}
> {
>   "fullName": "Pedro Santos Garcia",
>   "dateOfBirth": "1980-03-10"
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "Philippines NDRP check processed successfully",
>   "data": {
>     "isValid": false,
>     "isRestricted": true,
>     "totalNumberOfRecords": 1,
>     "numberOfGelRecords": 1,
>     "numberOfGuestRecords": 0,
>     "numberOfGovtRecords": 0,
>     "records": [
>       {
>         "firstName": "PEDRO",
>         "middleName": "SANTOS",
>         "lastName": "GARCIA",
>         "birthdate": "1980-03-10",
>         "source": "GEL",
>         "photoPath": null
>       }
>     ]
>   },
>   "verificationStatus": "REJECTED",
>   "verificationStatusCode": 1,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "philippines_ndrp",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> `dateOfBirth` exactly matches the returned record's birth date, so the record is taken to be this person.

> **REJECTED — Birth date matches one of several records**
>
> **Request**
>
> ```json theme={null}
> {
>   "fullName": "Ana Cruz Mendoza",
>   "dateOfBirth": "1975-11-02"
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "Philippines NDRP check processed successfully",
>   "data": {
>     "isValid": false,
>     "isRestricted": true,
>     "totalNumberOfRecords": 2,
>     "numberOfGelRecords": 1,
>     "numberOfGuestRecords": 0,
>     "numberOfGovtRecords": 1,
>     "records": [
>       {
>         "firstName": "ANA",
>         "middleName": "CRUZ",
>         "lastName": "MENDOZA",
>         "birthdate": "1975-11-02",
>         "source": "GEL",
>         "photoPath": null
>       },
>       {
>         "firstName": "ANA",
>         "middleName": "CRUZ",
>         "lastName": "MENDOZA",
>         "birthdate": null,
>         "source": "GOVT",
>         "photoPath": null
>       }
>     ]
>   },
>   "verificationStatus": "REJECTED",
>   "verificationStatusCode": 1,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "philippines_ndrp",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> One matching record is enough to reject.

> **REJECTED — Name match with restrictedMatchAction set to rejected**
>
> **Request**
>
> ```json theme={null}
> {
>   "fullName": "Pedro Santos Garcia",
>   "dateOfBirth": "1990-01-01",
>   "restrictedMatchAction": "rejected"
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "Philippines NDRP check processed successfully",
>   "data": {
>     "isValid": false,
>     "isRestricted": true,
>     "totalNumberOfRecords": 1,
>     "numberOfGelRecords": 1,
>     "numberOfGuestRecords": 0,
>     "numberOfGovtRecords": 0,
>     "records": [
>       {
>         "firstName": "PEDRO",
>         "middleName": "SANTOS",
>         "lastName": "GARCIA",
>         "birthdate": "1980-03-10",
>         "source": "GEL",
>         "photoPath": null
>       }
>     ]
>   },
>   "verificationStatus": "REJECTED",
>   "verificationStatusCode": 1,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "philippines_ndrp",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> The birth date does not match, which would normally return `REVIEW_NEEDED`. `restrictedMatchAction` set to `rejected` rejects any name match instead.

### 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.

> **VALIDATION\_FAILED — Full name missing**
>
> **Request**
>
> ```json theme={null}
> {
>   "fullName": ""
> }
> ```
>
> **Response** — HTTP `400`
>
> ```json theme={null}
> {
>   "success": false,
>   "code": "VALIDATION_FAILED",
>   "message": "The request could not be validated. Please check the submitted fields.",
>   "errors": {
>     "fullName": ["The full name field is required."]
>   },
>   "transactionId": null,
>   "verificationType": "philippines_ndrp",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> `fullName` must be between 2 and 255 characters.

> **VALIDATION\_FAILED — Birth date in the wrong format**
>
> **Request**
>
> ```json theme={null}
> {
>   "fullName": "Pedro Santos Garcia",
>   "dateOfBirth": "10/03/1980"
> }
> ```
>
> **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 must match the format Y-m-d."]
>   },
>   "transactionId": null,
>   "verificationType": "philippines_ndrp",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```

> **VALIDATION\_FAILED — Unsupported restrictedMatchAction**
>
> **Request**
>
> ```json theme={null}
> {
>   "fullName": "Pedro Santos Garcia",
>   "restrictedMatchAction": "approve"
> }
> ```
>
> **Response** — HTTP `400`
>
> ```json theme={null}
> {
>   "success": false,
>   "code": "VALIDATION_FAILED",
>   "message": "The request could not be validated. Please check the submitted fields.",
>   "errors": {
>     "restrictedMatchAction": ["The selected restricted match action is invalid."]
>   },
>   "transactionId": null,
>   "verificationType": "philippines_ndrp",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> `restrictedMatchAction` accepts `manual` or `rejected`.

> **VALIDATION\_FAILED — Trust flow fields sent to a stateless endpoint**
>
> **Request**
>
> ```json theme={null}
> {
>   "fullName": "Juan Dela Cruz",
>   "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": "philippines_ndrp",
>   "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

> **FAILED — NDRP source unavailable, sample 1**
>
> **Request**
>
> ```json theme={null}
> {
>   "fullName": "Sandbox Unavailable"
> }
> ```
>
> **Response** — HTTP `500`
>
> ```json theme={null}
> {
>   "success": false,
>   "code": "PH_GOV_UNAVAILABLE",
>   "message": "The Philippine government source is currently unavailable. Please try again later.",
>   "verificationStatus": "FAILED",
>   "verificationStatusCode": 6,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "philippines_ndrp",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> There is no `data` key at all. The envelope treats `code` and `data` as mutually exclusive, so a coded failure drops `data` rather than emitting an empty object. Branch on `code`, not on the presence of `data`.

> **FAILED — NDRP source unavailable, sample 2**
>
> **Request**
>
> ```json theme={null}
> {
>   "fullName": "Sandbox Unavailable Two",
>   "dateOfBirth": "1980-03-10"
> }
> ```
>
> **Response** — HTTP `500`
>
> ```json theme={null}
> {
>   "success": false,
>   "code": "PH_GOV_UNAVAILABLE",
>   "message": "The Philippine government source is currently unavailable. Please try again later.",
>   "verificationStatus": "FAILED",
>   "verificationStatusCode": 6,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "philippines_ndrp",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```

### Account-level responses

Two further responses are not specific to this endpoint. A missing or invalid `Authorization` header returns HTTP `401`, and an account without the `philippines_ndrp` 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.