Overview
1. Introduction
Welcome to the AxisRooms CM OTA API. This reference describes how an OTA or distribution channel integrates with the AxisRooms Channel Manager to exchange availability, rates, restrictions, and booking data in real time.
ℹ️
ClientUrl refers to the URL supplied by the OTA/Channel. All sample keys and endpoints shown are placeholders only — valid production values are shared once the integration is formally commenced.
Security
2. Authentication
AxisRooms CM uses an API key to authenticate all requests. Include the key in every API call as shown below:
{ "key": "key123***********" }
⚠️
The key
key123 is for the staging environment only. A production key will be issued once integration testing is complete and certified.NoteAll API requests must include the
auth.key field. Requests without a valid key will be rejected with an authentication error.Workflow
3. Integration Flow
The AxisRooms–OTA integration follows a structured five-phase flow:
- Share Endpoints & CredentialsThe OTA provides its client-hosted API endpoints. AxisRooms shares staging credentials and sample property mappings.
- Fetch Mapping DataAxisRooms calls Get ProductInfo and Get RateplanInfo to retrieve room and rate plan details for mapping inside the Channel Manager.
- Receive ARI UpdatesThe OTA's endpoints accept real-time inventory, rate, and restriction updates pushed by AxisRooms.
- Push Booking NotificationsThe OTA pushes confirmed, modified, and cancelled bookings to the AxisRooms booking endpoint.
- Complete CertificationBoth teams validate success and failure response handling before production credentials are issued.
API Reference
4. OTA APIs
ℹ️
ClientUrl represents the URL supplied by the OTA/channel. Sample keys and endpoints are placeholders; valid values are shared when integration begins.
1 Get ProductInfo
PurposeAxisRooms calls this endpoint to retrieve the list of rooms available at a property in the OTA's system. The response is used to create the room mapping inside the Channel Manager before any inventory or rate updates can be sent.
Request Parameters
| Parameter | Description |
|---|---|
auth | Contains the authorization elements. |
auth.key | API key provided by AxisRooms. |
propertyId | Hotel ID in the OTA/Client's system. |
Request JSON
{
"auth": {
"key": "key123***********"
},
"propertyId": "hotelId"
}
Response Parameters
| Parameter | Description |
|---|---|
message | Description for failure. Empty or any informational message on success. |
status | Result of the API call. Expected values: success / failure. |
data | Array containing room information. |
data[].name | Room name in the OTA/Client's system. |
data[].id | Room ID in the OTA/Client's system. |
Response JSON
{
"message": "message for success/failure",
"status": "success/failure",
"data": [
{ "name": "room_name1", "id": "room1" },
{ "name": "room_name2", "id": "room2" }
]
}
2 Get RateplanInfo
PurposeAxisRooms calls this endpoint to fetch the available rate plans for a specific room at the property. The retrieved rate plan data is used for mapping within the Channel Manager, enabling rate updates to be correctly directed per plan and occupancy type.
Request Parameters
| Parameter | Description |
|---|---|
auth | Contains the authorization elements. |
auth.key | API key provided by AxisRooms. |
propertyId | Hotel ID in the OTA/Client's system. |
roomId | Room ID in the OTA/Client's system. |
Request JSON
{
"auth": {
"key": "key123***********"
},
"propertyId": "hotelId",
"roomId": "roomId"
}
Response Parameters
| Parameter | Requirement | Description |
|---|---|---|
message | Mandatory | Description for failure. Empty or informational on success. |
status | Mandatory | Result of the API call: success / failure. |
data | Mandatory | Array of rate plan objects. |
data[].rateplanId | Mandatory | Rate plan ID in the OTA/Client's system. |
data[].ratePlanName | Mandatory | Rate plan name in the OTA/Client's system. |
data[].occupancy | Mandatory | Supported occupancy types (SINGLE, DOUBLE, TRIPLE, QUAD, etc.). |
data[].validity.startDate | Optional | Rate plan validity start date (YYYY-MM-DD). |
data[].validity.endDate | Optional | Rate plan validity end date (YYYY-MM-DD). |
data[].commissionPerc | Optional | Commission percentage in the OTA/Client's system. |
data[].taxPerc | Optional | Tax percentage in the OTA/Client's system. |
data[].currency | Mandatory | Currency used in the OTA/Client's system. |
Response JSON
{
"message": "message for success/failure",
"status": "success/failure",
"data": [
{
"rateplanId": "15",
"ratePlanName": "CP",
"occupancy": ["SINGLE","DOUBLE","TRIPLE","QUAD","PENTA","HEXA",
"EXTRABED","EXTRAADULT","EXTRACHILD"],
"validity": {
"startDate": "2025-03-22",
"endDate": "2030-03-22"
},
"commissionPerc": "15.0",
"taxPerc": "15.0",
"currency": "USD"
}
]
}
3 Update Inventory
PurposeAxisRooms calls this endpoint to push real-time availability updates into the OTA's system. The OTA must accept these updates and return a success/failure response so the Channel Manager can confirm the sync. Date ranges are used to update multiple dates in a single call.
Request Parameters
| Parameter | Description |
|---|---|
auth.key | API key provided by AxisRooms. |
data.propertyId | Hotel ID in the OTA/Client's system. |
data.roomId | Room ID in the OTA/Client's system. |
data.inventory | Array of inventory objects for date ranges. |
inventory[].startDate | Start date for the update (YYYY-MM-DD). |
inventory[].endDate | End date for the update (YYYY-MM-DD). |
inventory[].free | Number of available rooms for the date range. |
Request JSON
{
"auth": { "key": "key123***********" },
"data": {
"propertyId": "hotelId",
"roomId": "roomId",
"inventory": [
{ "startDate": "2025-03-22", "endDate": "2025-03-22", "free": 3 },
{ "startDate": "2025-03-23", "endDate": "2025-03-23", "free": 15 }
]
}
}
Response JSON
{
"message": "message for success/failure",
"status": "success/failure"
}
4 Update Rate
PurposeAxisRooms calls this endpoint to push rate updates for a specific room and rate plan into the OTA's system. Rates are supplied per occupancy type (Single, Double, etc.) for each date range. The OTA must apply the rates and return a success/failure confirmation.
Request Parameters
| Parameter | Description |
|---|---|
auth.key | API key provided by AxisRooms. |
data.propertyId | Hotel ID in the OTA/Client's system. |
data.roomId | Room ID in the OTA/Client's system. |
data.rateplanId | Rate plan ID in the OTA/Client's system. |
data.rate | Array of rate objects for date ranges. |
rate[].startDate | Start date for the rate update (YYYY-MM-DD). |
rate[].endDate | End date for the rate update (YYYY-MM-DD). |
rate[].SINGLE | Rate for Single occupancy. |
rate[].DOUBLE | Rate for Double occupancy. |
Request JSON
{
"auth": { "key": "key123***********" },
"data": {
"propertyId": "hotelId",
"roomId": "roomId",
"rateplanId": "rateplanId",
"rate": [
{ "startDate": "2025-03-22", "endDate": "2025-03-22",
"SINGLE": 5300, "DOUBLE": 5700 },
{ "startDate": "2025-03-23", "endDate": "2025-03-23",
"SINGLE": 6100, "DOUBLE": 7600 }
]
}
}
Response JSON
{
"message": "message for success/failure",
"status": "success/failure"
}
5 Update Restrictions
PurposeAxisRooms calls this endpoint to push selling restriction updates for a rate plan to the OTA. Restrictions control availability windows — Status (Open/Close), Closed to Arrival (CTA), Closed to Departure (CTD), and Minimum Length of Stay (MLOS). The OTA must apply the restrictions for the specified date periods.
Request Parameters
| Parameter | Description |
|---|---|
auth.key | API key provided by AxisRooms. |
data[].propertyId | Hotel ID in the OTA/Client's system. |
data[].roomDetails[].roomId | Room ID in the OTA/Client's system. |
ratePlanDetails[].ratePlanId | Rate plan ID in the OTA/Client's system. |
restrictions.periods[].startDate | Start date of the restriction period (YYYY-MM-DD). |
restrictions.periods[].endDate | End date of the restriction period (YYYY-MM-DD). |
restrictions.type | Restriction type: Status / CTA / CTD / MLOS. |
restrictions.value | Restriction value: Open / Close (for Status/CTA/CTD); integer (for MLOS). |
Restriction Types
| Type | Values | Description |
|---|---|---|
Status | Open / Close | Opens or closes the rate plan for selling. |
CTA | Open / Close | Closed to Arrival — prevents guests from checking in on these dates. |
CTD | Open / Close | Closed to Departure — prevents guests from checking out on these dates. |
MLOS | Integer (e.g. 2) | Minimum Length of Stay — sets the minimum nights required for a booking. |
Request JSON
{
"auth": { "key": "key123***********" },
"data": [
{
"propertyId": "hotelId",
"roomDetails": [
{
"roomId": "roomId",
"ratePlanDetails": [
{
"ratePlanId": "123456",
"restrictions": {
"periods": [
{ "startDate": "2025-03-22", "endDate": "2025-03-22" }
],
"type": "Status/CTA/CTD/MLOS",
"value": "Open/Close/2"
}
}
]
}
]
}
]
}
Response JSON
{
"message": "message for success/failure",
"status": "success/failure"
}
6 Push Booking API
PurposeThe OTA/Channel calls this AxisRooms-hosted endpoint to push booking notifications to the Channel Manager. This covers new confirmed bookings, modifications, and cancellations. AxisRooms receives the booking payload and routes it into the connected PMS. This is the only endpoint hosted by AxisRooms — all other endpoints are hosted by the OTA.
Request Parameters
| Parameter | Requirement | Description |
|---|---|---|
accessKey | Mandatory | API key provided by AxisRooms. |
bookingStatus | Mandatory | Booking status: confirmed / modified / cancelled. |
bookedTime | Mandatory | Timestamp of booking generation. |
cancelledTime | Conditional | Cancellation timestamp. Required when bookingStatus is cancelled. |
modifiedTime | Conditional | Modification timestamp. Required when bookingStatus is modified. |
confirmationNo | Mandatory | Booking/confirmation ID in the OTA/Client's system. |
hotelId | Mandatory | Hotel ID in the OTA/Client's system. |
supplierAmount | Mandatory | Supplier amount for the booking. |
taxes | Mandatory | Tax amount for the booking. |
commission | Mandatory | Commission amount for the booking. |
totalAmount | Mandatory | Total booking amount. |
checkInDate | Mandatory | Guest check-in date. |
checkOutDate | Mandatory | Guest check-out date. |
totalAdults | Mandatory | Total number of adults. |
totalChildren | Mandatory | Total number of children. |
bookedBy | Optional | Booker name when different from the guest. |
customerEmail | Mandatory | Guest email address. |
phoneNo | Mandatory | Guest phone number. |
gstNumber | Optional | GST/tax registration number. |
allianceGuestCode | Optional | Alliance guest identifier. |
agentId | Optional | Travel agent identifier. |
agentName | Optional | Travel agent name (if applicable). |
agentAddress | Optional | Travel agent address. |
bookingSource | Optional | Source from which the booking was received. |
paymentStatus | Mandatory | Payment status code. |
enhancements | Optional | Array of additional services or enhancements associated with the booking. |
enhancements[].amountBeforeTax | Optional | Enhancement amount before tax. |
enhancements[].totalAmount | Optional | Total enhancement amount including tax. |
enhancements[].quantity | Optional | Quantity of the enhancement. |
enhancements[].name | Optional | Name of the enhancement. |
roomStays | Mandatory | Array of room stay objects. |
roomStays[].rateId | Mandatory | Rate ID for the room stay. |
roomStays[].rateName | Mandatory | Rate plan name (CP/AP/MAP/EP). |
roomStays[].roomId | Mandatory | Room ID. |
roomStays[].noOfUnits | Mandatory | Number of room units booked. |
roomStays[].guestDetails | Mandatory | Guest name, adults, and children count. |
roomStays[].dailyPrice | Mandatory | Array of date-wise pricing objects. |
specialRequests | Optional | Array of special request strings. |
Request JSON
{
"accessKey": "dn23$4jsfa@jkg#lke-j43kj",
"bookingStatus": "confirmed",
"bookedTime": "2026-07-07 16:39:20",
"confirmationNo": "HZTest444",
"hotelId": 10029,
"supplierAmount": 9975.42,
"taxes": 870.0,
"commission": 500.0,
"totalAmount": 10475.42,
"checkInDate": "2026-07-11",
"checkOutDate": "2026-07-13",
"totalAdults": 4,
"totalChildren": 3,
"bookedBy": "Test user",
"customerEmail": "dashrathitest@axisrooms.com",
"phoneNo": "9986543212",
"gstNumber": "1234567890",
"allianceGuestCode": "171999326",
"agentId": "2617",
"agentName": "Test Agent",
"agentAddress": "Indiranagar",
"bookingSource": "Axisrooms-booking",
"paymentStatus": 0,
"enhancements": [
{
"amountBeforeTax": 4800.0,
"totalAmount": 5664.0,
"quantity": 1,
"name": "Prepaid Food B/F Adult"
}
],
"roomStays": [
{
"rateId": "4847",
"rateName": "Best Available Rate Room Only",
"roomId": "11706",
"noOfUnits": 1,
"guestDetails": {
"guestName": "Joseph Stalin",
"adults": 2,
"children": 2
},
"dailyPrice": [
{
"date": "2026-07-11",
"amount": 4987.71
},
{
"date": "2026-07-12",
"amount": 4987.71
}
]
},
{
"rateId": "4847",
"rateName": "Best Available Rate Room Only",
"roomId": "11706",
"noOfUnits": 1,
"guestDetails": {
"guestName": "Joseph Stalin",
"adults": 2,
"children": 2
},
"dailyPrice": [
{
"date": "2026-07-11",
"amount": 4987.71
},
{
"date": "2026-07-12",
"amount": 4987.71
}
]
}
],
"specialRequests": [
"Early Check-in",
"High Floor Room"
]
}
Response JSON
{
"message": "message for success/failure",
"status": "success/failure"
}
Quick Reference
5. Endpoint Summary
| # | API Name | Method | Endpoint | Hosted By |
|---|---|---|---|---|
| 1 | Get ProductInfo | POST | http://clientUrl/productInfo | OTA / Client |
| 2 | Get RateplanInfo | POST | http://clientUrl/ratePlanInfo | OTA / Client |
| 3 | Update Inventory | POST | http://clientUrl/inventoryUpdate | OTA / Client |
| 4 | Update Rate | POST | http://clientUrl/rateUpdate | OTA / Client |
| 5 | Update Restrictions | POST | http://clientUrl/restrictionUpdate | OTA / Client |
| 6 | Push Booking API | POST | /api/clientPushBookingNotif | AxisRooms |