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.Listings a PMS manages
PATCH /v1/connect/{provider}/write-policy. See PMS write policy.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. Reach for these when you need the occupancy a rate is priced at, Booking.com's own restriction set, or a read-back confirming the price is live. See Update Booking.com Pricing and Push Availability to Booking.com.
API Reference
See the complete Availability API Reference for all endpoints including get, batch update, and calendar sync.