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: true → Aadhaar QR verified successfully.; authentic: false → Aadhaar QR was read, but its UIDAI signature did not match. Do not treat this card as verified.; authentic: null with is_signed: false → Aadhaar QR was read. It carries no UIDAI signature to verify.; authentic: null with is_signed: true or null → Aadhaar 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.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
401Missing or invalid authentication credentials (X-Client-ID / X-API-KEY).
429Too many requests, rate limited (IDTO_006). Retry after a short wait.
