restrictions.changed
Stay rules, and which of them Doorloom actually enforces.
When it fires
The property's booking rules changed, or a per-date minimum or maximum stay or stop-sell 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
- The two levels are not equally binding.
property_rulesare enforced by Doorloom at guest checkout. The per-datemin_nightsandmax_nightsare advisory: they are shown to the host and pushed to channel managers, but nothing stops a direct booking that violates them. Enforce them yourself if your channel needs them enforced. property_rulesis null when the host has set no rules. No row means no rule, not a rule of zero.stop_sellis the flag to push to an OTA. It is true when the night is blocked, or when the host blocked iteverywhere.
The data block
| Field | Type | Description |
|---|---|---|
property_rules
|
object|null | Property-wide booking rules, enforced at checkout. Null when unset. |
property_rules.min_nights
|
integer | Shortest stay the property accepts. |
property_rules.max_nights
|
integer | Longest stay the property accepts. |
property_rules.advance_booking_days
|
integer | How many days ahead a booking must be made. |
property_rules.same_day_cutoff_time
|
string|null | H:i in Asia/Kolkata. After this, same-day bookings are refused. Null means no cutoff. |
dates[].date
|
string | Y-m-d. |
dates[].min_nights
|
integer|null | Per-date minimum stay. Advisory. |
dates[].max_nights
|
integer|null | Per-date maximum stay. Advisory. |
dates[].block_scope
|
string|null | null, "ota_only" or "everywhere". |
dates[].stop_sell
|
boolean | True when the night is blocked or scoped everywhere. This is what you push to an OTA. |
Example
The full envelope, as it arrives on the wire.
{
"id": "01J6Y0S5N8Q1R4T6V8X0Z2A4B6",
"type": "restrictions.changed",
"version": "2026-09",
"sequence": 1044,
"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": {
"property_rules": {
"min_nights": 2,
"max_nights": 14,
"advance_booking_days": 1,
"same_day_cutoff_time": "18:00"
},
"dates": [
{
"date": "2026-10-12",
"min_nights": 2,
"max_nights": null,
"block_scope": null,
"stop_sell": false
},
{
"date": "2026-10-13",
"min_nights": 3,
"max_nights": null,
"block_scope": null,
"stop_sell": false
},
{
"date": "2026-10-14",
"min_nights": null,
"max_nights": null,
"block_scope": "everywhere",
"stop_sell": true
}
]
}
}
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.