> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.vlenseg.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.vlenseg.com/_mcp/server.

# PII inquiry without OTP

This is the shortest way to run a PII inquiry: one call, no OTP. Use it when your own product has already established that the user controls the phone number — or when you do not need phone-ownership proven by OTP at all.

If you do need that proof, use [PII inquiry with OTP](/fra-services/pii-inquiry-otp) instead. The endpoints and the response are identical; the OTP variant just adds two fields and one preceding call.

Both pages call the same two endpoints. The only difference is whether you send `otpRequestId` and `otpCode`.

## Which endpoint to call

#### [I have the ID images](#submit-id-images)

Send the front and back of the national ID as base64.

#### [I already have a transactionId](#submit-by-transaction)

Reuse the images from an earlier OCR or Digital Identity capture.

---

## Submit ID images

`POST /api/FRAServices/PersonallyIdentifiableInformation`

#### cURL

```bash
curl -X POST https://api.vlenseg.com/api/FRAServices/PersonallyIdentifiableInformation \
  -H "ApiKey: YOUR_API_KEY" \
  -H "Authorization: Bearer TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "idFrontBase64Image": "BASE64_ENCODED_IMAGE",
    "idBackBase64Image": "BASE64_ENCODED_IMAGE",
    "phoneNumber": "PHONE_NUMBER"
  }'
```

| Field                | Required | Description                              |
| -------------------- | -------- | ---------------------------------------- |
| `idFrontBase64Image` | Yes      | Base64-encoded front of the national ID. |
| `idBackBase64Image`  | Yes      | Base64-encoded back of the national ID.  |
| `phoneNumber`        | Yes      | The phone number being validated.        |

---

## Submit by transaction

`POST /api/FRAServices/CheckIdAndFRAByTransaction`

If the ID front and back were already processed in an existing transaction — an OCR or Digital Identity capture, for example — pass that `transactionId` instead of resending the images.

#### cURL

```bash
curl -X POST https://api.vlenseg.com/api/FRAServices/CheckIdAndFRAByTransaction \
  -H "ApiKey: YOUR_API_KEY" \
  -H "Authorization: Bearer TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "phoneNumber": "PHONE_NUMBER",
    "transactionId": "TRANSACTION_ID"
  }'
```

| Field           | Required | Description                                                                                        |
| --------------- | -------- | -------------------------------------------------------------------------------------------------- |
| `phoneNumber`   | Yes      | The phone number being validated.                                                                  |
| `transactionId` | Yes      | The `transaction_id` returned by the OCR or Digital Identity capture that processed the ID images. |

---

## Response

Both endpoints return the same shape.

