Sandbox: real offers, real PNRs, no tickets
In the sandbox these endpoints work against real carrier test inventory: a search returns real offers and you can create a real booking with a carrier PNR. Two things are worth knowing before you build against them.
- Sandbox orders are test reservations. Nobody flies on them, and they raise no fee. Cancel what you create; anything left over expires on its own payment time limit.
- Sandbox orders are never ticketed. A paid order comes back
confirmedwith an emptytickets[]and a warning saying why. Readstatusandtickets[], not the HTTP code — that is the check production relies on too.
Servicing
Order history
Everything that happened to the booking — through Norba and, where the carrier exposes it, at the airline.
GET
/v1/orders/{orderID}/historyRequires X-API-KeyThe full timeline of an order, oldest first, from two records. Ours (
source: "norba") is what passed through this API: who asked (actor: agency, support, system), the status it moved from and to, and a payload with what changed — the segments a partial cancellation dropped, the amount a refund was quoted at, what a change added. The airline's (source: "airline") is the carrier's own audit trail, where its connector can read it (Air France–KLM today): a disruption rebooking the airline did itself, a schedule change, a document its staff voided — the things that never came through here.airline_history says whether that side was included: included, unavailable (the carrier could not be read just now) or not_supported. GET /v1/orders/{orderID} still carries history[], our side alone in brief.A read — not blocked by the booking gate, and it raises no servicing fee.Request example
curl --request GET \
--url https://api.norba.io/v1/orders/{orderID}/history \
--header "X-API-Key: $NORBA_KEY"Response example
Response example
{
"order_id": "AA001Y1XD7ZA6",
"airline_history": "not_supported",
"events": [
{
"event_type": "created",
"occurred_at": "2026-09-19T10:02:11Z",
"actor": "agency",
"to_status": "confirmed",
"source": "norba"
},
{
"event_type": "seats_assigned",
"occurred_at": "2026-09-19T10:09:40Z",
"actor": "agency",
"from_status": "confirmed",
"to_status": "confirmed",
"payload": {
"seats": 1,
"extras_amount": 23,
"currency": "EUR"
},
"source": "norba"
},
{
"event_type": "segments_cancelled",
"occurred_at": "2026-09-21T08:15:02Z",
"actor": "support",
"from_status": "ticketed",
"to_status": "partially_cancelled",
"payload": {
"segment_ids": [
"SEG-2"
],
"cancel_offer_id": "AA-RF2B…"
},
"source": "norba"
}
]
}Path parameters
orderIDstringRequiredCanonical order ID.
Example:
AA001Y1XD7ZA6Response fields
order_idstringRequiredThe order.
events[]array<object>Requiredevent_type, occurred_at, actor, from_status, to_status, payload, source.airline_historystringRequiredincluded, unavailable or not_supported.Error codes
404order_not_found — not this account's order.