Real-time Push Reservation

Real-time push reservations provide your application with instant notifications of new/updated reservations as
they are received by HotelRunner.

-

Create a Callback URL

When we have new updates to send your server, we do a simple POST with a payload containing updates to a URL on your server.
This callback URL must be HTTPS and support POST method.

https://yourdomain.com/callback
Content Type: application/x-www-form-urlencoded

The POST you will see coming will look like this:

var data = new FormData();
data.append("data", "STRING_JSON_RESERVATION_DATA");
var xhr = new XMLHttpRequest();
xhr.open("POST", "https://yourdomain.com/callback?token={TOKEN}&hr_id={HR_ID}");
xhr.send(data);

We send data as post form parameter.

The above url includes JSON data structured like this:

{
    "reservations": [
        {
            "reservation_id": 37515739,
            "hr_number": "R377873409",
            "provider_number": null,
            "pms_number": null,
            "channel": "online",
            "channel_display": "Online",
            "source_display": null,
            "state": "reserved",
            "modified": false,
            "total_guests": 3,
            "total_rooms": 1,
            "guest": "John Doe",
            "firstname": "John",
            "lastname": "Doe",
            "country": "TR",
            "guest_national_id": "12345678910",
            "guest_is_citizen": true,
            "cancel_reason": null,
            "completed_at": "2026-02-23T16:28:12.000+03:00",
            "updated_at": "2026-02-23T16:32:20.000+03:00",
            "sub_total": 110.0,
            "extras_total": 20.0,
            "adjustments_total": -0.0,
            "tax_total": 13.928,
            "item_total": "130.0",
            "total": 130.0,
            "currency": "USD",
            "checkin_date": "2026-02-23",
            "checkout_date": "2026-02-25",
            "note": "Baby crib",
            "payment": "cash",
            "payment_details": null,
            "paid_amount": 13.0,
            "pms_version_generated": true,
            "address": {
                "city": "Cesme",
                "state": "35",
                "country": "Turkey (TR)",
                "country_code": "TR",
                "phone": "5555555555",
                "email": "john@hotelrunner.com",
                "street": "Cesme Mh. Cesme Cd. No:1",
                "street_2": "",
                "postal_code": "36040"
            },
            "billing_address": {
                "bill_type": null,
                "city": "Izmir",
                "state": "Izmir",
                "country": "Turkey",
                "country_code": "TR",
                "phone": "+905555555555",
                "email": "john@hotelrunner.com",
                "street": "Cesme",
                "street_2": "",
                "tax_office": "",
                "tax_id": "",
                "company": "",
                "firstname": "John",
                "lastname": "Doe"
            },
            "extra_adjustments_details": [],
            "adjustment_details": [],
            "price_adjustments_details": [],
            "next_states": [
                "confirm"
            ],
            "system_message": null,
            "system_url": "http://testhotel.hotelrunner.com/admin/orders/R377873409",
            "deposit_tax_inclusive": true,
            "requires_response": true,
            "cancelation_policy": [],
            "rooms": [
                {
                    "id": 32924103,
                    "state": "reserved",
                    "code": "HR:823753",
                    "number": null,
                    "voucher_number": "R377873409",
                    "availability_group": "HR:823753",
                    "rate_code": "HR:823753",
                    "rate_plan_code": "HR:823753",
                    "inv_code": "HR:823753",
                    "non_refundable": false,
                    "price": 110.0,
                    "total": 130.0,
                    "nights": 2,
                    "meal_plan": "bed-breakfast",
                    "meal_plan_presentation": "Bed and breakfast",
                    "total_guest": 3,
                    "total_adult": 2,
                    "child_ages": [
                        1
                    ],
                    "name": "Family Room",
                    "name_presentation": "Family Room",
                    "checkin_date": "2026-02-23",
                    "checkout_date": "2026-02-25",
                    "extra_info": "",
                    "daily_prices": [
                        {
                            "date": "2026-02-23",
                            "price": 55.0,
                            "original_price": 55.0,
                            "discount": 0.0,
                            "rate_code": "HR:823753",
                            "version": "v2"
                        },
                        {
                            "date": "2026-02-24",
                            "price": 55.0,
                            "original_price": 55.0,
                            "discount": 0.0,
                            "rate_code": "HR:823753",
                            "version": "v2"
                        }
                    ],
                    "extras": [
                        {
                            "name": "Airport Transfer",
                            "price": 20.0,
                            "base_price": "20.0",
                            "code": "",
                            "promotions_total": "0.0",
                            "is_extra": true,
                            "total": 20.0,
                            "quantity": 1,
                            "dates": {},
                            "repeat_type": "first_night"
                        },
                        {
                            "name": "VAT10 (10.0% Included in price)",
                            "price": 11.607999999999999,
                            "included_in_price": true
                        },
                        {
                            "name": "VAT2 (2.0% Included in price)",
                            "price": 2.3209999999999997,
                            "included_in_price": true
                        }
                    ],
                    "updated_at": "2026-02-23T16:26:42.000+03:00",
                    "meta": {},
                    "extras_total": 20.0,
                    "fixed_adjustments_total": 0.0,
                    "included_taxes_total": 13.928999999999998,
                    "excluded_fees_and_taxes_total": 0.0,
                    "cancelation_refund_total": 0.0,
                    "cancelation_refund_tax_type": "exclusive",
                    "cancelation_penalty_total": 0.0,
                    "cancelation_penalty_tax_type": "inclusive",
                    "promotions_total": 0.0,
                    "room_base_price": 110.0,
                    "room_sub_total": 130.0,
                    "comments": [
                        {
                            "body": "Baby crib",
                            "channel_note": false,
                            "housekeeping": null,
                            "guest_visible": true
                        }
                    ]
                }
            ],
            "payments": [
                {
                    "state": "checkout",
                    "id": 34909131,
                    "amount": "130.0",
                    "currency": "USD",
                    "exchanged_amount": "130.0",
                    "exchange_currency": "USD",
                    "exchange_rate": "0.0",
                    "paid_at": null,
                    "payment_method_name": "Pay at the hotel",
                    "payment_method": "cash",
                    "installment": 0,
                    "response_code": null
                },
                {
                    "state": "completed",
                    "id": 34909219,
                    "amount": "13.0",
                    "currency": "USD",
                    "exchanged_amount": "13.0",
                    "exchange_currency": "USD",
                    "exchange_rate": "0.0",
                    "paid_at": "2026-02-23T16:32:20.000+03:00",
                    "payment_method_name": "Pay at the hotel",
                    "payment_method": "cash",
                    "installment": 0,
                    "response_code": null
                }
            ],
            "meta_data_conversions": [],
            "channel_profile_data_conversions": null,
            "integration_echo_details": null,
            "message_uid": "cc90fb5160e2ea7b7f4c493b9e8ec88d"
        }
    ],
    "count": 1,
    "current_page": 1,
    "pages": 1
}

