rates.changed
Nightly prices, extra-guest prices and meal plans.
When it fires
A base, weekend, seasonal or per-date price changed; an extra-guest price changed; or a meal plan or its surcharge changed.
This event is date-scoped: it carries a window, and
data.dates[] has one entry per night in that window, inclusive of both ends. A
window never spans more than one calendar month, so a change across a longer range arrives as
several events.
What to do with it
base_priceis the room price forbase_guestspeople for that one night. Extra-guest and meal-plan money is not included in it.price_includes_gsttells you whether GST is already insidebase_price.gst_applicabletells you whether the seller charges GST at all. Both must be read before you display or re-sell a price.meal_plans[]prices are per person, per night, added on top.- Weekend means Friday and Saturday. Sunday is a weekday for pricing.
- Prices are JSON numbers, not strings.
8000.00serialises as8000.
The data block
| Field | Type | Description |
|---|---|---|
currency
|
string | Always "INR". |
gst_applicable
|
boolean | Whether the effective seller has a GST number. When false, no GST applies regardless of the flag below. |
price_includes_gst
|
boolean | True when base_price is GST-inclusive, false when GST is added on top. |
meal_plans[].code
|
string | EP room only, CP with breakfast, MP with breakfast and one meal, AP all meals. Only plans the host enabled appear. |
meal_plans[].adult_price
|
number | Per adult, per night, on top of base_price. |
meal_plans[].child_price
|
number | Per child, per night. |
dates[].date
|
string | Y-m-d. |
dates[].base_price
|
number | The nightly room price after Doorloom resolves base, override and custom pricing. |
dates[].is_weekend
|
boolean | True on Friday and Saturday. |
dates[].source
|
string | Which rule won: "base" (weekday/weekend default), "override" (a calendar price override), or "custom" (a seasonal or custom-date price). Custom beats override beats base. |
dates[].base_guests
|
integer|null | How many guests base_price covers. Null when the host has not configured occupancy pricing. |
dates[].extra_adult_price
|
number|null | Per adult, per night, beyond base_guests. |
dates[].extra_child_price
|
number|null | Per child, per night, beyond base_guests. |
Example
The full envelope, as it arrives on the wire.
{
"id": "01J6Y0R2M4P7Q9S1T3V5W7X9Y1",
"type": "rates.changed",
"version": "2026-09",
"sequence": 1043,
"occurred_at": "2026-10-01T15:04:11+05:30",
"integration": {
"id": 12,
"slug": "acme-pms"
},
"property": {
"doorloom_id": 902,
"external_id": "VILLA-9",
"master_property_id": 902
},
"window": {
"from": "2026-10-12",
"to": "2026-10-14"
},
"data": {
"currency": "INR",
"gst_applicable": true,
"price_includes_gst": false,
"meal_plans": [
{
"code": "CP",
"adult_price": 500,
"child_price": 300
}
],
"dates": [
{
"date": "2026-10-12",
"base_price": 8000,
"is_weekend": false,
"source": "base",
"base_guests": 2,
"extra_adult_price": 1000,
"extra_child_price": 600
},
{
"date": "2026-10-13",
"base_price": 8000,
"is_weekend": false,
"source": "base",
"base_guests": 2,
"extra_adult_price": 1000,
"extra_child_price": 600
},
{
"date": "2026-10-14",
"base_price": 12500,
"is_weekend": false,
"source": "custom",
"base_guests": 2,
"extra_adult_price": 1000,
"extra_child_price": 600
}
]
}
}
Related
- The event envelope — the wrapper
around
data, shared by every event. - Ordering and idempotency — how to decide whether to apply this event.
- Snapshots — pull this same
datablock on demand for any date window.