Schedulers & Bookings
List schedulers, get scheduler details, list bookings, get booking details, and cancel bookings via the API.
Schedulers & Bookings API
Access scheduler and booking data. Requires API tokens with schedulers.view, bookings.view, or bookings.manage abilities.
List Schedulers
GET /api/v1/schedulers — Permission: schedulers.view
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
search | string | No | Search by scheduler name |
is_active | boolean | No | Filter by active status |
per_page | integer | No | Results per page, 1–100 (default: 25) |
Example Request
curl -X GET "https://your-domain.com/api/v1/schedulers" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"const response = await fetch("https://your-domain.com/api/v1/schedulers", {
headers: {
"Authorization": "Bearer YOUR_API_TOKEN",
"Accept": "application/json"
}
});
const data = await response.json();$ch = curl_init("https://your-domain.com/api/v1/schedulers");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer YOUR_API_TOKEN",
"Accept: application/json",
],
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);import requests
response = requests.get(
"https://your-domain.com/api/v1/schedulers",
headers={
"Authorization": "Bearer YOUR_API_TOKEN",
"Accept": "application/json"
}
)
data = response.json()Example Response
{
"data": [
{
"id": 1,
"name": "30-Minute Consultation",
"slug": "30-minute-consultation",
"description": "Free introductory call",
"duration": 30,
"location": { "type": "google_meet" },
"is_active": true,
"booking_count": 56,
"fields": [],
"created_at": "2025-01-20T08:00:00.000000Z",
"updated_at": "2025-04-10T12:00:00.000000Z"
}
],
"meta": { "current_page": 1, "last_page": 1, "per_page": 25, "total": 1 },
"links": { "first": "...", "last": "...", "prev": null, "next": null }
}
Get Scheduler
GET /api/v1/schedulers/{id} — Permission: schedulers.view
Returns the scheduler with its custom booking form fields.
List Bookings
GET /api/v1/schedulers/{id}/bookings — Permission: bookings.view
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | No | Filter: pending_approval, confirmed, cancelled, declined, completed, no_show, rescheduled |
per_page | integer | No | Results per page, 1–100 (default: 25) |
Example Request
curl -X GET "https://your-domain.com/api/v1/schedulers/1/bookings?status=confirmed" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"const response = await fetch("https://your-domain.com/api/v1/schedulers/1/bookings?status=confirmed", {
headers: {
"Authorization": "Bearer YOUR_API_TOKEN",
"Accept": "application/json"
}
});
const data = await response.json();$ch = curl_init("https://your-domain.com/api/v1/schedulers/1/bookings?status=confirmed");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer YOUR_API_TOKEN",
"Accept: application/json",
],
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);import requests
response = requests.get(
"https://your-domain.com/api/v1/schedulers/1/bookings?status=confirmed",
headers={
"Authorization": "Bearer YOUR_API_TOKEN",
"Accept": "application/json"
}
)
data = response.json()Example Response
{
"data": [
{
"id": 10,
"scheduler_id": 1,
"contact_name": "Alice Johnson",
"contact_email": "alice@example.com",
"status": "confirmed",
"starts_at": "2025-06-15T10:00:00.000000Z",
"ends_at": "2025-06-15T10:30:00.000000Z",
"location": { "type": "google_meet" },
"data": { "company": "Acme Corp" },
"contact_id": 22,
"created_at": "2025-06-10T08:00:00.000000Z"
}
],
"meta": { "current_page": 1, "last_page": 3, "per_page": 25, "total": 56 },
"links": { "first": "...", "last": "...", "prev": null, "next": "..." }
}
Get Booking
GET /api/v1/schedulers/{id}/bookings/{bookingId} — Permission: bookings.view
Returns the same shape as a single item in the list response.
Cancel Booking
POST /api/v1/schedulers/{id}/bookings/{bookingId}/cancel — Permission: bookings.manage
Cancels a booking that is in pending_approval or confirmed status.
Example Request
curl -X POST "https://your-domain.com/api/v1/schedulers/1/bookings/10/cancel" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"const response = await fetch("https://your-domain.com/api/v1/schedulers/1/bookings/10/cancel", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_TOKEN",
"Accept": "application/json"
}
});
const data = await response.json();$ch = curl_init("https://your-domain.com/api/v1/schedulers/1/bookings/10/cancel");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer YOUR_API_TOKEN",
"Accept: application/json",
],
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);import requests
response = requests.post(
"https://your-domain.com/api/v1/schedulers/1/bookings/10/cancel",
headers={
"Authorization": "Bearer YOUR_API_TOKEN",
"Accept": "application/json"
}
)
data = response.json()Example Response
{
"data": {
"id": 10,
"scheduler_id": 1,
"contact_name": "Alice Johnson",
"contact_email": "alice@example.com",
"status": "cancelled",
"starts_at": "2025-06-15T10:00:00.000000Z",
"ends_at": "2025-06-15T10:30:00.000000Z",
"location": { "type": "google_meet" },
"data": { "company": "Acme Corp" },
"contact_id": 22,
"created_at": "2025-06-10T08:00:00.000000Z"
}
}
Returns 422 if the booking is not in a cancellable status.
Was this article helpful?