National Health Authority

Command Palette

Search for a command to run...

ABHA Creation

Create an ABHA by Aadhaar OTP, then review optional face, biometric, demographic, child, and driving licence flows.

ABHA creation starts with Aadhaar OTP for all integrators. Face, biometric, demographic, child, and driving licence flows are optional.

Response examples

The Postman files give exact request payloads for most creation calls. They do not give server response examples for many calls. This page shows response examples only when the source gives them or when a test script names fields.

Mandatory Aadhaar OTP flow

Use this flow for private and government integrators. Encrypt the Aadhaar number and each OTP value before you send them.

sequenceDiagram
  participant User as User
  participant App as Client app
  participant ABHA as ABHA API
  App->>ABHA: POST /enrollment/request/otp (Aadhaar)
  ABHA-->>App: txnId
  App->>User: Ask for Aadhaar OTP
  User-->>App: OTP
  App->>ABHA: POST /enrollment/enrol/byAadhaar
  ABHA-->>App: ABHA profile, tokens, txnId
  App->>ABHA: POST /enrollment/request/otp (mobile verify)
  ABHA-->>User: Mobile OTP
  User-->>App: OTP
  App->>ABHA: POST /enrollment/auth/byAbdm
  ABHA-->>App: Updated txnId
  App->>ABHA: GET /enrollment/enrol/suggestion
  ABHA-->>App: ABHA address suggestions
  App->>ABHA: POST /enrollment/enrol/abha-address
  ABHA-->>App: Linked ABHA address

Request the Aadhaar OTP

Send the encrypted Aadhaar number in loginId. Set otpSystem to aadhaar.

POST/enrollment/request/otp

Request an OTP for ABHA enrolment.

Request
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/request/otp" \
  -H "Authorization: Bearer <your-access-token>" \
  -H "REQUEST-ID: <uuid>" \
  -H "TIMESTAMP: <utc-iso-timestamp>" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": ["abha-enrol"],
    "loginHint": "aadhaar",
    "loginId": "<encrypted-12-digit-aadhaar-number>",
    "otpSystem": "aadhaar"
  }'
Response fields
{
  "txnId": "<txn-id>",
  "message": "OTP sent to Aadhaar registered mobile number"
}

Enrol by Aadhaar

Submit the encrypted OTP with the txnId. Send the mobile number shown in the enrolment flow.

POST/enrollment/enrol/byAadhaar

Create the ABHA with Aadhaar OTP verification.

Request
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/enrol/byAadhaar" \
  -H "Authorization: Bearer <your-access-token>" \
  -H "REQUEST-ID: <uuid>" \
  -H "TIMESTAMP: <utc-iso-timestamp>" \
  -H "BENEFIT_NAME: healthid api" \
  -H "Content-Type: application/json" \
  -d '{
    "authData": {
      "authMethods": ["otp"],
      "otp": {
        "txnId": "<txn-id>",
        "otpValue": "<encrypted-aadhaar-otp>",
        "mobile": "<masked-or-verified-mobile>"
      }
    },
    "consent": {
      "code": "abha-enrollment",
      "version": "1.4"
    }
  }'
Response fields
{
  "txnId": "<new-txn-id>",
  "ABHAProfile": {
    "ABHANumber": "91-XXXX-XXXX-XXXX"
  },
  "tokens": {
    "token": "<x-token>",
    "refreshToken": "<refresh-token>"
  }
}

Request a mobile update OTP

Use this step after enrolment when the user must verify or change the mobile. Send the encrypted mobile number in loginId.

POST/enrollment/request/otp

Request a mobile OTP during enrolment.

Request
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/request/otp" \
  -H "Authorization: Bearer <your-access-token>" \
  -H "REQUEST-ID: <uuid>" \
  -H "TIMESTAMP: <utc-iso-timestamp>" \
  -H "Content-Type: application/json" \
  -d '{
    "txnId": "<txn-id-from-enrolment>",
    "scope": ["abha-enrol", "mobile-verify"],
    "loginHint": "mobile",
    "loginId": "<encrypted-mobile-number>",
    "otpSystem": "abdm"
  }'

Verify the mobile OTP

Send the encrypted mobile OTP. Use the txnId from the mobile OTP request.

POST/enrollment/auth/byAbdm

Verify the mobile OTP for the enrolment flow.

