Sandbox orders are test bookings

Sandbox keys reach the airlines’ test systems: nobody flies on these orders and no booking fee is charged. Check status and tickets[], not the HTTP code.

Shopping

Basket quote

The whole checkout total — fare plus seats and ancillaries, at the price you will actually be charged.

POST/v1/offers/quoteRequires X-API-Key

The checkout total for a priced offer plus the seats and extras you plan to buy, your commission included, exactly as the order will carry it. Show it instead of adding line items yourself.

  • Reserves nothing and calls no airline.
  • Seat and extra prices come from the seat map and service list this API served for the offer (GET /v1/offers/{offerID}/seats and /services), never from the request.

Request example

curl --request POST \
  --url https://api.norba.io/v1/offers/quote \
  --header "X-API-Key: $NORBA_KEY" \
  --header "Content-Type: application/json" \
  --data '{ "offer_id": "AA-P2E80EC16-51FD-48AD-924B-1|P2E80EC16-51FD-48AD-924B-1-1", "seats": [{ "segment_id": "SGM010012275a20c", "row": 17, "column": "A" }], "ancillaries": [{ "ancillary_offer_id": "SRVDEF08001b075a14f" }] }'

Response example

Response example
{
  "currency": "EUR",
  "base_fare": 193,
  "taxes_fees": 187.62,
  "fare_total": 380.62,
  "extras": 128.93,
  "service_fee": 12.74,
  "service_fee_components": [
    {
      "label": "Booking service fee",
      "amount": 9.52
    },
    {
      "label": "Seat handling",
      "amount": 3.22
    }
  ],
  "total": 522.29
}

Authorization

X-API-KeystringRequired

Your API key from the dashboard. A missing or invalid key answers 401; see Authentication.

Request body

ancillariesarray<Ancillary>

Ancillaries you intend to buy, from GET /v1/offers/{offerID}/services. Same rule: priced from the catalogue this API served.

offer_idstringRequired

The priced offer ID, from POST /v1/offers/price. Required — an empty value returns 400 offer_id is required.

Example: AA-P2E80EC16-51FD-48AD-924B-1|P2E80EC16-51FD-48AD-924B-1-1
seatsarray<Seat>

Seats you intend to buy, from GET /v1/offers/{offerID}/seats. Priced from that catalogue, not from any price you send here.

Response fields

base_farenumberRequired

The airline's base fare, unchanged.

currencystringRequired

ISO 4217 code.

extrasnumberRequired

What the seats and ancillaries cost at the airline's own prices.

fare_totalnumberRequired

base_fare + taxes_fees.

service_feenumberRequired

Your commission on the whole basket, from your rules on Dashboard → Commissions. Norba's own fees are billed separately.

service_fee_componentsarray

{label, amount} per commission rule that fired. Omitted when none fired.

taxes_feesnumberRequired

The airline's taxes and carrier fees, unchanged.

totalnumberRequired

fare_total + extras + service_fee: what the order will carry.

Error codes

400

offer_id is required.

404

The offer was never priced through this API, or the price has expired. Price it again.

422

extra_not_priced, with kind (seat, ancillary or extras) and ref: the item is not in the catalogue served for this offer. Fetch the seat map or service list first.

POST /v1/offers/quote — Basket quote | Norba API