Skip to content

Delete a schedule

Soft-deletes the schedule identified by the path parameter, together with its steps. Requires the schedules scope on an Integrations API key (a user bearer token also passes). There is no response body.

A schedule that is still wired into a live call flow is NOT deleted: the request fails with 409 and lists the call flows that still route through it, because removing the schedule would silently change inbound routing. Unwire it from those call-flow steps first, then retry. A schedule referenced only by trashed steps or trashed call flows deletes normally.

On success the schedule disappears from this API immediately (list and get both stop returning it) but an administrator can still restore it, with its steps, from the cockpit trash.

Multi-tenant scoping is enforced: a schedule belonging to another PBX responds 404 and is left untouched, and another tenant's call flows never affect the usage check nor appear in the 409 body.

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

Responses

Deleted. No content.
Response schema
No response body.
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
Conflict. The schedule is still wired into at least one live call flow, so it was not deleted and nothing changed. `call_flows` names every call flow that still routes through it: remove the schedule from those call-flow steps (in the cockpit) and retry.
Response schema
messagestring
Human-readable reason, including how many call flows still use the schedule.
call_flowsarray<object>
The live call flows still referencing this schedule.
idstring · uuid
namestring
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.
delete https://cockpit.voxbi.com/api/v1/schedules/{id}
Base URL
Request sample
curl -X DELETE 'https://cockpit.voxbi.com/api/v1/schedules/{id}' \
  -H 'Authorization: Bearer YOUR_TOKEN'
const response = await fetch('https://cockpit.voxbi.com/api/v1/schedules/{id}', {
  method: 'DELETE',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${YOUR_TOKEN}`,
  },
});

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

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

$response = file_get_contents('https://cockpit.voxbi.com/api/v1/schedules/{id}', false, $context);
$data = json_decode($response, true);
print_r($data);
No example for this status.
{}
"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": "This schedule is still used by 2 call flow(s) and cannot be deleted. Remove it from those call flows first.",
"call_flows": []
{},
"id": "550e8400-e29b-41d4-a716-446655440010",
"name": "After hours"
},
{}
"id": "550e8400-e29b-41d4-a716-446655440011",
"name": "Sales routing"
}
]
}
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"
}