Create Provider Block
Blocks out time for a provider — leave, admin time, or any other reason they are unavailable.
Endpoint
POST /v2/providers/{provider_id}/blocks
Path Parameters
| Parameter |
Type |
Required |
Description |
provider_id |
string |
Yes |
The treating provider. |
Request Body
| Parameter |
Type |
Required |
Description |
clinic_id |
string |
Yes |
The clinic this record belongs to. |
reason |
string |
No |
Free text, not an enum — the vocabulary is open-ended and often clinic-specific. |
starts_at |
string (date-time) |
Yes |
|
ends_at |
string (date-time) |
Yes |
|
recurrence |
object |
No |
Recurrence rule. null for a one-off. See Recurrence. |
Recurrence
| Parameter |
Type |
Required |
Description |
frequency |
string |
Yes |
How often the pattern repeats. One of DAILY, WEEKLY, MONTHLY. |
interval |
integer |
Yes |
Repeat every N periods of frequency. |
days_of_week |
array of string |
Yes |
Any of MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY. |
Request
curl --location '{base_url}/v2/providers/2094/blocks' \
--header 'Authorization: Bearer JWT_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"clinic_id": "5831",
"reason": "Annual leave",
"starts_at": "2026-09-14T16:00:00Z",
"ends_at": "2026-09-14T17:00:00Z",
"recurrence": {
"frequency": "WEEKLY",
"interval": 1,
"days_of_week": [
"MONDAY",
"TUESDAY"
]
}
}'
Response
Success Response
Code: 201 Created
{
"id": "6642",
"provider_id": "2094",
"clinic_id": "5831",
"reason": "Annual leave",
"starts_at": "2026-09-14T16:00:00Z",
"ends_at": "2026-09-14T17:00:00Z",
"recurrence": {
"frequency": "WEEKLY",
"interval": 1,
"days_of_week": [
"MONDAY",
"TUESDAY"
]
}
}
The Location header carries the URL of the created resource.
Response Fields
| Field |
Type |
Description |
id |
string |
The schedule or block id. |
provider_id |
string |
The treating provider. |
clinic_id |
string |
The clinic this record belongs to. |
reason |
string or null |
Free text, not an enum — the vocabulary is open-ended and often clinic-specific. |
starts_at |
string (date-time) or null |
|
ends_at |
string (date-time) or null |
|
recurrence |
object or null |
Recurrence rule. null for a one-off. See Recurrence. |
Recurrence
| Field |
Type |
Description |
frequency |
string |
How often the pattern repeats. One of DAILY, WEEKLY, MONTHLY. |
interval |
integer |
Repeat every N periods of frequency. |
days_of_week |
array of string |
Any of MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY. |
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. |