Update Pricing
Push nightly rates, set minimum stays, and block or unblock dates for any property across all connected platforms.
When to use this endpoint
- Push seasonal pricing or weekend rate adjustments
- Set different minimum night requirements by date
- Block dates for maintenance, renovation, or owner use
- Sync dynamic pricing from a revenue management tool
The default for calendar values
Changes are pushed to every connected channel
synced block in the response — a channel that rejected the push is reported there rather than swallowed.Update availability and pricing
/v1/availability/{propertyId}The property id goes in the path. The body carries one settings object and the list of dates to apply it to — not a per-date array. To set different values on different dates, send one call per group of dates that share the same settings.
curl -X PUT "https://api.repull.dev/v1/availability/123" \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"dates": ["2026-06-01", "2026-06-02"],
"available": false,
"price": 320
}'Body parameters
datesstring[]RequiredISO YYYY-MM-DD dates to apply the settings to. Capped at 731 — Airbnb refuses calendar writes spanning more.
availablebooleanBlock or unblock the dates.
pricenumberNightly base price, in the property currency.
minNightsintegerMinimum-stay requirement for a stay starting on these dates.
maxNightsintegerMaximum-stay limit for these dates.
At least one setting is required
dates is rejected with 422 invalid_params. Every setting is individually optional, so an empty object would otherwise return 200 and change nothing — a typo would look like a success.Response format
Returns what was written and how the push to each connected channel went.
{
"listingIds": ["123"],
"dates": 2,
"synced": {
"attempted": 2,
"succeeded": 2,
"failed": 0,
"authErrors": 0
}
}Response fields
listingIdsstring[]The listings whose calendars were written.
datesintegerHow many dates were written.
syncedobjectPer-channel push outcome: attempted, succeeded, failed, and authErrors — channels whose token has expired, which need reconnecting rather than retrying.
warningstringPresent only when one or more channel pushes failed.
Common examples
Set a weekend rate
curl -X PUT "https://api.repull.dev/v1/availability/123" \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"dates": ["2026-07-11", "2026-07-12"],
"available": true,
"price": 325
}'Block dates for maintenance
curl -X PUT "https://api.repull.dev/v1/availability/123" \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"dates": ["2026-08-01", "2026-08-02", "2026-08-03"],
"available": false
}'Unblock dates and set a rate
curl -X PUT "https://api.repull.dev/v1/availability/123" \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"dates": ["2026-08-01", "2026-08-02", "2026-08-03"],
"available": true,
"price": 200,
"minNights": 2
}'Different prices on different dates
One settings object per call, so group the dates by the values they share:
# Peak nights at 350, the shoulder night at 250
curl -X PUT "https://api.repull.dev/v1/availability/123" \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"dates": ["2026-07-04", "2026-07-05"], "available": true, "price": 350, "minNights": 3}'
curl -X PUT "https://api.repull.dev/v1/availability/123" \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"dates": ["2026-07-07"], "available": true, "price": 250, "minNights": 2}'The same change across many properties
/v1/availability/batchApplies one settings object across up to 500 properties. Ownership is checked before anything is written, so a batch containing a property from another workspace is refused as a whole and names the offending ids rather than being partially applied. Per-property different values are still separate calls.
curl -X PATCH "https://api.repull.dev/v1/availability/batch" \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"propertyIds": [123, 124],
"dates": ["2026-06-01", "2026-06-02"],
"price": 299
}'- Every property in
propertyIdsmust belong to this workspace. Any that do not are named in404 not_foundand nothing is written. - If any property is inactive,
403 listing_inactivenames every inactive one and nothing is written.
Errors
422 invalid_params— a malformed body: missing or non-ISOdates, more than 731 dates, a negativeprice, a non-integerminNights/maxNights, or no setting at all.fieldnames the problem.403 listing_inactive— the property is inactive. Activate it, then retry. See listing_inactive.- A channel that rejects the push does not fail the call: the calendar is still written,
synced.failedcounts the rejection andwarningis set.synced.authErrorscounts channels whose connection needs reconnecting rather than retrying.
Channel-specific settings
These endpoints write to one channel only. Use them for settings the calendar write above does not carry:
- Airbnb — pricing model, standard settings, length-of-stay records, rate plans, fees, currency, pricing rules, closed-to-arrival/departure, why a date is blocked, and listing-level availability rules. See Update Airbnb Pricing and Push Availability to Airbnb.
- Booking.com — rates and restrictions per room and rate plan, through
PUT /v1/channels/booking/availabilityandPUT /v1/channels/booking/listings/{id}/pricing.
API Reference
See the complete Availability API Reference for all endpoints including get, batch update, and calendar sync.