Channex.io
  • Channex.io Documentation
  • About Channex & FAQ
  • Changelog
  • For OTA
    • Intro
    • Channex Shopping API
    • Open Channel API
  • FOR PMS
    • API Reference
    • API Rate Limits
    • Property Size Limits
    • Properties Collection
    • Property Users Collection
    • Groups Collection
    • Group Users Collection
    • Room Types Collection
    • Rate Plans Collection
    • Availability and Rates
    • Webhook Collection
    • Bookings Collection
    • Booking CRS API
    • Channel API
    • Photos Collection
    • Hotel Policy Collection
    • Facilities Collection
    • Taxes and Tax Sets
    • Messages Collection
    • Reviews Collection
    • Availability Rules Collection
    • Channel Codes
    • Channel IFrame
    • PMS Certification Tests
  • Guides
    • PMS Integration Guide
    • Best Practices Guide
    • Test Account for Booking.com
    • Test Accounts for Airbnb
    • Channex Retention Periods
    • Guide to PCI
  • Application Documentation
    • Overview of App Documentation
    • Dashboard
    • Properties and Groups Management
    • Property Tasks
    • Rooms Management
    • Inventory Management
    • Channels Management
    • Channel Log
    • Bookings Management
    • Availability Rules
    • API Key Access
    • Change Log Feature
  • Google Guide
    • Connect Google Channel
    • Google Vacation Rental
    • My Hotel Shop (MHS) Google
  • Channel Mapping Guides
    • Agoda
    • Airbnb
    • Booking.com
    • Ctrip / Trip.com
    • Despegar
    • Dida Travel
    • Emerging Travel
    • Expedia
    • Feratel
    • Getaroom
    • Hipcamp
    • Hostelworld
    • Hopper
    • Hopper Homes
    • Hotelbeds
    • HotelTonight
    • HyperGuest
    • HRS
    • Inntopia
    • Instant Booking Page
    • MakeMyTrip / Goibibo
    • Mg Bedbank
    • OpenGDS
    • Roibos
    • Traveloka
    • Tiket.com
    • VRBO
  • App Guide
    • Apaleo
    • PCI App
Powered by GitBook
On this page
  • Intro
  • Overrides Logic
  • Example
  • Edge Cases
  • FAQ
  • API Methods
  • Create Booking
  • Update Booking

Was this helpful?

  1. FOR PMS

Booking CRS API

API Methods to work with Booking CRS feature

This feature is still in Beta and you should be careful to modify OTA bookings with any changes.

API is Experimental and can be changed.

Intro

Booking CRS is an API and UI which allows the user to create, modify and cancel bookings at Channex.io.

This API is designed to cover few use cases such us:

  • keep information about Booking up to date if some changes is applied to Booking at PMS side

  • push information about Bookings created via Offline sources to be able process it over regular pipeline

By using those API you are able to:

  • create a new Bookings

  • modify existing Bookings (even if it came over OTA)

  • cancel existing Bookings (even if it came over OTA)

  • enrich existing Bookings by custom meta-information to exchange it with integrated partners such us Smart Lock service, Housekeeping Apps and etc.

Custom Information

Booking CRS API allow you to put custom information through meta field at next objects:

  • booking

  • customer

  • room

You are able to put any information inside this fields in format what is suitable for your use-case.

Overrides Logic

The Booking CRS API allows you to update bookings that originate from OTAs (Online Travel Agencies). This feature helps keep bookings up to date when modifications are made on the property side. However, it's essential to understand the logic behind this functionality.

Channex operates using Booking Revisions, which act as snapshots of a booking at a given time. Each time an OTA provides an update, a new revision is created, and the existing booking is updated. These snapshots do not inherit data from previous revisions.

However, when you start using the Booking CRS API to modify OTA bookings, the system shifts to a diff-based logic for those bookings.

Each time we receive a new revision from an OTA and the affected booking has any revisions from the CRS API, we update the incoming data by calculating the difference between the previous OTA revision and the current revision.