Request
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/auth/byAbdm" \
  -H "Authorization: Bearer <your-access-token>" \
  -H "REQUEST-ID: <uuid>" \
  -H "TIMESTAMP: <utc-iso-timestamp>" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": ["abha-enrol", "mobile-verify"],
    "authData": {
      "authMethods": ["otp"],
      "otp": {
        "txnId": "<mobile-otp-txn-id>",
        "otpValue": "<encrypted-mobile-otp>"
      }
    }
  }'

Get ABHA address suggestions

Get address suggestions after the enrolment transaction succeeds. Send the gateway token and request headers.

GET/enrollment/enrol/suggestion

Get ABHA address suggestions for the transaction.

Request
curl -X GET "https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/enrol/suggestion" \
  -H "Authorization: Bearer <your-access-token>" \
  -H "REQUEST-ID: <uuid>" \
  -H "TIMESTAMP: <utc-iso-timestamp>"

Choose one suggested address or send a custom address. Set preferred to 1 for the preferred address.

POST/enrollment/enrol/abha-address

Link an ABHA address to the new ABHA number.

Request
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/enrol/abha-address" \
  -H "Authorization: Bearer <your-access-token>" \
  -H "REQUEST-ID: <uuid>" \
  -H "TIMESTAMP: <utc-iso-timestamp>" \
  -H "Content-Type: application/json" \
  -d '{
    "txnId": "<latest-txn-id>",
    "abhaAddress": "<preferred-abha-address>",
    "preferred": 1
  }'

Optional face authentication flow

Use face authentication only when your integration and device flow support it. The Postman set includes an init call, a PID capture status call, and enrolment.

Generate a face transaction

Send face-auth when the flow does not include a pre-captured PID. Use face-verify when the flow includes PID capture.

Request
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/enrol/auth/init" \
  -H "Authorization: Bearer <your-access-token>" \
  -H "REQUEST-ID: <uuid>" \
  -H "TIMESTAMP: <utc-iso-timestamp>" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": ["abha-enrol", "face-auth"]
  }'

Track PID capture

Call this endpoint when the flow uses face-verify. The source shows VERIFIED and PENDING statuses.

Request
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/enrol/capturePID" \
  -H "Authorization: Bearer <your-access-token>" \
  -H "REQUEST-ID: <uuid>" \
  -H "TIMESTAMP: <utc-iso-timestamp>" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": ["abha-enrol", "face-verify"],
    "txnId": "<face-txn-id>"
  }'
Response examples
{
  "status": "PENDING",
  "message": "Awaiting PID capture"
}

Enrol with face authentication

Send the encrypted Aadhaar number with the face transaction ID.

Request
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/enrol/byAadhaar" \
  -H "Authorization: Bearer <your-access-token>" \
  -H "REQUEST-ID: <uuid>" \
  -H "TIMESTAMP: <utc-iso-timestamp>" \
  -H "Content-Type: application/json" \
  -d '{
    "authData": {
      "authMethods": ["face_auth"],
      "face": {
        "txnId": "<face-txn-id>",
        "aadhaar": "<encrypted-aadhaar-number>"
      }
    },
    "consent": {
      "code": "abha-enrollment",
      "version": "1.4"
    }
  }'

Optional biometric flows

Use certified biometric devices for fingerprint and IRIS. Send the PID block exactly as the device returns it.

Fingerprint payload shape

The Postman file places fingerPrintAuthPid inside the otp object and sets authMethods to otp. Keep this shape unless ABDM gives a newer Swagger.

Request
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/enrol/byAadhaar" \
  -H "Authorization: Bearer <your-access-token>" \
  -H "REQUEST-ID: <uuid>" \
  -H "TIMESTAMP: <utc-iso-timestamp>" \
  -H "Content-Type: application/json" \
  -d '{
    "authData": {
      "authMethods": ["otp"],
      "otp": {
        "txnId": "<txn-id>",
        "fingerPrintAuthPid": "<fingerprint-pid>",
        "mobile": "<masked-or-verified-mobile>"
      }
    },
    "consent": {
      "code": "abha-enrollment",
      "version": "1.4"
    }
  }'

Optional demographic authentication

Use demographic authentication only when ABDM approves it for your program. Send the demo_auth object from the Postman source.

