Welcome to the Katanox Buyer API
The Katanox API lets you search hotel availability, book units and manage those bookings for your customers.
Environments and API keys
There is one base URL for both environments:
https://api.katanox.com/v2
The API key decides the environment:
| Key | What you get |
|---|---|
| Sandbox key | Created when you sign up on the Katanox platform. Gives access to test properties only. Bookings are not sent to real hotels. See Sandbox. |
| Production key | Issued after your integration is certified. Gives access to the real properties you have a contract with. |
You find your keys in the Katanox platform under Settings → API keys (app.katanox.com/settings/api-keys). Switch between sandbox and production with the environment selector at the top.
- You can have two keys per environment.
- Rotating a key: create a second key, switch your integration to it, then delete the old one.
- Users with the agent role can't see API keys.
Authentication
Send your key as a bearer token on every request:
curl https://api.katanox.com/v2/properties \
-H "Authorization: Bearer <YOUR_API_KEY>"A missing or invalid key returns 401. The full error shape is in Errors.
Rate limits
-
Limit: 500 requests per second per API key.
-
Above the limit: you get
429 Too Many Requestswith this body:{ "error": "request limit reached" } -
Backing off: the window is one second, so wait a short time (with jitter) and retry.
Timeouts
- Server-side limit: each request stops after 15 seconds. Set your client timeout to at least that.
- Bookings:
POST /bookingsreturns as soon as we have accepted the booking. The hotel's confirmation comes later; see Booking. - Availability: response time depends on the hotel systems behind the properties you search. A slow supplier slows down the whole request. If you need fast, predictable responses, search one property per request and run requests in parallel (Availability).
Responses
Envelope. Successful responses wrap the payload in data. Some responses also include links to related operations:
{
"data": { "booking": { "...": "..." } },
"links": {
"get": { "method": "GET", "url": "https://api.katanox.com/v2/bookings/BK-ABCDEFGH" },
"cancel": { "method": "DELETE", "url": "https://api.katanox.com/v2/bookings/BK-ABCDEFGH" }
}
}Empty fields are omitted. Optional fields with no value (for example net_rate, total_tax, vat, breakdown) are left out of the response rather than returned as null. Treat a missing field as "not available", not as an error.
Errors have their own shape; see Errors.
IDs
| Kind | Format | Example |
|---|---|---|
| Property, unit, rate plan, corporate profile | 8 characters, A–Z0–9 | 6Y1227GD |
| Booking | BK- + 8 characters | BK-EUWIGPSG |
| Reservation | RS- + 8 characters | RS-Y6MXARWD |
| Offer | UUID | 9131b7c8-3b6c-471d-8c0e-f579b1f40adb |
- Offer IDs are not rate plan IDs. An offer is one specific, priced combination of unit + rate plan + dates + occupancy, and it expires (Offers). The rate plan behind it has its own 8-character
rate_plan_id.
Dates, times and currency
- Dates:
YYYY-MM-DD, for examplecheck_in=2026-11-02. - Check-in/check-out times and policy deadlines: these are in the property's local time. Each property exposes its
timezone(IANA name, e.g.Europe/Amsterdam). - Currency: prices are always in the property's currency, given as an ISO 4217 code in every price object. No currency conversion is done, and there is no request parameter to change the currency. See Pricing and taxes.
A typical integration
- Discover the properties you can sell:
GET /properties(contracted properties only). See Properties. - Search availability:
GET /availabilityreturns offers. See Availability. - Re-check the chosen offer just before booking submission:
GET /offers/{id}?live_check=true. See Offers. - Book:
POST /bookingswith one reservation per unit, then pollGET /bookings/{id}until each reservation isCONFIRMEDorFAILED. See Booking. - Manage the booking after it's made:
- modify a reservation (Reservation)
- cancel (Cancellation)
- fetch folios and invoices (Booking → Invoices)
Notifications
There are no webhooks. Booking, modification and cancellation results are only available by polling (Booking).
API versions
Only v2 is supported. Requests to /v1 return 505 HTTP Version Not Supported.