The above command should return json structured like this:

 {
    "status": "ok"
 }

Reservation Object

Name Description
reservation_id Unique reservation ID on HotelRunner
hr_number Reservation code on HotelRunner
provider_number Reservation code on Sales Channel (can be blank*)
pms_number Reservation code generated by PMS (can be blank*)
channel Sales channel code
channel_display Sales channel name
source_display Source channel display name (can be blank*)
state Reservation status on HotelRunner (reserved,confirmed,canceled)*
modified Indicates that whether the reservation has been modified after the creation
total_guests Total number of guests in the reservation
total_rooms Total number of rooms in the reservation
guest Guest name, who made the reservation
firstname Guest first name
lastname Guest last name
country Guest country code
guest_national_id Guest national ID (can be blank*)
guest_is_citizen Indicates whether the guest is citizen of property country
cancel_reason Cancel reason (can be blank*)
completed_at The time that shows when HotelRunner received the reservation (ISO-8601)
updated_at The time that shows when HotelRunner received the latest update (ISO-8601)
sub_total Sub total (excluding taxes and extras)
extras_total Extras total (tax not included)
adjustments_total Adjustments total (Price adjustments total that made by Property Admin)
tax_total Tax total
item_total Total amount before final adjustments
total Grand total
currency Currency (ISO-4217)
checkin_date Check-in Date
checkout_date Check-out Date
note Guest note (can be blank*)
payment Payment method information (credit_card, bank_transfer, cash, paypal)
payment_details Additional payment details (can be blank*)
paid_amount Paid amount
pms_version_generated Indicates whether the PMS compatible reservation version is generated
requires_response Indicates the ability of a PMS that can be able to send state updates or not
deposit_tax_inclusive Indicates whether deposit includes taxes
address See address json structure
billing_address See billing_address json structure
extra_adjustments_details Detailed information about extra adjustments (can be empty)
adjustment_details Detailed information about adjustments (can be empty)
price_adjustments_details Detailed information about price adjustments (can be empty)
cancelation_policy Cancellation policy rules applied to the reservation
rooms See rooms json structure
payments See payments json structure
meta_data_conversions Metadata conversion details (can be empty)
integration_echo_details Integration echo details (can be blank*)
message_uid Unique message identifier

Address

Name Description
address > city Guest city
address > state Guest state or province
address > country Guest country name
address > country_code Guest country code (ISO-3166)
address > phone Guest phone number
address > email Guest email address
address > street Guest street address
address > street_2 Additional address information (can be blank*)
address > postal_code Postal code of the guest address

