September 2026

What's New

Appointment and procedure webhooks now send v3.1-specific payloads to v3.1 subscriptions. v3.1 also adds several new response fields and filters, including UTM parameters in appointment booking_details and a new existing procedure status.


Added

  • [v3.1] GET /appointment_types now accepts an optional provider_id query parameter. When it's set, only appointment types offered by that provider are returned.
  • [v3.1] The subscriber object on insurance coverages now includes a nullable postal_code field.
  • [v3.1] Appointment booking_details now includes four UTM fields, taken from the query parameters of the online booking link the patient used:
    • utm_source
    • utm_medium
    • utm_campaign
    • utm_content
    • The v2 and v3.0 booking_details schema is unchanged.
  • [v3.1] Procedure and procedure code objects now include a nullable foreign_id field.
  • [v3.1] Treatment plan procedures now include a nullable integer priority field:
    • It's the procedure's rank within the plan, from the EHR's priority, visit or phase. Lower values come first, and it's null when the EHR assigns none.
    • The procedures array on a treatment plan is now sorted by priority. Procedures without a priority come last.
  • [v3.1] Procedures can now have the status existing:
    • v2 and v3.0 never return procedures with this status. They're left out of the procedures endpoints, out of other resources that embed procedures (appointments, patients, ledger charges and line items, treatment plans), and out of procedure webhook payloads for subscriptions pinned to those versions.
    • In v3.0, GET /procedures/{id} for a procedure with status existing returns 404 Not Found.

Changed

  • [v3.1] The version parameter on POST /webhook_endpoints/{id}/webhook_subscriptions is now optional and defaults to v3.1.0.
  • [v3.1] appointment_updated webhooks for subscriptions pinned to v3.1.0 now send the v3.1 appointment payload:
    • The payload includes booking_details.
    • v3.1 subscriptions no longer receive an appointment_updated event when none of the changed fields are part of the v3.1 appointment payload.
  • [v3.1] procedure_created and procedure_updated webhooks for subscriptions pinned to v3.1.0 now send the v3.1 procedure payload, including foreign_id.
  • [v3.0] The include query parameter on GET /providers and GET /providers/{id} no longer appears in the API reference. Requests that pass it work the same as before.
  • [v2.2, v3.0, v3.1] The foreign_id field is now described consistently across resources in the API reference. It's the identifier NexHealth uses to match a record to its counterpart in the connected EHR, not necessarily the EHR's native record ID. Its format differs by EHR and may change, so treat it as an opaque string and don't parse it. Values returned by the API are unchanged.

Fixed

  • [v2.2, v3.0, v3.1] Fixed a bug in location scoping for GET /procedures.
  • [v3.1] GET /medical_history/patient_items now returns one entry per medical history item. That's the active entry, or the newest inactive one if the item has no active entry. Before, deactivating and re-adding an item could make it appear more than once.
  • [v2.2, v3.0, v3.1] When a request includes parameters the endpoint doesn't accept, the response description note listing them is now more accurate for parameters inside arrays:
    • Each ignored parameter is listed once, with array positions shown as [] (for example, documents[].extra_param), instead of once per array element.
    • Only the unaccepted keys are listed, not whole array elements.

Removed

  • [v3.1] The include query parameter has been removed from GET /providers and GET /providers/{id}:
    • locations is now always returned.
    • availabilities is no longer returned.