# Hero Health Public API

The Hero Health Public API enables healthtech partners to build products that leverage Hero Health's IM1-assured EMIS/TPP integrated functionality.

## 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.

Version: 1.0.0

## Servers

Staging
```
https://api.staging.htech.app
```

Production
```
https://api.herohealth.net
```

## Security

### apiKeyAuth

Your Hero Health API key. Request one from Hero support with the scopes you need (messaging, booking, booking links).

Type: apiKey
In: header
Name: x-api-key

### practiceGroupId

The ID of the practice group you are making requests for. Provided by Hero during onboarding.

Type: apiKey
In: header
Name: x-practice-group-id

## Download OpenAPI description

 - [Hero Health Public API](https://developer.herohealth.net/_bundle/apis/public-api/openapi.yaml)

## Appointments

 - [GET /v1/appointments/{id}](https://developer.herohealth.net/apis/public-api/openapi/appointments/getappointment.md): Retrieves an appointment by its ID.
 - [GET /v1/appointments/{id}/status](https://developer.herohealth.net/apis/public-api/openapi/appointments/getappointmentstatus.md): Retrieves the status of an appointment by its ID, including the derived booking status and EHR partner status.
 - [POST /v1/appointments](https://developer.herohealth.net/apis/public-api/openapi/appointments/createappointment.md): 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) → Bo
 - [GET /v1/appointment_types](https://developer.herohealth.net/apis/public-api/openapi/appointments/listappointmenttypes.md): Retrieves a list of all appointment types configured for the requesting practice group.
 - [GET /v1/booking_links/{id}](https://developer.herohealth.net/apis/public-api/openapi/appointments/getbookinglink.md): Get a booking link and its fields.
 - [GET /v1/slots/count](https://developer.herohealth.net/apis/public-api/openapi/appointments/countslots.md): Count of all bookable slots for the requesting practice group.
 - [GET /v1/slots/{id}](https://developer.herohealth.net/apis/public-api/openapi/appointments/getslot.md): Retrieves a single bookable slot by its ID for the requesting practice group.
 - [GET /v1/slots](https://developer.herohealth.net/apis/public-api/openapi/appointments/listslots.md): Retrieve available bookable slots for the practice group. Filter by location, practitioner, appointment type, and date range. **Typical flow:** List Appointment Types → List Slots (filtered) → Create
 - [POST /v1/slots/availability](https://developer.herohealth.net/apis/public-api/openapi/appointments/checkslotsavailability.md): Check whether a specific slot is still available for booking. Call this immediately before creating an appointment to avoid reservation conflicts.
 - [GET /v2/appointments](https://developer.herohealth.net/apis/public-api/openapi/appointments/listappointments.md): Retrieves a list of all appointments.
 - [PATCH /v2/appointments/{id}/book](https://developer.herohealth.net/apis/public-api/openapi/appointments/bookappointmentv2.md): Submits a previously reserved appointment for booking. Returns immediately with status "pending"; the booking is confirmed asynchronously. Poll Get Appointment Status for the outcome. Only appointment
 - [PATCH /v2/appointments/{id}/cancel](https://developer.herohealth.net/apis/public-api/openapi/appointments/cancelappointmentv2.md): Cancels a confirmed appointment. Returns immediately with status "cancelling"; the cancellation is confirmed asynchronously. Poll Get Appointment Status for the outcome.
 - [PATCH /v2/appointments/{id}/reschedule](https://developer.herohealth.net/apis/public-api/openapi/appointments/rescheduleappointmentv2.md): Asynchronously reschedules an EHR-confirmed appointment to a new slot (book-new then cancel-old). Returns immediately with a rescheduling status; poll the status endpoint for the outcome.
 - [PUT /v2/appointments/{id}](https://developer.herohealth.net/apis/public-api/openapi/appointments/editappointmentv2.md): Updates an unconfirmed reservation in place - slot, practitioner, reason, patient proxy - and re-stamps the reservation hold, returning the fresh reserved_until. Only appointments in the reserved stat
 - [GET /v2/automated_messages](https://developer.herohealth.net/apis/public-api/openapi/appointments/listautomatedmessages.md): Retrieves a list of automated appointment messages.
 - [GET /v2/bookinglinks](https://developer.herohealth.net/apis/public-api/openapi/appointments/listbookinglinks.md): Retrieves a list of shortlinks filtered by 'booking' link type and version 2.
 - [PUT /v1/appointments/{id}](https://developer.herohealth.net/apis/public-api/openapi/appointments/editappointment.md): Deprecated: new integrations should use `PUT /v2/appointments/{id}` (`editAppointmentV2`) instead. This endpoint remains available for existing `hero_confirmed` integrations. Edit a non-confirmed appo
 - [PATCH /v1/appointments/{id}/book](https://developer.herohealth.net/apis/public-api/openapi/appointments/bookappointment.md): Deprecated: new integrations should use `PATCH /v2/appointments/{id}/book` (`bookAppointmentV2`) instead. This endpoint remains available for existing `hero_confirmed` integrations. Confirm a previous
 - [PATCH /v1/appointments/{id}/cancel](https://developer.herohealth.net/apis/public-api/openapi/appointments/cancelappointment.md): Deprecated: new integrations should use `PATCH /v2/appointments/{id}/cancel` (`cancelAppointmentV2`) instead. This endpoint remains available for existing `hero_confirmed` integrations. Cancel a booke
 - [PATCH /v1/appointments/{id}/reschedule](https://developer.herohealth.net/apis/public-api/openapi/appointments/rescheduleappointment.md): Deprecated: new integrations should use `PATCH /v2/appointments/{id}/reschedule` (`rescheduleAppointmentV2`) instead. This endpoint remains available for existing `hero_confirmed` integrations. Resche
## Practitioners

 - [GET /v1/practitioners](https://developer.herohealth.net/apis/public-api/openapi/practitioners/listpractitioners.md): Retrieves a list of practitioners configured for online booking on Hero Health.
 - [GET /v1/practitioners/{id}](https://developer.herohealth.net/apis/public-api/openapi/practitioners/getpractitioner.md): Retrieves a single practitioner by ID.
 - [PATCH /v1/practitioners/{id}](https://developer.herohealth.net/apis/public-api/openapi/practitioners/updatepractitioner.md): Updates a practitioner's identity, contact and notification fields. `notifications` is deep-merged: any key absent at any level is left untouched. Sending `{"notifications":{"appointment_cancelled":{"
 - [DELETE /v1/practitioners/{id}](https://developer.herohealth.net/apis/public-api/openapi/practitioners/archivepractitioner.md): Archives a practitioner so they are no longer active.
## Locations

 - [GET /v1/locations](https://developer.herohealth.net/apis/public-api/openapi/locations/listlocations.md): Retrieves a list of the locations configured for a practice group on Hero Health.
 - [GET /v1/locations/{id}](https://developer.herohealth.net/apis/public-api/openapi/locations/getlocationbyid.md): Retrieve a single location by its ID.
 - [PATCH /v1/locations/{id}](https://developer.herohealth.net/apis/public-api/openapi/locations/updatelocation.md): Update an existing location.
 - [DELETE /v1/locations/{id}](https://developer.herohealth.net/apis/public-api/openapi/locations/archivelocation.md): Archive a location. Archived locations are no longer visible to patients.
## Admin

 - [GET /v1/admins](https://developer.herohealth.net/apis/public-api/openapi/admin/listadmins.md): Retrieves a list of all admins.
 - [PATCH /v1/admins/{id}](https://developer.herohealth.net/apis/public-api/openapi/admin/updateadmin.md): Updates an admin using the provided parameters.
 - [POST /v1/admin/signature](https://developer.herohealth.net/apis/public-api/openapi/admin/upsertadminsignature.md): Insert or update a signature for Admin in context.
 - [PATCH /v1/admin/preferences](https://developer.herohealth.net/apis/public-api/openapi/admin/upsertadminpreferences.md): Insert or update preferences for the given Admin.
 - [GET /v1/admins/{id}/prescriber](https://developer.herohealth.net/apis/public-api/openapi/admin/getprescriber.md): Retrieves prescriber details for the admin.
 - [GET /v1/admin_teams](https://developer.herohealth.net/apis/public-api/openapi/admin/listadminteams.md): Retrieves a list of all admin teams.
 - [POST /v1/admin_teams](https://developer.herohealth.net/apis/public-api/openapi/admin/createadminteam.md): Creates a new admin team with the specified name and admin members.
## Practice Group

 - [POST /v1/access_token](https://developer.herohealth.net/apis/public-api/openapi/practice-group/createaccesstoken.md): 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 tok
 - [GET /v1/content-templates](https://developer.herohealth.net/apis/public-api/openapi/practice-group/listcontenttemplates.md): Retrieves a list of content templates available to the requesting practice group.
 - [GET /v1/me](https://developer.herohealth.net/apis/public-api/openapi/practice-group/getpracticegroupbyid.md): Retrieves information regarding the authenticated Practice Group.
 - [GET /v1/me/capabilities](https://developer.herohealth.net/apis/public-api/openapi/practice-group/getcapabilities.md): Retrieves capabilities of the authenticated Practice Group.
 - [GET /v1/network](https://developer.herohealth.net/apis/public-api/openapi/practice-group/listnetworkpractices.md): List practice groups from the same network as the authenticated Practice Group.
 - [GET /v1/me/sms-credits](https://developer.herohealth.net/apis/public-api/openapi/practice-group/getsmscreditcount.md): Retrieves the authenticated Practice Group's SMS credit count.
## Patients

 - [POST /v1/patients/{id}/ehr/connect](https://developer.herohealth.net/apis/public-api/openapi/patients/connectpatientehr.md): Sync a Hero patient with an EHR patient
 - [POST /v1/patients/{id}/merge/preview](https://developer.herohealth.net/apis/public-api/openapi/patients/previewpatientmerge.md): Return a preview of a merge between two patients hand provide a merge token
 - [POST /v1/patients/{id}/merge](https://developer.herohealth.net/apis/public-api/openapi/patients/mergepatient.md): Merge one patient with another
 - [GET /v1/patients/{id}](https://developer.herohealth.net/apis/public-api/openapi/patients/getpatientbyid.md): Retrieve patient information.
 - [GET /v1/patients](https://developer.herohealth.net/apis/public-api/openapi/patients/listpatients.md): Retrieve a list of patients for the practice group. Filter by EMIS ID, NHS number, or date of birth using the `field` and `search` query parameters.
 - [POST /v1/patients/register_pds](https://developer.herohealth.net/apis/public-api/openapi/patients/registerpatientpds.md): Register a patient by tracing them against the NHS Spine via PDS (Personal Demographics Service). Provide an NHS number and date of birth, or alternatively a combination of forename, surname, DOB, and
 - [POST /v1/patients/register](https://developer.herohealth.net/apis/public-api/openapi/patients/registerpatient.md): Create or update a patient based on the data sent. If a patient with matching NHS number and DOB exists for the practice group, it will be updated. Otherwise, a new patient record is created. Unlike R
 - [GET /v1/patients/{id}/billing_info](https://developer.herohealth.net/apis/public-api/openapi/patients/patientbillinginfo.md): Retrieves billing information for the patient.
 - [GET /v1/patients/{id}/payment_methods](https://developer.herohealth.net/apis/public-api/openapi/patients/listpatientpaymentmethods.md): Retrieves payment methods for default stripe customer of patient.
 - [GET /v2/patients/{id}](https://developer.herohealth.net/apis/public-api/openapi/patients/getpatientbyidv2.md): Retrieve patient information.
 - [GET /v2/patients](https://developer.herohealth.net/apis/public-api/openapi/patients/listpatientsv2.md): Retrieves a list of all patients, from either the EHR or HERO. The `verified_email` and `verified_phone` fields search against verified portal credentials (Hero DB only).
 - [GET /v3/patients](https://developer.herohealth.net/apis/public-api/openapi/patients/listpatientsv3.md): Retrieve a list of patients for the practice group using explicit patient filters. This endpoint is intended for structured patient search flows where partners can provide named filters such as `first
## Episode

 - [GET /v1/episodes/count](https://developer.herohealth.net/apis/public-api/openapi/episode/countepisodes.md): Retrieves a count of all episodes for a practice group.
 - [GET /v1/episodes](https://developer.herohealth.net/apis/public-api/openapi/episode/listepisodes.md): Retrieves a list of all episodes for a practice group.
 - [GET /v1/episodes/{id}](https://developer.herohealth.net/apis/public-api/openapi/episode/getepisode.md): Retrieve episode information for the given ID.
 - [PATCH /v1/episodes/{id}](https://developer.herohealth.net/apis/public-api/openapi/episode/updateepisode.md): Updates an episode using the provided parameters.
 - [POST /v1/notes](https://developer.herohealth.net/apis/public-api/openapi/episode/createepisodenote.md): Create a note for an episode in inbox.
 - [GET /v2/episodes/count](https://developer.herohealth.net/apis/public-api/openapi/episode/countepisodesv2.md): Counts the episodes for a practice group, with the same filters as the list, without loading any of them.
 - [GET /v2/episodes](https://developer.herohealth.net/apis/public-api/openapi/episode/listepisodesv2.md): Retrieves a list of all episodes for a practice group.
 - [GET /v2/episodes/{id}](https://developer.herohealth.net/apis/public-api/openapi/episode/getepisodev2.md): Retrieves the episode payload using the multi-task view for the given ID.
## Care Navigation

 - [GET /v1/care-nav/pathways](https://developer.herohealth.net/apis/public-api/openapi/care-navigation/listpathways.md): Retrieves a list of pathways for the requesting practice group.
 - [POST /v1/care-nav/pathways](https://developer.herohealth.net/apis/public-api/openapi/care-navigation/createpathway.md): Creates a pathway and its initial submission types for the requesting practice group.
 - [GET /v1/care-nav/pathways/{id}](https://developer.herohealth.net/apis/public-api/openapi/care-navigation/getpathway.md): Retrieves a pathway.
 - [PATCH /v1/care-nav/pathways/{id}](https://developer.herohealth.net/apis/public-api/openapi/care-navigation/updatepathway.md): Updates a pathway for the requesting practice group.
 - [DELETE /v1/care-nav/pathways/{id}](https://developer.herohealth.net/apis/public-api/openapi/care-navigation/deletepathway.md): Soft deletes a pathway for the requesting practice group.
 - [GET /v1/care-nav/settings](https://developer.herohealth.net/apis/public-api/openapi/care-navigation/getcarenavigationsettings.md): Retrieves the care navigation settings for the requesting practice group.
 - [PATCH /v1/care-nav/settings](https://developer.herohealth.net/apis/public-api/openapi/care-navigation/updatecarenavigationsettings.md): Updates the care navigation settings for the requesting practice group.
 - [GET /v1/care-nav/opening-hours](https://developer.herohealth.net/apis/public-api/openapi/care-navigation/listcarenavigationopeninghours.md): Lists care navigation opening hours for the requesting practice group.
 - [POST /v1/care-nav/opening-hours](https://developer.herohealth.net/apis/public-api/openapi/care-navigation/createcarenavigationopeninghour.md): Creates a care navigation opening hour for the requesting practice group.
 - [PATCH /v1/care-nav/opening-hours/{id}](https://developer.herohealth.net/apis/public-api/openapi/care-navigation/updatecarenavigationopeninghour.md): Updates a single care navigation opening hour for the requesting practice group.
 - [DELETE /v1/care-nav/opening-hours/{id}](https://developer.herohealth.net/apis/public-api/openapi/care-navigation/deletecarenavigationopeninghour.md): Deletes a single care navigation opening hour for the requesting practice group.
 - [GET /v1/care-nav/submissions/{id}](https://developer.herohealth.net/apis/public-api/openapi/care-navigation/getcarenavsubmission.md): Get a care navigation submission and its fields. An acting admin without the required policies still receives the submission, with the attachment link and file name removed from any attachment answer.
 - [GET /v1/care-nav/submissions](https://developer.herohealth.net/apis/public-api/openapi/care-navigation/listcarenavsubmissions.md): Retrieves a list of all care navigation submissions.
 - [POST /v1/care-nav/submission](https://developer.herohealth.net/apis/public-api/openapi/care-navigation/createsubmission.md): Create a Care Nav Submission.
 - [GET /v1/care-nav/submission-types](https://developer.herohealth.net/apis/public-api/openapi/care-navigation/listsubmissiontype.md): Retrieves a list of submission types for the requesting practice group.
 - [POST /v1/care-nav/submission-types](https://developer.herohealth.net/apis/public-api/openapi/care-navigation/createsubmissiontype.md): Creates a submission type for an existing pathway in the requesting practice group.
 - [GET /v1/care-nav/submission-types/{id}](https://developer.herohealth.net/apis/public-api/openapi/care-navigation/getsubmissiontype.md): Retrieves a submission type.
 - [PATCH /v1/care-nav/submission-types/{id}](https://developer.herohealth.net/apis/public-api/openapi/care-navigation/updatesubmissiontype.md): Updates a submission type for the requesting practice group.
 - [DELETE /v1/care-nav/submission-types/{id}](https://developer.herohealth.net/apis/public-api/openapi/care-navigation/archivesubmissiontype.md): Archives a submission type for the requesting practice group.
## WriteToRecord

 - [GET /v1/write-to-record/status](https://developer.herohealth.net/apis/public-api/openapi/writetorecord/getwritetorecordstatus.md): Get the latest Write to Record status for a resource.
## Task

 - [PATCH /v1/tasks/{id}](https://developer.herohealth.net/apis/public-api/openapi/task/updatetask.md): Updates a task using the provided parameters.
 - [GET /v2/tasks/{id}](https://developer.herohealth.net/apis/public-api/openapi/task/gettask.md): Retrieve task information for the given ID.
 - [GET /v2/tasks](https://developer.herohealth.net/apis/public-api/openapi/task/listtasks.md): Retrieves a list of all tasks for a practice group.
## Individual messages

 - [GET /v1/messages/{id}](https://developer.herohealth.net/apis/public-api/openapi/individual-messages/getmessage.md): Retrieves a message by its ID. An acting admin without the required policy still receives the message, with the link removed from every attachment.
 - [POST /v1/messages/send](https://developer.herohealth.net/apis/public-api/openapi/individual-messages/sendmessage.md): Send a message to a patient via SMS, email, NHS App, or as a Hero-only audit record. **Message types:** - `sms` — Sent via the practice's configured SMS provider (e.g. Firetext) - `email` — Sent via H
 - [GET /v1/messages/{id}/status](https://developer.herohealth.net/apis/public-api/openapi/individual-messages/getstatus.md): Retrieve message write to record and send status
 - [GET /v1/messages/assignee/collection](https://developer.herohealth.net/apis/public-api/openapi/individual-messages/assigneecollections.md): Retrieve a list of all assignees including Admin or AdminTeam for the requesting practice group and admin
 - [GET /v1/snomed](https://developer.herohealth.net/apis/public-api/openapi/individual-messages/searchsnomed.md): Searches by code when `query` is numeric (a single code or a comma-separated list of codes), otherwise searches by free-text term.
 - [GET /v1/templates](https://developer.herohealth.net/apis/public-api/openapi/individual-messages/listtemplates.md): Retrieves a list of message templates for the requesting practice group.
 - [GET /v2/automated_messages/{id}](https://developer.herohealth.net/apis/public-api/openapi/individual-messages/getautomatedmessage.md): Retrieve automated message for the given ID.
 - [GET /v2/sent_messages](https://developer.herohealth.net/apis/public-api/openapi/individual-messages/listsentmessages.md): Retrieves a list of all sent messages.
 - [POST /v1/snomed/validate](https://developer.herohealth.net/apis/public-api/openapi/individual-messages/validatesnomed.md): Deprecated. Use `GET /v1/snomed` with the code as the `query` parameter to validate a SNOMED code instead — a non-empty result confirms the code is valid.
## Batch messages

 - [POST /v1/batch_message](https://developer.herohealth.net/apis/public-api/openapi/batch-messages/createbatchmessage.md): Create a Batch Message
 - [GET /v1/batch_message](https://developer.herohealth.net/apis/public-api/openapi/batch-messages/listbatchmessages.md): List Batch Messages
 - [PATCH /v1/batch_message/{id}/send](https://developer.herohealth.net/apis/public-api/openapi/batch-messages/sendbatchmessage.md): Send a Batch Message
 - [GET /v1/batch_message/{id}](https://developer.herohealth.net/apis/public-api/openapi/batch-messages/getbatchmessage.md): Get a Batch Message
 - [GET /v1/batch_message/{id}/recipients](https://developer.herohealth.net/apis/public-api/openapi/batch-messages/listrecipients.md): List Batch Message Recipients
 - [GET /v1/batch_message/{id}/messages](https://developer.herohealth.net/apis/public-api/openapi/batch-messages/listbatchmessagesends.md): List Batch Message Sends
## Links

 - [POST /v1/attachment_links](https://developer.herohealth.net/apis/public-api/openapi/links/createattachmentlink.md): Creates a attachment link using the provided parameters.
 - [POST /v1/booking_links](https://developer.herohealth.net/apis/public-api/openapi/links/createbookinglink.md): Create a booking link that can be shared with a patient. The link allows the patient to self-book into an available appointment slot. Booking links are tied to a specific patient and appointment type
 - [PATCH /v1/booking_links/{id}](https://developer.herohealth.net/apis/public-api/openapi/links/updatebookinglink.md): Updates a booking link using the provided parameters.
 - [POST /v1/form_links](https://developer.herohealth.net/apis/public-api/openapi/links/createformlink.md): Creates a form link using the provided parameters.
 - [GET /v1/links/status](https://developer.herohealth.net/apis/public-api/openapi/links/getlinkstatus.md): Get the status of a given link.
 - [GET /v1/short_links](https://developer.herohealth.net/apis/public-api/openapi/links/listshortlinks.md): Retrieves a list of shortlinks filtered by given parameters.
 - [POST /v1/video_links](https://developer.herohealth.net/apis/public-api/openapi/links/createvideolink.md): Creates a video link using the provided parameters.
## Webhooks

 - [POST /v1/webhooks](https://developer.herohealth.net/apis/public-api/openapi/webhooks/createwebhook.md): Create a webhook subscription for the authenticated practice group. Hero will send an HTTP POST request to the specified URL whenever the subscribed event occurs. **Available events:** `appointment.co
 - [GET /v1/webhooks](https://developer.herohealth.net/apis/public-api/openapi/webhooks/listwebhooks.md): Retrieve all webhook subscriptions for the authenticated practice group. Use this to audit active subscriptions or check event types you are subscribed to.
 - [DELETE /v1/webhooks/{id}](https://developer.herohealth.net/apis/public-api/openapi/webhooks/deletewebhook.md): Delete a webhook subscription. Hero will immediately stop sending events to the webhook URL. This action cannot be undone — you will need to create a new webhook to resubscribe.
 - [GET /v1/webhooks/{id}/executions](https://developer.herohealth.net/apis/public-api/openapi/webhooks/listwebhookexecutions.md): Retrieves a list of executions for a specific webhook.
## Invoicing

 - [GET /v1/invoicing/coupons](https://developer.herohealth.net/apis/public-api/openapi/invoicing/listcoupons.md): Retrieves a list of Stripe coupons for the requesting practice group.
 - [POST /v1/invoicing/invoices](https://developer.herohealth.net/apis/public-api/openapi/invoicing/createinvoice.md): 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 `app
 - [PATCH /v1/invoicing/invoices/{id}](https://developer.herohealth.net/apis/public-api/openapi/invoicing/updateinvoice.md): Updates an existing invoice. The `issuer_id` parameter is required and must be the Admin ID of the person updating the invoice. For draft invoices, all fields can be updated. For finalized invoices, o
 - [POST /v1/invoicing/invoices/link](https://developer.herohealth.net/apis/public-api/openapi/invoicing/linkinvoice.md): Links an external Stripe invoice to an appointment. This endpoint finds or creates a Hero invoice record from a Stripe invoice ID, then links it to the specified appointment.
 - [GET /v1/invoicing/products](https://developer.herohealth.net/apis/public-api/openapi/invoicing/listproducts.md): Retrieves a list of Stripe products for the requesting practice group.
## Memberships

 - [POST /v1/invoicing/membership-policies](https://developer.herohealth.net/apis/public-api/openapi/memberships/createmembershippolicy.md): Creates a new membership policy for the requesting practice group.
 - [GET /v1/invoicing/membership-schemes](https://developer.herohealth.net/apis/public-api/openapi/memberships/listmembershipschemes.md): Retrieves a list of membership schemes for the requesting practice group.
 - [GET /v1/subscriptions](https://developer.herohealth.net/apis/public-api/openapi/memberships/listsubscriptions.md): Retrieves a list of subscriptions for a practice group.
 - [GET /v1/subscribers](https://developer.herohealth.net/apis/public-api/openapi/memberships/listsubscribers.md): Retrieves a list of subscribers for a practice group. Filter by `subscription_id` to list every subscriber on one subscription. Setting `patient_id` narrows the result to that patient, so omit it to s
## Prescriptions

 - [GET /v1/prescriber/{id}/pharmacies](https://developer.herohealth.net/apis/public-api/openapi/prescriptions/listprescriberpharmacies.md): Retrieve a list of pharmacies for the prescriber.
 - [POST /v1/pharmacies](https://developer.herohealth.net/apis/public-api/openapi/prescriptions/createpharmacy.md): Create a new Pharmacy for the prescriber.
 - [POST /v1/prescriptions](https://developer.herohealth.net/apis/public-api/openapi/prescriptions/createprescription.md): Create a new prescription for a patient.
 - [GET /v1/prescriptions/{id}](https://developer.herohealth.net/apis/public-api/openapi/prescriptions/getprescriptionbyid.md): Retrieve details of a specific prescription by its ID.
 - [GET /v2/prescriptions](https://developer.herohealth.net/apis/public-api/openapi/prescriptions/listprescriptions.md): Retrieves a list of all prescriptions for a patient.
 - [POST /v2/prescriptions](https://developer.herohealth.net/apis/public-api/openapi/prescriptions/createprescriptionwithpatient.md): Creates a new prescription and associates it with a patient.
 - [GET /v1/prescriber/{id}](https://developer.herohealth.net/apis/public-api/openapi/prescriptions/getprescriber.md): Retrieves a prescriber by its ID.
## Customers

 - [GET /v1/invoicing/customers](https://developer.herohealth.net/apis/public-api/openapi/customers/listcustomers.md): Retrieves a list of Stripe customers for the requesting practice group.
 - [POST /v1/invoicing/customers](https://developer.herohealth.net/apis/public-api/openapi/customers/createcustomer.md): Creates a new Stripe customer for the requesting practice group.
 - [GET /v1/invoicing/customers/default](https://developer.herohealth.net/apis/public-api/openapi/customers/getdefaultcustomer.md): Retrieves the default Stripe customer for a patient.
## Form

 - [GET /v1/forms](https://developer.herohealth.net/apis/public-api/openapi/form/listforms.md): Retrieves a list of all forms configured for the requesting practice group.
 - [POST /v1/forms](https://developer.herohealth.net/apis/public-api/openapi/form/createform.md): Create a new form template with fields.
 - [PUT /v1/forms/{id}](https://developer.herohealth.net/apis/public-api/openapi/form/updateform.md): Update an existing form template, replacing all fields.
 - [GET /v1/forms/{id}](https://developer.herohealth.net/apis/public-api/openapi/form/getform.md): Get a form and its fields.
 - [POST /v1/forms/{id}/response](https://developer.herohealth.net/apis/public-api/openapi/form/createresponse.md): Create a response for a given Form ID.
 - [POST /v1/forms/response/{id}](https://developer.herohealth.net/apis/public-api/openapi/form/updateformresponse.md): Update form response for a given form response ID.
## Form Response

 - [GET /v1/form_response/{id}](https://developer.herohealth.net/apis/public-api/openapi/form-response/getformresponse.md): Get a form response and its fields.
 - [GET /v1/form_submission_response/{id}](https://developer.herohealth.net/apis/public-api/openapi/form-response/getformsubmissionresponsedata.md): Get a form submission response and its fields. An acting admin without the required policies still receives the response, with the attachment link and file name removed from any attachment answer.
 - [GET /v2/form_responses](https://developer.herohealth.net/apis/public-api/openapi/form-response/listformresponses.md): Retrieves a list of all form responses.
