Professional Registration
Register a health professional's council, qualifications and work details against their HPR ID; fetch and update the record; upload documents; and verify email and mobile.
An HPR ID alone is just an identity. Professional registration attaches the council registration, academic qualifications and work details that the relevant council then verifies.
You need the HPR user token
Every API on this page acts on behalf of the professional and needs their
HPR user token (from
login).
Here it travels in the body as hprToken /
hpr_token — not as a header.
Send your gateway token in the Authorization header.
flowchart LR A["HPR user token"] --> B["register-professional-new"] B --> C["verify email / mobile"] B --> D["upload-document"] B --> E["fetch-professional-info"] E --> F["update-professional-new"]
Register the professional
The practitioner object is large. It nests personal information,
communication address, contact information, registration &
academic records (council + qualifications, each with a base64 certificate),
optional specialities, and current work details. All references —
council, degree, college, university, state, nationality — are master-data
IDs, not free text.
/apis/v1/doctors/register-professional-newRegisters the council record, qualifications and work details against the
professional's HPR ID and submits them for council verification. Set
healthProfessionalType to doctor, nurse
or pharmacist.
curl -X POST "https://apihspsbx.abdm.gov.in/v4/int/apis/v1/doctors/register-professional-new" \
-H "Authorization: Bearer $SYSTEM_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"hprToken": "HPR_USER_TOKEN",
"practitioner": {
"healthProfessionalType": "doctor",
"profilePhoto": "<base64 image>",
"officialMobile": "97624xxxxx",
"officialEmail": "",
"profileVisibleToPublic": "1",
"personalInformation": {
"salutation": 1,
"firstName": "First_name",
"middleName": "",
"lastName": "Last Name",
"nationality": "356",
"gender": "M",
"dateOfBirth": "1990-04-23",
"languagesSpoken": "1,2",
"category": "C"
},
"communicationAddress": {
"isCommunicationAddressAsPerKYC": "false",
"address": "", "country": "", "state": "", "district": "",
"subDistrict": "", "city": "", "pincode": ""
},
"contactInformation": {
"publicMobileNumber": "", "landLineNumber": "", "publicEmail": ""
},
"registrationAcademic": {
"category": 1,
"registrationData": [
{
"registeredWithCouncil": 41,
"registrationNumber": "REG12032",
"registrationDate": "2024-12-01",
"registrationCertificate": { "fileType": "pdf", "data": "<base64>" },
"isPermanentOrRenewable": "Permanent",
"renewableDueDate": "",
"categoryId": 2,
"qualifications": [
{
"nameOfDegreeOrDiplomaObtained": 4074,
"country": "356",
"state": "29",
"college": 1149,
"university": 7010,
"yearOfAwardingDegreeDiploma": "2024",
"monthOfAwardingDegreeDiploma": "",
"degreeCertificate": { "fileType": "pdf", "data": "<base64>" },
"isNameDifferentInCertificate": "false"
}
]
}
]
},
"specialities": null,
"currentWorkDetails": {
"currentlyWorking": "1",
"purposeOfWork": "Practice",
"chooseWorkStatus": "1",
"reasonForNotWorking": "",
"certificateAttachment": "<base64>",
"facilityDeclarationData": {
"facilityId": "IN2710000059",
"facilityName": "Apollo Hospital New Delhi 126",
"facilityAddress": "test,test6",
"facilityPincode": "765435",
"state": "27",
"district": "500",
"facilityType": "Hospital",
"facilityDepartment": "Surgery",
"facilityDesignation": "MD"
}
}
}
}'{
"headers": {},
"body": {
"referenceNumber": "8806aa4a-013b-...-1f0878dxxxxxx",
"status": "true",
"message": "Congratulations! Your profile has been submitted successfully for verification.",
"error": null,
"hprId": "71-3563-6824-xxxx"
},
"statusCode": "OK",
"statusCodeValue": 200
}Use IDs, not names
registeredWithCouncil, nameOfDegreeOrDiplomaObtained,
college, university, state,
nationality and salutation are all numeric
master-data IDs. Sending human-readable strings (e.g. a council name)
will fail validation. Fetch the lists from the HPR masters APIs.
Field rules
From the HPR test-case workbook — enforced during council verification:
| Field | Rule |
|---|---|
salutation, nationality, languagesSpoken | Master-data IDs; nationality defaults to India (356); languagesSpoken is multi-select (comma-separated) |
firstName / middleName / lastName, DOB, gender, address (KYC) | Auto-fetched from Aadhaar, non-editable |
fatherName / motherName / spouseName | Optional free text |
registrationNumber | Council registration number (as issued) |
registrationDate | Registration date |
registrationCertificate | Base64 image |
nameOfDegreeOrDiplomaObtained, college, university, country, state | Master-data IDs |
yearOfAwardingDegreeDiploma | Mandatory; monthOfAwardingDegreeDiploma optional |
degreeCertificate | Base64 image |
isNameDifferentInCertificate | If yes, attach proofOfNameChangeCertificate — pdf/png/jpeg/jpg, ≤ 5 MB |
Work-type branching
currentlyWorking (Yes/No) drives this section:
- Not working → provide
reasonForNotWorking(a master-data reason; a free-text "other" is allowed). - Working → choose Government, Private or Both (
purposeOfWork/chooseWorkStatus):- Government / Both →
certificateAttachment(payslip, recent transfer order, etc.) is mandatory, ≤ 5 MB, and a facility declaration is mandatory — search the facility by name/ID and fillfacilityDeclarationData. - Private → no document required.
- Government / Both →
When the work type is Government or Both, Central/State options appear. A
Central user must choose a ministry (mandatory) — fetch the list from the
getAllMinistry master API and pass it inside
currentWorkDetails.facilityDeclarationData.ministry.
Codes used by this API
These differ from the create-HPR-ID codes
The register/update-professional APIs use their own category and sub-category numbering. Don't reuse the create-HPR-ID sub-category codes here.
nameOfDegreeOrDiplomaObtained (qualification / degree code):
| Code | Degree | System of Medicine |
|---|---|---|
4060 | MBBS — Bachelor of Medicine and Bachelor of Surgery | Modern Medicine |
4074 | BDS — Bachelor of Dental Surgery | Dentistry |
4079 | BAMS — Bachelor of Ayurvedic Medicine and Surgery | Ayurvedic |
4082 | BUMS — Bachelor of Unani Medicine & Surgery | Unani |
61 | BSMS — Bachelor of Siddha Medicine and Surgery | Siddha |
74 | BTMS — Bachelor of Tibetan Medicine Studies | Sowa-Rigpa |
40 | BHMS — Bachelor of Homoeopathic Medicine and Surgery | Homoeopathy |
9568 | BPHARM — Bachelor of Pharmacy | Pharmacist |
registrationAcademic.category (category): 1 Doctor · 2 Nurse ·
6 Pharmacist.
categoryId (sub-category for register/update):
| Code | Sub-category | For |
|---|---|---|
1 | Modern Medicine | doctor |
2 | Dentistry | doctor |
3 | Homoeopathy | doctor |
4 | Ayurveda | doctor |
5 | Unani | doctor |
6 | Siddha | doctor |
7 | Sowa-Rigpa | doctor |
14 | Yoga and Naturopathy | doctor |
8 | Registered Auxiliary Nurse Midwife (RANM) | nurse |
9 | Registered Nurse (RN) | nurse |
10 | Registered Nurse and Registered Midwife (RN & RM) | nurse |
11 | Registered Lady Health Visitor (RLHV) | nurse |
13 | Pharmacist | pharmacist |
Fetch a professional's profile
/apis/v1/doctors/fetch-professional-infoFetches the registered profile. Supply the HPR ID number in
id; the other fields narrow a search when the ID isn't known.
curl -X POST "https://apihspsbx.abdm.gov.in/v4/int/apis/v1/doctors/fetch-professional-info" \
-H "Authorization: Bearer $SYSTEM_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"practitioner": {
"id": "71-XXXX-XXXX-7516",
"name": "",
"contactNumber": "",
"state": "",
"registrationNumber": ""
}
}'Update a professional
Update reuses the same nested practitioner structure as registration (with
the fields you want to change). It requires a fresh HPR user token — the
Update Professional guide walks through all three
login methods
first.
/apis/v1/doctors/update-professional-newUpdates an existing professional record. Master-data ID rules are identical to registration.
curl -X POST "https://apihspsbx.abdm.gov.in/v4/int/apis/v1/doctors/update-professional-new" \
-H "Authorization: Bearer $SYSTEM_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"hprToken": "HPR_USER_TOKEN",
"practitioner": { "...": "same shape as register-professional-new" }
}'Documents
List a professional's documents
/apis/v1/doctors/fetch-documents-listReturns the professional's uploaded documents grouped by section (profile,
registration, qualification…). Use it to discover the
document_id / document_type values you'll re-upload.
curl -X POST "https://apihspsbx.abdm.gov.in/v4/int/apis/v1/doctors/fetch-documents-list" \
-H "Authorization: Bearer $SYSTEM_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "hprid": "71-9999-9999-1358" }'{
"documentList": {
"profileDetails": { "...": "..." }
}
}Upload / replace a document
/apis/v1/uploads/upload-documentUploads (or replaces) one or more documents. document is an
array, so several files go in one call. data is base64; keep the
fileType consistent with the encoded bytes.
curl -X POST "https://apihspsbx.abdm.gov.in/v4/int/apis/v1/uploads/upload-document" \
-H "Authorization: Bearer $SYSTEM_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"hpr_token": "HPR_USER_TOKEN",
"document": [
{
"document_id": 1234,
"document_type": "profilePhoto",
"fileType": "png",
"data": "<base64 encoded string>"
}
]
}'Verify email
Three calls, all taking the HPR token in the body as hpr_token.
Generate the verification email
/apis/v1/doctors/generate-verification-emailSends a verification OTP to the email. otp_type is
official for the professional's official email.
curl -X POST "https://apihspsbx.abdm.gov.in/v4/int/apis/v1/doctors/generate-verification-email" \
-H "Authorization: Bearer $SYSTEM_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"hpr_token": "HPR_USER_TOKEN",
"emailAddress": "doctor@example.com",
"otp_type": "official"
}'Resend (optional)
/apis/v1/doctors/resent-verify-emailRe-sends the email OTP.
curl -X POST "https://apihspsbx.abdm.gov.in/v4/int/apis/v1/doctors/resent-verify-email" \
-H "Authorization: Bearer $SYSTEM_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"hpr_token": "HPR_USER_TOKEN",
"emailAddress": "doctor@example.com"
}'Verify the email OTP
/apis/v1/doctors/verify-email-otpConfirms the OTP. emailOtp is a 6-digit number (not encrypted).
curl -X POST "https://apihspsbx.abdm.gov.in/v4/int/apis/v1/doctors/verify-email-otp" \
-H "Authorization: Bearer $SYSTEM_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"hpr_token": "HPR_USER_TOKEN",
"hpr_id": "71-6347-XXXX-2778",
"officialEmail": "doctor@example.com",
"emailOtp": 103913
}'{ "status": "pass", "msg": "Email Verified" }Verify mobile
Same three-step shape; the mobile number is RSA-encrypted, and
verification carries a txnId from the generate step.
Generate the mobile OTP
/apis/v1/doctors/generate-mobile-otpSends an OTP to the official mobile and returns a txnId.
curl -X POST "https://apihspsbx.abdm.gov.in/v4/int/apis/v1/doctors/generate-mobile-otp" \
-H "Authorization: Bearer $SYSTEM_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"hpr_token": "HPR_USER_TOKEN",
"officialMobile": "<RSA-encrypted mobile>"
}'{ "txnId": "386d9909-c825-4b6b-bb61-505324a6a6f" }Regenerate (optional)
/apis/v1/doctors/regenerate-mobile-otpRe-sends the mobile OTP.
curl -X POST "https://apihspsbx.abdm.gov.in/v4/int/apis/v1/doctors/regenerate-mobile-otp" \
-H "Authorization: Bearer $SYSTEM_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"hpr_token": "HPR_USER_TOKEN",
"officialMobile": "<RSA-encrypted mobile>"
}'Verify the mobile OTP
/apis/v1/doctors/verify-mobile-otpConfirms the OTP against the txnId from the generate step. The
encrypted otp uses the same RSA scheme as everywhere else.
curl -X POST "https://apihspsbx.abdm.gov.in/v4/int/apis/v1/doctors/verify-mobile-otp" \
-H "Authorization: Bearer $SYSTEM_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"hpr_token": "HPR_USER_TOKEN",
"txnId": "386d9909-c825-4b6b-bb61-505324a6a6f",
"otp": "<RSA-encrypted otp>"
}'Masters and search APIs
Use the HPR masters APIs to fill dropdowns before registration. Cache stable lists, but refresh them before certification test runs.
Verify OCR-derived paths
The source lists some paths from OCR screenshots. The HPR OpenAPI confirms most master paths. Verify name and registration search paths against the sandbox Swagger.
Base URL for these APIs is https://apihspsbx.abdm.gov.in/v4/int/.
Send the HPRID gateway token in the Authorization header.
| Purpose | Method | Path |
|---|---|---|
| HPRID categories | GET | /hpid/get/categories?role={role} |
| HPRID sub-categories | GET | /hpid/get/subCategories?role={role}&categoryCode={categoryCode} |
| System of medicine | GET | /apis/v1/masters/system-of-medicines |
| Medical councils | GET | /apis/v1/masters/medical-councils |
| Languages | GET | /apis/v1/masters/languages or /apis/v1/masters/languages/{id} |
| Universities | GET | /apis/v1/masters/universites or /apis/v1/masters/universites/{id} |
| Colleges | GET | /apis/v1/masters/colleges/{stateId}/{medicineId} |
| College by ID | GET | /apis/v1/masters/colleges/{id} |
| Courses | POST | /apis/v1/masters/courses |
| Countries | GET | /apis/v1/masters/countries or /apis/v1/masters/countries/{id} |
| States | GET | /apis/v1/masters/states or /apis/v1/masters/states/{id} |
| Districts | GET | /apis/v1/masters/district or /apis/v1/masters/district/{id} |
| Sub-districts | GET | /apis/v1/masters/sub-districts or /apis/v1/masters/sub-districts/{id} |
| Nurse affiliated boards | GET | /apis/v1/masters/affiliated-board or /apis/v1/masters/affiliated-board/{id} |
| Nurse affiliated boards by state | GET | /apis/v1/masters/affiliated-board/states/{id} |
| Nurse councils | GET | /apis/v1/masters/nurse-councils |
| Nurse colleges by state | GET | /apis/v1/masters/colleges/{stateId}/{medicineId} |
| Ministries | GET | /apis/v1/masters/getAllMinistry |
curl "https://apihspsbx.abdm.gov.in/v4/int/apis/v1/masters/system-of-medicines" \
-H "Authorization: Bearer <your-access-token>"{
"systems": [
{ "id": 1, "systemOfMedicine": "Modern Medicine", "hprType": "doctor" },
{ "id": 2, "systemOfMedicine": "Dentistry", "hprType": "doctor" }
]
}curl -X POST "https://apihspsbx.abdm.gov.in/v4/int/apis/v1/masters/courses" \
-H "Authorization: Bearer <your-access-token>" \
-H "Content-Type: application/json" \
-d '{
"systemOfMedicine": "Modern Medicine",
"hprType": "doctor"
}'{
"courses": [
{ "id": 4074, "name": "MBBS", "duration": "5.5 years" }
]
}Professional search APIs
Use search APIs before you create duplicate records. Use public search only for data that the professional allowed for display.
| Purpose | Method | Path |
|---|---|---|
| Search by name | GET | /v1/search/searchByName/{firstName}/{lastName} |
| Search by mobile | GET | /v1/search/searchByMobile/{mobileNumber} |
| Search by registration | GET | /v1/search/searchByRegistration |
curl "https://apihspsbx.abdm.gov.in/v4/int/v1/search/searchByName/Kiran/Kumar" \
-H "Authorization: Bearer <your-access-token>"curl "https://apihspsbx.abdm.gov.in/v4/int/v1/search/searchByMobile/9762430000" \
-H "Authorization: Bearer <your-access-token>"curl "https://apihspsbx.abdm.gov.in/v4/int/v1/search/searchByRegistration?registrationNumber=REG12032&stateCouncilName=Delhi%20Medical%20Council" \
-H "Authorization: Bearer <your-access-token>"{
"professionals": [
{
"hprId": "91-1234-5678-9012",
"name": "Kiran Kumar",
"category": "Doctor"
}
]
}Sources
- ABDM NHPR — Register Professional & Create HPR ID (v2.0, 22-06-2026)
- ABDM NHPR — Fetch Professional Details
- ABDM NHPR — Update Professional
- ABDM NHPR — Update / Upload Documents
- ABDM NHPR — Email Verify
- ABDM NHPR — Mobile OTP
- ABDM HPR Test Cases workbook (field validations)
- HSP Swagger — HPR OpenAPI spec (ground truth)
- ABDM Proposed Simplified Milestone 4 — NHPR (DOCX→MD, 2026-08)
