List free slots
GET/api/v1/bookings/slots
scope
bookings:readThe start times one member is free for one booking type. Working hours, time off, existing bookings, the type’s buffer and the account’s minimum notice are already applied — anything returned can be booked.
from defaults to now and to to the end of the account’s booking window. A window is cut to that horizon and to 45 days per request; page forward with from for more. A window that is entirely in the past, or past the horizon, returns no slots.
Query parameters
| Name | Type | Description |
|---|---|---|
type_idrequired | string (uuid) | A booking type id |
user_idrequired | string (uuid) | A bookable member’s user_id |
fromoptional | string (date-time) | Start of the window. Defaults to now |
tooptional | string (date-time) | End of the window. Defaults to the end of the booking window |
Request
curl "https://your-crm.example.com/api/v1/bookings/slots?type_id=b00c1e00-1234-4abc-9def-000000000002&user_id=2f3e4d5c-6b7a-4c8d-9e0f-1a2b3c4d5e6f&from=2026-09-05T00%3A00%3A00.000Z&to=2026-09-06T00%3A00%3A00.000Z" \
-H "Authorization: Bearer $RAABTA_API_KEY"Response · 200 OK
{
"data": {
"slots": [
"2026-09-05T10:00:00.000Z",
"2026-09-05T10:30:00.000Z"
],
"time_zone": "Asia/Dubai"
}
}Response
Wrapped in { data: … }| Name | Type | Description |
|---|---|---|
slotsrequired | string (date-time)[] | Free start times in UTC, soonest first. Pass one as starts_at when booking |
time_zonerequired | string | The business’s IANA time zone — show the slots to a person in this zone |
Errors
| Status | Code | When |
|---|---|---|
| 400 | bad_request | The request could not be parsed: malformed JSON, an invalid cursor, or a query parameter of the wrong shape. |
| 400 | validation_error | The body or query failed validation. `details` lists each failing field with a `path` and a `message`. |
| 401 | unauthorized | No usable API key: the Authorization header is missing or malformed, or the key is unknown, revoked or expired. The three are deliberately indistinguishable. |
| 403 | forbidden | The key is valid but lacks the scope this endpoint requires, or the request came from an address outside the key’s IP allowlist. The message says which. |
| 403 | account_suspended | The account this key belongs to is suspended. Rotating the key will not help; contact support. |
| 422 | unprocessable | The request was well-formed but cannot be carried out. `reason` is a stable string saying why (for example `outside_window` or `stage_not_in_pipeline`). |
| 429 | rate_limited | The per-key budget, or the per-IP budget for failed authentication, is exhausted. Honour `Retry-After` before retrying. |
| 500 | internal | Something failed on our side. Safe to retry with the same Idempotency-Key; quote `request_id` if it persists. |