```json
{
  "data": {
    "phoneNumberOwnerOutput": {
      "isMatched": true,
      "errorCode": 0,
      "errorKey": null,
      "errorMessage": null
    },
    "idFrontOutput": {
      "services": {
        "Validations": { "validation_errors": [] },
        "spoofing": { "fake": false },
        "classification": { "doc_type": "id_front" },
        "liveness": null,
        "AML": { "AML_matched": false, "data": [] },
        "SRC": null
      },
      "data": {
        "name": "محمد على حسن ابراهيم",
        "first_name": "محمد",
        "last_names": "على حسن ابراهيم",
        "name_english": "Mohamed Ali Hassan Ibrahim",
        "first_name_english": "Mohamed",
        "last_names_english": "Ali Hassan Ibrahim",
        "idNumber": "29001011234567",
        "idKey": "AB1234567",
        "dateOfBirth": "1990-01-01T00:00:00",
        "gender": null,
        "govern": "القاهرة",
        "govern_english": "Cairo",
        "city": "القاهرة",
        "district": "المعادي",
        "address": "١٢ شارع النيل-المعادي القاهرة",
        "address_1": "١٢ شارع النيل",
        "address_2": "المعادي القاهرة",
        "address_english": "12 Nile Street-Maadi Cairo",
        "address_1_english": "12 Nile Street",
        "address_2_english": "Maadi Cairo",
        "client_transaction_id": null,
        "request_id": "00000000-0000-0000-0000-000000000000",
        "transaction_id": "9c1f0e2a-7b3d-4f5a-8c6e-1d2b3a4c5d6e"
      },
      "error_code": null,
      "error_message": null,
      "error_descriptions": null
    },
    "idBackOutput": {
      "services": {
        "Validations": { "validation_errors": [] },
        "spoofing": { "fake": false },
        "classification": { "doc_type": "id_back" },
        "liveness": null,
        "AML": null,
        "SRC": null
      },
      "data": {
        "maritalStatus": "متزوج",
        "marital_status_english": "married",
        "job": "مهندس",
        "job_english": "Engineer",
        "jobTitle": "",
        "job_title_english": null,
        "religion": "مسلم",
        "religion_english": "muslim",
        "husbandName": "",
        "husbandName_english": null,
        "gender": "ذكر",
        "gender_english": "male",
        "releaseDate": "2023-04-01T00:00:00",
        "idExpiry": "2030-04-29T00:00:00",
        "idNumber": "29001011234567",
        "client_transaction_id": null,
        "request_id": "00000000-0000-0000-0000-000000000000",
        "transaction_id": "9c1f0e2a-7b3d-4f5a-8c6e-1d2b3a4c5d6e"
      },
      "error_code": null,
      "error_message": null,
      "error_descriptions": null
    },
    "csoOutput": {
      "isValid": true,
      "errorCode": 0,
      "errorMessage": null
    },
    "criminalRecordValidationOutput": null
  },
  "error_code": null,
  "error_message": null,
  "error_descriptions": null
}
```

The identity values above are placeholders. A real response returns the actual card holder's name, address, ID number and date of birth — treat the whole `data` block as personal data and store it accordingly.

### Response fields

| Field                                                 | Description                                                                     |
| ----------------------------------------------------- | ------------------------------------------------------------------------------- |
| `data.phoneNumberOwnerOutput.isMatched`               | Whether the phone number is registered to the ID holder.                        |
| `data.idFrontOutput`                                  | Extraction and checks for the front of the card.                                |
| `data.idBackOutput`                                   | Extraction and checks for the back of the card.                                 |
| `data.csoOutput.isValid`                              | Central Security Organisation (CSO) validation result.                          |
| `data.criminalRecordValidationOutput`                 | Criminal-record check. `null` unless the check is enabled for your tenant.      |
| `error_code` / `error_message` / `error_descriptions` | Top-level error envelope. All `null` on success — note this is `null`, not `0`. |

Each of `idFrontOutput` and `idBackOutput` carries the same envelope:

| Field                                                 | Description                                                                                                                                                                                                                     |
| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `services.Validations.validation_errors`              | Field-level validation failures. Empty when the scan is clean.                                                                                                                                                                  |
| `services.spoofing.fake`                              | `true` when the document image looks forged.                                                                                                                                                                                    |
| `services.classification.doc_type`                    | Detected document type — `id_front` or `id_back`.                                                                                                                                                                               |
| `services.liveness`                                   | Not run in this flow; always `null`.                                                                                                                                                                                            |
| `services.AML`                                        | AML screening — `AML_matched` plus any matched `data` records. `null` when not run.                                                                                                                                             |
| `services.SRC`                                        | Reserved; `null`.                                                                                                                                                                                                               |
| `data`                                                | The extracted fields. The front carries name, address, ID number, ID key and date of birth; the back carries marital status, job, religion, gender, release date and expiry. Arabic values come with an `_english` counterpart. |
| `error_code` / `error_message` / `error_descriptions` | Per-document error envelope.                                                                                                                                                                                                    |

The services block on this endpoint uses a capitalised `Validations` key. The [OCR API](/ocr) returns the same block as lowercase `validations`. Match the casing to the endpoint you are calling.

---

## Next

#### [PII inquiry with OTP](/fra-services/pii-inquiry-otp)

Add phone-ownership proof to either of the calls above.