Skip to content

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.

Key capabilities

  • 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

Authentication

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.

Rate limits

Rate limits are defined in your Partner agreement. If you exceed your limit you will receive a 429 Too Many Requests response.

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/

Practice Group

Manage practice group settings, access tokens, and configuration. Use the access token endpoint to generate short-lived JWTs for Hero Elements.

Operations

Patients

Register, search, and manage patient records. Supports PDS (Personal Demographics Service) lookups to trace patients against the NHS Spine.

Operations

Messages

Send SMS, email, NHS App, and Hero-only messages to patients. Supports write-to-record to persist messages in the patient's EHR.

Operations

Request

Retrieves a list of message templates for the requesting practice group.

Security
apiKeyAuth and practiceGroupId
Query
has_follow_upboolean
curl -i -X GET \
  'https://developer.herohealth.net/_mock/apis/public-api/openapi/v1/templates?has_follow_up=true' \
  -H 'x-api-key: YOUR_API_KEY_HERE' \
  -H 'x-practice-group-id: YOUR_API_KEY_HERE'

Responses

Ok

Bodyapplication/json
dataArray of objectsrequired
data[].​idstringrequired
data[].​namestringrequired
data[].​contentstringrequired
data[].​linkstring
Default "no_link"
Enum"no_link""booking""form"
data[].​typestring
Default "hero"
Enum"hero""external""user"
data[].​sms_snomed_codestring or null
data[].​sms_follow_up_1_snomed_codestring or null
data[].​sms_follow_up_2_snomed_codestring or null
data[].​email_snomed_codestring or null
data[].​email_follow_up_1_snomed_codestring or null
data[].​email_follow_up_2_snomed_codestring or null
data[].​send_follow_up_oneboolean
Default false
data[].​send_follow_up_twoboolean
Default false
data[].​reminder_timenumber or null
countnumberrequired
Response
application/json
{ "data": [ {} ], "count": 0 }

Request

Retrieve automated message for the given ID.

Security
apiKeyAuth and practiceGroupId
Path
idstringrequired
curl -i -X GET \
  'https://developer.herohealth.net/_mock/apis/public-api/openapi/v2/automated_messages/{id}' \
  -H 'x-api-key: YOUR_API_KEY_HERE' \
  -H 'x-practice-group-id: YOUR_API_KEY_HERE'

Responses

Ok

Bodyapplication/json
idstringrequired
recipientobject or null
subjectstring or null
channelstring or null
contentstring or null
contact_detailstring or null
sent_atstring or null(date-time)
statusstring or null
message_typestring or null
appointmentobject or null
notification_typestring or null
Response
application/json
{ "id": "string", "recipient": { "id": "string", "title": "Baron", "first_name": "string", "last_name": "string" }, "subject": "string", "channel": "string", "content": "string", "contact_detail": "string", "sent_at": "2019-08-24T14:15:22Z", "status": "string", "message_type": "string", "appointment": { "id": "string", "type": "string", "start_time": "2019-08-24T14:15:22Z" }, "notification_type": "string" }

Request

Retrieves a list of all sent messages.

Security
apiKeyAuth and practiceGroupId
Query
page_indexstring
page_sizestring
order_bystring
Enum"patient_first_name""patient_last_name""patient_full_name""created_at""sent_at"
order_descendingboolean
patient_first_namestring
patient_last_namestring
patient_full_namestring
patient_idstring
recipient_contact_detailstring
write_to_record_statusstring
Enum"success""failed""not_written"
message_typestring or Array of strings
One of:
string
Enum"nhs_app""email""hero""sms"
short_link_idstring
short_link_typestring
campaign_idstring
statusstring or Array of strings
One of:
string
Enum"delivered""declined""sent""pending""retry""fatal"
scheduledboolean
sent_bystring
sent_at[]Array of strings
scheduled_at[]Array of strings
curl -i -X GET \
  'https://developer.herohealth.net/_mock/apis/public-api/openapi/v2/sent_messages?page_index=string&page_size=string&order_by=patient_first_name&order_descending=true&patient_first_name=string&patient_last_name=string&patient_full_name=string&patient_id=string&recipient_contact_detail=string&write_to_record_status=success&message_type=nhs_app&short_link_id=string&short_link_type=string&campaign_id=string&status=delivered&scheduled=true&sent_by=string&sent_at%5B%5D=string&scheduled_at%5B%5D=string' \
  -H 'x-api-key: YOUR_API_KEY_HERE' \
  -H 'x-practice-group-id: YOUR_API_KEY_HERE'

