Skip to content

Get Provider

Returns a single provider.

Endpoint

GET /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

curl --location '{base_url}/v2/providers/2094' \
  --header 'Authorization: Bearer JWT_TOKEN'

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

  • Pass ?onboarding=true and an onboarding_provider_id to read an unpublished provider.
  • A scheduling_overrides day off is a listed date with empty ranges (absent entirely on read) — distinct from a day of the week with no matching schedules[].entries[] window, which is simply outside the weekly pattern.