Skip to main content
POST
{base_url}
/
api
/
v1
/
validate
/
passport
Passport Validation
curl --request POST \
  --url https://api.example.com/{base_url}/api/v1/validate/passport \
  --header 'Content-Type: <content-type>' \
  --header 'x-transaction-key: <x-transaction-key>' \
  --data '
{
  "passportNo": "<string>",
  "nationality": "<string>",
  "passportType": "<string>",
  "dateOfBirth": "<string>",
  "issueDate": "<string>",
  "expiryDate": "<string>"
}
'
{
  "data": {
    "data": {
      "dateOfBirth": "1985-08-20",
      "fullNameArabic": "راجيش كومار",
      "fullNameEnglish": "James Wilson",
      "nationality": "UNK",
      "passportExpiryDate": "2031-08-20",
      "passportIssueDate": "2021-08-20",
      "passportNumber": "533445678",
      "udbNumber": "-325"
    },
    "transactionId": "7b50f849-20a9-4bf4-88f7-5f8869e2edca",
    "validations": {
      "dateOfBirthStatus": "CORRECT",
      "eidStatus": "INACTIVE",
      "expiryDateStatus": "CORRECT",
      "immigrationExpiryStatus": "VALID",
      "issueDateStatus": "CORRECT",
      "passportExpiryStatus": "VALID",
      "visaStatus": "INACTIVE"
    }
  },
  "message": "Passport validation completed successfully",
  "meta": {
    "timestamp": "2026-03-10T19:08:56.41062521Z"
  },
  "signature": "26591b6a35e6e479483dfa15...4cc6064",
  "success": true
}
Validates a passport number (with nationality and type) against ICP (government) records. The request goes through three stages: pre-checks, credit reservation, and the ICP call.

Validation Stages

These checks run before any billing or ICP call.
CheckWhat it testsFail result
Rate limitRequest count for this org within the window429, no transaction saved
Usage limitOrg’s passport quota not exceeded403, transaction saved as error
Passport number presentpassportNo field is not blank400, API: no transaction / Batch: transaction saved as error
Nationality presentnationality field is not blank400, API: no transaction / Batch: transaction saved as error
Passport type presentpassportType field is not blank400, API: no transaction / Batch: transaction saved as error
CheckWhat it testsFail result
Sufficient creditsOrg has credits to cover 1 call402, transaction saved
From this stage onward, all transactions are billed (unless a refund applies).
CheckWhat it testsFail result
ICP call — person existsGovernment record found for this passport + nationality + type404, transaction saved, billed
ICP call — service upICP responds without infrastructure error503/504/500, transaction saved, refunded
DOB matchProvided date of birth matches government record (if given)200 with validation_status=failed, billed
Passport issue matchProvided passport issue date matches government record (if given)200 with validation_status=failed, billed
Passport expiry matchProvided passport expiry date matches government record (if given)200 with validation_status=failed, billed
Passport issuePassport has been issued as per government record200 with validation_status=failed, billed
Passport expiryPassport has not expired per government record200 with validation_status=failed, billed
Immigration file expiryImmigration file itself has not expired200 with validation_status=failed, billed

Authentication

x-transaction-key
string
required
Your API key. Get your key →
Content-Type
string
required
Must be application/json

Request Body

passportNo
string
required
Passport number to validate.
nationality
string
required
ISO 3166-1 alpha-3 nationality code (e.g., IND, GBR).
passportType
string
required
Passport type code (e.g., P for ordinary).
dateOfBirth
string
Date of birth to match against government records. Accepts multiple date formats (multi-format normalization applied).
issueDate
string
Passport issue date to match against government records. Accepts multiple date formats.
expiryDate
string
Passport expiry date to match against government records. Accepts multiple date formats.

Code Examples

curl -X POST "{base_url}/api/v1/validate/passport" \
  -H "x-transaction-key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "passportNo": "A1234567",
    "nationality": "IND",
    "passportType": "P",
    "dateOfBirth": "1990-01-15"
  }'

Response Fields

The validations object in the response contains the following fields:
FieldTypeDescription
validations.dateOfBirthStatusenumWhether the provided date of birth matches the government record
validations.eidStatusenumStatus of the linked Emirates ID on the government record
validations.visaStatusenumWhether the person has an active visa on record
validations.passportExpiryStatusenumWhether the passport is still valid per government records
validations.immigrationExpiryStatusenumWhether the immigration file is still valid
validations.issueDateStatusenumWhether the provided passport issue date matches the government record
validations.expiryDateStatusenumWhether the provided passport expiry date matches the government record
validations.linkedEIDNumberstringThe linked Emirates ID number (format: 784-XXXX-XXXXXXX-X). Omitted if no linked EID was found.

validations.dateOfBirthStatus

ValueWhen it occurs
CORRECTThe provided date of birth matches the government record (multi-format normalization)
INCORRECTThe provided date of birth does not match the government record
NOT_PROVIDEDNo date of birth was included in the request

validations.eidStatus

ValueWhen it occurs
ACTIVEA linked EID exists and its expiry date is in the future
INACTIVEA linked EID exists but has expired, or the date cannot be parsed
NOT_FOUNDNo linked Emirates ID was found on the government record

validations.visaStatus

ValueWhen it occurs
ACTIVEThe person has a valid, active visa on record
INACTIVEThe person’s visa is expired or not active
NOT_APPLICABLEThe person is a UAE or GCC citizen — visa check is skipped entirely

validations.passportExpiryStatus

ValueWhen it occurs
VALIDThe passport expiry date is in the future per government records
EXPIREDThe passport has expired, the date cannot be parsed, or no expiry date exists on record

validations.immigrationExpiryStatus

ValueWhen it occurs
VALIDThe immigration file expiry date is in the future
EXPIREDThe immigration file has expired, the date is missing, or the date cannot be parsed

validations.issueDateStatus

ValueWhen it occurs
CORRECTThe provided passport issue date matches the government record (multi-format normalization)
INCORRECTThe provided passport issue date does not match the government record
NOT_PROVIDEDNo issue date was included in the request

validations.expiryDateStatus

ValueWhen it occurs
CORRECTThe provided passport expiry date matches the government record (multi-format normalization)
INCORRECTThe provided passport expiry date does not match the government record
NOT_PROVIDEDNo expiry date was included in the request
{
  "data": {
    "data": {
      "dateOfBirth": "1985-08-20",
      "fullNameArabic": "راجيش كومار",
      "fullNameEnglish": "James Wilson",
      "nationality": "UNK",
      "passportExpiryDate": "2031-08-20",
      "passportIssueDate": "2021-08-20",
      "passportNumber": "533445678",
      "udbNumber": "-325"
    },
    "transactionId": "7b50f849-20a9-4bf4-88f7-5f8869e2edca",
    "validations": {
      "dateOfBirthStatus": "CORRECT",
      "eidStatus": "INACTIVE",
      "expiryDateStatus": "CORRECT",
      "immigrationExpiryStatus": "VALID",
      "issueDateStatus": "CORRECT",
      "passportExpiryStatus": "VALID",
      "visaStatus": "INACTIVE"
    }
  },
  "message": "Passport validation completed successfully",
  "meta": {
    "timestamp": "2026-03-10T19:08:56.41062521Z"
  },
  "signature": "26591b6a35e6e479483dfa15...4cc6064",
  "success": true
}