Skip to content

Update Provider

Updates a provider and returns the updated record.

Endpoint

PATCH /v2/providers/{provider_id}

Path Parameters

Parameter Type Required Description
provider_id string Yes The treating provider.

Query Parameters

Parameter Type Required Description
onboarding boolean No Treat the path id as an onboarding_provider_id rather than an operational id. Required to address a provider that has not been published yet.

Request Body

Parameter Type Required Description
first_name string No
last_name string No
email string No Becomes the provider's EMR username at publish.
npi string No Checksum-valid NPI-1; verified against NPPES.
clinic_ids array of string No Clinics this record is associated with.
mobile string No
license string No
home_health object No Home-visit settings for this provider. null when the provider has no home-visit configuration. See Home Health.
external_reference_id string or null No Your own identifier for this provider. Stored only — it has no effect on Spry behaviour.
external_reference_metadata object or null No Your own reference data for this provider, as a JSON object. Stored only — Spry never reads it, and its keys come back exactly as sent. It must not contain patient data. Send ids as strings: integers above 2^53 lose precision. At most 16 KB serialized and 5 levels deep; keys may not contain . or start with $. On update, {"key": null} inside it removes that key and null clears the whole object.
patient_scoped boolean No When true, restricts the provider to only their own assigned patients (HIPAA minimum-necessary). When false (default), the provider can access all patients in the organisation.
name_prefix string No Title, e.g. Dr..
credential string No Post-nominal credential, e.g. DPT.
dob string (date) No YYYY-MM-DD.
gender string No Administrative gender, matching FHIR Patient.gender — used for demographics and claims, not a clinical assertion. O means other. One of M, F, O.
ptan string No Provider Transaction Access Number.
sole_proprietor boolean No NPPES sole-proprietor flag.
taxonomies array of object No NPPES taxonomy entries. Replaces the whole list on write. See Taxonomies.
primary_taxonomy_code string No NUCC provider taxonomy code. Must be one of taxonomies[].code.
online_booking array of object No At the top level, per-clinic online booking — one entry per onboarding clinic id; a clinic absent from the list is not bookable. Replaces the whole list on write. Inside home_health, engagement-level booking, distinct from the per-clinic list; defaults to true. See Online Booking.
schedule array of object No Weekly recurring hours per clinic, one entry per onboarding clinic id. Replaces the whole list on write. See Schedule.
billing_profile_ids array of string No Billing profiles attached to this provider. On write it changes membership only and keeps the affiliation dates — prefer billing_profiles.
billing_profiles array of object No The profiles in billing_profile_ids, in the same order, each with this provider's affiliation window. On write it replaces the whole list: the provider is attached to exactly the profiles listed, and a date left out or null is cleared. Sent together with billing_profile_ids, both must name the same profiles (422 otherwise). See Billing Profiles.
direct_access_permitted boolean No false marks a Direct Access-Restricted Therapist, who may only treat patients with a medical referral. null or omitted means permitted.
speciality string or null No The record's primary speciality.
about string or null No The provider's bio, up to 5000 characters. Clearing it doesn't remove a published provider's bio from the Spry EMR, and reads go on returning that bio.
sub_specialities array of string or null No The provider's sub-specialities, as codes from your organisation's own list, which Spry configures per organisation. A code that isn't on that list is refused, and so is the same code twice. Replaces the whole list on write; null clears it.
middle_name string No
qualifications array of string No
photo_url string No A fetchable URL. It may be a time-limited signed URL, so fetch it rather than storing it.
online_booking_enabled boolean No Whether this record is bookable through online booking.
signature_key string No Key of a signature image stored by Upload Provider Signature for this organisation. Set it on the provider with Update Provider; it reads back through signature_url.
access_revoked boolean No Whether the provider's access has been revoked, by Delete Provider or access_revoked: true on update. Send false to restore access. Takes effect in the EMR at the organisation's next publish.

Home Health

