by Profiden

Aadhaar Check (Without OTP)

Identity & KYC

Validates an Aadhaar number against UIDAI records and returns demographic details of the holder (age range, gender, state, mobile-linkage status). Non-OTP — no consent/OTP flow required.

Validate a 12-digit Aadhaar number against the issuing authority and get back the demographic profile linked to it: age band, gender, state and whether a mobile is registered. No OTP, no biometric capture, no full Aadhaar stored.

Endpoint

POST https://app.emver.io/api/sandbox/v1/aadhaar-api-without-otp
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Accept: application/json

Request parameters

Consent required. Collect the consent of the person being verified to “I hereby provide consent for Aadhaar-based KYC verification as per UIDAI guidelines.” and send consent: true (or "Y") with the call. A call without it is refused with 422 consent_required before anything is billed. consent: false is refused with consent_declined.

How to send it

Show the person the statement above, record their answer, then add one field to the JSON body alongside the request parameters. The statement, the purpose and the time of consent are recorded on our side with every call.

{
  "...": "your request parameters",
  "consent": true
}
You sendResult
consent: true or "Y"The call runs; consent is recorded as given.
consent: false or "N"422, code: consent_declined. Nothing is billed.
Field missing422, code: consent_required. Nothing is billed.
Any other value422, code: consent_invalid, with a field-level errors map.
FieldTypeDescription
aadhaar_api_without_otp_aadhaar_number required number Aadhaar Number
consent required boolean Consent of the person true (or "Y") once the person being verified has agreed to: "I hereby provide consent for Aadhaar-based KYC verification as per UIDAI guidelines." false (or "N") if they declined — the call is then refused. Required: a call without it is refused with 422 code consent_required.

Example request

cURL
curl -X POST https://app.emver.io/api/sandbox/v1/aadhaar-api-without-otp \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "aadhaar_api_without_otp_aadhaar_number": 0,
    "consent": true
}'

Replace YOUR_API_KEY and the placeholder values. Use the switch above to see production URLs.

Response

Structure · 200

{
  "status": INTEGER,
  "message": STRING
}

Example · 200

{
  "status": 200,
  "message": "string"
}

Error · 4xx / 5xx

{
  "status": INTEGER,
  "message": STRING
}

See Errors & status codes for what each status means and which calls are billed.

About this API

The Aadhaar Validation API checks whether a given Aadhaar number is genuine and returns the demographic details linked to it, cross-checked against UIDAI records. It is a non-OTP API — there is no OTP generated, no OTP entry step, and no consent-capture round trip with the Aadhaar holder. The full Aadhaar number, name, address and photograph are never returned. It is ideal as a fast, first-line check that an Aadhaar number is genuine and active before you rely on it downstream.


What you get

  1. age_range — the age band linked to the Aadhaar (e.g. 20-30).
  2. gender — Male, Female or Other.
  3. state — the issuing state.
  4. last_digits — masked Aadhaar; only the last few digits are revealed.
  5. is_mobile — whether a mobile number is linked to the Aadhaar.
  6. remarks — the validation outcome (e.g. valid / invalid Aadhaar).


Why it's a non-OTP API

  1. No OTP is sent to, or collected from, the Aadhaar holder's registered mobile number.
  2. Nothing is required from the Aadhaar holder — the check runs on the Aadhaar number alone.
  3. Only demographic fields are returned, never the full Aadhaar number, name, address or photo.
  4. For full e-KYC (name, DOB, address, photo) use an OTP-based Aadhaar e-KYC API instead — this endpoint intentionally does not provide that.


Common use cases

  1. Validating an Aadhaar number is genuine and active during onboarding.
  2. Identity checks during employee background verification (BGV).
  3. KYC pre-checks for customer, vendor and gig-worker onboarding.
  4. Fraud prevention — catching fake, malformed or inactive Aadhaar numbers early.


How it works

Send the 12-digit aadhaar_number. On success you receive a 200 with the demographic data listed above; an invalid number returns a 422 with a message. Even though no OTP is involved, you must still capture the individual's consent for Aadhaar-based verification as per UIDAI guidelines before calling this API.