Create Provider
Creates a provider through onboarding.
Endpoint
Request Body
| Parameter |
Type |
Required |
Description |
first_name |
string |
Yes |
|
last_name |
string |
Yes |
|
email |
string |
Yes |
Becomes the provider's EMR username at publish. |
npi |
string |
Yes |
Checksum-valid NPI-1; verified against NPPES. |
clinic_ids |
array of string |
Yes |
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. |
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' \
--header 'Authorization: Bearer JWT_TOKEN' \
--header 'Content-Type: application/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
}'
Response
Success Response
Code: 201 Created
{
"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"
}
The Location header carries the URL of the created resource.
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
- The provider is a draft (
status: ONBOARDING, id: null) until the organisation's next publish.
clinic_ids, online_booking[].clinic_id and schedule[].clinic_id are onboarding clinic ids from List Onboarding Clinics, not operational clinic ids.
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.
- 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.
- 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.