BookingClub Developer Platform

BookingClub Inner API v1

Search properties, check live availability, create bookings, cancel or modify orders, and test requests directly from the browser with a live or demo key.

Base URL https://api.bookingclub.net/v1 OpenAPI /v1/openapi.json Updated 2026-06-17
Demo and Live keysDemo keys create isolated demo bookings. Live keys use the real operational booking flow.
Hotel, tour, transferOne JSON API for internal contracts, enabled provider stock and visible WTX products.
Built-in controlsScopes, IP rules, rate limits, request logging, billing and API commissions are handled per key.

Authentication

Every API request uses a client API key. Demo keys create demo bookings. Live keys create normal operational bookings.

Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

God Mode can set scopes, allowed IPs, logging mode, request limits, billing mode, request cost and API commission per key.

Common Rules

RuleDetails
Response formatAll responses are JSON: success, requestId, data, errors.
DatesUse YYYY-MM-DD.
CurrencyAny endpoint returning a new price requires currency. Booking detail, cancel quote and cancel return the original booking currency and do not accept currency.
NationalitynationalityId is optional. Use GET /reference/nationalities to list values.
ChildrenSend childrenAges only when there are children. If children exist, ages are required and must match booking guests.
IdempotencyWrite endpoints require Idempotency-Key. Retrying the exact same request with the same key returns the saved response without creating a duplicate booking.
VisibilityProducts include supervisor internal contracts, enabled TL/TL2 products and WTX products visible to the supervisor.
BillingGod Mode request billing counts successful requests. Depending on key settings, requests may be free, per-request paid, or monthly quota plus paid extra.

Simulator

Requests are sent directly from this browser to https://api.bookingclub.net/v1. The API key is not saved by this page.
{}

Reference Data

EndpointQueryScope
GET /reference/countriesq, language, page, limitreference:read
GET /reference/regionscountryId, q, language, page, limitreference:read
GET /reference/citiescountryId, regionId, q, language, page, limitreference:read
GET /reference/airportscountryId, regionId, cityId, q, language, page, limitreference:read
GET /reference/currenciesq, page, limitreference:read
GET /reference/currency-ratesNonereference:read
GET /reference/nationalitiesq, page, limitreference:read
GET /reference/languagesq, language, page, limitreference:read
GET /reference/meal-plansq, page, limitreference:read

Properties

EndpointRequiredOptionalScope
GET /propertiesNoneq, countryId, cityId, source, page, limitproperties:read
GET /properties/{propertyId}propertyIdNoneproperties:read
A propertyId may represent an internal hotel, TL/TL2 hotel, or WTX product. Use the returned ID exactly as received.

Hotel Availability

POST /hotels/availability requires scope availability:read.

FieldRequiredDetails
propertyIdYesUse ID from /properties.
checkIn, checkOutYescheckOut must be after checkIn.
currencyYesRequired because prices are returned.
rooms[].adultsYesAdult count per room.
rooms[].childrenAgesNoRequired only when children are present.
nationalityIdNoOptional nationality.
{
  "propertyId": "24",
  "checkIn": "2026-06-20",
  "checkOut": "2026-06-21",
  "currency": "USD",
  "nationalityId": 1,
  "rooms": [
    {"adults": 2, "childrenAges": []}
  ]
}

Tours

EndpointRequiredOptionalScope
GET /toursNoneq, countryId, cityId, page, limittours:read
GET /tours/{tourId}tourIdNonetours:read
POST /tours/availabilitytourId, checkIn, checkOut, currency, adultschildrenAges, vehicleId, languageId, nationalityIdavailability:read

Transfers

EndpointRequiredOptionalScope
GET /transfersNoneq, countryId, cityId, page, limittransfers:read
GET /transfers/{transferId}transferIdNonetransfers:read
POST /transfers/availabilitytransferKind, checkIn, currency, adults, route fieldstransferId, vehicleId, childrenAges, nationalityId, flightNumber, time, hotel IDsavailability:read
transferKindRequired route fields
1 arrivalpickupAirportId, dropOffCityId
2 point to pointpickupCityId, dropOffCityId
3 departurepickupCityId, dropOffAirportId

Bookings

