Cancel & Refunds

Cancel an Experiences booking with a refund quote first, then confirm cancel. Refund amounts match what was charged at booking.

1. Cancel preview

GET /v3.0/experiences/bookings/{bookingId}/cancel-preview

Example:

{
  "data": {
    "bookingId": "tJHcT_KHA",
    "cancellable": true,
    "policy": {
      "cancellationFee": 0,
      "refundAmount": 101.25,
      "refundType": "FULL",
      "estimateConfidence": "HIGH",
      "currency": "EUR",
      "sellingPrice": 101.25
    }
  }
}

Show refundAmount / cancellationFee before the guest confirms cancel.

2. Cancel

POST /v3.0/experiences/bookings/{bookingId}/cancel

Possible outcomes

statusMeaning
CANCELLATION_REQUESTEDCancel accepted; final cancel / refund may still be pending (refundPending: true)
CANCELLEDCancel completed

3. After cancel

  • Poll GET /v3.0/experiences/bookings/{bookingId} until CANCELLED, or
  • Listen for experience.book.cancelled

Refunds may complete after the cancel request returns. Treat CANCELLATION_REQUESTED as success for the cancel action, not as “money already returned.”


Errors

HTTPTypical case
400Booking already cancelled
404Unknown bookingId
502Temporary failure — retry with backoff

Best practices

  1. Always call cancel-preview before cancel in guest UIs
  2. Be explicit about pending refunds when refundPending is true
  3. Use webhooks / polling for final CANCELLED

Next



Did this page help you?