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

# PhilSys Check Tier 1 sandbox

> Predetermined API payloads to retrieve every PhilSys Check Tier 1 status in sandbox mode.

Sandbox payloads for the [Stateless PhilSys Check Tier 1](https://docs.idmetagroup.com/stateless-verification-api/philippines-government/philsys-check-tier-1.md) endpoint.

```http theme={null}
POST /api/v3/verifications/philippines/philsys-check-tier-1-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.

Every request needs `faceLivenessSessionId` plus **exactly one** of `pcn`, `pcnFormData`, or `qrData`. Sending two, or none, fails validation.

These are the same request payloads as [PhilSys Check Tier 2 sandbox](https://docs.idmetagroup.com/stateless-verification-api/sandbox/philsys-check-tier-2.md). Tier 1 returns less: `isValid` plus `fullName` on a match, or `isValid` plus `reason` on a rejection. It never returns address, portrait, or parsed QR fields.

### Verified

> **VERIFIED — Successfully verified via PCN number**
>
> **Request**
>
> ```json theme={null}
> {
>   "faceLivenessSessionId": "0f8a7c31-5d64-4e2b-9a17-3c6b8e2d4f10",
>   "pcn": "3721-0948-5163-2807"
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "PhilSys Check Tier 1 processed successfully",
>   "data": {
>     "isValid": true,
>     "fullName": "JUAN CARLOS DELA CRUZ"
>   },
>   "verificationStatus": "VERIFIED",
>   "verificationStatusCode": 3,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "philsys_check_tier_1",
>   "metadata": null,
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```

> **VERIFIED — Successfully verified via ePhilID QR code**
>
> **Request**
>
> ```json theme={null}
> {
>   "faceLivenessSessionId": "1b93d5e7-2a48-4c91-8f06-7d2e5a9c3b84",
>   "qrData": "PH1:4085273619042758:MARIA ISABEL:SANTOS REYES:1992-07-22:F"
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "PhilSys Check Tier 1 processed successfully",
>   "data": {
>     "isValid": true,
>     "fullName": "MARIA ISABEL SANTOS REYES"
>   },
>   "verificationStatus": "VERIFIED",
>   "verificationStatusCode": 3,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "philsys_check_tier_1",
>   "metadata": null,
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> The ePhilID QR is a colon-delimited string beginning with `PH1:`. Tier 1 never returns the parsed QR block.

> **VERIFIED — Successfully verified via Digital ID QR code**
>
> **Request**
>
> ```json theme={null}
> {
>   "faceLivenessSessionId": "2c47f8a0-6b13-4d85-a29e-5f1c7b3d9e62",
>   "qrData": "{\"iss\":\"PSA\",\"v\":\"1.0\",\"id\":\"K7M2Q9X\",\"z\":\"tHq4Zr8XmPcL2vKdN6sYwA9bE3fJgU5oR1nT7iBxCyDzSaFhVeMjQkWlOpIuGt\",\"type\":\"DigitalID\"}"
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "PhilSys Check Tier 1 processed successfully",
>   "data": {
>     "isValid": true,
>     "fullName": "PEDRO ANTONIO RAMOS"
>   },
>   "verificationStatus": "VERIFIED",
>   "verificationStatusCode": 3,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "philsys_check_tier_1",
>   "metadata": null,
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> The Digital ID QR is a JSON string. Its `id` must be alphanumeric and no more than 7 characters.

> **VERIFIED — Successfully verified via PhilID / PVC QR code**
>
> **Request**
>
> ```json theme={null}
> {
>   "faceLivenessSessionId": "3d56a9b2-7c84-4f31-b60d-8e2a4c7f1953",
>   "qrData": "{\"alg\":\"EDDSA\",\"signature\":\"mQ8xTvKr3ZpLc7NwYd2SbG5jHf9AeUoRi4tXnB6CyDzVaMhQkWlOpIuGtEsFrJ\",\"pcn\":\"5290-6174-8352-0916\"}"
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "PhilSys Check Tier 1 processed successfully",
>   "data": {
>     "isValid": true,
>     "fullName": "ANA LUCIA BAUTISTA"
>   },
>   "verificationStatus": "VERIFIED",
>   "verificationStatusCode": 3,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "philsys_check_tier_1",
>   "metadata": null,
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```

> **VERIFIED — Successfully verified via personal information**
>
> **Request**
>
> ```json theme={null}
> {
>   "faceLivenessSessionId": "4e67b0c3-8d95-4a72-c51e-9f3b5d8a2064",
>   "pcnFormData": {
>     "firstName": "ROSA",
>     "middleName": "AQUINO",
>     "lastName": "VILLANUEVA",
>     "suffix": "N/A",
>     "birthDate": "1985-12-05"
>   }
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "PhilSys Check Tier 1 processed successfully",
>   "data": {
>     "isValid": true,
>     "fullName": "ROSA AQUINO VILLANUEVA"
>   },
>   "verificationStatus": "VERIFIED",
>   "verificationStatusCode": 3,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "philsys_check_tier_1",
>   "metadata": null,
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> Send `"N/A"` as `suffix` when the person has no suffix.

> **VERIFIED — Successfully verified with a live face liveness session**
>
> **Request**
>
> ```json theme={null}
> {
>   "faceLivenessSessionId": "<any valid UUID, including a real session id>",
>   "pcn": "9999-0000-9999-0000"
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "PhilSys Check Tier 1 processed successfully",
>   "data": {
>     "isValid": true,
>     "fullName": "JOSE MIGUEL TORRES"
>   },
>   "verificationStatus": "VERIFIED",
>   "verificationStatusCode": 3,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "philsys_check_tier_1",
>   "metadata": null,
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> PCN `9999-0000-9999-0000` accepts any valid UUID as its `faceLivenessSessionId`, including a session id from a real liveness capture. Use it to test the full capture-then-verify flow end to end.

### Rejected

A rejection is a completed verification, not an error: `success` is `true`, HTTP status is `200`, and `data` carries a `reason` instead of `fullName`. In live mode a rejection is billed.

> **REJECTED — Not verified against the PhilSys record**
>
> **Request**
>
> ```json theme={null}
> {
>   "faceLivenessSessionId": "5f78c1d4-9e06-4b83-d62f-0a4c6e9b3175",
>   "pcn": "6403-8291-5740-1638"
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "PhilSys Check Tier 1 processed successfully",
>   "data": {
>     "isValid": false,
>     "reason": "Invalid PhilSys ID Information"
>   },
>   "verificationStatus": "REJECTED",
>   "verificationStatusCode": 1,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "philsys_check_tier_1",
>   "metadata": null,
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```

> **REJECTED — Face does not match the PhilSys record**
>
> **Request**
>
> ```json theme={null}
> {
>   "faceLivenessSessionId": "7b9ae3f6-1a28-4da5-b84c-2c6e8a1d5397",
>   "pcn": "8627-4135-0968-2741"
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "PhilSys Check Tier 1 processed successfully",
>   "data": {
>     "isValid": false,
>     "reason": "Invalid Face and PhilSys ID Combination"
>   },
>   "verificationStatus": "REJECTED",
>   "verificationStatusCode": 1,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "philsys_check_tier_1",
>   "metadata": null,
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> On Tier 1, PhilSys answering `unauthorized` means the face did not match. It is settled as a rejection, not as a source failure.

> **REJECTED — Not verified, unmatched payload fallback**
>
> **Request**
>
> ```json theme={null}
> {
>   "faceLivenessSessionId": "8c4f0a32-5b19-4e67-9d2a-3f7b1c6e0458",
>   "pcn": "1357-2468-1357-2468"
> }
> ```
>
> **Response** — HTTP `200`
>
> ```json theme={null}
> {
>   "success": true,
>   "message": "PhilSys Check Tier 1 processed successfully",
>   "data": {
>     "isValid": false,
>     "reason": "Invalid PhilSys ID Information"
>   },
>   "verificationStatus": "REJECTED",
>   "verificationStatusCode": 1,
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "philsys_check_tier_1",
>   "metadata": null,
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> This PCN matches no documented scenario, so it takes the no-match fallback — identical to the first rejection above apart from `transactionId` and `metadata`. Fire it once to confirm that an unknown PCN never reaches live PhilSys.

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

> **VALIDATION\_FAILED — Face liveness session invalid or expired**
>
> **Request**
>
> ```json theme={null}
> {
>   "faceLivenessSessionId": "00000000-0000-4000-8000-000000000000",
>   "pcn": "3721-0948-5163-2807"
> }
> ```
>
> **Response** — HTTP `400`
>
> ```json theme={null}
> {
>   "success": false,
>   "code": "VALIDATION_FAILED",
>   "message": "The request could not be validated. Please check the submitted fields.",
>   "errors": {
>     "faceLivenessSessionId": [
>       "The face liveness session is invalid or has expired."
>     ]
>   },
>   "transactionId": "<uuid generated per request>",
>   "verificationType": "philsys_check_tier_1",
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> > [!NOTE]
> >
> > This is the only `400` that carries a real `transactionId` and echoes `metadata`. The request reached the service, so a transaction row was written with status `FAILED` (`6`). Every other `400` returns `transactionId: null`, omits `metadata`, and writes no row.

> **VALIDATION\_FAILED — Request shape rejected before processing**
>
> These fail before the service is reached. Every one returns HTTP `400` with the same envelope:
>
> ```json theme={null}
> {
>   "success": false,
>   "code": "VALIDATION_FAILED",
>   "message": "The request could not be validated. Please check the submitted fields.",
>   "errors": {},
>   "transactionId": null,
>   "verificationType": "philsys_check_tier_1",
>   "metadata": null,
>   "createdAt": "<UTC timestamp of the request>"
> }
> ```
>
> Only `errors` differs. Each row below is a change to the by-PCN request:
>
> | Send | `errors` |
> | - | - |
> | Both `pcn` and `qrData` | `{ "input": ["Provide exactly one of pcn, pcnFormData, or qrData."] }` |
> | Neither `pcn`, `pcnFormData`, nor `qrData` | `{ "input": ["Provide exactly one of pcn, pcnFormData, or qrData."] }` |
> | `"pcn": "37210948"` | `{ "pcn": ["The PCN must contain exactly 16 digits."] }` |
> | `"qrData": "not-a-philsys-qr"` | `{ "qrData": ["The QR format is not supported."] }` |
> | Digital ID QR with `"id": "K7M2Q9XLONG"` | `{ "qrData": ["Digital ID must be alphanumeric and contain no more than 7 characters."] }` |
> | `"trustFlowId": "anything"` | `{ "trustFlowId": ["The trust flow id field is prohibited."] }` |
> | No `faceLivenessSessionId` | `{ "faceLivenessSessionId": ["The face liveness session id field is required."] }` |
>
> > [!WARNING]
> >
> > `trustFlowId` and `trustValidationId` are prohibited on stateless endpoints. Sending either is a validation failure, not a silently ignored field.

### Source unavailable

> **FAILED — PhilSys source unavailable**
>
> **Request**
>
> ```json theme={null}
> {
>   "faceLivenessSessionId": "6a89d2e5-0f17-4c94-e73a-1b5d7f0c4286",
>   "pcn": "7516-3820-9471-5029"
> }
> ```
>
> **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": "philsys_check_tier_1",
>   "metadata": null,
>   "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`.

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