Parameter Type Required Description
enabled boolean Yes In home_health, whether home visits are enabled for this provider. In an online_booking entry, whether that clinic is bookable online.
state_code string No Two-letter state the provider is licensed to visit in.
address object No See Address.
location object No Geographic point the visit window is anchored to. See Location.
transport_mode string No How the provider travels between visits. One of CAR, BIKE, WALK, TRANSIT.
max_drive_seconds integer No Longest drive the provider will accept between consecutive visits, in seconds: 1500 (25 minutes) to 14400 (4 hours). Defaults to 1800.
max_visits_per_week integer No Cap on home visits per week, 1 to 100. Defaults to 2.
max_allowed_visits_per_slot integer No Home visits per schedule slot. Always 1; ignored on write.
target_hours_weekly integer No Target hours of home visits per week, derived from max_visits_per_week: ×1.4 under 10 visits, ×1.5 for 10–19, ×1.6 from 20, rounded up to a whole hour. Ignored on write.
online_booking boolean No At the top level, per-clinic online booking — one entry per onboarding clinic id; a clinic absent from the list is not bookable. Replaces the whole list on write. Inside home_health, engagement-level booking, distinct from the per-clinic list; defaults to true.
pet_comfort boolean No Whether the provider will visit homes with pets. Always true; ignored on write.
stair_comfort boolean No Whether the provider will visit homes requiring stairs. Always true; ignored on write.
accepting_new_patients boolean No Whether this provider is accepting new home-health patients. Defaults to true.
schedules array of object No Independent home-visit availability periods, each with its own weekly entries[]. Periods must not overlap, and at most one may be open-ended. See Schedules.
scheduling_overrides object No Per-date exceptions to the weekly schedule, keyed YYYY-MM-DD. A key's presence is what marks a day off from no override — empty ranges (absent entirely on read) means no visits that day, and a populated ranges[], each a {start_time, end_time} window with an optional address/location to anchor it away from the provider's home base, replaces the weekly pattern for that date. Every date must fall inside one of schedules[]'s periods, and past dates are rejected. On write, an explicit null clears a key and restores the weekly pattern; an omitted key is left alone.

Address

Parameter Type Required Description
line1 string or null No
line2 string or null No
city string or null No
state string or null No
postal_code string or null No
country string or null No

Location

Parameter Type Required Description
lat number Yes Latitude, decimal degrees.
lng number Yes Longitude, decimal degrees.

Schedules

Parameter Type Required Description
effective_start_date string (date) Yes When this period takes effect. YYYY-MM-DD.
effective_end_date string (date) or null No When this period stops applying. null for open-ended — periods must not overlap, and at most one may be open-ended. YYYY-MM-DD.
entries array of object Yes Weekly home-visit windows for this period. Reuses the same days_of_week/start_time/end_time shape as clinic and provider-clinic hours, extended with an optional address and location to anchor a window somewhere other than the provider's home base. See Entries.

Entries

Parameter Type Required Description
days_of_week array of string Yes Any of MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY.
start_time string Yes Clock time, 24-hour HH:MM.
end_time string Yes Clock time, 24-hour HH:MM.
address object No See Address.
location object No Geographic point the visit window is anchored to. See Location.

Taxonomies

Parameter Type Required Description
code string Yes
desc string or null No
group_code string or null No
group_desc string or null No
license string or null No
primary boolean or null No Whether this is the provider's primary taxonomy.
specialization string or null No
state string or null No

Online Booking

Parameter Type Required Description
clinic_id string Yes Onboarding clinic id, from List Onboarding Clinics. Must be one of the provider's clinic_ids.
enabled boolean Yes In home_health, whether home visits are enabled for this provider. In an online_booking entry, whether that clinic is bookable online.

Schedule

Parameter Type Required Description
clinic_id string Yes Onboarding clinic id, from List Onboarding Clinics. Must be one of the provider's clinic_ids.
timings array of object Yes Weekly recurring hours at this clinic. See Timings.

Timings

Parameter Type Required Description
days_of_week array of string Yes Any of MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY.
start_time string Yes Clock time, 24-hour HH:MM.
end_time string Yes Clock time, 24-hour HH:MM.

