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:

  1. Share Endpoints & CredentialsThe OTA provides its client-hosted API endpoints. AxisRooms shares staging credentials and sample property mappings.
  2. Fetch Mapping DataAxisRooms calls Get ProductInfo and Get RateplanInfo to retrieve room and rate plan details for mapping inside the Channel Manager.
  3. Receive ARI UpdatesThe OTA's endpoints accept real-time inventory, rate, and restriction updates pushed by AxisRooms.
  4. Push Booking NotificationsThe OTA pushes confirmed, modified, and cancelled bookings to the AxisRooms booking endpoint.
  5. 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

POST http://clientUrl/productInfo Client / OTA Endpoint
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

ParameterDescription
authContains the authorization elements.
auth.keyAPI key provided by AxisRooms.
propertyIdHotel ID in the OTA/Client's system.

Request JSON

{
   "auth": {
      "key": "key123***********"
   },
   "propertyId": "hotelId"
}

Response Parameters

ParameterDescription
messageDescription for failure. Empty or any informational message on success.
statusResult of the API call. Expected values: success / failure.
dataArray containing room information.
data[].nameRoom name in the OTA/Client's system.
data[].idRoom 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

POST http://clientUrl/ratePlanInfo Client / OTA Endpoint
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

ParameterDescription
authContains the authorization elements.
auth.keyAPI key provided by AxisRooms.
propertyIdHotel ID in the OTA/Client's system.
roomIdRoom ID in the OTA/Client's system.

Request JSON

{
   "auth": {
      "key": "key123***********"
   },
   "propertyId": "hotelId",
   "roomId": "roomId"
}

Response Parameters

ParameterRequirementDescription
messageMandatoryDescription for failure. Empty or informational on success.
statusMandatoryResult of the API call: success / failure.
dataMandatoryArray of rate plan objects.
data[].rateplanIdMandatoryRate plan ID in the OTA/Client's system.
data[].ratePlanNameMandatoryRate plan name in the OTA/Client's system.
data[].occupancyMandatorySupported occupancy types (SINGLE, DOUBLE, TRIPLE, QUAD, etc.).
data[].validity.startDateOptionalRate plan validity start date (YYYY-MM-DD).
data[].validity.endDateOptionalRate plan validity end date (YYYY-MM-DD).
data[].commissionPercOptionalCommission percentage in the OTA/Client's system.
data[].taxPercOptionalTax percentage in the OTA/Client's system.
data[].currencyMandatoryCurrency 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

POST http://clientUrl/inventoryUpdate Client / OTA Endpoint
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

ParameterDescription
auth.keyAPI key provided by AxisRooms.
data.propertyIdHotel ID in the OTA/Client's system.
data.roomIdRoom ID in the OTA/Client's system.
data.inventoryArray of inventory objects for date ranges.
inventory[].startDateStart date for the update (YYYY-MM-DD).
inventory[].endDateEnd date for the update (YYYY-MM-DD).
inventory[].freeNumber 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

POST http://clientUrl/rateUpdate Client / OTA Endpoint
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

ParameterDescription
auth.keyAPI key provided by AxisRooms.
data.propertyIdHotel ID in the OTA/Client's system.
data.roomIdRoom ID in the OTA/Client's system.
data.rateplanIdRate plan ID in the OTA/Client's system.
data.rateArray of rate objects for date ranges.
rate[].startDateStart date for the rate update (YYYY-MM-DD).
rate[].endDateEnd date for the rate update (YYYY-MM-DD).
rate[].SINGLERate for Single occupancy.
rate[].DOUBLERate 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

POST http://clientUrl/restrictionUpdate Client / OTA Endpoint
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

ParameterDescription
auth.keyAPI key provided by AxisRooms.
data[].propertyIdHotel ID in the OTA/Client's system.
data[].roomDetails[].roomIdRoom ID in the OTA/Client's system.
ratePlanDetails[].ratePlanIdRate plan ID in the OTA/Client's system.
restrictions.periods[].startDateStart date of the restriction period (YYYY-MM-DD).
restrictions.periods[].endDateEnd date of the restriction period (YYYY-MM-DD).
restrictions.typeRestriction type: Status / CTA / CTD / MLOS.
restrictions.valueRestriction value: Open / Close (for Status/CTA/CTD); integer (for MLOS).

Restriction Types

TypeValuesDescription
StatusOpen / CloseOpens or closes the rate plan for selling.
CTAOpen / CloseClosed to Arrival — prevents guests from checking in on these dates.
CTDOpen / CloseClosed to Departure — prevents guests from checking out on these dates.
MLOSInteger (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

POST /api/clientPushBookingNotif AxisRooms Endpoint
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

ParameterRequirementDescription
accessKeyMandatoryAPI key provided by AxisRooms.
bookingStatusMandatoryBooking status: confirmed / modified / cancelled.
bookedTimeMandatoryTimestamp of booking generation.
cancelledTimeConditionalCancellation timestamp. Required when bookingStatus is cancelled.
modifiedTimeConditionalModification timestamp. Required when bookingStatus is modified.
confirmationNoMandatoryBooking/confirmation ID in the OTA/Client's system.
hotelIdMandatoryHotel ID in the OTA/Client's system.
supplierAmountMandatorySupplier amount for the booking.
taxesMandatoryTax amount for the booking.
commissionMandatoryCommission amount for the booking.
totalAmountMandatoryTotal booking amount.
checkInDateMandatoryGuest check-in date.
checkOutDateMandatoryGuest check-out date.
totalAdultsMandatoryTotal number of adults.
totalChildrenMandatoryTotal number of children.
bookedByOptionalBooker name when different from the guest.
customerEmailMandatoryGuest email address.
phoneNoMandatoryGuest phone number.
gstNumberOptionalGST/tax registration number.
allianceGuestCodeOptionalAlliance guest identifier.
agentIdOptionalTravel agent identifier.
agentNameOptionalTravel agent name (if applicable).
agentAddressOptionalTravel agent address.
bookingSourceOptionalSource from which the booking was received.
paymentStatusMandatoryPayment status code.
enhancementsOptionalArray of additional services or enhancements associated with the booking.
enhancements[].amountBeforeTaxOptionalEnhancement amount before tax.
enhancements[].totalAmountOptionalTotal enhancement amount including tax.
enhancements[].quantityOptionalQuantity of the enhancement.
enhancements[].nameOptionalName of the enhancement.
roomStaysMandatoryArray of room stay objects.
roomStays[].rateIdMandatoryRate ID for the room stay.
roomStays[].rateNameMandatoryRate plan name (CP/AP/MAP/EP).
roomStays[].roomIdMandatoryRoom ID.
roomStays[].noOfUnitsMandatoryNumber of room units booked.
roomStays[].guestDetailsMandatoryGuest name, adults, and children count.
roomStays[].dailyPriceMandatoryArray of date-wise pricing objects.
specialRequestsOptionalArray 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 NameMethodEndpointHosted By
1Get ProductInfoPOSThttp://clientUrl/productInfoOTA / Client
2Get RateplanInfoPOSThttp://clientUrl/ratePlanInfoOTA / Client
3Update InventoryPOSThttp://clientUrl/inventoryUpdateOTA / Client
4Update RatePOSThttp://clientUrl/rateUpdateOTA / Client
5Update RestrictionsPOSThttp://clientUrl/restrictionUpdateOTA / Client
6Push Booking APIPOST/api/clientPushBookingNotifAxisRooms