Skip to main content
The first thing a PHR app does is give the patient an ABHA address (nisha@abdm) — the identity every later API call is anchored to. A patient either creates one in your app, or already has one and logs in.

Create an ABHA address

Three independent methods. Pick whichever your onboarding UX supports; face auth is the fallback when the patient’s mobile is not linked to their Aadhaar.

Via mobile OTP

The lightest path — creates an ABHA address without Aadhaar KYC.

Via Aadhaar OTP

Produces a KYC-verified 14-digit ABHA number alongside the address.

Via face auth

For patients whose mobile is not linked to Aadhaar and who cannot receive an Aadhaar OTP. Full M1 creation flow chart →

Helper APIs

Use these while the patient is still filling the form — they make the difference between a clean signup and a failed one.

Login to the PHR app

A returning patient logs in with ABHA address, Aadhaar or mobile number. All three converge on skip_state = abha_end.
When login returns skip_state = abha_create and abha_profiles is non-empty, the patient already has ABHAs on that identifier — use the Auto-Login API to sign them into an existing one instead of creating a duplicate.

Hold the ABHA Gateway session

Creation and login both open a session with the ABDM gateway. It expires. Any patient-scoped API called without it returns HTTP 491, and you must re-authenticate with a mobile OTP. User Session overview →

Skip the UI entirely

If you don’t want to build the OTP screens, the ABHA Web SDK ships the whole creation and login flow as an embeddable, themeable component.

M1 — ABHA Web SDK

Drop-in ABHA creation, login, KYC and Scan & Share, with your own branding.
The abha.created webhook fires on your cloud when an ABHA address is successfully created. Use it to provision the patient in your own database rather than relying on the client-side response.