Billing Profiles

Parameter Type Required Description
billing_profile_id string Yes The billing profile this record belongs to.
display_name string or null No The billing profile's name. Read-only — ignored on write.
effective_from string (date) or null No First day the provider renders under this billing profile. null when not set. YYYY-MM-DD.
effective_to string (date) or null No Last day the provider renders under this billing profile, on or after effective_from. null when open-ended. YYYY-MM-DD.

Request

curl --location '{base_url}/v2/providers/2094' \
  --request PATCH \
  --header 'Authorization: Bearer JWT_TOKEN' \
  --header 'Content-Type: application/merge-patch+json' \
  --data '{
  "first_name": "Morgan",
  "last_name": "Delgado",
  "email": "m.delgado@example.com",
  "npi": "1740398215",
  "clinic_ids": [
    "5831"
  ],
  "mobile": "+1-555-0155",
  "license": "PT-30914",
  "home_health": {
    "enabled": true,
    "state_code": "OR",
    "address": {
      "line1": "482 Willow Creek Rd",
      "line2": null,
      "city": "Fairview",
      "state": "OR",
      "postal_code": "97024",
      "country": "US"
    },
    "location": {
      "lat": 45.5231,
      "lng": -122.6765
    },
    "transport_mode": "CAR",
    "max_drive_seconds": 1800,
    "max_visits_per_week": 12,
    "max_allowed_visits_per_slot": 1,
    "target_hours_weekly": 18,
    "online_booking": null,
    "pet_comfort": true,
    "stair_comfort": true,
    "accepting_new_patients": true,
    "schedules": [
      {
        "effective_start_date": "2026-09-01",
        "effective_end_date": null,
        "entries": [
          {
            "days_of_week": [
              "MONDAY",
              "TUESDAY"
            ],
            "start_time": "08:00",
            "end_time": "17:00",
            "address": {
              "line1": "482 Willow Creek Rd",
              "line2": null,
              "city": "Fairview",
              "state": "OR",
              "postal_code": "97024",
              "country": "US"
            },
            "location": {
              "lat": 45.5231,
              "lng": -122.6765
            }
          }
        ]
      }
    ],
    "scheduling_overrides": {
      "2026-09-17": {
        "ranges": []
      },
      "2026-09-20": {
        "ranges": [
          {
            "start_time": "10:00",
            "end_time": "12:00"
          }
        ]
      }
    }
  },
  "external_reference_id": "provider-4471",
  "external_reference_metadata": {
    "source_system": "example-hr",
    "employee_id": "10442"
  },
  "patient_scoped": false,
  "name_prefix": "Dr.",
  "credential": "DPT",
  "dob": "1991-07-23",
  "gender": "M",
  "ptan": null,
  "sole_proprietor": false,
  "taxonomies": [
    {
      "code": "97110",
      "desc": null,
      "group_code": null,
      "group_desc": null,
      "license": "PT-30914",
      "primary": true,
      "specialization": "PHYSICAL_THERAPY",
      "state": "OR"
    }
  ],
  "primary_taxonomy_code": "225100000X",
  "online_booking": [
    {
      "clinic_id": "5831",
      "enabled": true
    }
  ],
  "schedule": [
    {
      "clinic_id": "5831",
      "timings": [
        {
          "days_of_week": [
            "MONDAY",
            "TUESDAY"
          ],
          "start_time": "08:00",
          "end_time": "17:00"
        }
      ]
    }
  ],
  "billing_profile_ids": [],
  "billing_profiles": [
    {
      "billing_profile_id": "b7e4c1a2-6f3d-4e9b-9a51-2c8d0f7e3a14",
      "display_name": "Example Therapy \u2014 Billing Group A",
      "effective_from": "2026-01-01",
      "effective_to": null
    }
  ],
  "direct_access_permitted": null,
  "speciality": "ACUPUNCTURIST",
  "about": "Orthopaedic physical therapist focused on post-surgical knee and shoulder rehabilitation.",
  "sub_specialities": [
    "PELVIC_FLOOR"
  ],
  "middle_name": null,
  "qualifications": [
    "DPT"
  ],
  "photo_url": null,
  "online_booking_enabled": true,
  "signature_key": "doctor-signature/production/7412/onboarding/6f1c2a9e-4b7d-4c1a-9e3f-2d8b5a7c0e14.png",
  "access_revoked": false
}'

