Cancellation & reschedule policies
Cancellation and reschedule behavior is defined explicitly in the Product Details API.Eligibility and cutoff
cancellationPolicy.cancellableandreschedulePolicy.reschedulableare simple booleans — the operation is either allowed or not allowed.cancellableUpToInMinutes/reschedulableUpToInMinutesdefine the cutoff before the experience start time. Requests submitted after the cutoff are not accepted.- Policies may differ across products and across variants of the same product. Read them from the API per variant; do not assume uniform behavior.
- Read and rely on the API response
- Surface the correct policy to users before booking
- Not assume uniform behavior across variants
Refund handling
Refunds are a separate concern from cancellation eligibility. Thecancellable flag and cancellableUpToInMinutes cutoff only determine whether Headout accepts the cancellation — they do not describe how money is returned.
API Partner accounts
- When an eligible booking is cancelled, the partner’s Headout wallet is topped up automatically with the full booking amount.
- The partner is responsible for refunding the end customer through their own payment system. Headout does not contact or refund the end customer.
- When an eligible booking is cancelled, Headout refunds the end customer directly.
Cancellation & reschedule lifecycle
This section is relevant to API Partner accounts only. Affiliate accounts do not have cancel or reschedule endpoints.
Request flow
Both Cancel and Reschedule follow the same two-phase shape:- Synchronous acknowledgement. The endpoint validates input, ownership, and business rules (eligibility, cutoff window, valid future slot for reschedule) and returns immediately.
success: truemeans the request was accepted into the asynchronous queue — it does not mean it has been fulfilled.success: falsemeans it was rejected up-front (e.g. a business-rule failure) and no async job is enqueued. - Asynchronous fulfilment. The request is processed against the supplier in the background. The submit acknowledgement is not the outcome — always treat the booking itself (via webhook or Get Booking) as the source of truth.
Outcomes
Cancellation:- →
CANCELLEDwhen the supplier cancellation succeeds. ACANCELLEDbooking-status webhook fires; the change is also visible on Get Booking. - → no change if the supplier can’t cancel. The request stays pending and the booking remains confirmed until it’s resolved (may need manual intervention). Acceptance at submit time does not guarantee cancellation.
- → re-booked on the new slot when it succeeds. The booking round-trips
CANCELLED → PENDING → COMPLETEDandstartDateTime/endDateTimeupdate to the new slot. The intermediateCANCELLEDis not terminal. - → no change on failure. The booking stays on its original slot and status.
- Webhooks — you receive a
PENDINGthen aCOMPLETEDevent for the samebookingId. The intermediateCANCELLEDis suppressed, so noCANCELLEDwebhook is sent for a reschedule. Don’t treat thePENDINGevent as a brand-new booking. - Polling Get Booking — a poll landing mid-reschedule can transiently return
CANCELLEDbefore the booking returns toPENDING→COMPLETED. Don’t treat aCANCELLEDpoll result as terminal while a reschedule is in flight.
Key notes
- Rely on the booking, not the acknowledgement. A
success: trueresponse only means the request was queued. Confirm the actual outcome via webhook or Get Booking. CANCELLEDis not always terminal. It’s final for a genuine cancellation, but a reschedule round-trips the booking throughCANCELLEDand back toPENDING→COMPLETED. Don’t hard-codeCANCELLEDas a final state — especially when polling.- Cancellation and reschedule are mutually exclusive. A new request is rejected while the other operation is still being processed.
- Cancellation is idempotent. Re-cancelling an already-cancelled booking returns success without side effects; a cancellation that previously failed can be retried.
- Reschedule is one-shot. A booking that has already been rescheduled cannot be rescheduled again, and a reschedule that previously failed is blocked — contact your Headout SPOC for manual intervention.