Manage practice group settings, access tokens, and configuration. Use the access token endpoint to generate short-lived JWTs for Hero Elements.
API Reference
//
Get Default Customer
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/
- Mock serverhttps://developer.herohealth.net/_mock/apis/public-api/openapi/v1/invoicing/customers
- Staginghttps://api.staging.htech.app/v1/invoicing/customers
- Productionhttps://api.herohealth.net/v1/invoicing/customers
- curl
- NodeJS
- Ruby
curl -i -X POST \
https://developer.herohealth.net/_mock/apis/public-api/openapi/v1/invoicing/customers \
-H 'Content-Type: application/json' \
-H 'x-api-key: YOUR_API_KEY_HERE' \
-H 'x-practice-group-id: YOUR_API_KEY_HERE' \
-d '{
"name": "string",
"email": "user@example.com",
"phone": "string",
"sources": [
{
"id": "string",
"type": "card",
"fingerprint": "string",
"brand": "string",
"last4": "string",
"exp_month": 0,
"exp_year": 0
}
]
}'Response
application/json
{ "id": "string", "name": "string", "email": "user@example.com", "phone": "string", "sources": [ { … } ] }
- Mock serverhttps://developer.herohealth.net/_mock/apis/public-api/openapi/v1/invoicing/customers/default
- Staginghttps://api.staging.htech.app/v1/invoicing/customers/default
- Productionhttps://api.herohealth.net/v1/invoicing/customers/default
- curl
- NodeJS
- Ruby
curl -i -X GET \
'https://developer.herohealth.net/_mock/apis/public-api/openapi/v1/invoicing/customers/default?patient_id=string' \
-H 'x-api-key: YOUR_API_KEY_HERE' \
-H 'x-practice-group-id: YOUR_API_KEY_HERE'Response
application/json
{ "id": "string", "name": "string", "email": "user@example.com", "phone": "string", "sources": [ { … } ] }
Request
Creates a new invoice for a patient.
The issuer_id parameter is required and must be the Admin ID of the person issuing the invoice.
Either patient_id or appointment_id must be provided. If appointment_id is provided, the patient will be derived from the appointment.
Use the List Products endpoint to retrieve available invoice items.
Security
apiKeyAuth and practiceGroupId
- Mock serverhttps://developer.herohealth.net/_mock/apis/public-api/openapi/v1/invoicing/invoices
- Staginghttps://api.staging.htech.app/v1/invoicing/invoices
- Productionhttps://api.herohealth.net/v1/invoicing/invoices
- curl
- NodeJS
- Ruby
curl -i -X POST \
https://developer.herohealth.net/_mock/apis/public-api/openapi/v1/invoicing/invoices \
-H 'Content-Type: application/json' \
-H 'x-api-key: YOUR_API_KEY_HERE' \
-H 'x-practice-group-id: YOUR_API_KEY_HERE' \
-d '{
"issuer_id": "string",
"patient_id": "string",
"appointment_id": "string",
"practitioner_id": "string",
"service_date": "string",
"customer_stripe_id": "string",
"set_default_customer": true,
"due_date": "string",
"collection_method": "request_payment",
"payment_source": "string",
"insurer": "string",
"authentication_code": "string",
"membership_number": "string",
"diagnosis": "string",
"memo": "string",
"footer": "string",
"confidential": true,
"mode": "draft",
"coupons": [
{
"id": "string",
"name": "string"
}
],
"invoice_items_attributes": [
{
"price": "string",
"product": "string",
"description": "string",
"quantity": 0,
"unit_amount": 0,
"unit_amount_in_pounds": 0,
"create": true,
"stripe_id": "string"
}
]
}'Response
application/json
{ "id": "string", "stripe_id": "string", "status": "string", "subtotal": 0, "amount_due": 0, "customer_id": "string", "patient_record_id": "string", "appointment_id": "string", "created_at": "string", "updated_at": "string" }