Response

Success Response

Code: 200 OK

{
  "id": "2094",
  "onboarding_provider_id": "d27a6b10-9f34-4e82-b5c1-7a03e8946fd2",
  "user_id": "2094",
  "first_name": "Morgan",
  "middle_name": null,
  "last_name": "Delgado",
  "email": "m.delgado@example.com",
  "mobile": "+1-555-0155",
  "npi": "1740398215",
  "license": "PT-30914",
  "speciality": "PHYSICAL_THERAPY",
  "sub_specialities": [
    "PELVIC_FLOOR"
  ],
  "qualifications": [
    "DPT"
  ],
  "photo_url": null,
  "about": "Orthopaedic physical therapist focused on post-surgical knee and shoulder rehabilitation.",
  "signature_url": null,
  "status": "ACTIVE",
  "online_booking_enabled": true,
  "clinics": [
    {
      "clinic_id": "5831",
      "onboarding_clinic_id": "b41f7c92-5e08-4a13-8d6f-2c9147ab3e5d",
      "status": "ACTIVE",
      "online_booking_enabled": true,
      "hours": [
        {
          "days_of_week": [
            "MONDAY",
            "TUESDAY"
          ],
          "start_time": "08:00",
          "end_time": "17:00"
        }
      ]
    }
  ],
  "home_health": {
    "enabled": true,
    "state_code": "OR",
    "address": {
      "line1": "482 Willow Creek Rd",
      "line2": null,
      "city": "Fairview",
      "state": "OR",
      "postal_code": "97024",
      "country": "US"
    },
    "location": {
      "lat": 45.5231,
      "lng": -122.6765
    },
    "transport_mode": "CAR",
    "max_drive_seconds": 1800,
    "max_visits_per_week": 12,
    "max_allowed_visits_per_slot": 1,
    "target_hours_weekly": 18,
    "online_booking": null,
    "pet_comfort": true,
    "stair_comfort": true,
    "accepting_new_patients": true,
    "schedules": [
      {
        "effective_start_date": "2026-09-01",
        "effective_end_date": null,
        "entries": [
          {
            "days_of_week": [
              "MONDAY",
              "TUESDAY"
            ],
            "start_time": "08:00",
            "end_time": "17:00",
            "address": {
              "line1": "482 Willow Creek Rd",
              "line2": null,
              "city": "Fairview",
              "state": "OR",
              "postal_code": "97024",
              "country": "US"
            },
            "location": {
              "lat": 45.5231,
              "lng": -122.6765
            }
          }
        ]
      }
    ],
    "scheduling_overrides": {
      "2026-09-17": {
        "ranges": []
      },
      "2026-09-20": {
        "ranges": [
          {
            "start_time": "10:00",
            "end_time": "12:00"
          }
        ]
      }
    }
  },
  "external_reference_id": "provider-4471",
  "external_reference_metadata": {
    "source_system": "example-hr",
    "employee_id": "10442"
  },
  "patient_scoped": false,
  "name_prefix": "Dr.",
  "credential": "DPT",
  "dob": "1991-07-23",
  "gender": "M",
  "ptan": null,
  "sole_proprietor": false,
  "taxonomies": [
    {
      "code": "97110",
      "desc": null,
      "group_code": null,
      "group_desc": null,
      "license": "PT-30914",
      "primary": true,
      "specialization": "PHYSICAL_THERAPY",
      "state": "OR"
    }
  ],
  "primary_taxonomy_code": "225100000X",
  "online_booking": [
    {
      "clinic_id": "5831",
      "enabled": true
    }
  ],
  "schedule": [
    {
      "clinic_id": "5831",
      "timings": [
        {
          "days_of_week": [
            "MONDAY",
            "TUESDAY"
          ],
          "start_time": "08:00",
          "end_time": "17:00"
        }
      ]
    }
  ],
  "billing_profile_ids": [],
  "billing_profiles": [
    {
      "billing_profile_id": "b7e4c1a2-6f3d-4e9b-9a51-2c8d0f7e3a14",
      "display_name": "Example Therapy \u2014 Billing Group A",
      "effective_from": "2026-01-01",
      "effective_to": null
    }
  ],
  "direct_access_permitted": null,
  "referral_code": "RC-9QX2T",
  "access_revoked": false,
  "created_at": "2026-08-27T14:30:00Z",
  "updated_at": "2026-08-27T14:30:00Z"
}

