Skip to content

Update a schedule

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

This is a full replace and takes the same body as creation, so name stays required and an omitted description is CLEARED (set to null). Use PATCH on the same path when you want to change one field and leave the rest alone.

Multi-tenant scoping is enforced, so a schedule belonging to another PBX responds 404 and is left untouched. pbx_id is forced from the authenticated principal and is never read from the body, so a schedule cannot be moved between tenants.

Only the schedule record is affected. Its steps (the time rules) are managed in the cockpit and are unchanged by this call. The response is the updated schedule, unwrapped (no data envelope).

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
name*string
Human-readable label for the schedule.
length: 1–255
example: Business hours (winter)
descriptionstring | null
Optional free-text note. Omit or send null to clear it.
length: 0–255
example: Monday to Friday, 09:00 to 17:00

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.
put https://cockpit.voxbi.com/api/v1/schedules/{id}
Base URL
Request sample
curl -X PUT 'https://cockpit.voxbi.com/api/v1/schedules/{id}' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  --data '{"name":"Business hours (winter)","description":"Monday to Friday, 09:00 to 17:00"}'
const response = await fetch('https://cockpit.voxbi.com/api/v1/schedules/{id}', {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${YOUR_TOKEN}`,
  },
  body: JSON.stringify({
    "name": "Business hours (winter)",
    "description": "Monday to Friday, 09:00 to 17:00"
}),
});

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

response = requests.put('https://cockpit.voxbi.com/api/v1/schedules/{id}',
    headers={'Authorization': f'Bearer {YOUR_TOKEN}'},
    json={
    "name": "Business hours (winter)",
    "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'  => 'PUT',
        'header'  => "Content-Type: application/json\r\nAuthorization: Bearer YOUR_TOKEN",
        'content' => '{
    \"name\": \"Business hours (winter)\",
    \"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
{}
"name": "Business hours (winter)",
"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 (winter)",
"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"
}