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
List extras for an order
What the airline still sells against an existing booking — bags, meals, lounge, assistance.
GET
/v1/orders/{orderID}/servicesRequires X-API-KeyThe ancillaries the airline will sell against this booking, priced for the passengers and flights it holds, normalised into canonical
Service objects.**This is the catalogue POST /v1/orders/{orderID}/services buys from.** What this call shows is remembered as the order's catalogue; an extra it never showed cannot be bought, and any price the client writes on one is ignored in favour of the airline's — the same rule as at booking.?ssr=WCHR,UMNR asks for offers on the named special service requests; ?loyalty=AA:1234567 prices status entitlements in. Carriers whose connector cannot qualify the list answer 501 rather than dropping the qualifier silently.Tenancy-scoped like everything under /v1/orders/{orderID}: another account's order id is 404 and the airline is not asked. A closed (cancelled, refunded, failed) order answers an empty list without asking either. The older GET /v1/offers/{offerID}/services still accepts an order id, but checks nothing about who is asking.Request example
curl --request GET \
--url https://api.norba.io/v1/orders/{orderID}/services \
--header "X-API-Key: $NORBA_KEY"Response example
Response example
{
"order_id": "AA001Y1XD7ZA6",
"services": [
{
"service_id": "AA-SVC…|ITEM…",
"type": "bag_checked",
"name": "1st checked bag",
"price": {
"amount": 45,
"currency": "EUR"
},
"segment_refs": [
"SEG-1"
],
"pax_refs": [
"PAX96101"
]
}
]
}Path parameters
orderIDstringRequiredCanonical order ID.
Example:
AA001Y1XD7ZA6Query parameters
ssrstringComma-separated SSR codes to ask offers for (
WCHR,UMNR).Example:
WCHRloyaltystringFrequent-flyer accounts,
AA:1234567[,BA:…].Example:
AA:1234567Response fields
order_idstringRequiredThe order the catalogue is for.
services[]array<Service>Requiredservice_id (pass it back as ancillary_offer_id), type, name, description, price, segment_refs, pax_refs.Error codes
404order_not_found — not this account's order.501The airline does not support
ssr/loyalty qualifiers.502The airline could not list its services.