Response Fields

Field Type Description
id string or null The provider id. null while status is ONBOARDING..
onboarding_provider_id string or null The provider's onboarding-record UUID.
user_id string or null The provider's user id. Same value as the provider id; both are returned rather than leaving that implicit.
first_name string or null
middle_name string or null
last_name string or null
email string or null
mobile string or null
npi string or null
license string or null
speciality string or null The record's primary speciality.
sub_specialities array of string The provider's sub-specialities, as codes from your organisation's own list, which Spry configures per organisation. A code that isn't on that list is refused, and so is the same code twice. Replaces the whole list on write; null clears it.
qualifications array of string
photo_url string or null A fetchable URL. It may be a time-limited signed URL, so fetch it rather than storing it.
about string or null The provider's bio, up to 5000 characters. Clearing it doesn't remove a published provider's bio from the Spry EMR, and reads go on returning that bio.
signature_url string or null A fetchable URL. Treat it as time-limited and fetch it rather than storing it. In environments where signing is unavailable the raw stored value is returned, which isn't fetchable.
status string or null ONBOARDING until the record is published, then ACTIVE; INACTIVE once deleted.
online_booking_enabled boolean or null Whether this record is bookable through online booking.
clinics array of object See Clinics.
home_health object or null Home-visit settings for this provider. null when the provider has no home-visit configuration. See Home Health.
external_reference_id string or null Your own identifier for this provider. Stored only — it has no effect on Spry behaviour.
external_reference_metadata object or null Your own reference data for this provider, as a JSON object. Stored only — Spry never reads it, and its keys come back exactly as sent. It must not contain patient data. Send ids as strings: integers above 2^53 lose precision. At most 16 KB serialized and 5 levels deep; keys may not contain . or start with $. On update, {"key": null} inside it removes that key and null clears the whole object.
patient_scoped boolean When true, restricts the provider to only their own assigned patients (HIPAA minimum-necessary). When false (default), the provider can access all patients in the organisation.
name_prefix string or null Title, e.g. Dr..
credential string or null Post-nominal credential, e.g. DPT.
dob string (date) or null YYYY-MM-DD.
gender string or null Administrative gender, matching FHIR Patient.gender — used for demographics and claims, not a clinical assertion. O means other.
ptan string or null Provider Transaction Access Number.
sole_proprietor boolean or null NPPES sole-proprietor flag.
taxonomies array of object NPPES taxonomy entries. Replaces the whole list on write. See Taxonomies.
primary_taxonomy_code string or null NUCC provider taxonomy code. Must be one of taxonomies[].code.
online_booking array of object At the top level, per-clinic online booking — one entry per onboarding clinic id; a clinic absent from the list is not bookable. Replaces the whole list on write. Inside home_health, engagement-level booking, distinct from the per-clinic list; defaults to true. See Online Booking.
schedule array of object Weekly recurring hours per clinic, one entry per onboarding clinic id. Replaces the whole list on write. See Schedule.
billing_profile_ids array of string Billing profiles attached to this provider. On write it changes membership only and keeps the affiliation dates — prefer billing_profiles.
billing_profiles array of object The profiles in billing_profile_ids, in the same order, each with this provider's affiliation window. On write it replaces the whole list: the provider is attached to exactly the profiles listed, and a date left out or null is cleared. Sent together with billing_profile_ids, both must name the same profiles (422 otherwise). See Billing Profiles.
direct_access_permitted boolean or null false marks a Direct Access-Restricted Therapist, who may only treat patients with a medical referral. null or omitted means permitted.
referral_code string or null The Spry referral code generated for the provider when it was created. null until the provider's first publish mints it. Read-only: sending it on a create or update is rejected.
access_revoked boolean Whether the provider's access has been revoked, by Delete Provider or access_revoked: true on update. Send false to restore access. Takes effect in the EMR at the organisation's next publish.
created_at string (date-time) or null
updated_at string (date-time) or null

