National Health AuthorityNHA Docs

Command Palette

Search for a command to run...

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.

ParameterValue
Domainnic2008:86909
Core version0.7.1
Phase 1 scopesearch, on_search, init, on_init
Live case typeEMERGENCY
Future case typeNON_EMERGENCY [FUTURE]
Discovery pathEUA to Gateway to HSPA
Quote pathEUA 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.

PhaseStatusCapabilityAPIs
Phase 1LiveDiscover 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
  1. Send search from the EUA to the Gateway.
  2. Let the Gateway forward search to ambulance HSPAs.
  3. Receive on_search at the EUA callback URL.
  4. Let the user select one fulfillment.
  5. Send init from the EUA to the selected HSPA.
  6. Receive on_init at the EUA callback URL.
  7. Show the quote and terms to the user.

Service identity

ItemValue
ServiceUnified Health Interface Ambulance Booking
PublisherNational Health Authority, ABDM
NetworkUHI
EUA roleConsumer app for a patient or a caregiver
HSPA roleProvider app for an ambulance service
Domainnic2008:86909
Core version0.7.1
Gateway useUse the Gateway for search discovery.
Direct useUse the HSPA URL for init.
EUA callbackPut the EUA HTTPS URL in consumer_uri.
HSPA callbackUse 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 typeAmbulance class codesRequired location fields
EMERGENCYALS, BLS, ALLSOURCE GPS and address
NON_EMERGENCY [FUTURE]ALS, BLS, ALLSOURCE and DESTINATION GPS and address

Field references

search context fields

FieldTypeRequiredNotes
context.domainstringYesUse nic2008:86909.
context.countrystringYesUse IND.
context.citystringYesUse an STD code, such as std:011.
context.actionstringYesUse search.
context.core_versionstringYesUse 0.7.1.
context.consumer_idstringYesUse the registered EUA ID.
context.consumer_uriURLYesUse the EUA HTTPS callback URL.
context.message_idUUIDYesCreate a unique message ID.
context.timestampISO 8601YesSet the request time.
context.transaction_idUUIDYesReuse it across one flow.

search intent fields

FieldTypeRequiredNotes
message.intent.category.descriptor.codestringOptionalUse ALS, BLS, or ALL.
message.intent.fulfillment.typestringYesUse EMERGENCY or NON_EMERGENCY [FUTURE].
message.intent.fulfillment.start.time.timestampISO 8601YesUse the current time for EMERGENCY.
message.intent.fulfillment.end.time.timestampISO 8601OptionalUse it for NON_EMERGENCY [FUTURE].
message.intent.fulfillment.tags.additional_servicesstringOptionalSend services, such as oxygen cylinder.
message.intent.locations[SOURCE].gpsstringYesSend pickup latitude and longitude.
message.intent.locations[SOURCE].addressstringYesSend the pickup address.
message.intent.locations[DESTINATION].gpsstringConditionalSend it for NON_EMERGENCY [FUTURE].
message.intent.locations[DESTINATION].addressstringConditionalSend it for NON_EMERGENCY [FUTURE].
message.intent.item.descriptor.codestringYesUse 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.

FieldTypeRequiredNotes
context.actionstringYesUse on_search.
context.provider_idstringYesSend the registered HSPA ID.
context.provider_uriURLYesSend the HSPA callback URL.
context.transaction_idUUIDYesMatch the search value.
context.message_idUUIDYesMatch the search value.
message.catalog.descriptor.namestringYesSend the HSPA name.
message.catalog.descriptor.imagesURLOptionalSend the HSPA logo URL.
message.catalog.descriptor.flagbooleanYesUse false for an active service.
providers[].idstringYesSend a provider ID.
providers[].categories[].descriptor.codestringYesUse an ambulance class code.
providers[].fulfillments[].idstringYesSend a unique fulfillment ID.
providers[].fulfillments[].typestringYesMatch the search case type.
providers[].fulfillments[].trackingbooleanYesState if real-time track data exists.
providers[].fulfillments[].start.time.timestampISO 8601YesSend the earliest ETA.
providers[].fulfillments[].end.time.timestampISO 8601YesSend the latest ETA.
providers[].fulfillments[].tags.additional_servicesstringOptionalEcho or state services.
providers[].fulfillments[].tags.deeplink_urlURLOptionalSend an HSPA app link.
providers[].items[].idstringYesSend an item ID.
providers[].items[].descriptor.flagbooleanYesUse true when payment applies.
providers[].items[].price.valuestringYesSend the base indicative price in INR.
providers[].items[].price.estimated_ValuestringOptionalSend the estimated total charge.
providers[].items[].price.minimum_ValuestringOptionalSend the minimum charge or advance.
providers[].items[].price.maximum_ValuestringOptionalSend the maximum expected charge.
providers[].items[].fulfillment_idstringYesMatch 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

FieldTypeRequiredNotes
context.provider_idstringYesCopy it from on_search.
context.provider_uriURLYesCopy it from on_search.
order.provider.idstringYesCopy the selected provider ID.
order.item.idstringYesCopy the selected item ID.
order.item.fulfillment_idstringYesCopy the selected fulfillment ID.
order.fulfillment.idstringYesMatch order.item.fulfillment_id.
order.fulfillment.typestringYesUse EMERGENCY or NON_EMERGENCY [FUTURE].
order.fulfillment.trackingbooleanYesCopy it from on_search.
order.fulfillment.tags.additional_servicesstringOptionalSend requested extra services.
order.fulfillment.tags.deeplink_urlURLOptionalCopy it from on_search when present.
order.billing.namestringYesSend the patient or payer name.
order.billing.addressobjectYesSend pickup address fields.
order.billing.phonestringYesSend a patient phone number.
order.customer.idstringYesSend the ABHA address.
order.customer.person.dobdateOptionalSend the patient date of birth.
order.customer.person.genderstringOptionalUse M, F, or O.
order.locations[SOURCE]objectYesSend pickup GPS and address.
order.locations[DESTINATION]objectConditionalSend 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.