Responses

Ok

Bodyapplication/json
dataArray of objectsrequired
data[].​idstring^\d+$required
data[].​patientobjectrequired
data[].​patient.​idstring^\d+$required
data[].​patient.​titlestring or nullrequired
Enum"Baron""Baroness""Brigadier""Count""Colonel""Countess""Captain""Dame""The Dowager Viscountess""Dr"
data[].​patient.​first_namestringrequired
data[].​patient.​last_namestringrequired
data[].​write_to_recordobjectrequired
data[].​write_to_record.​write_to_record_atstring or null(date-time)required
data[].​write_to_record.​statusstring or nullrequired
data[].​write_to_record.​failure_reasonstring or nullrequired
data[].​write_to_record.​snomed_codestring or nullrequired
data[].​short_linkobject or nullrequired
data[].​short_link.​idstring or null^\d+$
data[].​short_link.​typestring or null
data[].​short_link.​namestring or null
data[].​short_link.​statusstring or null
data[].​campaignobject or nullrequired
data[].​campaign.​idstring or null^\d+$
data[].​campaign.​namestring or null
data[].​created_atstring or null(date-time)required
data[].​sent_atstring or null(date-time)required
data[].​scheduled_atstring or null(date-time)required
data[].​statusstringrequired
Enum"delivered""declined""sent""pending""retry""fatal"
data[].​sent_bystringrequired
data[].​recipient_contact_detailstringrequired
data[].​message_typestringrequired
data[].​messagestring or nullrequired
data[].​attachmentobject or nullrequired
data[].​attachment.​filenamestring or nullrequired
data[].​attachment.​short_link_idstring or null^\d+$required
countnumberrequired
Response
application/json
{ "data": [ {} ], "count": 0 }

Booking

Create appointment reservations, confirm bookings, cancel, and reschedule. Query available slots filtered by location, practitioner, and appointment type.

Operations

Episode

Manage clinical episodes — containers for related patient interactions and messages.

Operations

Care Navigation

Manage care navigation pathways and patient submissions for triage workflows.

Operations

Prescription

Create and manage prescriptions.

Operations

Prescriptions

List and manage prescriptions.

Operations

WriteToRecord

Check the status of write-to-record operations for messages sent to the EHR.

Operations

Admin

Manage admin users, signatures, and preferences within a practice group.

Operations

ApiKey

List and manage API keys for your practice group.

Operations

Task

Manage tasks assigned to admin users.

Operations

Partner

Retrieve partner information and integrations.

Operations

Partners

Retrieve partner information and integrations.

Operations

Form

List and retrieve forms (questionnaires) configured for a practice group.

Operations

Form Response

Create, retrieve, and update form responses submitted by patients.

Operations

Subscriptions

Manage notification subscriptions and subscribers.

Operations

Webhooks

Subscribe to Hero events (e.g. appointment confirmations, write-to-record outcomes) and receive real-time notifications via HTTP callbacks.

Operations

Invoicing

Manage invoicing customers, products, coupons, and membership schemes.

Operations

Utilities

Utility endpoints for address lookup and SNOMED code validation.

Operations

Booking - HCA

Specialist booking endpoints for HCA (Healthcare Assistant) diary consultants and appointments.

Operations