Manage practice group settings, access tokens, and configuration. Use the access token endpoint to generate short-lived JWTs for Hero Elements.
API Reference
//
Create an Access Token
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.
Download OpenAPI description
Languages
Servers
Mock server
https://developer.herohealth.net/_mock/apis/public-api/openapi/
Staging
https://api.staging.htech.app/
Production
https://api.herohealth.net/
Request
Generate a short-lived Access Token (JWT) to authenticate Hero Health Elements (SDKs).
Important: This endpoint must only be called from your server — never from client-side code. The returned token expires after 30 minutes.
Use the returned access_token as the jwt-token attribute when rendering a Hero Element (React component or Web Component).
Security
apiKeyAuth and practiceGroupId
- Mock serverhttps://developer.herohealth.net/_mock/apis/public-api/openapi/v1/access_token
- Staginghttps://api.staging.htech.app/v1/access_token
- Productionhttps://api.herohealth.net/v1/access_token
- curl
- NodeJS
- Ruby
curl -i -X POST \
https://developer.herohealth.net/_mock/apis/public-api/openapi/v1/access_token \
-H 'x-api-key: YOUR_API_KEY_HERE' \
-H 'x-practice-group-id: YOUR_API_KEY_HERE'Response
application/json
{ "access_token": "string" }
- Mock serverhttps://developer.herohealth.net/_mock/apis/public-api/openapi/v1/appointment_types
- Staginghttps://api.staging.htech.app/v1/appointment_types
- Productionhttps://api.herohealth.net/v1/appointment_types
- curl
- NodeJS
- Ruby
curl -i -X GET \
'https://developer.herohealth.net/_mock/apis/public-api/openapi/v1/appointment_types?location_ids=string&has_availability=true' \
-H 'x-api-key: YOUR_API_KEY_HERE' \
-H 'x-practice-group-id: YOUR_API_KEY_HERE'- Mock serverhttps://developer.herohealth.net/_mock/apis/public-api/openapi/v1/locations
- Staginghttps://api.staging.htech.app/v1/locations
- Productionhttps://api.herohealth.net/v1/locations
- curl
- NodeJS
- Ruby
curl -i -X GET \
'https://developer.herohealth.net/_mock/apis/public-api/openapi/v1/locations?appointment_type_ids=string&has_availability=true' \
-H 'x-api-key: YOUR_API_KEY_HERE' \
-H 'x-practice-group-id: YOUR_API_KEY_HERE'Response
application/json
{ "data": [ { … } ], "count": 0 }