EndpointRequiredOptionalScope
POST /bookingsholder.firstName, holder.lastName, items[].type, items[].rateToken, items[].guests[].firstName, items[].guests[].lastName, Idempotency-KeyclientReference, holder.email, holder.phone, note, specialRequests, guest gender/type/agebookings:create
GET /bookingsNoneclientReference, status, createdFrom, createdTo, checkInFrom, checkInTo, page, limitbookings:read
GET /bookings/{bookingNumber}bookingNumberNonebookings:read
{
  "clientReference": "AGENCY-123",
  "holder": {"firstName": "Ali", "lastName": "Valiyev", "email": "[email protected]"},
  "items": [
    {
      "type": "hotel",
      "rateToken": "rt_...",
      "guests": [
        {"firstName": "Ali", "lastName": "Valiyev"},
        {"firstName": "Leyla", "lastName": "Valiyeva"}
      ],
      "specialRequests": "High floor"
    }
  ]
}
If price changed, booking returns PRICE_CHANGED. If availability is not enough, booking returns INSUFFICIENT_AVAILABILITY or NOT_AVAILABLE. Request availability again and use the new rateToken.

Cancel

EndpointRequiredOptionalScope
POST /bookings/{bookingNumber}/cancel-quotebookingNumberitemIdsbookings:cancel
POST /bookings/{bookingNumber}/cancelbookingNumber, Idempotency-KeyitemIdsbookings:cancel

cancel-quote calculates penalty only. cancel applies cancellation. Both use the original booking currency.

Modify

EndpointRequiredOptionalScope
POST /bookings/{bookingNumber}/modify-quotebookingNumber, itemId, at least one changeguests, specialRequests, bookingComment, customerComment, checkIn, checkOut, roomId, contractId, adults, childrenAges, currencybookings:modify
POST /bookings/{bookingNumber}/modifybookingNumber, itemId, confirm=true, at least one change, Idempotency-Keyguests, specialRequests, bookingComment, customerComment, checkIn, checkOut, roomId, contractId, adults, childrenAges, currencybookings:modify
Call modify-quote first, then send the same intended changes with confirm=true. Price-changing modify supports direct internal pending hotel items and direct TL2 API bookings when provider penalty is zero and only date/occupancy changes are requested. WTX-backed items, room/rate/property/nationality changes, paid items or commission-paid items return MODIFY_PRICE_CHANGE_NOT_SUPPORTED or MODIFY_REQUIRES_MANUAL_REVIEW. If date, room, occupancy, nationality or currency is changed, currency is required. If occupancy is changed, send the full guests list matching the new occupancy. PATCH /bookings/{bookingNumber} is kept as a compatibility alias.
{
  "itemId": 12345,
  "changes": {
    "checkIn": "2026-07-10",
    "checkOut": "2026-07-12",
    "adults": 2,
    "childrenAges": [],
    "currency": "USD",
    "guests": [
      {"firstName": "Ali", "lastName": "Valiyev", "type": "adult"},
      {"firstName": "Leyla", "lastName": "Valiyeva", "type": "adult"}
    ]
  }
}

Errors

Errors include a stable code, developer-readable message, optional field and hint.

{
  "success": false,
  "requestId": "req_20260617_120000_ab12cd34",
  "data": null,
  "errors": [
    {
      "code": "VALIDATION_ERROR",
      "message": "holder.firstName is required.",
      "field": "holder.firstName",
      "hint": ""
    }
  ]
}
CodeMeaning
UNAUTHORIZED, KEY_REVOKEDMissing, invalid or revoked API key.
FORBIDDEN_SCOPEKey does not have the required scope.
IP_NOT_ALLOWEDRequest IP is not allowed for the key.
RATE_LIMITEDMinute, hour or day request limit exceeded.
VALIDATION_ERRORRequest body, query or route parameter is invalid.
IDEMPOTENCY_KEY_REUSEDSame idempotency key was used for a different request.
PRICE_CHANGEDSelected rate price changed during booking revalidation.
INSUFFICIENT_AVAILABILITY, NOT_AVAILABLESelected product/rate is no longer available in the requested quantity.
MODIFY_PRICE_CHANGE_NOT_SUPPORTED, MODIFY_REQUIRES_MANUAL_REVIEWRequested modification can not be safely completed automatically.
EXTERNAL_API_ERRORProvider rejected or failed a synced API booking operation.
INTERNAL_ERRORUnexpected server error. Send the requestId to BookingClub support.