For AI agents: markdown of this page — /docs-content-en/entities/booking-wait-list/booking.md documentation index — /llms.txt
Book from the wait list
POST /v1/booking-wait-list/:id/booking
Creates a booking from a wait list record: the record's clients move to the new booking, and the record itself is removed from the wait list.
Fields go at the root of the JSON, without a fields wrapper. Messages to the client about the booking depend on the is*NotificationOn switches of the booking resource.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id (path) |
number | yes | Wait list record identifier. List: GET /v1/booking-wait-list |
Request fields (body)
| Field | Type | Required | Description |
|---|---|---|---|
resourceIds |
number[] | yes | Identifiers of the resources the booking reserves. The array cannot be empty. List: GET /v1/booking-resources |
datePeriod.from.timestamp |
number | yes | Booking start, Unix time in seconds |
datePeriod.from.timezone |
string | yes | Time zone of the start in IANA format, e.g. UTC |
datePeriod.to.timestamp |
number | yes | Booking end, Unix time in seconds. Must be later than the start |
datePeriod.to.timezone |
string | yes | Time zone of the end in IANA format |
The body accepts no other fields. The booking name and description are set by updating the booking.
Examples
curl — personal key
curl -X POST "https://vibecode.bitrix24.com/v1/booking-wait-list/27/booking" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"resourceIds": [49],
"datePeriod": {
"from": { "timestamp": 1795158000, "timezone": "UTC" },
"to": { "timestamp": 1795161600, "timezone": "UTC" }
}
}'
curl — OAuth application
curl -X POST "https://vibecode.bitrix24.com/v1/booking-wait-list/27/booking" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"resourceIds": [49],
"datePeriod": {
"from": { "timestamp": 1795158000, "timezone": "UTC" },
"to": { "timestamp": 1795161600, "timezone": "UTC" }
}
}'
JavaScript — personal key
const res = await fetch('https://vibecode.bitrix24.com/v1/booking-wait-list/27/booking', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
resourceIds: [49],
datePeriod: {
from: { timestamp: 1795158000, timezone: 'UTC' },
to: { timestamp: 1795161600, timezone: 'UTC' },
},
}),
})
const { data } = await res.json()
console.log('Booking ID:', data.id)
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/booking-wait-list/27/booking', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
resourceIds: [49],
datePeriod: {
from: { timestamp: 1795158000, timezone: 'UTC' },
to: { timestamp: 1795161600, timezone: 'UTC' },
},
}),
})
const { data } = await res.json()
console.log('Booking ID:', data.id)
Response fields
On success, the HTTP status is 201 Created and the response contains the card of the new booking — the same as GET /v1/bookings/:id returns.
| Field | Type | Description |
|---|---|---|
success |
boolean | true on success |
data.id |
number | Booking identifier. The booking's clients are returned by GET /v1/bookings/:id/clients |
data.name |
string | null | Booking name |
data.description |
string | null | Booking description |
data.resourceIds |
number[] | Identifiers of the reserved resources |
data.datePeriod |
object | Booking period: from and to, each with timestamp and timezone |
Response example
{
"success": true,
"data": {
"datePeriod": {
"from": {
"timestamp": 1795158000,
"timezone": "UTC"
},
"to": {
"timestamp": 1795161600,
"timezone": "UTC"
}
},
"description": null,
"id": 49,
"name": null,
"resourceIds": [
49
]
}
}
Error response example
404 — there is no wait list record with this id, for example because it has already been moved to a booking:
{
"success": false,
"error": {
"code": "ENTITY_NOT_FOUND",
"message": "Booking record not found"
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| 404 | ENTITY_NOT_FOUND |
There is no wait list record with this id, including one already moved to a booking. Message Booking record not found |
| 400 | MISSING_REQUIRED_FIELDS |
resourceIds or datePeriod is missing, or resourceIds is an empty array. Message resourceIds and datePeriod are required |
| 400 | INVALID_PARAMS |
The body contains a field other than resourceIds and datePeriod. Message Only resourceIds and datePeriod can be written |
| 400 | INVALID_PARAMS |
resourceIds contains a value that is not a positive integer. Message resourceIds must contain positive integers |
| 400 | INVALID_PARAMS |
from or to has no timestamp or timezone. Message datePeriod requires from/to with a finite timestamp and timezone |
| 400 | INVALID_PARAMS |
The time zone is not in IANA format. Message timezone must be an IANA timezone |
| 400 | INVALID_PARAMS |
The body is not a JSON object. Message Body must contain resourceIds and datePeriod |
| 400 | INVALID_PARAMS |
id is not a positive integer. Message id must be a canonical positive safe integer |
| 422 | BITRIX_ERROR |
A resource from resourceIds does not exist. Message Some resources were not found with the resource IDs, b24Code 1038 |
| 422 | BITRIX_ERROR |
The booking end is earlier than the start. Message Invalid date period |
| 401 | MISSING_API_KEY |
The X-Api-Key header is not passed |
| 401 | TOKEN_MISSING |
The key has no Bitrix24 tokens |
| 403 | SCOPE_DENIED |
The key does not have the booking scope |
| 403 | WRITE_BLOCKED_READONLY_KEY |
The key is in read-only mode |
| 429 | RATE_LIMITED |
Request rate exceeded. The effective cap is in the x-ratelimit-limit header |
| 502 | BITRIX_RESPONSE_INVALID |
Bitrix24 returned a response of an unexpected shape. If this happened while re-reading the booking after creation, the booking has already been created and the record removed from the wait list — find the booking in the list of bookings before retrying |
Full list of common API errors — Errors.
Known specifics
A rejected request does not remove the record. On a 400 or 422 response, the record stays in the wait list, and the move can be retried.
The booking card does not return the note. The record's note moves to the booking, but the booking card has no field for it, and description stays null. When the booking is moved back to the wait list, the note returns to the new wait list record.