# Booking and ticketing
These operations cover the initial booking flow from airline confirmation through payment processing and ticket issuance.
**Webhook used:** [PNR_V3](/openapi/webhookeventapi/webhooks/paths/pnr_v3/post)
| Step | Operation | Event trigger | Context |
| --- | --- | --- | --- |
| 1 | `BOOKING_CREATED` | When the airline confirms the flight reservation. | This is the first notification in the booking flow.
The airline has accepted the reservation and created a PNR in their system.
At this point, the traveler's payment card is authorized. The funds may be held or debited depending on the supplier's policy.
The ticketing will happen later in the booking lifecycle. |
| 2 | `PAYMENT_DECLINED` | When the payment card is declined before ticket issuance. | The payment method used for booking has been declined (e.g., due to incorrect card information).
The airline reservation made at step 1 still exists, but no ticket has been issued.
The traveler or the agent can manually retry the payment by using a new payment method.
Each failed manual retry generates a new `PAYMENT_DECLINED` notification.
Spotnana does not automatically cancel the booking due to payment failure. However,
the airline may independently cancel the unticketed reservation based on its own ticketing deadline policies.
If the airline cancels the reservation before it is ticketed, a `FLIGHT_CANCELED` event is generated. |
| 3 | `BOOKING_TICKETED` | When an airline ticket is issued for the booking. | The payment is successful and the booking is ticketed. The traveler now has a confirmed e-ticket.
This notification includes the issued ticket number(s).
This operation is also triggered when a new ticket is issued during an exchange. |
| 4 | `SPLIT_PNR_CREATED` | When a multi-traveler booking is split into separate PNRs. | If a group booking needs to be split so each traveler has their own PNR,
this operation is triggered for each new child PNR created from the split.> **Note:** For the child PNRs created the `BOOKING_CREATED` and `BOOKING_TICKETED` events will be replaced by the `SPLIT_PNR_CREATED` event.
|
## Booking and ticketing flow diagram
```mermaid
flowchart TD
subgraph booking["Booking phase"]
A["Traveler searches for flights"] --> B["Traveler selects and books a flight"]
B --> C{"Airline confirms
reservation?"}
C -->|Yes| D["BOOKING_CREATED
―――――――――――
Airline confirms the booking.
Card is authorized and a hold is placed."]
C -->|"No (rare)"| Z1["No webhook
(booking remains pending)"]
end
subgraph ticketing["Ticketing and payment phase"]
D --> E{"Payment capture
attempt"}
E -->|"All retries fail"| F["PAYMENT_DECLINED
―――――――――――
Card charge failed.
Booking stays active indefinitely.
Airline may cancel per its own policy."]
F -->|"Traveler/agent
retries with a
new or the same card"| E
E -->|Succeeds| G{"Ticket
issuance"}
G -->|Normal| H["BOOKING_TICKETED
―――――――――――
The payment method is charged and a ticket is issued."]
G -->|"Split PNR"| I["SPLIT_PNR_CREATED
―――――――――――
Child PNR created from
multi-traveler booking split."]
end
style A fill:#f0f0f0,stroke:#999
style B fill:#f0f0f0,stroke:#999
style D fill:#4CAF50,color:#fff
style F fill:#F44336,color:#fff
style H fill:#4CAF50,color:#fff
style I fill:#2196F3,color:#fff
style Z1 fill:#9E9E9E,color:#fff
```