Clinics

Field Type Description
clinic_id string or null The clinic this record belongs to.
onboarding_clinic_id string or null The clinic's onboarding-record UUID. Always present for clinics created through onboarding, and the only way to address one before it's published.
status string or null ONBOARDING until the record is published, then ACTIVE; INACTIVE once deleted.
online_booking_enabled boolean or null Whether this record is bookable through online booking.
hours array of object Working hours, as one entry per distinct daily pattern. See Hours.

Hours

Field Type Description
days_of_week array of string Any of MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY.
start_time string Clock time, 24-hour HH:MM.
end_time string Clock time, 24-hour HH:MM.

Home Health

Field Type Description
enabled boolean In home_health, whether home visits are enabled for this provider. In an online_booking entry, whether that clinic is bookable online.
state_code string or null Two-letter state the provider is licensed to visit in.
address object or null See Address.
location object or null Geographic point the visit window is anchored to. See Location.
transport_mode string or null How the provider travels between visits. One of CAR, BIKE, WALK, TRANSIT.
max_drive_seconds integer or null Longest drive the provider will accept between consecutive visits, in seconds: 1500 (25 minutes) to 14400 (4 hours). Defaults to 1800.
max_visits_per_week integer or null Cap on home visits per week, 1 to 100. Defaults to 2.
max_allowed_visits_per_slot integer or null Home visits per schedule slot. Always 1; ignored on write.
target_hours_weekly integer or null Target hours of home visits per week, derived from max_visits_per_week: ×1.4 under 10 visits, ×1.5 for 10–19, ×1.6 from 20, rounded up to a whole hour. Ignored on write.
online_booking boolean or null At the top level, per-clinic online booking — one entry per onboarding clinic id; a clinic absent from the list is not bookable. Replaces the whole list on write. Inside home_health, engagement-level booking, distinct from the per-clinic list; defaults to true.
pet_comfort boolean Whether the provider will visit homes with pets. Always true; ignored on write.
stair_comfort boolean Whether the provider will visit homes requiring stairs. Always true; ignored on write.
accepting_new_patients boolean or null Whether this provider is accepting new home-health patients. Defaults to true.
schedules array of object Independent home-visit availability periods, each with its own weekly entries[]. Periods must not overlap, and at most one may be open-ended. See Schedules.
scheduling_overrides object Per-date exceptions to the weekly schedule, keyed YYYY-MM-DD. A key's presence is what marks a day off from no override — empty ranges (absent entirely on read) means no visits that day, and a populated ranges[], each a {start_time, end_time} window with an optional address/location to anchor it away from the provider's home base, replaces the weekly pattern for that date. Every date must fall inside one of schedules[]'s periods, and past dates are rejected. On write, an explicit null clears a key and restores the weekly pattern; an omitted key is left alone.

Address

Field Type Description
line1 string or null
line2 string or null
city string or null
state string or null
postal_code string or null
country string or null

Location

Field Type Description
lat number Latitude, decimal degrees.
lng number Longitude, decimal degrees.

Schedules

Field Type Description
effective_start_date string (date) When this period takes effect. YYYY-MM-DD.
effective_end_date string (date) or null When this period stops applying. null for open-ended — periods must not overlap, and at most one may be open-ended. YYYY-MM-DD.
entries array of object Weekly home-visit windows for this period. Reuses the same days_of_week/start_time/end_time shape as clinic and provider-clinic hours, extended with an optional address and location to anchor a window somewhere other than the provider's home base. See Entries.

