Developers

Changelog

What shipped in each version of the Partner API, and what is still to come. The current version is 1.4.0.

Updated 2026-10-20

What is coming next?Coming soon

  • Webhooks. Signed event delivery for booking and waiver events. Until then, poll GET /bookings/{ref}.

Coming soon

No date is set. This page is updated when webhooks ship.

1.4.0: On-account credit limit, shared rate limits and hold release

  • GET /me now includes creditLimitCents (your on-account credit limit) and openCents (open and invoiced statements plus on-account bookings not yet on a statement), both integer cents.
  • New 409 CREDIT_LIMIT on POST /bookings for on-account bookings over the limit (details.reason: credit_limit, limitCents, openCents, requestedCents). Nothing is created; retry with the same Idempotency-Key once an invoice is paid. Test keys are never refused by the credit limit. Recommended: before booking, check that openCents plus the quote total is at most creditLimitCents, and do not retry CREDIT_LIMIT automatically.
  • Fixed: per-key rate limits are now exact across all of our servers.
  • Fixed: the cap on unpaid pay-link bookings holds exactly under concurrent requests, and seats from an expired hold are back on sale within 2 minutes of holdExpiresAt.
  • Fixed: Idempotency keys are tied to your account, so a retry never creates a second booking, even after a change to your slug.
  • Your client IP is now the verified edge IP, for IP allow-lists and per-IP limits.
  • Documentation only: the error details fields (details.reason, details.field, maxDays, heldSeats, requestedSeats) and browser (CORS) preflight behaviour are now documented.
  • Fixed: every 429 RATE_LIMITED now uses the standard error envelope, including per-IP 429s, which previously lacked requestId and details. details.retryAfterSeconds equals Retry-After, and X-Request-Id matches requestId.

1.3.0: Sandbox certification and API update notices

  • GET /certification (test keys only): the sandbox checklist with progress and the exact next request. A live key answers 403 FORBIDDEN (details.reason: live_key).
  • GET /me includes a certification progress block for test keys.
  • Live access is switched on after the operator confirms your sandbox certification.
  • API changes are emailed to your developer contact; see the overview page.

1.2.0: Pay-link settlement with capacity holds

  • Pay-link accounts: POST /bookings returns 201 awaiting_payment with a payLinkUrl (our secure hosted payment page) and holdExpiresAt. The seats are held until then; unpaid bookings expire and release them, paid bookings become confirmed.
  • Cancelling an unpaid pay-link booking releases the hold and answers refund: none. New UNAVAILABLE reasons: payment_in_progress (a charge is in flight) and too_many_open_holds (25 unpaid holds).
  • An unpaid pay-link booking cannot be rescheduled; cancel it and book again.
  • X-RateLimit-Limit and X-RateLimit-Remaining headers on every authenticated response.

1.1.0: Bookings, sandbox and statements

  • POST /bookings with a required Idempotency-Key, plus GET /bookings, GET /bookings/{ref} and POST /bookings/{ref}/cancel.
  • On-account bookings, invoiced to you on a monthly statement.
  • Confirmation routing: to the customer, or to your notification address (account setting, or sendCustomerEmails: false per booking).
  • Test keys with a sandbox: TST- bookings, no charge, no capacity held, deterministic triggers, a sandbox pay page and a 7-day purge.
  • Browser (CORS) access for test keys from your listed origins.
  • Bookings run the operator's full checkout validation and re-check capacity for the final cart.

1.0.0: Catalogue, availability and quotes

  • GET /me, GET /experiences and GET /experiences/{slug}, with options priced for your pricing mode (list_plus_commission, net_rate, list_only).
  • GET /availability (per day, up to 92 days) and GET /availability/slots (per time, seats left).
  • POST /quote: prices, concession fee, totals and an advisory capacity answer.
  • Bearer authentication, the { ok, data | error, requestId } envelope, per-key and per-IP rate limits, and GET /health.