Blood Bank Discovery
Discover blood availability through UHI search and on_search.
Blood Bank Discovery helps an EUA find blood stock across Blood Bank HSPAs through UHI. Phase 1 supports only search and on_search. Use this page with the shared UHI guide at /docs/uhi/v1/network-and-protocol.
| Parameter | Value |
|---|---|
| Service | Blood Bank Discovery |
| Domain code | nic2008:86906 |
| Core version | 0.7.1 |
| Phase 1 scope | search and on_search only |
| Service owner | NHA, ABDM |
Roles
| Role | Actor | Responsibility |
|---|---|---|
| EUA | A patient app or clinician app | Send blood stock search requests. Receive on_search callbacks. |
| HSPA | A blood bank system or aggregator | Return blood bank stock from its database. |
| Gateway | UHI Gateway | Route search and on_search messages. Return ACK or NACK. |
Flow
sequenceDiagram participant EUA participant Gateway participant HSPA as Blood Bank HSPA EUA->>Gateway: search Gateway-->>EUA: ACK Gateway->>HSPA: search HSPA->>Gateway: on_search Gateway->>EUA: on_search EUA-->>Gateway: ACK
Service identity
Use exact values
Set these values exactly. A wrong domain can stop HSPA responses.
| Parameter | Value | Use |
|---|---|---|
| domain | nic2008:86906 | Use in each request. |
| core_version | 0.7.1 | Use in each request. |
| action | search | Use in outbound search context. |
| action | on_search | Use in HSPA response context. |
| fulfillment.type | BloodStock | Use in each search request. |
Authentication
Sign each UHI request with Ed25519 and a BLAKE-512 body digest. Follow the shared header, ACK, and callback rules at /docs/uhi/v1/network-and-protocol.
Search filter types
| Search mode | Mandatory fields | Optional fields | Rule |
|---|---|---|---|
| GPS + radius | location.gps, radius.value | Blood group, blood component | Use this for proximity search. |
| State + district | state code and name, district code and name | Blood group, blood component | Use this when GPS is absent. |
Field references
search context
| Field | Type | Rule |
|---|---|---|
| domain | string | Use nic2008:86906. |
| country | string | Use IND. |
| city | string | Use std:011 as the default. |
| action | string | Use search. |
| core_version | string | Use 0.7.1. |
| consumer_id | string | Use your EUA ID. |
| consumer_uri | URL | Use your HTTPS callback URL. |
| transaction_id | UUID | Use a unique value per transaction. |
| message_id | UUID | Use a unique value per message. |
| timestamp | ISO 8601 | Use the UTC request time. |
search message.intent
| Field path | Type | Rule |
|---|---|---|
| item.descriptor.name | string | Use a blood group or All. |
| item.descriptor.code | string | Use the blood group code or -1. |
| category.descriptor.name | string | Use the blood component name. |
| category.descriptor.code | string | Use the blood component code. |
| fulfillment.type | string | Use BloodStock. |
| fulfillment.start.time.timestamp | ISO 8601 | Set the start time. |
| fulfillment.end.time.timestamp | ISO 8601 | Set the end time. |
| location.gps | string | Use lat,long for GPS search. |
| location.radius.type | string | Use CONSTANT for GPS search. |
| location.radius.value | string | Set radius in km. |
| location.radius.unit | string | Use km. |
| location.state.name | string | Use the state name. |
| location.state.code | string | Use the state code. |
| location.district.name | string | Use the district name. |
| location.district.code | string | Use the district code. |
on_search provider record fields
| Field path | Type | Rule |
|---|---|---|
| catalog.descriptor.name | string | HSPA or data source name. |
| providers[].id | string | Blood bank provider ID. |
| providers[].descriptor.name | string | Blood bank name. |
| providers[].descriptor.short_desc | string | Blood bank type. |
| providers[].categories[].descriptor.name | string | Blood component name. |
| providers[].categories[].descriptor.code | string | Blood component code. |
| providers[].fulfillments[].type | string | Available or NotAvailable. |
| providers[].items[].descriptor.name | string | Blood group name. |
| providers[].items[].descriptor.code | string | Blood group code. |
| providers[].items[].quantity.count | integer | Unit count. |
| providers[].items[].fulfillment_id | string | Link to availability status. |
| providers[].location.gps | string | Blood bank lat,long. |
| providers[].location.address | string | Full address. |
| providers[].location.city.name | string | City name. |
| providers[].location.state.name | string | State name. |
| providers[].location.district.name | string | District name. |
| providers[].contact.phone | string | Blood bank phone number. |
| providers[].contact.email | string | Blood bank email. |
Sample payloads
Use code -1 and name All to search all blood groups. Use a component code from the master list.
{
"context": {
"domain": "nic2008:86906",
"country": "IND",
"city": "std:011",
"action": "search",
"core_version": "0.7.1",
"consumer_id": "<your-eua-id>",
"consumer_uri": "<your-https-callback-url>",
"message_id": "5cc46ce0-cd96-11ef-957f-718cff4e4e0a",
"timestamp": "2025-01-08T07:58:36.421576Z",
"transaction_id": "5cc46ce0-cd96-11ef-957f-718cff4e4e0a"
},
"message": {
"intent": {
"item": { "descriptor": { "name": "O+Ve", "code": "15" } },
"fulfillment": {
"type": "BloodStock",
"start": { "time": { "timestamp": "2025-01-08T13:28:36" } },
"end": { "time": { "timestamp": "2025-01-08T23:59:59" } }
},
"category": { "descriptor": { "name": "WholeBlood", "code": "11" } },
"location": {
"gps": "17.3788008,78.4368212",
"radius": { "type": "CONSTANT", "value": "10.0", "unit": "km" }
}
}
}
}on_search sample
The source has a larger stock list. This sample keeps 2 blood group items for 1 provider.
{
"context": {
"domain": "nic2008:86906",
"action": "on_search",
"consumer_id": "<your-eua-id>",
"consumer_uri": "<your-https-callback-url>",
"provider_id": "nha.hspa",
"provider_uri": "https://hspasbx.abdm.gov.in/api/v1/bloodbank",
"transaction_id": "c51c2800-cd96-11ef-957f-718cff4e4e0a",
"message_id": "c51c2800-cd96-11ef-957f-718cff4e4e0a"
},
"message": {
"catalog": {
"descriptor": {
"name": "e-RaktKosh",
"short_desc": "e-RaktKosh: A Centralized Blood Bank Management System"
},
"providers": [
{
"id": "0",
"descriptor": {
"name": "Janseva Blood Centre",
"short_desc": "Charitable/Vol"
},
"categories": [
{ "id": "0", "descriptor": { "name": "WholeBlood", "code": "11" } }
],
"fulfillments": [
{ "id": "0", "type": "NotAvailable" },
{ "id": "1", "type": "Available" }
],
"items": [
{
"id": "0",
"descriptor": { "name": "O+Ve", "code": "15" },
"quantity": { "count": 2 },
"category_id": "0",
"fulfillment_id": "1"
},
{
"id": "1",
"descriptor": { "name": "AB+Ve", "code": "17" },
"quantity": { "count": 16 },
"category_id": "0",
"fulfillment_id": "0"
}
],
"location": {
"gps": "18.5246036,73.792927",
"address": "Paud Road, Pune, Maharashtra",
"city": { "name": "Pune" },
"state": { "name": "Maharashtra", "code": "27" },
"district": { "name": "Pune", "code": "521" }
},
"contact": {
"phone": "8987628900",
"email": "contact@jansevabc.org"
}
}
]
}
}
}Service-specific masters
Blood group master
| Code | Value |
|---|---|
| -1 | All |
| 11 | A+Ve |
| 12 | A-Ve |
| 13 | B+Ve |
| 14 | B-Ve |
| 15 | O+Ve |
| 16 | O-Ve |
| 17 | AB+Ve |
| 18 | AB-Ve |
| 22 | Oh+Ve |
| 23 | Oh-Ve |
Blood component master
| Code | Value |
|---|---|
| 11 | Whole Blood |
| 12 | Packed Red Blood Cells |
| 13 | Fresh Frozen Plasma |
| 14 | Single Donor Platelet |
| 16 | Platelet Rich Plasma |
| 17 | Cryoprecipitate |
| 18 | Single Donor Plasma |
| 19 | Plasma |
| 20 | Platelet Concentrate |
| 21 | Cryo Poor Plasma |
| 23 | Random Donor Platelets |
| 24 | Platelets Additive Solutions |
| 28 | SAGM Packed Red Blood Cells |
| 29 | Irradiated RBC |
| 30 | Leukoreduced RBC |
Known limitations
Stock can change
Some blood banks update stock in real time. Other blood banks update stock once per day.
- Offer state and district search as a GPS fallback.
- Show a stock disclaimer before users travel.
- Recommend a call to confirm stock before travel.
- Set a 10 to 15 second callback timeout.
- Add client-side pagination for large catalogs.
- Keep reservation workflows outside Phase 1.
Onboarding steps
Use this service checklist with /docs/uhi/v1/onboarding.
Express intent
Contact your NHA point of contact for Blood Bank Discovery onboarding.
Complete the form
Submit your organisation details and the EUA, HSPA, or both roles.
Create your key pair
Run Generator.java Option 1 from the NHA UHI repository.
Test in sandbox
Use the UHI Postman Collection and the Gateway API docs.
Request go-live
Request production access after NHA approves your sandbox tests.
Technical prerequisites
M2 prerequisite
Complete ABDM M2 with HIECM before Blood Bank Discovery onboarding. NHA treats this as a hard prerequisite.
EUA prerequisites
- Use an ABDM-compliant app with M2 of HIECM complete.
- Publish an HTTPS consumer_uri for on_search callbacks.
- Create UHI Authorization headers for search requests.
- Accept asynchronous on_search responses.
- Use the UHI Postman Collection for sandbox tests.
HSPA prerequisites
HSPA database quality
Maintain an independent blood bank database. NHA expects stock data of a scope and quality near e-RaktKosh.
- Maintain blood group and component inventory data.
- Publish an HTTPS provider_uri for Gateway search requests.
- Create UHI Authorization headers for on_search callbacks.
- Return a valid on_search payload inside an acceptable latency window.
- Complete sandbox tests and get NHA approval before production.
Resources and support
| Resource | Link or detail |
|---|---|
| Key utility | https://github.com/NHA-ABDM/UHI/tree/main/header_generator_utility |
| Onboarding docs | https://abdm.gov.in/uhi/resources/onboarding-documentation |
| Onboarding form | https://sandbox.abdm.gov.in/sandbox/v3/sandbox-registration |
| Gateway YAML | https://uhigatewaysandbox.abdm.gov.in/swagger-docs/v2.0.1/Gateway.yaml |
| Swagger UI | https://uhigatewaysandbox.abdm.gov.in/swagger-ui/index.html |
| Signature reference | https://github.com/NHA-ABDM/UHI/blob/main/docs/Signing%20UHI%20APIs_Final.docx |
| e-RaktKosh portal | https://eraktkosh.in |
| Support | abdm.cons11@nha.gov.in, abdm.cons50@nha.gov.in, abdm.iosdev1@nha.gov.in |
Sources
- UHI Blood Bank Discovery Service - Integrator Onboarding v1.0