ABHA Login
Verify an existing ABHA by mobile number, Aadhaar number, ABHA number, ABHA address, or Find ABHA search.
ABHA login returns a user token.
Use that token as X-token for profile APIs.
Version and host differences
The Postman collection mixes v3 and v3.1 login paths. It also has malformed Find ABHA hosts in 2 files. This page keeps the exact payload fields and uses the official sandbox host.
Mandatory login methods
| Method | Status | Main endpoints |
|---|---|---|
| Mobile number | Mandatory | /profile/login/request/otp, /profile/login/verify, /profile/login/verify/user |
| Aadhaar number | Mandatory | /v3.1/profile/login/request/otp, /v3.1/profile/login/verify |
| ABHA number | Mandatory | /profile/login/request/otp, /profile/login/verify |
| ABHA address | Mandatory | /phr/web/login/abha/request/otp, /phr/web/login/abha/verify |
| Find ABHA | Support flow | /profile/account/abha/search, then login OTP APIs |
Common response fields
A successful verify call returns a token set.
Store token as the ABHA user token.
Use it as X-token for profile calls.
{
"txnId": "<txn-id>",
"authResult": "success",
"message": "OTP verified successfully",
"token": "<x-token>",
"expiresIn": 1800,
"refreshToken": "<refresh-token>",
"refreshExpiresIn": 1296000,
"accounts": [
{
"ABHANumber": "91-XXXX-XXXX-XXXX",
"preferredAbhaAddress": "user@abdm",
"name": "<name>",
"status": "ACTIVE"
}
]
}Login by mobile number
Use this flow when the user gives a registered mobile number.
The verify step can return multiple ABHA accounts.
Select the required ABHANumber with /profile/login/verify/user.
Request the mobile OTP
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/profile/login/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-login", "mobile-verify"],
"loginHint": "mobile",
"loginId": "<encrypted-mobile-number>",
"otpSystem": "abdm"
}'Verify the mobile OTP
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/profile/login/verify" \
-H "Authorization: Bearer <your-access-token>" \
-H "REQUEST-ID: <uuid>" \
-H "TIMESTAMP: <utc-iso-timestamp>" \
-H "Content-Type: application/json" \
-d '{
"scope": ["abha-login", "mobile-verify"],
"authData": {
"authMethods": ["otp"],
"otp": {
"txnId": "<txn-id>",
"otpValue": "<encrypted-otp>"
}
}
}'Verify the selected user
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/profile/login/verify/user" \
-H "Authorization: Bearer <your-access-token>" \
-H "REQUEST-ID: <uuid>" \
-H "TIMESTAMP: <utc-iso-timestamp>" \
-H "Content-Type: application/json" \
-d '{
"ABHANumber": "91-1440-1577-XXXX",
"txnId": "<txn-id>"
}'Login by Aadhaar number
Use the v3.1 Aadhaar OTP payload from the Postman collection.
Send the encrypted Aadhaar number in loginId.
Request the Aadhaar OTP
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3.1/profile/login/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-login", "aadhaar-verify", "aadhaar-otp-verify"],
"loginHint": "aadhaar",
"loginId": "<encrypted-aadhaar-number>",
"otpSystem": "aadhaar"
}'Verify the Aadhaar OTP
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3.1/profile/login/verify" \
-H "Authorization: Bearer <your-access-token>" \
-H "REQUEST-ID: <uuid>" \
-H "TIMESTAMP: <utc-iso-timestamp>" \
-H "Content-Type: application/json" \
-d '{
"scope": ["abha-login", "aadhaar-verify", "aadhaar-otp-verify"],
"authData": {
"authMethods": ["otp"],
"otp": {
"txnId": "<txn-id>",
"otpValue": "<encrypted-otp>"
}
}
}'Login by ABHA number
The source provides 3 ABHA number methods. Use Aadhaar OTP, mobile OTP, or password.
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/profile/login/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-login", "aadhaar-verify"],
"loginHint": "abha-number",
"loginId": "<encrypted-abha-number>",
"otpSystem": "aadhaar"
}'curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/profile/login/verify" \
-H "Authorization: Bearer <your-access-token>" \
-H "REQUEST-ID: <uuid>" \
-H "TIMESTAMP: <utc-iso-timestamp>" \
-H "Content-Type: application/json" \
-d '{
"scope": ["abha-login", "aadhaar-verify"],
"authData": {
"authMethods": ["otp"],
"otp": {
"txnId": "<txn-id>",
"otpValue": "<encrypted-otp>"
}
}
}'Login by ABHA address
ABHA address requests are not in Postman
The ABHA address section comes from the narrative OCR blocks. Field names can contain OCR errors. Verify the exact payloads against the sandbox Swagger.
Use this flow when the user gives an ABHA address such as user@abdm.
The narrative supports Aadhaar OTP, mobile OTP, fingerprint, face, and IRIS.
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/phr/web/login/abha/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-address-login", "aadhaar-verify"],
"loginHint": "abha-address",
"loginId": "<encrypted-abha-address>",
"otpSystem": "aadhaar"
}'curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/phr/web/login/abha/verify" \
-H "Authorization: Bearer <your-access-token>" \
-H "REQUEST-ID: <uuid>" \
-H "TIMESTAMP: <utc-iso-timestamp>" \
-H "Content-Type: application/json" \
-d '{
"scope": ["abha-address-login", "aadhaar-verify"],
"authData": {
"authMethods": ["otp"],
"otp": {
"txnId": "<txn-id>",
"otpValue": "<encrypted-otp>"
}
}
}'curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/phr/web/login/abha/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-address-login", "mobile-verify"],
"loginHint": "abha-address",
"loginId": "<encrypted-abha-address>",
"otpSystem": "abdm"
}'Find ABHA search
Find ABHA starts with an encrypted mobile search.
Then request and verify an OTP with loginHint set to index.
Search by encrypted mobile
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/profile/account/abha/search" \
-H "Authorization: Bearer <your-access-token>" \
-H "REQUEST-ID: <uuid>" \
-H "TIMESTAMP: <utc-iso-timestamp>" \
-H "Content-Type: application/json" \
-d '{
"scope": ["search-abha"],
"mobile": "<encrypted-mobile-number>"
}'{
"txnId": "f0166d90-64bc-4cb2-8ef0-08ff1cf3ac8e",
"message": "OTP is sent to Mobile number ending with ******0161"
}Request OTP for the selected index
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/profile/login/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-login", "search-abha", "mobile-verify"],
"loginHint": "index",
"loginId": "<encrypted-index>",
"otpSystem": "abdm",
"txnId": "<search-txn-id>"
}'curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/profile/login/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-login", "search-abha", "aadhaar-verify"],
"loginHint": "index",
"loginId": "<encrypted-index>",
"otpSystem": "aadhaar",
"txnId": "<search-txn-id>"
}'Verify the OTP
curl -X POST "https://abhasbx.abdm.gov.in/abha/api/v3/profile/login/verify" \
-H "Authorization: Bearer <your-access-token>" \
-H "REQUEST-ID: <uuid>" \
-H "TIMESTAMP: <utc-iso-timestamp>" \
-H "Content-Type: application/json" \
-d '{
"scope": ["abha-login", "aadhaar-verify"],
"authData": {
"authMethods": ["otp"],
"otp": {
"txnId": "<otp-txn-id>",
"otpValue": "<encrypted-otp>"
}
}
}'Sources
- ABDM Proposed Simplified Milestone 1 (DOCX→MD, 2026-08)
- M1 ABHA Postman collection
