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

Nightly price, open/closed, and minimum/maximum nights belong here: one write updates the Repull calendar and pushes to every connected channel — Airbnb, Booking.com and VRBO. Reach for a channel-specific endpoint only for settings that exist on a single channel (see Channel-specific settings).

Changes are pushed to every connected channel

This call writes your calendar and pushes it to each connected channel in the same step, so the change reaches Airbnb, Booking.com, and the rest. A write that only updated our copy would leave the channel calendars stale and eventually double-book a guest. Check the synced block in the response — a channel that rejected the push is reported there rather than swallowed.

Update availability and pricing

PUT/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[]Required

ISO YYYY-MM-DD dates to apply the settings to. Capped at 731 — Airbnb refuses calendar writes spanning more.

availableboolean

Block or unblock the dates.

pricenumber

Nightly base price, in the property currency.

minNightsinteger

Minimum-stay requirement for a stay starting on these dates.

maxNightsinteger

Maximum-stay limit for these dates.

At least one setting is required

A body carrying only 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.

datesinteger

How many dates were written.

syncedobject

Per-channel push outcome: attempted, succeeded, failed, and authErrors — channels whose token has expired, which need reconnecting rather than retrying.

warningstring

Present 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

PATCH/v1/availability/batch

Applies 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 propertyIds must belong to this workspace. Any that do not are named in 404 not_found and nothing is written.
  • If any property is inactive, 403 listing_inactive names every inactive one and nothing is written.

Errors

  • 422 invalid_params — a malformed body: missing or non-ISO dates, more than 731 dates, a negative price, a non-integer minNights/maxNights, or no setting at all. field names 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.failed counts the rejection and warning is set. synced.authErrors counts 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/availability and PUT /v1/channels/booking/listings/{id}/pricing.

API Reference

See the complete Availability API Reference for all endpoints including get, batch update, and calendar sync.

AI