Example

  1. An OTA sends a booking for August 25, 2025, for a Double Room, under the name John Doe.

  2. The PMS (Property Management System) moves the booking from a Double Room to a Single Room and updates the customer name to Hanna Doe.

  3. The OTA later sends a modification where the customer changes their name to Alice Cooper, but the date remains August 25, 2025, and the room type remains Double Room.

How the system processes this:

  • When we receive the OTA modification, we compare it with the original booking and calculate the differences.

  • In this case, the only change from the OTA is the customer name.

  • As a result, we take the latest CRS revision (which has the Single Room) and apply the new customer name from the OTA update.

Final outcome: The booking will be for August 25, 2025, in a Single Room, under the name Alice Cooper.

Edge Cases

  1. OTA Overrides Your Changes

    • If you change the room type from Double to Single via CRS and then receive an OTA modification that sets the room type to Triple, the final booking will reflect the Triple Room as per the OTA update.

  2. Date Changes from OTA

    • If the guest modifies their booking dates via the OTA (e.g., changes the arrival date or extends their stay), the system will reset the selected room type to the original room type from the latest OTA revision.

FAQ

What happens after you make any edits to a booking?

We will create a modification and the booking will be sent to the PMS as usual

What happens if the OTA will send a modification after you have modified it?

We will check the last OTA booking vs the new version and only save the changes, it will not revert your changes that you made. More details below

Why use this feature?

If you would like Channex to have the same booking data as your PMS, it will be possible to connect applications in the future that need to read and edit bookings. Example: check-in apps. door locks, Revenue Management, Upselling etc.

API Methods

Create Booking

Property should have Booking CRS App installed to have access for Booking CRS API

POST /api/v1/bookings

Payload:

{
  "booking": {
    "property_id": "60c85c87-4119-4129-ba33-f63a5d617479",
    "ota_reservation_code": "113",
    "ota_name": "Offline",
    "arrival_date": "2025-10-10",
    "departure_date": "2025-10-11",
    "arrival_hour": "18:00",
    "services": [
      {
        "is_inclusive": true,
        "name": "Cancellation Fee",
        "nights": 0,
        "persons": 0,
        "price_mode": "Per stay",
        "price_per_unit": "6.75",
        "total_price": "6.75",
        "type": "Cancellation Fee"
      }
    ],
    "deposits": [
      {
        "amount": "100.00",
        "currency": "GBP",
        "charget_at": "2019-05-05T19:20:32.001023",
        "type": "credit_card",
        "notes": "Card ending 1234",
        "meta": {}
      }
    ],
    "payment_collect": "ota",
    "payment_type": "bank_transfer",
    "currency": "GBP",
    "ota_commission": "2.00",
    "notes": "guest notes",
    "meta": null,
    "customer": {
      "name": "John",
      "zip": "ZIP123456",
      "address": "Sonner str. 38",
      "mail": "john@doe.com",
      "country": "GB",
      "city": "London",
      "phone": "+44 123 123456",
      "surname": "Doe"
    },
    "rooms": [
      {
        "room_type_id": "6db77022-a078-49be-9270-cdb01d731730",
        "rate_plan_id": "6b27f60c-e0ef-4600-aeb5-3fcb6ff2a54e",
        "days": {
          "2025-10-10": "100.00"
        },
        "services": [],
        "taxes": [
          {
            "is_inclusive": true,
            "name": "VAT (20%)",
            "nights": 1,
            "persons": 2,
            "price_mode": "Per booking",
            "price_per_unit": "13.33",
            "total_price": "13.33",
            "type": "Value Added Tax (VAT)",
            "version": null
          }
        ],
        "guests": [
          {
            "name": "John",
            "surname": "Doe"
          }
        ],
        "occupancy": {
          "adults": 1,
          "children": 0,
          "infants": 0,
          "ages": []
        }
      }
    ]
  }
}
{
    "data": {
        "attributes": {
            "id": "38add208-1bc5-4be4-9063-8968ad489681",
            "status": "new",
            "booking_id": "38add208-1bc5-4be4-9063-8968ad489681",
            "unique_id": "OFL-113",
            "revision_id": "c1e2198a-92e6-4c27-b964-f63c60d3243a"
        },
        "id": "38add208-1bc5-4be4-9063-8968ad489681",
        "type": "booking"
    }
}

