Ambulance Booking
Use the UHI Ambulance Booking service to discover an ambulance and start a Phase 1 quote flow.
The UHI Ambulance Booking service lets an EUA discover an ambulance from an HSPA on UHI. Phase 1 supports discovery and quote start only.
| Parameter | Value |
|---|---|
| Domain | nic2008:86909 |
| Core version | 0.7.1 |
| Phase 1 scope | search, on_search, init, on_init |
| Live case type | EMERGENCY |
| Future case type | NON_EMERGENCY [FUTURE] |
| Discovery path | EUA to Gateway to HSPA |
| Quote path | EUA to HSPA, peer to peer |
Integration roadmap
Future scope
The source marks non-emergency booking as [FUTURE]. Do not enable NON_EMERGENCY in Phase 1.
| Phase | Status | Capability | APIs |
|---|---|---|---|
| Phase 1 | Live | Discover an ambulance and start a quote. | search, on_search, init, on_init |
| Phase 2 | [FUTURE] | Confirm a booking, dispatch an ambulance, track status, and cancel. | confirm, on_confirm, status, on_status, cancel, on_cancel, on_update |
| Non-emergency | [FUTURE] | Search with a source and a destination. | Same Phase 1 pair first |
Out of scope for Phase 1
- Do not confirm an order through the EUA.
- Do not add a driver name, a vehicle number, or an agent phone.
- Do not show live tracking or dispatch status.
- Do not route state ambulance networks, such as 108, 102, or 112 services.
- Do not treat no HSPA response as a network error.
Why integrate
EUA
- Add ambulance discovery to a health app.
- Use one UHI link instead of direct provider links.
- Show ETA windows and an indicative price.
- Prepare NON_EMERGENCY support for a future phase.
HSPA
- Make an ambulance fleet visible to UHI apps.
- Use one standard protocol for EUA partners.
- Reach a patient at the point of need.
- Return a quote and terms before a user confirms.
Phase 1 flow
sequenceDiagram participant EUA participant Gateway participant HSPA EUA->>Gateway: search Gateway->>HSPA: search HSPA-->>Gateway: ACK HSPA->>Gateway: on_search Gateway->>EUA: on_search EUA-->>Gateway: ACK EUA->>HSPA: init HSPA-->>EUA: ACK HSPA->>EUA: on_init EUA-->>HSPA: ACK
- Send
searchfrom the EUA to the Gateway. - Let the Gateway forward
searchto ambulance HSPAs. - Receive
on_searchat the EUA callback URL. - Let the user select one fulfillment.
- Send
initfrom the EUA to the selected HSPA. - Receive
on_initat the EUA callback URL. - Show the quote and terms to the user.
Service identity
| Item | Value |
|---|---|
| Service | Unified Health Interface Ambulance Booking |
| Publisher | National Health Authority, ABDM |
| Network | UHI |
| EUA role | Consumer app for a patient or a caregiver |
| HSPA role | Provider app for an ambulance service |
| Domain | nic2008:86909 |
| Core version | 0.7.1 |
| Gateway use | Use the Gateway for search discovery. |
| Direct use | Use the HSPA URL for init. |
| EUA callback | Put the EUA HTTPS URL in consumer_uri. |
| HSPA callback | Use provider_uri from on_search. |
Authentication
Sign each UHI API request and callback with Ed25519 and a BLAKE-512 body hash. For the shared context block, ACK, callbacks, and signatures, see UHI network and protocol.
Search filter types
| Case type | Ambulance class codes | Required location fields |
|---|---|---|
EMERGENCY | ALS, BLS, ALL | SOURCE GPS and address |
NON_EMERGENCY [FUTURE] | ALS, BLS, ALL | SOURCE and DESTINATION GPS and address |
Field references
search context fields
| Field | Type | Required | Notes |
|---|---|---|---|
context.domain | string | Yes | Use nic2008:86909. |
context.country | string | Yes | Use IND. |
context.city | string | Yes | Use an STD code, such as std:011. |
context.action | string | Yes | Use search. |
context.core_version | string | Yes | Use 0.7.1. |
context.consumer_id | string | Yes | Use the registered EUA ID. |
context.consumer_uri | URL | Yes | Use the EUA HTTPS callback URL. |
context.message_id | UUID | Yes | Create a unique message ID. |
context.timestamp | ISO 8601 | Yes | Set the request time. |
context.transaction_id | UUID | Yes | Reuse it across one flow. |
search intent fields
| Field | Type | Required | Notes |
|---|---|---|---|
message.intent.category.descriptor.code | string | Optional | Use ALS, BLS, or ALL. |
message.intent.fulfillment.type | string | Yes | Use EMERGENCY or NON_EMERGENCY [FUTURE]. |
message.intent.fulfillment.start.time.timestamp | ISO 8601 | Yes | Use the current time for EMERGENCY. |
message.intent.fulfillment.end.time.timestamp | ISO 8601 | Optional | Use it for NON_EMERGENCY [FUTURE]. |
message.intent.fulfillment.tags.additional_services | string | Optional | Send services, such as oxygen cylinder. |
message.intent.locations[SOURCE].gps | string | Yes | Send pickup latitude and longitude. |
message.intent.locations[SOURCE].address | string | Yes | Send the pickup address. |
message.intent.locations[DESTINATION].gps | string | Conditional | Send it for NON_EMERGENCY [FUTURE]. |
message.intent.locations[DESTINATION].address | string | Conditional | Send it for NON_EMERGENCY [FUTURE]. |
message.intent.item.descriptor.code | string | Yes | Use AMBULANCE. |
on_search response fields
Source note
The source has an invalid JSON sample for emergency on_search. Use the field rules below and validate your payload.
| Field | Type | Required | Notes |
|---|---|---|---|
context.action | string | Yes | Use on_search. |
context.provider_id | string | Yes | Send the registered HSPA ID. |
context.provider_uri | URL | Yes | Send the HSPA callback URL. |
context.transaction_id | UUID | Yes | Match the search value. |
context.message_id | UUID | Yes | Match the search value. |
message.catalog.descriptor.name | string | Yes | Send the HSPA name. |
message.catalog.descriptor.images | URL | Optional | Send the HSPA logo URL. |
message.catalog.descriptor.flag | boolean | Yes | Use false for an active service. |
providers[].id | string | Yes | Send a provider ID. |
providers[].categories[].descriptor.code | string | Yes | Use an ambulance class code. |
providers[].fulfillments[].id | string | Yes | Send a unique fulfillment ID. |
providers[].fulfillments[].type | string | Yes | Match the search case type. |
providers[].fulfillments[].tracking | boolean | Yes | State if real-time track data exists. |
providers[].fulfillments[].start.time.timestamp | ISO 8601 | Yes | Send the earliest ETA. |
providers[].fulfillments[].end.time.timestamp | ISO 8601 | Yes | Send the latest ETA. |
providers[].fulfillments[].tags.additional_services | string | Optional | Echo or state services. |
providers[].fulfillments[].tags.deeplink_url | URL | Optional | Send an HSPA app link. |
providers[].items[].id | string | Yes | Send an item ID. |
providers[].items[].descriptor.flag | boolean | Yes | Use true when payment applies. |
providers[].items[].price.value | string | Yes | Send the base indicative price in INR. |
providers[].items[].price.estimated_Value | string | Optional | Send the estimated total charge. |
providers[].items[].price.minimum_Value | string | Optional | Send the minimum charge or advance. |
providers[].items[].price.maximum_Value | string | Optional | Send the maximum expected charge. |
providers[].items[].fulfillment_id | string | Yes | Match a fulfillment ID. |
Use the same fulfillment ID in fulfillments[].id and items[].fulfillment_id.
This link joins the category, the fulfillment, and the item.
init request fields
| Field | Type | Required | Notes |
|---|---|---|---|
context.provider_id | string | Yes | Copy it from on_search. |
context.provider_uri | URL | Yes | Copy it from on_search. |
order.provider.id | string | Yes | Copy the selected provider ID. |
order.item.id | string | Yes | Copy the selected item ID. |
order.item.fulfillment_id | string | Yes | Copy the selected fulfillment ID. |
order.fulfillment.id | string | Yes | Match order.item.fulfillment_id. |
order.fulfillment.type | string | Yes | Use EMERGENCY or NON_EMERGENCY [FUTURE]. |
order.fulfillment.tracking | boolean | Yes | Copy it from on_search. |
order.fulfillment.tags.additional_services | string | Optional | Send requested extra services. |
order.fulfillment.tags.deeplink_url | URL | Optional | Copy it from on_search when present. |
order.billing.name | string | Yes | Send the patient or payer name. |
order.billing.address | object | Yes | Send pickup address fields. |
order.billing.phone | string | Yes | Send a patient phone number. |
order.customer.id | string | Yes | Send the ABHA address. |
order.customer.person.dob | date | Optional | Send the patient date of birth. |
order.customer.person.gender | string | Optional | Use M, F, or O. |
order.locations[SOURCE] | object | Yes | Send pickup GPS and address. |
order.locations[DESTINATION] | object | Conditional | Send it for NON_EMERGENCY [FUTURE]. |
on_init response fields
Do not send agent data
The source states that the agent block must not appear in on_init. Add driver and vehicle data only in Phase 2.
| Field | Type | Required | Notes |
|---|---|---|---|
order.id | string | Yes | Send the HSPA order ID. |
order.fulfillment.tags.terms_reference | URL | Yes | Send a versioned terms URL. |
order.quote.price.value | string | Yes | Send the total confirmed price in INR. |
order.quote.breakup[].title | string | Yes | Send the line item name. |
order.quote.breakup[].price.value | string | Yes | Send the line item amount in INR. |
order.payment.type | string | Yes | Use ON-ORDER or PRE-ORDER. |
order.payment.status | string | Yes | Send a status, such as NOT_PAID. |
order.terms[].type | string | Yes | Use a source term type, such as Commercial, Cancellation, or Payment. |
order.terms[].termsState | string | Yes | Use INITIATED at this stage. |
order.locations[SOURCE] | object | Yes | Echo the pickup GPS and address. |
order.locations[DESTINATION] | object | Conditional | Echo it for NON_EMERGENCY [FUTURE]. |
Sample payloads
Trimmed examples
The examples keep 1 provider, 1 or 2 categories, 1 fulfillment, and 1 item. Add more entries with the same structure.
Emergency flow
Send search through the Gateway.
Send init directly to the selected HSPA.
{
"context": {
"domain": "nic2008:86909",
"country": "IND",
"city": "std:011",
"action": "search",
"core_version": "0.7.1",
"consumer_id": "<your-eua-id>",
"consumer_uri": "https://<your-callback-url>/api/v1/euaService",
"message_id": "e9a19230-f951-11ec-b135-53aea776f66b",
"timestamp": "2026-03-23T15:24:35",
"transaction_id": "e9a19230-f951-11ec-b135-53aea776f66b"
},
"message": {
"intent": {
"category": {
"descriptor": {
"code": "ALS",
"name": "ALS"
}
},
"fulfillment": {
"type": "EMERGENCY",
"start": {
"time": {
"timestamp": "2026-01-05T15:24:35"
}
},
"end": {
"time": {
"timestamp": "2026-01-05T23:59:59"
}
},
"tags": {
"additional_services": "oxygen cylinder, etc"
}
},
"locations": [
{
"descriptor": {
"code": "SOURCE",
"name": "SOURCE"
},
"gps": "12.423423,77.325647",
"address": "SHIVAJI MARG, PUNE"
}
],
"item": {
"descriptor": {
"code": "AMBULANCE",
"name": "AMBULANCE"
}
}
}
}
}Source note
The source emergency on_search sample is not valid JSON. This example keeps the same fields and valid JSON.
{
"context": {
"domain": "nic2008:86909",
"country": "IND",
"city": "std:011",
"action": "on_search",
"timestamp": "2026-04-16T17:52:00",
"core_version": "0.7.1",
"consumer_id": "<your-eua-id>",
"consumer_uri": "https://<your-callback-url>/api/v1/euaService",
"provider_id": "<hspa-id>",
"provider_uri": "https://<hspa-callback-url>/api/v1/hspa/ambulance",
"transaction_id": "e9a19230-f951-11ec-b135-53aea776f66b",
"message_id": "e9a19230-f951-11ec-b135-53aea776f66b"
},
"message": {
"catalog": {
"descriptor": {
"name": "Medulance HSPA",
"images": "https://example.com/logo.png",
"flag": false,
"short_desc": "Medulance: Ambulance Provider HSPA",
"long_desc": "Description of the HSPA."
},
"providers": [
{
"id": "1",
"descriptor": {
"name": "Medulance",
"flag": false,
"short_desc": "Medulance Image",
"long_desc": "HSPA description."
},
"categories": [
{
"id": "1",
"descriptor": {
"name": "Advanced Life Support (ALS)",
"code": "ALS",
"flag": false
}
}
],
"fulfillments": [
{
"id": "ML-ALS-01",
"type": "EMERGENCY",
"tracking": true,
"start": {
"time": {
"timestamp": "2026-01-05T12:30:00"
}
},
"end": {
"time": {
"timestamp": "2026-01-05T12:35:00"
}
},
"tags": {
"additional_services": "oxygen cylinder, etc",
"deeplink_url": "https://deeplinkurl.com"
}
}
],
"items": [
{
"id": "1",
"descriptor": {
"name": "Charges",
"flag": true,
"short_desc": "Applicability note",
"long_desc": "Disclaimer text"
},
"price": {
"currency": "INR",
"value": "500",
"estimated_Value": "500",
"minimum_Value": "200",
"maximum_Value": "1500"
},
"category_id": "1",
"fulfillment_id": "ML-ALS-01"
}
]
}
]
}
}
}{
"context": {
"domain": "nic2008:86909",
"country": "IND",
"city": "std:011",
"action": "init",
"timestamp": "2026-01-05T15:24:35",
"core_version": "0.7.1",
"consumer_id": "<your-eua-id>",
"consumer_uri": "https://<your-callback-url>/api/v1/euaService",
"provider_id": "<hspa-id>",
"provider_uri": "https://<hspa-callback-url>/api/v1/hspa/ambulance",
"transaction_id": "e9a19230-f951-11ec-b135-53aea776f66b",
"message_id": "e9a19230-f951-11ec-b135-53aea776f66b"
},
"message": {
"order": {
"provider": {
"id": "1",
"descriptor": {
"name": "Medulance",
"short_desc": "Medulance Image",
"long_desc": "HSPA description."
}
},
"item": {
"id": "1",
"descriptor": {
"name": "Charges",
"flag": true,
"long_desc": "Disclaimer",
"short_desc": "Applicability"
},
"price": {
"currency": "INR",
"value": "500",
"estimated_Value": "500",
"minimum_Value": "200",
"maximum_Value": "1500"
},
"category_id": "1",
"fulfillment_id": "ML-ALS-01"
},
"fulfillment": {
"id": "ML-ALS-01",
"type": "EMERGENCY",
"tracking": true,
"start": {
"time": {
"timestamp": "2026-01-05T12:30:00"
}
},
"end": {
"time": {
"timestamp": "2026-01-05T12:35:00"
}
},
"tags": {
"additional_services": "oxygen cylinder, etc",
"deeplink_url": "https://deeplinkurl.com"
}
},
"billing": {
"name": "Patient Name",
"address": {
"door": "",
"name": "Patient Name",
"locality": "Pickup address text",
"state": "State",
"country": "INDIA",
"area_code": "500067"
},
"phone": "9XXXXXXXXX",
"email": ""
},
"customer": {
"id": "<abha-address>@sbx",
"person": {
"dob": "2000-12-20",
"gender": "M",
"dayOfBirth": 20,
"monthOfBirth": 12,
"yearOfBirth": 2000
}
},
"locations": [
{
"descriptor": {
"code": "SOURCE",
"name": "SOURCE"
},
"gps": "12.423423,77.325647",
"address": "SHIVAJI MARG, PUNE"
},
{
"descriptor": {
"code": "DESTINATION",
"name": "DESTINATION"
},
"gps": "12.900000,77.600000",
"address": "MG ROAD, BENGALURU"
}
]
}
}
}{
"context": {
"domain": "nic2008:86909",
"country": "IND",
"city": "std:011",
"action": "on_init",
"timestamp": "2026-04-16T17:54:01",
"core_version": "0.7.1",
"consumer_id": "<your-eua-id>",
"consumer_uri": "https://<your-callback-url>/api/v1/euaService",
"provider_id": "<hspa-id>",
"provider_uri": "https://<hspa-callback-url>/api/v1/hspa/ambulance",
"transaction_id": "e9a19230-f951-11ec-b135-53aea776f66b",
"message_id": "e9a19230-f951-11ec-b135-53aea776f66b"
},
"message": {
"order": {
"id": "7661-863173-3384",
"provider": {
"id": "1",
"descriptor": {
"name": "Medulance",
"flag": false,
"short_desc": "Medulance Image",
"long_desc": "HSPA description."
}
},
"item": {
"id": "1",
"descriptor": {
"name": "Charges",
"flag": true,
"short_desc": "Applicability",
"long_desc": "Disclaimer"
},
"price": {
"currency": "INR",
"value": "500",
"estimated_Value": "500",
"minimum_Value": "200",
"maximum_Value": "1500"
},
"category_id": "1",
"fulfillment_id": "ML-ALS-01"
},
"fulfillment": {
"id": "ML-ALS-01",
"type": "EMERGENCY",
"tracking": true,
"start": {
"time": {
"timestamp": "2026-01-05T12:30:00"
}
},
"end": {
"time": {
"timestamp": "2026-01-05T12:35:00"
}
},
"tags": {
"terms_reference": "https://termsreference.com",
"additional_services": "oxygen cylinder, etc",
"deeplink_url": "https://deeplinkurl.com"
}
},
"billing": {
"name": "Patient Name",
"address": {
"door": "",
"name": "Patient Name",
"locality": "Pickup address text",
"state": "State",
"country": "INDIA",
"area_code": "500067"
},
"email": "",
"phone": "9XXXXXXXXX"
},
"quote": {
"price": {
"currency": "INR",
"value": "500.0"
},
"breakup": [
{
"title": "Ambulance Base Charge",
"price": {
"currency": "INR",
"value": "400.0"
}
},
{
"title": "Consumable Charges",
"price": {
"currency": "INR",
"value": "100.0"
}
}
]
},
"customer": {
"id": "<abha-address>@sbx",
"person": {
"gender": "M",
"dayOfBirth": 20,
"monthOfBirth": 12,
"yearOfBirth": 2000,
"dob": "2000-12-20"
}
},
"payment": {
"type": "ON-ORDER",
"status": "NOT_PAID"
},
"terms": [
{
"type": "Commercial",
"descriptor": {
"name": "Commercial terms and conditions",
"flag": false,
"short_desc": "Short description",
"long_desc": "Long description"
},
"reasonRequired": false,
"timePeriod": "2024-11-12T09:00:00",
"reason": "",
"termsState": "INITIATED"
},
{
"type": "Cancellation",
"descriptor": {
"name": "Cancellation terms and conditions",
"flag": false,
"short_desc": "Short description",
"long_desc": "Long description"
},
"reasonRequired": false,
"timePeriod": "2024-11-12T09:00:00",
"reason": "",
"termsState": "INITIATED"
},
{
"type": "Payment",
"descriptor": {
"name": "Payment terms and conditions",
"flag": false,
"short_desc": "Short description",
"long_desc": "Long description"
},
"reasonRequired": false,
"timePeriod": "2024-11-12T09:00:00",
"reason": "",
"termsState": "INITIATED"
}
],
"locations": [
{
"descriptor": {
"code": "SOURCE",
"name": "SOURCE",
"flag": false
},
"gps": "12.423423,77.325647",
"address": "SHIVAJI MARG, PUNE"
},
{
"descriptor": {
"code": "DESTINATION",
"name": "DESTINATION",
"flag": false
},
"gps": "12.900000,77.600000",
"address": "MG ROAD, BENGALURU"
}
]
}
}
}Known limitations for Phase 1
- Phase 1 does not include confirmation or non-emergency booking.
initandon_initprovide a quote and terms only.- Phase 2 covers fulfillment and post-fulfillment flows.
- Driver and vehicle data are not available in Phase 1.
- Do not send the agent block in a Phase 1 payload.
- Live tracking and dispatch status are not available in Phase 1.
- State ambulance networks and government services are out of scope.
- HSPA availability can vary by region.
- No HSPA response does not mean a network error.
Onboarding steps
Use the common UHI process in UHI onboarding. Follow these service steps for Ambulance Booking.
Express intent
Contact your NHA point of contact or reply to the NHA onboarding message.
Complete the ABDM milestone
Complete ABDM Milestone 2 for HIECM before production access.
Submit the onboarding form
Submit the organisation details, role, HTTPS callback URL, and public key.
Generate the key pair
Use the NHA header utility to create an Ed25519 key pair. Submit only the public key to NHA.
Test in sandbox
Use the sandbox credentials and the Ambulance Booking Postman collection.
Get NHA sign-off
Pass the test cases and get NHA sign-off before production access.
Technical prerequisites
EUA
- Complete ABDM Milestone 2 for HIECM.
- Host a public HTTPS callback URL for
on_searchandon_init. - Sign requests with Ed25519 and a BLAKE-512 body hash.
- Handle asynchronous
on_searchandon_initcallbacks. - Support the
EMERGENCYflow at minimum. - Show HSPA terms before the user can confirm in Phase 2.
HSPA
- Host a public HTTPS callback URL for
searchandinit. - Sign outbound responses with Ed25519 and a BLAKE-512 body hash.
- Use real-time or near-real-time ambulance availability data.
- Return an
on_searchcatalog within the NHA SLA. - Return an
on_initpayload with quote, payment terms, and cancellation terms. - Keep driver and vehicle data out of Phase 1 payloads.
Reference resources
| Resource | Link or detail |
|---|---|
| Key utility | github.com/NHA-ABDM/UHI/tree/main/header_generator_utility |
| Onboarding docs | abdm.gov.in/uhi/resources/onboarding-documentation |
| Onboarding form | https://sandbox.abdm.gov.in/sandbox/v3/sandbox-registration |
| API collection | Postman collection link from NHA |
| Signature reference | github.com/NHA-ABDM/UHI/blob/main/docs/Signing%20UHI%20APIs_Final%20(1).docx |
| Phase 1 wireframe | https://quick-ambulance-flow.lovable.app/ |
| Phase 2 wireframe | https://ambulancebookingservice.lovable.app/ |
| NHA contacts | abdm.cons50@nha.gov.in, abdm.cons11@nha.gov.in |
Integration test cases
Category A: Context validation
| Test ID | Test | Expected result |
|---|---|---|
| AMB-A-01 | Send search with all required context fields and correct values. | The Gateway returns ACK and forwards search to HSPAs. |
| AMB-A-02 | Send search without consumer_uri. | The Gateway returns NACK with an error code. |
| AMB-A-03 | Send on_init with a wrong transaction_id. | The EUA rejects or flags the response. |
| AMB-A-04 | Build init with provider_id and provider_uri from on_search. | The HSPA receives the request and returns ACK. |
Category B: Search filter validation
| Test ID | Test | Expected result |
|---|---|---|
| AMB-B-01 | Send EMERGENCY search with SOURCE only. | The HSPA returns an EMERGENCY on_search catalog. |
| AMB-B-02 | [FUTURE] Send NON_EMERGENCY search with SOURCE and DESTINATION. | The HSPA returns a NON_EMERGENCY on_search catalog. |
| AMB-B-03 | [FUTURE] Send NON_EMERGENCY search with SOURCE only. | The Gateway or HSPA returns NACK for a missed destination. |
| AMB-B-04 | Send search with category code ALS. | on_search returns only ALS fulfillments. |
| AMB-B-05 | Send search with no category code or ALL. | on_search returns all available ambulance classes. |
| AMB-B-06 | Send search with additional_services. | Fulfillments include or acknowledge additional_services. |
Category C: on_search response validation
| Test ID | Test | Expected result |
|---|---|---|
| AMB-C-01 | Check each fulfillment ID and type in on_search. | Each ID is unique and each type is correct. |
| AMB-C-02 | Match each items[].fulfillment_id to a fulfillment ID. | Each item resolves within the provider catalog. |
| AMB-C-03 | Compare fulfillment.type with the search case type. | The values match. |
| AMB-C-04 | Check that on_search has no agent block. | No agent block exists in any fulfillment. |
| AMB-C-05 | Compare transaction_id with the search value. | The values match. |
Category D: init and on_init validation
| Test ID | Test | Expected result |
|---|---|---|
| AMB-D-01 | Send init with an item ID and fulfillment ID from on_search. | The HSPA returns ACK and sends on_init. |
| AMB-D-02 | Check that on_init has a non-empty order.id. | order.id exists and is unique. |
| AMB-D-03 | Check that on_init has a quote with one breakup line. | quote.breakup has a title and a price. |
| AMB-D-04 | Check Commercial, Cancellation, and Payment terms. | Each term has termsState as INITIATED. |
| AMB-D-05 | Check that on_init has no agent block. | No driver name, vehicle number, or agent phone exists. |
| AMB-D-06 | Compare SOURCE and DESTINATION with the init request. | Location data matches the init request. |
| AMB-D-07 | Send init with an ABHA address in customer.id. | The HSPA accepts it and returns on_init. |
Category E: UX and best practice compliance
| Test ID | Test | Expected result |
|---|---|---|
| AMB-E-01 | Show the HSPA name and logo from catalog.descriptor. | The EUA shows HSPA brand data in results. |
| AMB-E-02 | Show the ETA window from fulfillment start and end times. | The EUA shows ETA for each option. |
| AMB-E-03 | Show the indicative price from item.price.value. | The EUA shows a price before user selection. |
| AMB-E-04 | Show full on_init terms before confirm is available. | The terms screen appears before confirm. |
| AMB-E-05 | Hide driver and vehicle data in Phase 1. | The EUA shows no agent data before confirm. |
Category F: Edge cases
| Test ID | Test | Expected result |
|---|---|---|
| AMB-F-01 | No HSPA responds within the expected time window. | The EUA shows an empty result message without failure. |
| AMB-F-02 | HSPA sends on_search with an empty providers array. | The EUA handles it without a crash or display error. |
| AMB-F-03 | EUA sends duplicate search with the same transaction_id. | The Gateway de-duplicates or the HSPA ignores it. |
| AMB-F-04 | HSPA sends on_init with PRE-ORDER and non-zero minimum_Value. | The EUA shows the advance payment need. |
Sources
- UHI Ambulance Booking Onboarding v1.1 (July 2026)