Billing Address

Name Description
billing_address > bill_type Billing type (can be blank*)
billing_address > city Billing city
billing_address > state Billing state or province
billing_address > country Billing country name
billing_address > country_code Billing country code
billing_address > phone Billing phone number
billing_address > email Billing email address
billing_address > street Billing street address
billing_address > street_2 Additional billing street information (can be blank*)
billing_address > tax_office Tax office name (can be blank*)
billing_address > tax_id Tax identification number (can be blank*)
billing_address > company Company name for billing (can be blank*)
billing_address > firstname Billing contact first name
billing_address > lastname Billing contact last name

Rooms

Name Description
rooms > id Room reservation ID
rooms > state The line item state in reservation (reserved,confirmed,canceled)*
rooms > code Inventory code
rooms > number Assigned room number (can be blank*)
rooms > voucher_number Reservation voucher number
rooms > availability_group Inventory availability group code
rooms > rate_code Rate Code
rooms > rate_plan_code Rate plan code identifier
rooms > inv_code Inventory Code (Allocation group)
rooms > non_refundable Indicates whether the rate is non-refundable
rooms > price Total price without tax (BeforeTax)
rooms > total Total price (AfterTax)
rooms > nights Number of nights
rooms > meal_plan Meal plan code
rooms > meal_plan_presentation Meal plan display name
rooms > total_guest Total guest count in the room
rooms > total_adult Adult guest count
rooms > child_ages Child ages list
rooms > name Room type name
rooms > name_presentation Room type display name
rooms > checkin_date Room check-in date
rooms > checkout_date Room check-out date
rooms > extra_info Extra information for room (can be blank*)
rooms > daily_prices See daily_prices json structure
rooms > extras See extras json structure
rooms > updated_at Last update timestamp for the room line
rooms > meta Additional metadata
rooms > extras_total Extras total amount for the room
rooms > fixed_adjustments_total Fixed adjustments total
rooms > included_taxes_total Included taxes total
rooms > excluded_fees_and_taxes_total Excluded taxes and fees total
rooms > cancelation_refund_total Refund total for cancellation
rooms > cancelation_refund_tax_type Refund tax calculation type
rooms > cancelation_penalty_total Cancellation penalty total
rooms > cancelation_penalty_tax_type Penalty tax calculation type
rooms > promotions_total Promotions total applied to the room
rooms > room_base_price Room base price before extras
rooms > room_sub_total Room subtotal including extras before tax
rooms > comments See comments json structure

Daily Prices

Name Description
rooms > daily_prices > date Date of the nightly rate
rooms > daily_prices > price Final nightly price applied for the room
rooms > daily_prices > original_price Original nightly price before discounts
rooms > daily_prices > discount Discount amount applied to the nightly rate
rooms > daily_prices > rate_code Rate code applied for the nightly price
rooms > daily_prices > version Pricing calculation version

Extras

Name Description
rooms > extras > name Extra service or tax name
rooms > extras > price Price of the extra item
rooms > extras > base_price Base price of the extra item before promotions
rooms > extras > code Extra service code (can be blank*)
rooms > extras > promotions_total Total promotion discount applied to the extra
rooms > extras > is_extra Indicates whether the item is an extra service or a tax
rooms > extras > total Total amount of the extra item
rooms > extras > quantity Quantity of the extra item
rooms > extras > dates Dates that the extra applies to (can be empty)
rooms > extras > repeat_type Extra service repetition type (first_night, per_night, etc.)
rooms > extras > included_in_price Indicates whether the tax is included in the room price

Comments

Name Description
rooms > comments > body Comment content
rooms > comments > channel_note Indicates whether the comment is coming from the channel
rooms > comments > housekeeping Housekeeping related comment flag (can be null)
rooms > comments > guest_visible Indicates whether the comment is visible to the guest

Payments

Name Description
payments > id Unique payment record ID
payments > state Payment state (e.g., checkout, completed, pending, refunded)
payments > amount Payment amount
payments > currency Payment currency (ISO-4217)
payments > exchanged_amount Exchanged payment amount in property currency (can be blank*)
payments > exchange_currency Property currency code (can be blank*)
payments > exchange_rate Exchange rate applied (can be blank*)
payments > paid_at Payment timestamp (ISO-8601)
payments > payment_method Payment method code (credit_card, bank_transfer, cash, paypal)
payments > payment_method_name Payment method display name
payments > installment Number of installments (can be blank*)
payments > response_code Payment gateway response code (can be blank*)

blank: Empty or Null

payment: We don't share credit card information.

reserved: Initial state of reservation.

confirmed: Next state of reservation when Hotelier confirms it.

canceled: Reservation has been canceled by the guest or channel.