Request
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/enrol/byAadhaar" \
  -H "Authorization: Bearer <your-access-token>" \
  -H "REQUEST-ID: <uuid>" \
  -H "TIMESTAMP: <utc-iso-timestamp>" \
  -H "Content-Type: application/json" \
  -d '{
    "authData": {
      "authMethods": ["demo_auth"],
      "demo_auth": {
        "aadhaarNumber": "<encrypted-aadhaar-number>",
        "districtCode": "468",
        "stateCode": "27",
        "consentHealthId": true,
        "dateOfBirth": "11-08-1990",
        "mobile": "<mobile-number>",
        "address": "<address>",
        "profilePhoto": "<base64-photo>",
        "pincode": "<pin-code>",
        "gender": "F",
        "name": "<full-name>"
      }
    },
    "consent": {
      "code": "abha-enrollment",
      "version": "1.4"
    }
  }'

Optional child ABHA flow

Create a child ABHA only after you verify the parent flow. The source uses demo_auth for the parent and child for the child.

Create child ABHA
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/enrol/byAadhaar" \
  -H "Authorization: Bearer <your-access-token>" \
  -H "REQUEST-ID: <uuid>" \
  -H "TIMESTAMP: <utc-iso-timestamp>" \
  -H "Content-Type: application/json" \
  -d '{
    "authData": {
      "authMethods": ["child"],
      "child": {
        "dayOfBirth": "1",
        "monthOfBirth": "1",
        "yearOfBirth": "2025",
        "gender": "M",
        "name": "<child-name>",
        "profilePhoto": "<base64-photo>"
      }
    },
    "consent": {
      "code": "abha-enrollment",
      "version": "1.4"
    }
  }'
Get child ABHA records
curl -X GET "https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/profile/children" \
  -H "Authorization: Bearer <your-access-token>" \
  -H "X-token: Bearer <x-token>" \
  -H "REQUEST-ID: <uuid>" \
  -H "TIMESTAMP: <utc-iso-timestamp>"
Update child profile
curl -X PATCH "https://abhasbx.abdm.gov.in/abha/api/v3/profile/account" \
  -H "Authorization: Bearer <your-access-token>" \
  -H "X-token: Bearer <x-token>" \
  -H "REQUEST-ID: <uuid>" \
  -H "TIMESTAMP: <utc-iso-timestamp>" \
  -H "Content-Type: application/json" \
  -d '{
    "abhaNumber": "91-5023-5154-1680",
    "name": "<child-name>",
    "dob": "3-6-2021",
    "gender": "M"
  }'

Optional driving licence flow

Use this flow when the user creates ABHA from a driving licence. The flow starts with mobile OTP and ends with enrol/byDocument.

Request a mobile OTP

Request
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/request/otp" \
  -H "Authorization: Bearer <your-access-token>" \
  -H "REQUEST-ID: <uuid>" \
  -H "TIMESTAMP: <utc-iso-timestamp>" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": ["abha-enrol", "mobile-verify", "dl-flow"],
    "loginHint": "mobile",
    "loginId": "<encrypted-mobile-number>",
    "otpSystem": "abdm"
  }'

Verify the mobile OTP

Request
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/auth/byAbdm" \
  -H "Authorization: Bearer <your-access-token>" \
  -H "REQUEST-ID: <uuid>" \
  -H "TIMESTAMP: <utc-iso-timestamp>" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": ["abha-enrol", "mobile-verify", "dl-flow"],
    "authData": {
      "authMethods": ["otp"],
      "otp": {
        "timeStamp": "<epoch-or-source-timestamp>",
        "txnId": "<otp-txn-id>",
        "otpValue": "<encrypted-otp>"
      }
    }
  }'

Enrol by document

Request
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/enrol/byDocument" \
  -H "Authorization: Bearer <your-access-token>" \
  -H "REQUEST-ID: <uuid>" \
  -H "TIMESTAMP: <utc-iso-timestamp>" \
  -H "Content-Type: application/json" \
  -d '{
    "txnId": "<latest-txn-id>",
    "documentType": "DRIVING_LICENCE",
    "documentId": "<driving-licence-number>",
    "firstName": "<first-name>",
    "middleName": "",
    "lastName": "<last-name>",
    "dob": "1990-02-23",
    "gender": "M",
    "frontSidePhoto": "<base64-front-photo>",
    "backSidePhoto": "<base64-back-photo>"
  }'

Sources

  • ABDM Proposed Simplified Milestone 1 (DOCX→MD, 2026-08)
  • M1 ABHA Postman collection