Refunds, changes & schedule changes
After ticketing, changes go through servicing requests: you ask, our ticketing desk gets the airline's conditions and sends you a quote, you accept or decline. Nothing is charged or refunded until you accept.
Request types
type |
Use when | Typical cost |
|---|---|---|
void |
Cancel on the day of issue (before deadlines.voidUntil). |
Usually free. |
refund |
Cancel the whole booking or some passengers/slices. | Airline penalty per the fare rules; non-refundable fares refund nothing (or taxes only). |
no_show_refund |
The passenger did not fly; recover refundable taxes. | Depends on the airline. |
change_date |
Move to another date (requestedDate). |
Change penalty + fare difference. |
other |
Anything else (name correction, special request) — explain in note. |
Quoted case by case. |
Flow
requested ──► in_review ──► quoted ──accept──► accepted ──► executing ──► completed
│ ├──decline──► declined
│ └──(expires)─► quote_expired
└──► rejected (the desk/airline refused; see history)
(any time before accepting) ──withdraw──► withdrawn
executing ──► failed (rare; the desk follows up)
1. Create a request
curl -X POST $TAM_URL/flights/bookings/7c1e.../post-booking-requests \
-H "Authorization: Bearer $TAM_KEY" -H "Content-Type: application/json" -H "Idempotency-Key: $(uuidgen)" \
-d '{ "type": "refund", "passengerIndexes": [0], "note": "Customer cancelled" }'
passengerIndexes/sliceIndexes— frompassengers[].indexand the slice order; empty means all.- One open request per booking at a time (
flights.servicing_request_open). - Scope:
flights:post_booking.
2. Receive the quote
Wait for the flight.post_booking_request.updated webhook (or poll GET …/post-booking-requests/{requestId}). When status is quoted:
{
"id": "5e2d…", "requestNumber": "PBR-…", "type": "refund", "status": "quoted",
"quote": {
"airlinePenalty": { "amount": "18.00", "currency": "USD" },
"serviceFee": { "amount": "0.00", "currency": "USD" },
"fareDifference": { "amount": "0.00", "currency": "USD" },
"refundAmount": { "amount": "162.00", "currency": "USD" },
"collectAmount": { "amount": "0.00", "currency": "USD" },
"expiresAt": "2026-11-21T10:00:00Z"
},
"nextActions": [
{ "action": "accept_quote", "method": "POST", "href": "/flights/bookings/7c1e…/post-booking-requests/5e2d…/accept", "deadline": "2026-11-21T10:00:00Z" },
{ "action": "decline_quote", "method": "POST", "href": "/flights/bookings/7c1e…/post-booking-requests/5e2d…/decline", "deadline": "2026-11-21T10:00:00Z" },
{ "action": "withdraw", … }
]
}
refundAmountis credited to your wallet,collectAmountis charged to it, when you accept.- The booking shows
pendingReason: awaiting_quote_decisionmeanwhile.
3. Accept or decline
curl -X POST $TAM_URL/flights/bookings/7c1e.../post-booking-requests/5e2d.../accept \
-H "Authorization: Bearer $TAM_KEY" -H "Idempotency-Key: $(uuidgen)"
After acceptance the desk executes the change with the airline. On completed, outcome shows what was refunded or collected, and for a change the newPnr / newBookingId. The booking updates accordingly: a full refund makes it cancelled; a partial one marks the passengers cancelled in passengers[].state.
Decline with POST …/decline (optional { "note": "…" }); withdraw a request you no longer need with POST …/withdraw.
Schedule changes
Airlines change flight times, numbers or routings after ticketing. When that happens:
- You receive
flight.booking.schedule_changed, and the booking lists the notice inopenScheduleChanges. GET /flights/bookings/{id}/schedule-changesshows the original and the new segments,requiresAcceptanceandreplyDeadline.- Then:
- No acceptance needed (information only):
POST …/schedule-changes/{id}/acknowledge. - Acceptance needed: inform the passenger, then
POST …/schedule-changes/{id}/acceptbeforereplyDeadline. The booking showspendingReason: awaiting_schedule_change_replyuntil then. - Passenger refuses the new schedule: do not accept; create a
refundorchange_daterequest instead — an involuntary change usually waives penalties.
- No acceptance needed (information only):
Errors you may see
| Code | Meaning |
|---|---|
flights.use_post_booking_request |
You called cancel on a ticketed booking — create a servicing request instead. |
flights.servicing_request_open |
Another request is still open on this booking. |
flights.booking_not_serviceable |
The booking's status does not allow this request (e.g. not ticketed). |
flights.quote_expired |
The quote's deadline passed; create a new request. |
flights.schedule_change_not_supported |
The airline does not accept replies through the API for this change; contact support. |