Operation to create Booking and save it inside database is asynchronous, as result, if you trigger request immediately after receiving response you can get 404 Error.

Create Booking operation working based at regular logic and will trigger all associated web-hooks and availability changes (depending to Property settings).

Update Booking

Property should have Booking CRS App installed to have access for Booking CRS API.

PUT /api/v1/bookings/:booking_id

Payload:

{
  "booking": {
    "status": "modified",
    "property_id": "60c85c87-4119-4129-ba33-f63a5d617479",
    "ota_reservation_code": "113",
    "ota_name": "Offline",
    "arrival_date": "2025-10-10",
    "departure_date": "2025-10-11",
    "arrival_hour": "18:00",
    "services": [
      {
        "is_inclusive": true,
        "name": "Cancellation Fee",
        "nights": 0,
        "persons": 0,
        "price_mode": "Per stay",
        "price_per_unit": "6.75",
        "total_price": "6.75",
        "type": "Cancellation Fee"
      }
    ],
    "deposits": [
      {
        "amount": "100.00",
        "currency": "GBP",
        "charget_at": "2019-05-05T19:20:32.001023",
        "type": "credit_card",
        "notes": "Card ending 1234",
        "meta": {}
      }
    ],
    "payment_collect": "ota",
    "payment_type": "bank_transfer",
    "currency": "GBP",
    "ota_commission": "2.00",
    "notes": "guest notes",
    "meta": null,
    "customer": {
      "name": "John",
      "zip": "ZIP123456",
      "address": "Sonner str. 38",
      "mail": "john@doe.com",
      "country": "GB",
      "city": "London",
      "phone": "+44 123 123456",
      "surname": "Doe"
    },
    "rooms": [
      {
        "room_type_id": "6db77022-a078-49be-9270-cdb01d731730",
        "rate_plan_id": "6b27f60c-e0ef-4600-aeb5-3fcb6ff2a54e",
        "days": {
          "2025-10-10": "100.00"
        },
        "services": [],
        "taxes": [
          {
            "is_inclusive": true,
            "name": "VAT (20%)",
            "nights": 1,
            "persons": 2,
            "price_mode": "Per booking",
            "price_per_unit": "13.33",
            "total_price": "13.33",
            "type": "Value Added Tax (VAT)",
            "version": null
          }
        ],
        "guests": [
          {
            "name": "John",
            "surname": "Doe"
          }
        ],
        "occupancy": {
          "adults": 1,
          "children": 0,
          "infants": 0,
          "ages": []
        }
      }
    ]
  }
}

Success Response

{
    "data": {
        "attributes": {
            "id": "38add208-1bc5-4be4-9063-8968ad489681",
            "status": "modified",
            "booking_id": "38add208-1bc5-4be4-9063-8968ad489681",
            "unique_id": "OFL-113",
            "revision_id": "c1e2198a-92e6-4c27-b964-f63c60d3243a"
        },
        "id": "38add208-1bc5-4be4-9063-8968ad489681",
        "type": "booking"
    }
}

Operation to create Booking and save it inside database is asynchronous, as result, if you trigger request immediately after receiving response you can get 404 Error.

Update Booking operation working based at regular logic and will trigger all associated web-hooks and availability changes (depending to Property settings).

PreviousBookings CollectionNextChannel API

Last updated 2 days ago

Was this helpful?

To get more information about fields, please take a look into our .

Public Booking API
12KB
booking_crs.yml
Booking CRS OpenSpec collection