ABHA Address
Create an ABHA address, link it to an ABHA number, log in to a PHR app, and manage the profile.
Use an ABHA address as the patient handle for HIE-CM. Use an ABHA number as the KYC verified identity.
A PHR app can create an ABHA address by mobile number or by ABHA number. The mobile flow creates a self-declared profile. The ABHA number flow uses KYC data from the ABHA system.
OCR source caveat
The source includes OCR from screenshots for some JSON blocks. The examples below use the official Swagger paths where available. Verify the final schema in the sandbox Swagger.
ABHA address rules
| Rule | Requirement |
|---|---|
| Allowed characters | Use letters, digits, and dot (.). |
| Minimum length | Use at least 4 characters before the domain. |
| First character | Do not start with a number. |
| Dot position | Do not start or end with dot (.). |
| Mobile number | Do not create 10digit@abdm. |
| ABHA number form | Use all numeric 14digit@abdm only for an ABHA number. |
| Password | Use at least 8 characters, upper case, lower case, number, and symbol. |
Create by mobile number
Use this flow when the patient does not use KYC. Create the profile from self-declared details.
sequenceDiagram participant User as Patient participant App as PHR app participant ABHA as ABHA service User->>App: Enter mobile number App->>ABHA: POST enrollment/request/otp ABHA-->>App: txnId User->>App: Enter OTP App->>ABHA: POST enrollment/verify ABHA-->>App: verified transaction App->>ABHA: POST enrollment/suggestion ABHA-->>App: ABHA address suggestions User->>App: Choose ABHA address and password App->>ABHA: POST enrollment/enrol ABHA-->>App: ABHA address profile
Request the mobile OTP
Send an encrypted mobile number.
Use abha-address-enrol scope for a self-declared profile.
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/phr/app/enrollment/request/otp" \
-H "Content-Type: application/json" \
-H "REQUEST-ID: $(uuidgen | tr 'A-Z' 'a-z')" \
-H "TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%S.000Z)" \
-H "Authorization: Bearer <your-access-token>" \
-d '{
"scope": ["abha-address-enrol", "mobile-verify"],
"loginHint": "mobile",
"loginId": "<encrypted-mobile-number>",
"otpSystem": "abdm"
}'{
"txnId": "8c3f3d24-3e63-4d9b-8c36-4fa7b4d72e84",
"message": "OTP sent successfully"
}Check scope values
The archived DOCX names the OTP endpoint. Its screenshot does not show the mobile scope clearly. Use the current Swagger scope values for your environment.
Verify the OTP
Send the encrypted OTP with the txnId.
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/phr/app/enrollment/verify" \
-H "Content-Type: application/json" \
-H "REQUEST-ID: $(uuidgen | tr 'A-Z' 'a-z')" \
-H "TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%S.000Z)" \
-H "Authorization: Bearer <your-access-token>" \
-d '{
"authData": {
"authMethods": ["otp"],
"otp": {
"txnId": "8c3f3d24-3e63-4d9b-8c36-4fa7b4d72e84",
"otpValue": "<encrypted-otp>"
}
},
"scope": ["abha-address-enrol", "mobile-verify"]
}'{
"txnId": "8c3f3d24-3e63-4d9b-8c36-4fa7b4d72e84",
"authResult": "success"
}Get ABHA address suggestions
Show suggestions from the patient's name and birth details.
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/phr/app/enrollment/suggestion" \
-H "Content-Type: application/json" \
-H "REQUEST-ID: $(uuidgen | tr 'A-Z' 'a-z')" \
-H "TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%S.000Z)" \
-H "Authorization: Bearer <your-access-token>" \
-d '{
"txnId": "8c3f3d24-3e63-4d9b-8c36-4fa7b4d72e84",
"firstName": "John",
"lastName": "Doe",
"dayOfBirth": "14",
"monthOfBirth": "11",
"yearOfBirth": "1998"
}'{
"abhaAddressList": ["john.doe@sbx", "johndoe1998@sbx"]
}Create the ABHA address
Create the self-declared profile. Ask the patient to accept the user information agreement first.
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/phr/app/enrollment/enrol" \
-H "Content-Type: application/json" \
-H "REQUEST-ID: $(uuidgen | tr 'A-Z' 'a-z')" \
-H "TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%S.000Z)" \
-H "Authorization: Bearer <your-access-token>" \
-d '{
"txnId": "8c3f3d24-3e63-4d9b-8c36-4fa7b4d72e84",
"phrDetails": {
"abhaAddress": "john.doe@sbx",
"firstName": "John",
"middleName": "",
"lastName": "Doe",
"dayOfBirth": "14",
"monthOfBirth": "11",
"yearOfBirth": "1998",
"gender": "M",
"mobile": "<encrypted-mobile-number>",
"email": "<encrypted-email>",
"address": "Street number 5",
"stateCode": "27",
"stateName": "Maharashtra",
"districtCode": "123",
"districtName": "Nashik",
"pinCode": "422003",
"password": "<encrypted-password>",
"profilePhoto": "<base64-profile-photo>"
}
}'{
"abhaAddress": "john.doe@sbx",
"profile": {
"firstName": "John",
"lastName": "Doe",
"kycStatus": "SELF_DECLARED"
}
}Create by ABHA number
Use this flow when the patient has a 14-digit ABHA number. Fetch profile details from the ABHA system after OTP verification.
Request an ABHA number OTP
Send the encrypted ABHA number.
Choose Aadhaar OTP or mobile OTP as the otpSystem.
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/phr/app/enrollment/request/otp" \
-H "Content-Type: application/json" \
-H "REQUEST-ID: $(uuidgen | tr 'A-Z' 'a-z')" \
-H "TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%S.000Z)" \
-H "Authorization: Bearer <your-access-token>" \
-d '{
"scope": ["abha-login", "aadhaar-verify"],
"loginHint": "abha-number",
"loginId": "<encrypted-abha-number>",
"otpSystem": "aadhaar"
}'{
"txnId": "7f879c1d-8f1d-4de4-81c4-1f9b2d1a6f10",
"message": "OTP sent successfully"
}Verify and create
Use the same verify and enrol endpoints. Show KYC fields from the ABHA system. Then let the patient choose a new ABHA address and password.
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/phr/app/enrollment/verify" \
-H "Content-Type: application/json" \
-H "REQUEST-ID: $(uuidgen | tr 'A-Z' 'a-z')" \
-H "TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%S.000Z)" \
-H "Authorization: Bearer <your-access-token>" \
-d '{
"authData": {
"authMethods": ["otp"],
"otp": {
"txnId": "7f879c1d-8f1d-4de4-81c4-1f9b2d1a6f10",
"otpValue": "<encrypted-otp>"
}
},
"scope": ["abha-login", "aadhaar-verify"]
}'{
"txnId": "7f879c1d-8f1d-4de4-81c4-1f9b2d1a6f10",
"authResult": "success",
"accounts": [
{
"abhaNumber": "91-7507-6821-7770",
"name": "John Doe",
"gender": "M",
"yearOfBirth": "1998"
}
]
}Creation test checks
| Check | Mobile flow | ABHA number flow |
|---|---|---|
| Registration option | Show mobile number option. | Show ABHA number option. |
| OTP resend | Enable after 60 seconds. | Enable after 60 seconds. |
| Existing address list | Show linked ABHA addresses. | Show linked ABHA addresses. |
| Profile data | Ask for self-declared data. | Auto-fill KYC data. |
| Consent | Ask for the user information agreement. | Ask for the user information agreement. |
| Password | Enforce the password rule. | Enforce the password rule. |
| Success | Show a created message. | Show a created message and login action. |
Link an ABHA address to an ABHA number
Link the self-declared ABHA address when the patient needs KYC verified status.
After a successful link, show the ABHA number on the profile.
Change the status from Self Declared to KYC Verified.
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/phr/app/login/profile/link" \
-H "Content-Type: application/json" \
-H "REQUEST-ID: $(uuidgen | tr 'A-Z' 'a-z')" \
-H "TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%S.000Z)" \
-H "Authorization: Bearer <phr-login-token>" \
-d '{
"action": "LINK",
"transactionId": "7f879c1d-8f1d-4de4-81c4-1f9b2d1a6f10"
}'{
"message": "ABHA number is securely linked to ABHA address",
"authResult": "success"
}End the current session
The source says the service invalidates the current session after a successful link. Redirect the patient to login again.
Log in to the PHR app
Support login by mobile number, ABHA address, default ABHA address, and ABHA number. Allow password, mobile OTP, or Aadhaar OTP where the auth method applies. Store the refresh token securely if your app extends a session.
Search auth methods
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/phr/app/login/search" \
-H "Content-Type: application/json" \
-H "REQUEST-ID: $(uuidgen | tr 'A-Z' 'a-z')" \
-H "TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%S.000Z)" \
-H "Authorization: Bearer <your-access-token>" \
-d '{
"abhaAddress": "john.doe@sbx"
}'{
"authMethods": ["MOBILE_OTP", "PASSWORD"],
"abhaAddress": "john.doe@sbx"
}Request the login OTP
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/phr/app/login/request/otp" \
-H "Content-Type: application/json" \
-H "REQUEST-ID: $(uuidgen | tr 'A-Z' 'a-z')" \
-H "TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%S.000Z)" \
-H "Authorization: Bearer <your-access-token>" \
-d '{
"loginHint": "abha-address-login",
"loginId": "<encrypted-abha-address>",
"otpSystem": "abdm",
"scope": ["abha-address-login", "mobile-verify"]
}'{
"txnId": "376b4812-74b2-4ad8-b8aa-2872d85c67e1",
"message": "OTP sent successfully"
}Verify login
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/phr/app/login/verify" \
-H "Content-Type: application/json" \
-H "REQUEST-ID: $(uuidgen | tr 'A-Z' 'a-z')" \
-H "TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%S.000Z)" \
-H "Authorization: Bearer <your-access-token>" \
-d '{
"authData": {
"authMethods": ["otp"],
"otp": {
"txnId": "376b4812-74b2-4ad8-b8aa-2872d85c67e1",
"otpValue": "<encrypted-otp>"
}
},
"scope": ["abha-address-login", "mobile-verify"]
}'{
"token": "<phr-login-token>",
"refreshToken": "<phr-refresh-token>",
"abhaAddress": "john.doe@sbx"
}Manage the profile
Show the profile after login. Show the QR code and ABHA address card. Allow password change and profile photo upload.
| Profile type | Show | Allow updates |
|---|---|---|
| KYC Verified | ABHA number, ABHA address, KYC status, QR code, and demographics. | Mobile number and address. |
| Self Declared | ABHA address, self-declared status, QR code, and demographics. | Photo, name, gender, DOB, mobile number, and address. |
curl -X GET "https://abhasbx.abdm.gov.in/abha/api/v3/phr/app/login/profile" \
-H "REQUEST-ID: $(uuidgen | tr 'A-Z' 'a-z')" \
-H "TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%S.000Z)" \
-H "Authorization: Bearer <phr-login-token>"{
"abhaAddress": "john.doe@sbx",
"abhaNumber": "91-7507-6821-7770",
"firstName": "John",
"lastName": "Doe",
"gender": "M",
"yearOfBirth": "1998",
"kycStatus": "KYC_VERIFIED"
}curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/phr/app/login/profile/updateProfile" \
-H "Content-Type: application/json" \
-H "REQUEST-ID: $(uuidgen | tr 'A-Z' 'a-z')" \
-H "TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%S.000Z)" \
-H "Authorization: Bearer <phr-login-token>" \
-d '{
"address": "Street number 5",
"dayOfBirth": "14",
"districtCode": "123",
"districtName": "Nashik",
"email": "",
"firstName": "John",
"gender": "M",
"lastName": "Doe",
"middleName": "",
"mobile": "XXXXXX1234",
"monthOfBirth": "11",
"pinCode": "422003",
"profilePhoto": "<base64-profile-photo>",
"stateCode": "27",
"stateName": "Maharashtra",
"yearOfBirth": "1998"
}'{
"message": "Profile updated successfully"
}Sources
- ABDM PHR app documentation (DOCX→MD, 2026-08)
