FlyRail
Browse the docs

Booking lifecycle

pending_payment ─▶ ticketing ─▶ ticketed ─▶ cancelled ─▶ refunded
        │               │            
        ▼               ├─▶ failed
     failed             └─▶ ticketing_pending ─▶ ticketed / failed / cancelled
Status Meaning Your money
ticketing Seat reserved, ticket being issued Held
ticketed Ticket issued. ticket_numbers filled Paid to the airline
failed Declined or not possible. failure.code says why Returned
ticketing_pending The airline hasn't confirmed yet. We keep asking and never issue twice Still held
cancelled / refunded Cancelled; refund is what came back Refunded per fare rules

Why ticketing_pending exists#

If the airline times out after you asked it to issue a ticket, the ticket may or may not exist. We ask the airline what happened before trying anything else. If it still can't tell us, the booking waits in ticketing_pending with your money held, and we keep checking until the airline's ticketing time limit. Then it either becomes ticketed or failed with the money released. You are never charged twice.

Learning the outcome#

Subscribe to webhooks (booking.ticketed, booking.failed, …) or poll GET /bookings/{id}.

Cancelling#

POST /bookings/{id}/cancel follows the fare rules. A cancellation on the day of issue is a void: the fare and our service fee come back. Later, the airline's refund comes back and the service fee is kept. Repeating the call is safe.