Manage practice group settings, access tokens, and configuration. Use the access token endpoint to generate short-lived JWTs for Hero Elements.
Hero Health Public API (1.0.0)
The Hero Health Public API enables healthtech partners to integrate with NHS GP practices connected to EMIS Web and TPP SystmOne.
- Patient messaging — Send SMS, email, and NHS App messages on behalf of a practice
- Appointment booking — List available slots, create reservations, and confirm bookings
- Patient management — Register and look up patients via PDS (Personal Demographics Service)
- Webhooks — Subscribe to events such as appointment confirmations and write-to-record outcomes
- Booking & form links — Generate sharable links for patient self-service flows
- Elements — Generate access tokens for embedding pre-built Hero UI components
All endpoints require an x-api-key and x-practice-group-id header. API keys are scoped to specific functionality (messaging, booking, booking links). Contact Hero support to request your key.
- Mock serverhttps://developer.herohealth.net/_mock/apis/public-api/openapi/v1/appointments/{id}
- Staginghttps://api.staging.htech.app/v1/appointments/{id}
- Productionhttps://api.herohealth.net/v1/appointments/{id}
- curl
- NodeJS
- Ruby
curl -i -X PUT \
'https://developer.herohealth.net/_mock/apis/public-api/openapi/v1/appointments/{id}' \
-H 'Content-Type: application/json' \
-H 'x-api-key: YOUR_API_KEY_HERE' \
-H 'x-practice-group-id: YOUR_API_KEY_HERE' \
-d '{
"practitioner_id": "15",
"duration": 15,
"start_time": "2026-03-15T09:30:00Z",
"suppress_mail": false,
"suppress_availability_check": false
}'Request
Create an appointment reservation for a patient. The appointment is held in a reserved state until confirmed via the Book Appointment endpoint.
Flow: List Slots → Create Appointment (reserve) → Book Appointment (confirm).
If the reservation is not confirmed within the hold period, it will be automatically released.
- Mock serverhttps://developer.herohealth.net/_mock/apis/public-api/openapi/v1/appointments
- Staginghttps://api.staging.htech.app/v1/appointments
- Productionhttps://api.herohealth.net/v1/appointments
- curl
- NodeJS
- Ruby
curl -i -X POST \
https://developer.herohealth.net/_mock/apis/public-api/openapi/v1/appointments \
-H 'Content-Type: application/json' \
-H 'x-api-key: YOUR_API_KEY_HERE' \
-H 'x-practice-group-id: YOUR_API_KEY_HERE' \
-d '{
"appointment_type_id": "42",
"location_id": "7",
"practitioner_id": "15",
"duration": 15,
"start_time": "2026-03-15T09:30:00Z",
"patient_id": "1234",
"billpayer_id": "5678",
"reason": "Annual health check",
"suppress_mail": false,
"suppress_availability_check": false
}'{ "id": "string", "reserved_until": "2019-08-24T14:15:22Z" }
Request
Confirm a previously reserved appointment. This transitions the appointment from reserved to booked status and triggers any configured notifications (e.g. patient confirmation SMS).
The appointment must have been created via the Create Appointment endpoint first.
- Mock serverhttps://developer.herohealth.net/_mock/apis/public-api/openapi/v1/appointments/{id}/book
- Staginghttps://api.staging.htech.app/v1/appointments/{id}/book
- Productionhttps://api.herohealth.net/v1/appointments/{id}/book
- curl
- NodeJS
- Ruby
curl -i -X PATCH \
'https://developer.herohealth.net/_mock/apis/public-api/openapi/v1/appointments/{id}/book' \
-H 'Content-Type: application/json' \
-H 'x-api-key: YOUR_API_KEY_HERE' \
-H 'x-practice-group-id: YOUR_API_KEY_HERE' \
-d '{
"patient_id": "1234",
"billpayer_id": "5678",
"reason": "Annual health check",
"suppress_availability_check": false
}'