Aadhaar QR v2

Reads an Aadhaar QR code and returns standardized demographics plus a cryptographic authenticity verdict. Accepts EITHER a multipart/form-data image (file) OR an application/json body with the already-scanned qr_data string; send exactly one. user_consent is required. Handles both the signed Secure QR and the unsigned old XML QR.

Authenticity contract (read this): gate identity decisions on data.authentic, NOT on status. authentic is true ONLY for a Secure QR whose UIDAI signature was cryptographically verified (in-house idto vendor). It is false in exactly one situation: a signature was present and failed verification (forged or tampered Secure QR), which still returns status: "success" and is still billed. It is null whenever nothing was verified, either because the QR carries no signature (legacy old-XML, is_signed: false) or because the serving vendor performs decode only. Never branch on falsiness: null is not a failed check. extras.signature_verified is true/false when a crypto check ran and is ABSENT from extras when none ran.

Success message: the 200 message follows data.authentic together with data.is_signed and is one of exactly four strings: authentic: trueAadhaar QR verified successfully.; authentic: falseAadhaar QR was read, but its UIDAI signature did not match. Do not treat this card as verified.; authentic: null with is_signed: falseAadhaar QR was read. It carries no UIDAI signature to verify.; authentic: null with is_signed: true or nullAadhaar QR was read, but its UIDAI signature was not checked. Treat this card as unverified. The last case means the card may well carry a valid signature that no one checked: route the same card through a signature-verifying flow if you need a cryptographic verdict. Do not parse the message; branch on authentic.

Errors: blurred image or no readable Aadhaar QR → HTTP 422 (IDTO_204); missing/false consent → 400 (IDTO_005); wrong input (both/neither, qr_data to a decode-only vendor, or a corrupt/undecodable image) → 400 (IDTO_001); an upload over the byte cap (default 11 MB), an image or rendered PDF page over the pixel cap (default 40,000,000 px), or a PDF with more pages than the page cap (default 5) → 413 (IDTO_503). Authenticate with X-Client-ID and X-API-KEY.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Body Params
file
required

Aadhaar QR image or PDF (clear JPG, PNG or PDF; QR ≥ ~468px).

boolean
required

Must be true; the holder consents to reading their Aadhaar QR.

boolean
Defaults to false

If true, ASK for the QR portrait as a base64 PNG in data.photo. Best effort, not a guarantee: photo is still null (with photo_mime: null and has_photo: false) when the QR carries no portrait, when the embedded portrait fails to decode, when it exceeds the portrait pixel cap, or when a vendor-supplied base64 preview exceeds the length cap. When a portrait IS returned it appears in the verification response only and is never kept in the stored transaction record, with one exception: when the request carries an Idempotency-Key, the full caller response including photo is retained encrypted so the key can be replayed.

Responses

401

Missing or invalid authentication credentials (X-Client-ID / X-API-KEY).

429

Too many requests, rate limited (IDTO_006). Retry after a short wait.

Language
Credentials
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json