FieldTypeRequiredNotes
order.idstringYesSend the HSPA order ID.
order.fulfillment.tags.terms_referenceURLYesSend a versioned terms URL.
order.quote.price.valuestringYesSend the total confirmed price in INR.
order.quote.breakup[].titlestringYesSend the line item name.
order.quote.breakup[].price.valuestringYesSend the line item amount in INR.
order.payment.typestringYesUse ON-ORDER or PRE-ORDER.
order.payment.statusstringYesSend a status, such as NOT_PAID.
order.terms[].typestringYesUse a source term type, such as Commercial, Cancellation, or Payment.
order.terms[].termsStatestringYesUse INITIATED at this stage.
order.locations[SOURCE]objectYesEcho the pickup GPS and address.
order.locations[DESTINATION]objectConditionalEcho 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.

search — emergency
{
  "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.

on_search — emergency
{
  "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"
            }
          ]
        }
      ]
    }
  }
}
init — emergency
{
  "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"
        }
      ]
    }
  }
}
on_init — emergency
{
  "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.
  • init and on_init provide 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_search and on_init.
  • Sign requests with Ed25519 and a BLAKE-512 body hash.
  • Handle asynchronous on_search and on_init callbacks.
  • Support the EMERGENCY flow at minimum.
  • Show HSPA terms before the user can confirm in Phase 2.

HSPA

  • Host a public HTTPS callback URL for search and init.
  • Sign outbound responses with Ed25519 and a BLAKE-512 body hash.
  • Use real-time or near-real-time ambulance availability data.
  • Return an on_search catalog within the NHA SLA.
  • Return an on_init payload with quote, payment terms, and cancellation terms.
  • Keep driver and vehicle data out of Phase 1 payloads.

Reference resources

ResourceLink or detail
Key utilitygithub.com/NHA-ABDM/UHI/tree/main/header_generator_utility
Onboarding docsabdm.gov.in/uhi/resources/onboarding-documentation
Onboarding formhttps://sandbox.abdm.gov.in/sandbox/v3/sandbox-registration
API collectionPostman collection link from NHA
Signature referencegithub.com/NHA-ABDM/UHI/blob/main/docs/Signing%20UHI%20APIs_Final%20(1).docx
Phase 1 wireframehttps://quick-ambulance-flow.lovable.app/
Phase 2 wireframehttps://ambulancebookingservice.lovable.app/
NHA contactsabdm.cons50@nha.gov.in, abdm.cons11@nha.gov.in

Integration test cases

Category A: Context validation

Test IDTestExpected result
AMB-A-01Send search with all required context fields and correct values.The Gateway returns ACK and forwards search to HSPAs.
AMB-A-02Send search without consumer_uri.The Gateway returns NACK with an error code.
AMB-A-03Send on_init with a wrong transaction_id.The EUA rejects or flags the response.
AMB-A-04Build init with provider_id and provider_uri from on_search.The HSPA receives the request and returns ACK.

Category B: Search filter validation

Test IDTestExpected result
AMB-B-01Send 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-04Send search with category code ALS.on_search returns only ALS fulfillments.
AMB-B-05Send search with no category code or ALL.on_search returns all available ambulance classes.
AMB-B-06Send search with additional_services.Fulfillments include or acknowledge additional_services.

Category C: on_search response validation

Test IDTestExpected result
AMB-C-01Check each fulfillment ID and type in on_search.Each ID is unique and each type is correct.
AMB-C-02Match each items[].fulfillment_id to a fulfillment ID.Each item resolves within the provider catalog.
AMB-C-03Compare fulfillment.type with the search case type.The values match.
AMB-C-04Check that on_search has no agent block.No agent block exists in any fulfillment.
AMB-C-05Compare transaction_id with the search value.The values match.

Category D: init and on_init validation

Test IDTestExpected result
AMB-D-01Send init with an item ID and fulfillment ID from on_search.The HSPA returns ACK and sends on_init.
AMB-D-02Check that on_init has a non-empty order.id.order.id exists and is unique.
AMB-D-03Check that on_init has a quote with one breakup line.quote.breakup has a title and a price.
AMB-D-04Check Commercial, Cancellation, and Payment terms.Each term has termsState as INITIATED.
AMB-D-05Check that on_init has no agent block.No driver name, vehicle number, or agent phone exists.
AMB-D-06Compare SOURCE and DESTINATION with the init request.Location data matches the init request.
AMB-D-07Send init with an ABHA address in customer.id.The HSPA accepts it and returns on_init.

Category E: UX and best practice compliance

Test IDTestExpected result
AMB-E-01Show the HSPA name and logo from catalog.descriptor.The EUA shows HSPA brand data in results.
AMB-E-02Show the ETA window from fulfillment start and end times.The EUA shows ETA for each option.
AMB-E-03Show the indicative price from item.price.value.The EUA shows a price before user selection.
AMB-E-04Show full on_init terms before confirm is available.The terms screen appears before confirm.
AMB-E-05Hide driver and vehicle data in Phase 1.The EUA shows no agent data before confirm.

Category F: Edge cases

Test IDTestExpected result
AMB-F-01No HSPA responds within the expected time window.The EUA shows an empty result message without failure.
AMB-F-02HSPA sends on_search with an empty providers array.The EUA handles it without a crash or display error.
AMB-F-03EUA sends duplicate search with the same transaction_id.The Gateway de-duplicates or the HSPA ignores it.
AMB-F-04HSPA 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)