Entries

Field Type Description
days_of_week array of string Any of MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY.
start_time string Clock time, 24-hour HH:MM.
end_time string Clock time, 24-hour HH:MM.
address object See Address.
location object Geographic point the visit window is anchored to. See Location.

Taxonomies

Field Type Description
code string
desc string or null
group_code string or null
group_desc string or null
license string or null
primary boolean or null Whether this is the provider's primary taxonomy.
specialization string or null
state string or null

Online Booking

Field Type Description
clinic_id string The clinic this record belongs to.
enabled boolean In home_health, whether home visits are enabled for this provider. In an online_booking entry, whether that clinic is bookable online.

Schedule

Field Type Description
clinic_id string The clinic this record belongs to.
timings array of object Weekly recurring hours at this clinic. See Timings.

Timings

Field Type Description
days_of_week array of string Any of MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY.
start_time string Clock time, 24-hour HH:MM.
end_time string Clock time, 24-hour HH:MM.

Billing Profiles

Field Type Description
billing_profile_id string The billing profile this record belongs to.
display_name string or null The billing profile's name. Read-only — ignored on write.
effective_from string (date) or null First day the provider renders under this billing profile. null when not set. YYYY-MM-DD.
effective_to string (date) or null Last day the provider renders under this billing profile, on or after effective_from. null when open-ended. YYYY-MM-DD.

Error Response

Code: 400 Bad Request

{
  "code": "bad_request",
  "message": "Validation failed",
  "errors": [
    {
      "field": "patient_id",
      "message": "must be a string"
    }
  ]
}

Every error has the same shape — a machine-readable code, a message, and an errors[] array that's empty when there's nothing field-specific to report. The HTTP status is authoritative.

Status code Meaning
400 Bad Request bad_request The request body or parameters failed validation. errors[] names the offending fields.
401 Unauthorized unauthorized The access token is missing, malformed or expired.
403 Forbidden forbidden The request references a resource outside the token's organisation or clinic scope.
404 Not Found not_found No such resource, or it's outside your scope.
429 Too Many Requests rate_limited Rate limit exceeded. Back off and retry.
500 Internal Server Error internal_error Unexpected server error.
502 Bad Gateway upstream_error Upstream service failed or timed out.

Notes

  • PATCH is a JSON Merge Patch (RFC 7386): an omitted field is left alone, an explicit null clears it, and an array replaces the existing one wholesale.
  • Written to onboarding and published into the EMR at the organisation's next publish. Reads of a published provider come from the EMR, so they show the change once that publish has run.
  • Only providers created through onboarding (with an onboarding_provider_id) can be written; any other provider returns 400. Pass ?onboarding=true and an onboarding_provider_id to address a provider that is not yet published.
  • email cannot change once the provider has been published.
  • online_booking and schedule may only name clinics in the provider's clinic_ids; when removing a clinic, drop its entries from both lists in the same request.
  • speciality, middle_name, qualifications, photo_url and online_booking_enabled are accepted but ignored — onboarding has no field for them. Set the photo with Upload Provider Photo and per-clinic booking with online_booking.
  • sub_specialities, external_reference_metadata and a non-empty about are read from onboarding, so they show a change straight away, without waiting for a publish.
  • Inside home_health, schedules[] replaces wholesale like every other array here, but scheduling_overrides merges per key instead: send only the dates that changed, an explicit null clears a key and restores the weekly pattern, and an omitted key is left alone.
  • To set a signature, upload the image with Upload Provider Signature, then send the returned signature_key here. A key that wasn't uploaded for this organisation returns 422. Until the next publish, signature_url reflects the new key from onboarding's own record.
  • access_revoked: true has the same effect as DELETE; set it back to false to restore access. The EMR user is deactivated or reactivated at the organisation's next publish — access_revoked reflects the change straight away, status after that publish.
  • When onboarding refuses a write, each errors[] entry carries a code naming the rule that failed, and field names the field in snake_case, as this API spells it.