Hotels
POST/v1/hotels/bookings
Book a rate — charged to your account
We reserve the amount on your account, book with the supplier, then charge what was actually due. If the supplier declines, the reservation is released and you are not charged.
- Auth
- API key
- Scope
- hotels:book
- Rate limit
- BOOKING
- Search quota
- Free
- Idempotency
- Idempotency-Key
Request headers
Request body
CreateHotelBookingDto — required, sent as application/json.
Responses
201 · HotelBookingDto
Errors
Every one of these carries the same envelope. What each error.type means, and whether a retry can succeed, is on the error index — once, for all operations.
Response headers
Set on every response of this operation, successful or not.
Example
curl -sS -X POST "$VACABEE_API_URL/v1/hotels/bookings" \
-H "Authorization: Bearer $VACABEE_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"rateId": "rate_8f2c…",
"externalReference": "booking-2026-0915-abc",
"guests": [
{
"firstName": "Ada",
"lastName": "Lovelace"
}
],
"contact": {
"email": "ada@example.com"
}
}'Set VACABEE_API_URL to https://api.vacabee.com with a live key, or to https://sandbox-api.vacabee.com with a vcb_test_ key. Binding a host to one kind of key is planned and is not enforced by the host yet, so nothing stops a key from being answered at the wrong base URL — assert the prefix against your configured URL yourself. What the sandbox answers
TypeScript SDK
await vacabee.hotels.book(…);The typed method sends the right headers, derives the idempotency key where one is required, and returns the response type generated from this document. Installing and using the SDK

