Shopping endpoints in development
The Shopping API endpoints are currently under active development. Request/response shapes may change.
Shopping
Seat availability
Interactive seat map — let travelers pick their exact seat before booking.
POST
/v1/shopping/seatsRequires X-API-KeyReturns a full seat map for a flight segment so you can build an interactive seat picker in your UI.Each seat includes:
- Row number and column letter (e.g.
- Availability status (
- Price (0 if free, varies by location)
- Feature flags:
- Row number and column letter (e.g.
14A)- Availability status (
available: false for taken seats)- Price (0 if free, varies by location)
- Feature flags:
window, aisle, exit_row, extra_legroom, bulkhead, bassinet, middle, blocked, restricted_reclinePricing notes: Front-row and exit-row seats typically carry a premium. Some airlines charge for all seat assignments except at check-in. Call this after price-locking to let passengers choose where they sit before finalizing the order.Request example
curl --request POST \
--url https://api.norba.io/v1/shopping/seats \
--header "X-API-Key: $NORBA_KEY" \
--header "Content-Type: application/json" \
--data '{ "offer_id": "aa_offer-abc123" }'Response example
Response example
{
"flight_id": "AA100",
"airline": "AA",
"aircraft": "333",
"rows": 42,
"seats": [
{
"seat_id": "14A",
"row": 14,
"column": "A",
"available": true,
"price": {
"amount": 0,
"currency": "EUR"
},
"features": [
"window"
]
},
{
"seat_id": "14B",
"row": 14,
"column": "B",
"available": false,
"price": {
"amount": 0,
"currency": "EUR"
},
"features": [
"middle"
]
},
{
"seat_id": "14C",
"row": 14,
"column": "C",
"available": true,
"price": {
"amount": 0,
"currency": "EUR"
},
"features": [
"aisle"
]
},
{
"seat_id": "1A",
"row": 1,
"column": "A",
"available": true,
"price": {
"amount": 25,
"currency": "EUR"
},
"features": [
"window",
"extra_legroom",
"bulkhead"
]
}
]
}Authorization
X-API-KeystringRequiredOpaque API key issued from the Norba dashboard. Sent on every request as the
X-API-Key HTTP header. Missing or invalid keys are rejected with 401 Unauthorized.Request body
offer_idstringRequiredOffer ID or flight segment ID.
Example:
aa_offer-abc123Response fields
flight_idstringRequiredFlight/segment identifier.
airlinestringRequiredIATA airline code.
aircraftstringIATA aircraft type code.
rowsintegerRequiredTotal number of rows.
seats[].seat_idstringRequiredUnique seat identifier (e.g. 14A).
seats[].rowintegerRequiredRow number.
seats[].columnstringRequiredColumn letter.
seats[].availablebooleanRequiredWhether the seat is available.
seats[].price.amountnumberSeat price. 0 if free.
seats[].featuresarray<string>Features: window, aisle, exit_row, extra_legroom, bulkhead, bassinet, no_window, blocked, restricted_recline.