StayBindDevelopers
Connect a custom OTA

Sync availability out

How StayBind pushes availability, rate, and restriction changes to your OTA so it mirrors the ledger, with delta pushes, a nightly full sync, and rate limiting.

When a booking lands on any channel, StayBind recomputes the affected unit's availability and pushes the change out to every connected channel, including yours. This is what keeps your OTA from selling a night that's already gone.

The push path

Ledger changes        coalesce by          POST /availability      your calendar
(a booking      ──▶   unit + date    ──▶   to your OTA        ──▶   mirrors the
 anywhere)            range                                         ledger
  • Delta pushes are the primary path. A ledger change enqueues a targeted push of just the affected dates to your POST /availability (and POST /rates / POST /restrictions when those change). Bursts for the same unit are coalesced into one call.
  • A nightly full sync re-pushes the whole forward horizon for each unit, correcting any drift if a delta push was ever missed. You don't have to do anything to benefit from it.
  • Rate limiting keeps outbound calls within a safe budget per account, so a busy operator never floods your API.

What you receive

The bodies are exactly the ones documented in Expose your API:

POST /availability
{ "updates": [ { "unitId": "unit_courtyard", "date": "2026-02-20", "available": 0 } ] }

available is the sellable count for that unit on that date. 0 means the night is taken (block it); a positive number means it's open.

Apply updates idempotently

Treat every push as an upsert keyed by (unit, date) (and (rate plan, date) for rates/restrictions). The latest value for a date wins. Because delta pushes, the reconcile pull, and the nightly full sync can all touch the same date, applying them as upserts (never as increments) keeps your calendar correct no matter the order or how many times a value arrives.

Best-effort, never blocking

Outbound pushes are best-effort: a failing push never fails the operator's booking. StayBind retries, and the nightly full sync re-pushes regardless. Your job is to accept the upserts and return a 2xx; if you're briefly down, the next full sync makes you consistent again.

End-to-end

With both directions wired, your OTA is a first-class channel:

  1. A guest books on your OTA → you post it to the webhook → the ledger blocks those dates → StayBind pushes the block to every other channel.
  2. A guest books on another channel → the ledger blocks those dates → StayBind pushes the block to you.

Either way, the same night can never be sold twice. That's the whole point of one ledger.

See the canonical model for the exact field definitions, and errors & reliability for retry and idempotency rules.

On this page