Skip to content

Partially update a schedule

Partially updates the schedule identified by the path parameter. Requires the schedules scope on an Integrations API key (a user bearer token also passes).

Unlike PUT, every field is optional and anything absent from the body is left exactly as it was: send only description to re-note a schedule without touching its name. A field that IS present is still validated, so name cannot be blanked. Send description: null to clear the note.

Same tenant rules as PUT: pbx_id is forced from the authenticated principal, and another PBX's schedule responds 404 and is left untouched.

HTTP: bearerAuth

User bearer token. Default authentication for customer-facing endpoints. Obtain a token by calling POST /login with your credentials, then send it on every subsequent request as Authorization: Bearer <token>. The token inherits the permissions and PBX scope of the authenticated user.

HTTP Authorization Scheme
bearer
Bearer format
Bearer <token>
HTTP: IntegrationApiKey

API key created on the Cockpit Integrations page (an "API key" integration). It is a bearer token owned by the customer's PBX and limited to the scopes selected when the key was created (e.g. phone-numbers, push-configuration).

Send it in the Authorization header:

Authorization: Bearer <api_key>

Manage keys (create / reveal / revoke) from Integrations → New integration → API key.

HTTP Authorization Scheme
bearer
id path · string · uuid *
Schedule identifier
accept header · string
example: application/json

Request body · required

Request schema
namestring
Human-readable label for the schedule. Omit to keep the current name; it may not be sent empty.
length: 1–255
descriptionstring | null
Free-text note. Omit to keep the current note, or send null to clear it.
length: 0–255

Responses

Response schema
id*string · uuid
Unique identifier of the schedule.
read-only
example: 550e8400-e29b-41d4-a716-446655440000
pbx_id*string · uuid
Identifier of the owning tenant (Pbx). Every schedule is scoped to exactly one tenant.
example: 550e8400-e29b-41d4-a716-446655440001
name*string
Human-readable label for the schedule, shown in the cockpit and used when selecting the schedule in call flows.
length: 0–255
example: Business hours
descriptionstring | null
Optional free-text note describing the purpose or coverage of the schedule. Null when no description was provided.
length: 0–255
example: Monday to Friday, 09:00 to 18:00
created_atstring | null · date-time
Timestamp (ISO 8601, UTC) when the schedule was created.
read-only
example: 2024-03-01T08:29:07Z
updated_atstring | null · date-time
Timestamp (ISO 8601, UTC) when the schedule was last modified.
read-only
example: 2024-03-01T08:29:07Z
Unauthenticated. The `Authorization: Bearer <token>` header was missing, malformed, or names a token that has been revoked or deleted.
Response schema
messagestring
Forbidden. The bearer token authenticated successfully but does not carry the scope this endpoint requires. Re-create the Integrations API key with the missing scope selected (Integrations > New integration > API key).
Response schema
messagestring
Not Found. No schedule with that id exists inside the caller's PBX. A schedule that belongs to another tenant returns exactly this response, so the endpoint never reveals whether a foreign id exists.
Response schema
messagestring
Unprocessable Entity. The request body failed validation. `errors` maps each rejected field to its messages, and `message` repeats the first one. Nothing was written.
Response schema
messagestring
The first validation message, repeated for convenience.
errorsobject
namearray<string>
[]string
descriptionarray<string>
[]string
Too Many Requests. The rate limit for this action has been exceeded. Retry after the window indicated by the Retry-After header.
Response schema
messagestring
Server error. An unexpected condition was encountered on the server and the request could not be completed. The body is a generic JSON envelope with a `message` field. The response is logged on the server side; quote the request URL + timestamp when reporting an issue.
Response schema
messagestring
exceptionstring
Only present in non-production environments.
filestring
Only present in non-production environments.
lineinteger
Only present in non-production environments.
patch https://cockpit.voxbi.com/api/v1/schedules/{id}
Base URL
Request sample
curl -X PATCH 'https://cockpit.voxbi.com/api/v1/schedules/{id}' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  --data '{"description":"Monday to Friday, 09:00 to 17:00"}'
const response = await fetch('https://cockpit.voxbi.com/api/v1/schedules/{id}', {
  method: 'PATCH',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${YOUR_TOKEN}`,
  },
  body: JSON.stringify({
    "description": "Monday to Friday, 09:00 to 17:00"
}),
});

const data = await response.json();
console.log(data);
import requests

response = requests.patch('https://cockpit.voxbi.com/api/v1/schedules/{id}',
    headers={'Authorization': f'Bearer {YOUR_TOKEN}'},
    json={
    "description": "Monday to Friday, 09:00 to 17:00"
}
)
response.raise_for_status()
data = response.json()
print(data)
<?php
$context = stream_context_create([
    'http' => [
        'method'  => 'PATCH',
        'header'  => "Content-Type: application/json\r\nAuthorization: Bearer YOUR_TOKEN",
        'content' => '{
    \"description\": \"Monday to Friday, 09:00 to 17:00\"
}',
    ],
]);

$response = file_get_contents('https://cockpit.voxbi.com/api/v1/schedules/{id}', false, $context);
$data = json_decode($response, true);
print_r($data);
Sample request
{}
"description": "Monday to Friday, 09:00 to 17:00"
}
{}
"id": "550e8400-e29b-41d4-a716-446655440000",
"pbx_id": "550e8400-e29b-41d4-a716-446655440001",
"name": "Business hours",
"description": "Monday to Friday, 09:00 to 17:00",
"created_at": "2024-03-01T08:29:07.000000Z",
"updated_at": "2024-11-04T10:15:44.000000Z"
}
Host string
example: cockpit.voxbi.com
Date string
example: Mon, 16 Oct 2023 14:08:48 GMT
Connection string
example: close
Cache-Control string
example: no-cache, private
Content-Type string
example: application/json
X-RateLimit-Limit integer
example: 60
X-RateLimit-Remaining integer
example: 59
Vary string
example: Origin
{}
"message": "Unauthenticated."
}
Content-Type string
example: application/json
{}
"message": "Invalid ability provided."
}
Content-Type string
example: application/json
{}
"message": "Schedule not found."
}
Content-Type string
example: application/json
{}
"message": "The name field is required.",
"errors": {}
"name": []
"The name field is required."
]
}
}
Content-Type string
example: application/json
{}
"message": "Too Many Attempts."
}
Retry-After integer
Seconds to wait before retrying.
example: 60
Content-Type string
example: application/json
{}
"message": "Server Error"
}