Pricing
Two endpoints set prices:
| Endpoint | Sets | Scope |
|---|---|---|
PUT /v1/properties/{id}/rates | Property defaults | properties:write |
PUT /v1/calendar | Specific dates | calendar:write |
Values resolve in three layers. A per-date price beats the default, and a channel markup applies on top of whichever won:
Code
Default rates
One call sets the base rate, its bounds, the property-level stay rules and the per-channel markup:
Code
GET /v1/properties/{id}/rates returns the same shape, so you can read it,
change one field and send it back.
floor_price_cents and ceiling_price_cents bound what an automated pricing
tool may set. They are not enforced against explicit calendar writes.
Omitted fields are left untouched; omitting the floor does not clear it.
Per-date prices and stay rules
One call covers many properties and many date ranges:
Code
closed_to_arrival and closed_to_departure forbid a stay from starting or
ending on those dates, without closing the night to guests already staying. To
close a night entirely use stop_sell, or create a
block to record a reason such as an owner stay.
Items are applied independently. The response is a 207 with a per-item result —
check each entry rather than the HTTP status.
Validation is the exception: every item must be schema-valid, so one malformed
date rejects the whole payload with a single 400 and nothing is applied. The
per-item results cover failures that happen while applying an item, such as a
property you cannot reach.
One channel only
Add channel to apply a value to a single channel, leaving the others on the
all-channel figure:
Code
A channel-specific value wins over the all-channel one, so setting an Airbnb
price does not affect Booking.com. Pass ?channel=airbnb to GET /v1/calendar
to read what a single channel is showing.
To remove a channel override, set it back to the all-channel value.
Channel markup
The markup is a multiplier, not a percentage: 1.1 publishes every rate 10%
higher on that channel. It applies on top of the resolved price, and is set on
the same rates endpoint:
Code
markup_multiplier is a multiplier. 10 does not mean 10% — it multiplies your
prices tenfold. Send null to clear it.
Overlays are supported on Airbnb only.
The response is re-read after the write, so it reflects what was stored rather than what you sent. Some channels round or clamp values.
Stay rules
min_stay and max_stay exist at two levels:
- Per date, on
PUT /v1/calendar. - Property level, on
PUT /v1/properties/{id}/rates— a floor for every per-date minimum. Set it to 3 and a per-datemin_stay: 2resolves to 3.
The stay_rules block on GET /v1/properties/{id} is read-only and reflects the
property-level values.
Propagation
Writes go through the same pipeline as changes made in the Noé interface, so propagation, price history and the audit trail are identical either way.
Pushes are queued and coalesced per property, so a bulk calendar write does not become hundreds of separate channel updates. Expect changes to appear within a few minutes.

