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-Key
Returns 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. 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_recline
Pricing 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-KeystringRequired
Opaque 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_idstringRequired
Offer ID or flight segment ID.
Example: aa_offer-abc123

Response fields

flight_idstringRequired
Flight/segment identifier.
airlinestringRequired
IATA airline code.
aircraftstring
IATA aircraft type code.
rowsintegerRequired
Total number of rows.
seats[].seat_idstringRequired
Unique seat identifier (e.g. 14A).
seats[].rowintegerRequired
Row number.
seats[].columnstringRequired
Column letter.
seats[].availablebooleanRequired
Whether the seat is available.
seats[].price.amountnumber
Seat price. 0 if free.
seats[].featuresarray<string>
Features: window, aisle, exit_row, extra_legroom, bulkhead, bassinet, no_window, blocked, restricted_recline.
Seat availability · Norba API