{
  "info": {
    "_postman_id": "5b0f3c1e-7d2a-4c8e-9f61-2a7d4e0b9c13",
    "name": "Norba API",
    "description": "Search, price and book flights across every connected airline through one REST API.\n\n1. Import this collection and the Sandbox environment, then pick the environment.\n2. Set `apiKey` to your sandbox key (`nbr_test_…`) from https://app.norba.io/api-keys.\n3. Run Search flights, then Confirm offer price, then Create an order: each one stores the ID the next needs.\n4. An order created without a payment is a hold. To pay it, set `amount`, `cardNumber` and `cardCvv` and run Pay a hold. Card payments only.\n\nEvery call sends `X-API-Key: {{apiKey}}`. `nbr_test_…` keys reach the airlines' test systems (sandbox), `nbr_live_…` keys production, on the same host: https://api.norba.io.\nWrites that book, pay, change, cancel or refund carry an `Idempotency-Key`; reuse it when you retry.\n\nReference: https://norba.io/docs",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "apikey",
    "apikey": [
      {
        "key": "key",
        "value": "X-API-Key",
        "type": "string"
      },
      {
        "key": "value",
        "value": "{{apiKey}}",
        "type": "string"
      },
      {
        "key": "in",
        "value": "header",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.norba.io",
      "type": "string"
    },
    {
      "key": "apiKey",
      "value": "",
      "type": "string"
    },
    {
      "key": "offerId",
      "value": "",
      "type": "string"
    },
    {
      "key": "pricedOfferId",
      "value": "",
      "type": "string"
    },
    {
      "key": "orderId",
      "value": "",
      "type": "string"
    },
    {
      "key": "airline",
      "value": "",
      "type": "string"
    },
    {
      "key": "reshopOfferId",
      "value": "",
      "type": "string"
    },
    {
      "key": "amount",
      "value": "",
      "type": "string"
    },
    {
      "key": "cardNumber",
      "value": "",
      "type": "string"
    },
    {
      "key": "cardCvv",
      "value": "",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "Health",
      "description": "Liveness check, no API key needed",
      "item": [
        {
          "name": "Liveness probe",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/health",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "health"
              ]
            },
            "description": "Liveness probe",
            "auth": {
              "type": "noauth"
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Shopping",
      "description": "AirShopping search, offer pricing and basket quotes",
      "item": [
        {
          "name": "Search flights (AirShopping)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/shopping/offers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "shopping",
                "offers"
              ]
            },
            "description": "Search flights (AirShopping)\n\nSearches every connected airline that serves the route, in parallel,\nand returns one list of offers in one schema, cheapest first.\n\n- The same search is answered from cache until the top-level\n  `expires_at`: the earliest offer's `expires_at` less five minutes,\n  between 90 s and 30 min. Empty results are never cached.\n- No airline filter: every connected airline on the route is asked;\n  `meta.airlines` lists who answered.\n- No connected airline on the route: `200` with `offers: null` (not an\n  empty array).\n- Bad input gets `400` with a `code` before any airline is called (see\n  SearchBadRequest).\n- Some airlines do not sell connections with a leg another airline\n  operates; those offers are left out. The operating carrier is on\n  every segment.\n- In production, an airline that needs its own agreement with the\n  agency is left out until that agreement is approved.\n- A search takes 10–20 s; set a client timeout of at least 60 s, or use\n  the streaming variant.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"origin\": \"LHR\",\n  \"destination\": \"JFK\",\n  \"departure_date\": \"2026-12-15\",\n  \"return_date\": \"2026-12-22\",\n  \"adults\": 1,\n  \"currency\": \"GBP\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const body = pm.response.json();",
                  "if (body.offers && body.offers.length) {",
                  "  pm.collectionVariables.set(\"offerId\", body.offers[0].offer_id);",
                  "  pm.collectionVariables.set(\"airline\", body.offers[0].airline);",
                  "}"
                ]
              }
            }
          ]
        },
        {
          "name": "Search flights, streamed (Server-Sent Events)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/shopping/offers/stream",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "shopping",
                "offers",
                "stream"
              ]
            },
            "description": "Search flights, streamed (Server-Sent Events)\n\nThe same search as `POST /v1/shopping/offers`, delivered as SSE\n(Server-Sent Events, `Content-Type: text/event-stream`): each airline's\nbatch arrives as soon as it answers. Same body, validation, caching,\nmetering and limits.\n\nEvents, in order:\n\n  event: search   data: {\"search_id\":\"srch_…\",\"expires_at\":\"…\"}   first; expires_at is provisional\n  event: offers   data: {\"offers\":[…]}                            0..n, one per airline batch\n  event: done     data: {\"total\":115,\"expires_at\":\"…\"}            last on success; expires_at is final\n  event: error    data: {\"error\":\"…\"}                             last on failure\n\n- Deduplicate on `offer_id` as you accumulate.\n- A cached answer arrives as one `offers` event.\n- Closing the connection ends the search; no `error` event is sent.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"origin\": \"LHR\",\n  \"destination\": \"JFK\",\n  \"departure_date\": \"2026-12-15\",\n  \"return_date\": \"2026-12-22\",\n  \"adults\": 1,\n  \"currency\": \"GBP\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Price calendar from your recent searches",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/shopping/calendar?origin=BCN&destination=JFK&from=2026-11-01&to=2026-12-31",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "shopping",
                "calendar"
              ],
              "query": [
                {
                  "key": "origin",
                  "value": "BCN",
                  "disabled": false,
                  "description": "IATA airport code"
                },
                {
                  "key": "destination",
                  "value": "JFK",
                  "disabled": false,
                  "description": "IATA airport code"
                },
                {
                  "key": "from",
                  "value": "2026-11-01",
                  "disabled": false,
                  "description": "First day, inclusive"
                },
                {
                  "key": "to",
                  "value": "2026-12-31",
                  "disabled": false,
                  "description": "Last day, inclusive; at most 400 days after `from`"
                },
                {
                  "key": "trip_type",
                  "value": "one_way",
                  "disabled": true
                },
                {
                  "key": "departure_date",
                  "value": "",
                  "disabled": true,
                  "description": "Round trip only: the outbound whose return days you want"
                },
                {
                  "key": "cabin_class",
                  "value": "economy",
                  "disabled": true
                },
                {
                  "key": "currency",
                  "value": "EUR",
                  "disabled": true,
                  "description": "Prices in this currency only, from the search list"
                }
              ]
            },
            "description": "Price calendar from your recent searches\n\nPrices for a date picker: per day, the cheapest fare per passenger\n(adults and children, your commission included) that your own searches\nfound in this key's environment, for as long as each search's\n`expires_at` holds. Days without such a search are absent.\n\n- Calls no airline: a price is a hint, not a quote.\n- Metered as a data request; no search limit applies.\n- `round_trip` without `departure_date` lists departure days; with it,\n  return days for that outbound."
          },
          "response": []
        },
        {
          "name": "Confirm offer price (OfferPrice)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/offers/price",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "offers",
                "price"
              ]
            },
            "description": "Confirm offer price (OfferPrice)\n\nConfirms an offer's price with the airline and returns a NEW `offer_id`:\nbook that one. The airline is read from the offer ID prefix when\n`airline` is omitted.\n\n- The priced offer holds until `price_guaranteed_until`; after that, or\n  when the airline will no longer sell it, `422 offer_expired`.\n- A repeat call for the same offers within 30 s is answered from cache.\n- In production, an airline that needs its own agreement with the\n  agency is `403 carrier_agreement_required` until it is approved.\n- A self-transfer trip is priced with each airline; if the priced\n  flights no longer connect, `409 self_transfer_unavailable`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"offer_ids\": [\n    \"{{offerId}}\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const body = pm.response.json();",
                  "const id = body.offer_id || (body.offers && body.offers[0] && body.offers[0].offer_id);",
                  "if (id) pm.collectionVariables.set(\"pricedOfferId\", id);"
                ]
              }
            }
          ]
        },
        {
          "name": "Quote a basket — fare plus chosen extras, with the agency's service fee",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/offers/quote",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "offers",
                "quote"
              ]
            },
            "description": "Quote a basket — fare plus chosen extras, with the agency's service fee\n\nThe checkout total for a priced offer plus the seats and extras chosen\nbeside it, your service fee included, exactly as the order will carry\nit. Show it instead of adding line items yourself.\n\n- Reserves nothing and calls no airline.\n- The offer must have been priced with `POST /v1/offers/price` (404\n  otherwise, or once that price has expired).\n- Seats and ancillaries are priced from the seat map and service list\n  this API served for the offer, never from prices in the body; one\n  that cannot be matched is `422 extra_not_priced`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"offer_id\": \"{{pricedOfferId}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Offers",
      "description": "Per-offer seats and ancillary services",
      "item": [
        {
          "name": "Seat map for an offer (SeatAvailability)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/offers/{{offerId}}/seats",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "offers",
                "{{offerId}}",
                "seats"
              ],
              "query": [
                {
                  "key": "airline",
                  "value": "{{airline}}",
                  "disabled": true,
                  "description": "IATA airline code. Inferred from the offer ID prefix when omitted."
                },
                {
                  "key": "segment_id",
                  "value": "",
                  "disabled": true,
                  "description": "One segment of the offer, as returned in `slices[].segments[].segment_id`."
                },
                {
                  "key": "loyalty",
                  "value": "",
                  "disabled": true,
                  "description": "Frequent-flyer accounts to price against, `AA:1234567[,BA:…]`."
                }
              ]
            },
            "description": "Seat map for an offer (SeatAvailability)\n\nThe seat map of the offer, or of one segment when `segment_id` is\ngiven. Each seat carries its `segment_id`, sent again when buying.\nPrices on the map are what booking charges.\n\n- Percent-encode {offerID}: it can contain `|` and `.`.\n- A `segment_id` the airline returned no map for answers 404\n  `seat_map_segment_not_found` with `segments_available`.\n- An order ID is refused with 404 `offer_not_found`: use\n  `GET /v1/orders/{orderID}/seats`. A self-transfer trip has no map\n  here: choose seats on each airline's order once booked.\n- In production, an airline that needs its own agreement with the\n  agency is 403 `carrier_agreement_required` until it is approved."
          },
          "response": []
        },
        {
          "name": "Ancillary services for an offer (ServiceList)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/offers/{{offerId}}/services",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "offers",
                "{{offerId}}",
                "services"
              ],
              "query": [
                {
                  "key": "airline",
                  "value": "{{airline}}",
                  "disabled": true,
                  "description": "IATA airline code. Inferred from the offer ID prefix when omitted."
                },
                {
                  "key": "ssr",
                  "value": "",
                  "disabled": true,
                  "description": "Comma-separated SSR (special service request) codes to ask offers for, e.g. `WCHR,UMNR`."
                },
                {
                  "key": "loyalty",
                  "value": "",
                  "disabled": true,
                  "description": "Frequent-flyer accounts to price against, `AA:1234567[,BA:…]`."
                }
              ]
            },
            "description": "Ancillary services for an offer (ServiceList)\n\nThe bags, meals and other extras the airline sells with this offer.\nPrices on the list are what booking charges. Buy one by sending its\n`service_id` as `ancillary_offer_id`. An empty list is a normal answer.\n\n- Percent-encode {offerID}.\n- An order ID is refused with 404 `offer_not_found`: use\n  `GET /v1/orders/{orderID}/services`. A self-transfer trip has no list\n  here: add extras to each airline's order once booked.\n- In production, an airline that needs its own agreement with the\n  agency is 403 `carrier_agreement_required` until it is approved."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Orders",
      "description": "Order lifecycle — create, retrieve, change, cancel, refund",
      "item": [
        {
          "name": "List orders for the authenticated agency",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/orders",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "orders"
              ],
              "query": [
                {
                  "key": "airline",
                  "value": "{{airline}}",
                  "disabled": true,
                  "description": "Filter by IATA airline code"
                },
                {
                  "key": "status",
                  "value": "pending",
                  "disabled": true,
                  "description": "Filter by order status"
                },
                {
                  "key": "pnr",
                  "value": "",
                  "disabled": true,
                  "description": "Filter by record locator"
                },
                {
                  "key": "limit",
                  "value": "20",
                  "disabled": true,
                  "description": "Page size (keyset pagination)"
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "The next_cursor returned by the previous page (400 `invalid cursor` otherwise)"
                }
              ]
            },
            "description": "List orders for the authenticated agency\n\nThe orders made in the key's environment: a sandbox key lists sandbox bookings, a production key real ones. The same rule applies to every order route — an order from the other environment answers 404. Newest first."
          },
          "response": []
        },
        {
          "name": "Create an order (OrderCreate)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Reuse it when you retry the same write."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/orders",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "orders"
              ]
            },
            "description": "Create an order (OrderCreate)\n\nBooks the offer. Omit `payment` to create an UNPAID HOLD — the normal\nagency flow — and pay it later with `POST /v1/orders/{orderID}/commit`\nor `PUT /v1/orders/{orderID}` (`ticketing`). Seats and ancillaries sent\nhere are priced from the seat map and service list this API served for\nthe offer; prices in the body are ignored, and an extra that cannot be\nmatched is 422 `extra_not_priced`.\n\nA payment must carry a card (400 `payment_method_not_allowed`) and\nneeds the offer priced in the last 30 minutes (409 `offer_not_priced`).\n\nA priced self-transfer trip (`offer_id` starting `CONN-P`) books one\norder per airline and answers a `Trip`. Every ticket is booked or\nnone: on a failure the tickets already made are cancelled and the\nerror carries a `trip` object (`failed_ticket`, `failed_airline`,\n`released_orders`, `unreleased_orders`). Seats and ancillaries are\nadded on each order afterwards (422 `extras_not_supported` here).\n\nBooking write — returns 503 `coming_soon` unless booking is enabled. In\nproduction, an airline that needs its own agreement with the agency is\n403 `carrier_agreement_required` until it is approved. More travellers\nthan the order allows is 400 `passenger_cap`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"offer_id\": \"{{pricedOfferId}}\",\n  \"passengers\": [\n    {\n      \"id\": \"PAX1\",\n      \"type\": \"ADT\",\n      \"first_name\": \"Jane\",\n      \"last_name\": \"Traveller\",\n      \"date_of_birth\": \"1990-04-12\",\n      \"gender\": \"F\"\n    }\n  ],\n  \"contact\": {\n    \"email\": \"jane.traveller@example.com\",\n    \"phone\": \"+34612345678\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const body = pm.response.json();",
                  "if (body.order_id) pm.collectionVariables.set(\"orderId\", body.order_id);"
                ]
              }
            }
          ]
        },
        {
          "name": "Retrieve an order",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/orders/{{orderId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "orders",
                "{{orderId}}"
              ],
              "query": [
                {
                  "key": "refresh",
                  "value": "",
                  "disabled": true,
                  "description": "`true` asks the airline for the order's current state, stores it and answers with it."
                },
                {
                  "key": "airline",
                  "value": "{{airline}}",
                  "disabled": true,
                  "description": "Optional. The airline is taken from the stored order; when sent, it must match the order's airline (400 `airline does not match the order` otherwise)."
                }
              ]
            },
            "description": "Retrieve an order\n\nServed from the agency's own stored copy; an id this agency does not\nhold is 404 `order_not_found` (with `did_you_mean` when one of its own\norders is a single character away) and no airline is asked.\n`?refresh=true` reads the airline's copy, stores it and returns it.\n\nAn unpaid hold whose `expires_at` has passed (no ticket, no payment\nauthorised or captured) is read back from the airline before it is\nanswered, at most once every ten minutes per order: the airline\nreleases such a hold at its time limit, so a released one comes back\n`cancelled`, with a `refreshed` timeline event. When the airline cannot\nbe read the stored copy is answered."
          },
          "response": []
        },
        {
          "name": "Change an order (OrderChange)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Reuse it when you retry the same write."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/orders/{{orderId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "orders",
                "{{orderId}}"
              ],
              "query": [
                {
                  "key": "airline",
                  "value": "{{airline}}",
                  "disabled": true,
                  "description": "Optional. The airline is taken from the stored order; when sent, it must match the order's airline (400 `airline does not match the order` otherwise)."
                }
              ]
            },
            "description": "Change an order (OrderChange)\n\nBooking write — 503 `coming_soon` unless booking is enabled. The body\nis a ChangeRequest.\n\n* No `action` is 400 `action_required`; `cancel_segments` is 400\n  `use_cancel_confirm` (cancel some flights with\n  `POST /v1/orders/{orderID}/cancel/confirm`).\n* Paying or adding extras on an unpaid hold past its `expires_at` is\n  422 `hold_expired`. A seat for an infant is 400.\n* Paying an order already paid is 409 `already_paid`; nothing is sent.\n* A payment must be in the order's currency (400 otherwise). To pay\n  the order, `amount` must cover the order total less `service_fee`.\n* The Idempotency-Key is required when the call pays.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"action\": \"ticketing\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Cancel an order (OrderCancel)",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Reuse it when you retry the same write."
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/orders/{{orderId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "orders",
                "{{orderId}}"
              ],
              "query": [
                {
                  "key": "airline",
                  "value": "{{airline}}",
                  "disabled": true,
                  "description": "Optional. The airline is taken from the stored order; when sent, it must match the order's airline (400 `airline does not match the order` otherwise)."
                }
              ]
            },
            "description": "Cancel an order (OrderCancel)\n\nBooking write — 503 `coming_soon` unless booking is enabled. Answers\n204 once the airline shows the order closed; an order already\ncancelled answers 204 with no airline call. The Idempotency-Key is\nrequired (400 `idempotency_key_required`) and is shared with\n`POST /v1/orders/{orderID}/cancel/confirm`. To see the refund first,\nquote it with `POST /v1/orders/{orderID}/cancel`."
          },
          "response": []
        },
        {
          "name": "Re-price an order (OrderQuote)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/orders/{{orderId}}/quote",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "orders",
                "{{orderId}}",
                "quote"
              ],
              "query": [
                {
                  "key": "airline",
                  "value": "{{airline}}",
                  "disabled": true,
                  "description": "Optional. The airline is taken from the stored order; when sent, it must match the order's airline (400 `airline does not match the order` otherwise)."
                }
              ]
            },
            "description": "Re-price an order (OrderQuote)\n\nRe-prices the whole order and changes nothing. Booking write — 503 `coming_soon` unless booking is enabled. No request body."
          },
          "response": []
        },
        {
          "name": "Pay a hold, or add seats and extras with their payment (OrderCommit)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Reuse it when you retry the same write."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/orders/{{orderId}}/commit",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "orders",
                "{{orderId}}",
                "commit"
              ],
              "query": [
                {
                  "key": "airline",
                  "value": "{{airline}}",
                  "disabled": true,
                  "description": "Optional. The airline is taken from the stored order; when sent, it must match the order's airline (400 `airline does not match the order` otherwise)."
                }
              ]
            },
            "description": "Pay a hold, or add seats and extras with their payment (OrderCommit)\n\nBooking write — 503 `coming_soon` unless booking is enabled. The\nIdempotency-Key is required.\n\n* With no seats or ancillaries it pays the order; on an order already\n  paid it is 409 `already_paid` and nothing is sent.\n* Seats and ancillaries are priced from the order's seat map or\n  service list (422 `extra_not_priced` otherwise). A seat for an\n  infant is 400.\n* An unpaid hold past its `expires_at` is 422 `hold_expired`.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"payment\": {\n    \"method\": \"CARD\",\n    \"currency\": \"EUR\",\n    \"amount\": {{amount}},\n    \"card\": {\n      \"number\": \"{{cardNumber}}\",\n      \"holder\": \"JANE TRAVELLER\",\n      \"expiry_month\": 12,\n      \"expiry_year\": 2030,\n      \"cvv\": \"{{cardCvv}}\",\n      \"brand\": \"VISA\"\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Search alternative flights for an order (OrderReShop)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/orders/{{orderId}}/reshop",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "orders",
                "{{orderId}}",
                "reshop"
              ],
              "query": [
                {
                  "key": "airline",
                  "value": "{{airline}}",
                  "disabled": true,
                  "description": "Optional. The airline is taken from the stored order; when sent, it must match the order's airline (400 `airline does not match the order` otherwise)."
                }
              ]
            },
            "description": "Search alternative flights for an order (OrderReShop)\n\nChanges nothing. Each offer's `total_amount` is the difference\nagainst the current order: positive is owed to the airline, negative\nis owed back. Accept one with `POST /v1/orders/{orderID}/change/confirm`.\nNo alternative on those dates is 422 `no_alternatives`. Booking write —\n503 `coming_soon` unless booking is enabled.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"new_departure_date\": \"2026-12-17T00:00:00Z\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Everything that happened to the order — ours and the airline's",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/orders/{{orderId}}/history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "orders",
                "{{orderId}}",
                "history"
              ]
            },
            "description": "Everything that happened to the order — ours and the airline's\n\nNorba's timeline of the order merged with the airline's own history of\nit, where the airline exposes one (`airline_history` says whether it\nwas included). A read; not blocked by the booking gate."
          },
          "response": []
        },
        {
          "name": "Ancillaries the airline still sells against this order",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/orders/{{orderId}}/services",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "orders",
                "{{orderId}}",
                "services"
              ],
              "query": [
                {
                  "key": "ssr",
                  "value": "",
                  "disabled": true,
                  "description": "Comma-separated SSR codes to ask offers for."
                },
                {
                  "key": "loyalty",
                  "value": "",
                  "disabled": true,
                  "description": "Frequent-flyer accounts, `AA:1234567[,BA:…]`."
                }
              ]
            },
            "description": "Ancillaries the airline still sells against this order\n\nRemembered as the order's catalogue; POST prices only from it.\n`?ssr=WCHR,UMNR` and `?loyalty=AA:1234567` qualify the list (501 where\nthe connector cannot). Empty on a closed order without asking."
          },
          "response": []
        },
        {
          "name": "Buy ancillaries against an existing order",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Reuse it when you retry the same write."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/orders/{{orderId}}/services",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "orders",
                "{{orderId}}",
                "services"
              ]
            },
            "description": "Buy ancillaries against an existing order\n\nEach entry names a `service_id` from the GET as `ancillary_offer_id`\nand the passenger it is for. Priced from the catalogue, never from the\nclient (422 `extra_not_priced` otherwise). A hold gains the extras; a\nticketed order pays for them in `payment`, floored at the catalogue\nprice (400 when short). An unpaid hold past its `expires_at` is 422\n`hold_expired`. Booking write — 503 `coming_soon` unless booking is\nenabled.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Seat map of a booked flight",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/orders/{{orderId}}/seats",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "orders",
                "{{orderId}}",
                "seats"
              ],
              "query": [
                {
                  "key": "segment_id",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "loyalty",
                  "value": "",
                  "disabled": true
                }
              ]
            },
            "description": "Seat map of a booked flight\n\n`?segment_id=` picks one flight of a multi-segment itinerary (404\n`seat_map_segment_not_found` naming the segments returned when it is\nabsent). Remembered as the order's seat catalogue; POST prices only\nfrom it."
          },
          "response": []
        },
        {
          "name": "Assign seats on an existing order",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Reuse it when you retry the same write."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/orders/{{orderId}}/seats",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "orders",
                "{{orderId}}",
                "seats"
              ]
            },
            "description": "Assign seats on an existing order\n\nEach seat names `segment_id`, `passenger_id` and `seat_id` (or `row`\n+ `column`); priced from the map the GET served. Payment as for\nservices. A seat for an infant is 400: an infant travels on an adult's\nlap. An unpaid hold past its `expires_at` is 422 `hold_expired`. Not\nevery carrier allows a paid seat after booking — the refusal is the\nairline's (422 `airline_refused`), order untouched.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Re-price an order before a change",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/orders/{{orderId}}/change",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "orders",
                "{{orderId}}",
                "change"
              ],
              "query": [
                {
                  "key": "airline",
                  "value": "{{airline}}",
                  "disabled": true,
                  "description": "Optional. The airline is taken from the stored order; when sent, it must match the order's airline (400 `airline does not match the order` otherwise)."
                }
              ]
            },
            "description": "Re-price an order before a change\n\nRe-prices the whole order, as `POST /v1/orders/{orderID}/quote`, and\nchanges nothing. To change flights, use `POST /v1/orders/{orderID}/reshop`\nand `POST /v1/orders/{orderID}/change/confirm`. The body is ignored;\nsend `{}`. Booking write — 503 `coming_soon` unless booking is enabled.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Accept a reshop offer (change flights)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Reuse it when you retry the same write."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/orders/{{orderId}}/change/confirm",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "orders",
                "{{orderId}}",
                "change",
                "confirm"
              ],
              "query": [
                {
                  "key": "airline",
                  "value": "{{airline}}",
                  "disabled": true,
                  "description": "Optional. The airline is taken from the stored order; when sent, it must match the order's airline (400 `airline does not match the order` otherwise)."
                }
              ]
            },
            "description": "Accept a reshop offer (change flights)\n\nAccepts an offer from `POST /v1/orders/{orderID}/reshop` and reissues\nthe order. Without `offer_id` it is 400. When the offer's\n`total_amount` is positive, send a `payment` for it. The airline\nprices at acceptance; `change_quote_id` is advisory. The\nIdempotency-Key is required. Booking write — 503 `coming_soon` unless\nbooking is enabled.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"offer_id\": \"{{reshopOfferId}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Quote an order cancellation (cancel step 1 of 2)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/orders/{{orderId}}/cancel",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "orders",
                "{{orderId}}",
                "cancel"
              ],
              "query": [
                {
                  "key": "airline",
                  "value": "{{airline}}",
                  "disabled": true,
                  "description": "Optional. The airline is taken from the stored order; when sent, it must match the order's airline (400 `airline does not match the order` otherwise)."
                }
              ]
            },
            "description": "Quote an order cancellation (cancel step 1 of 2)\n\nA quote; changes nothing. `refund_amount` is the fare less\n`penalty_amount`, never below zero. A whole-order quote is valid 30\nminutes, a partial one 20 minutes. Booking write — 503 `coming_soon`\nunless booking is enabled.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Confirm an order cancellation (cancel step 2 of 2)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Reuse it when you retry the same write."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/orders/{{orderId}}/cancel/confirm",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "orders",
                "{{orderId}}",
                "cancel",
                "confirm"
              ],
              "query": [
                {
                  "key": "airline",
                  "value": "{{airline}}",
                  "disabled": true,
                  "description": "Optional. The airline is taken from the stored order; when sent, it must match the order's airline (400 `airline does not match the order` otherwise)."
                }
              ]
            },
            "description": "Confirm an order cancellation (cancel step 2 of 2)\n\nCancels the order and returns it. With `segment_ids` only those\nflights are dropped and the order becomes `partially_cancelled`. An\norder already cancelled answers 200 with no airline call. The\nIdempotency-Key is required; a whole-order cancellation shares it with\n`DELETE /v1/orders/{orderID}`. Booking write — 503 `coming_soon`\nunless booking is enabled.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "Check refund eligibility",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/orders/{{orderId}}/refund-eligibility",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "orders",
                "{{orderId}}",
                "refund-eligibility"
              ],
              "query": [
                {
                  "key": "airline",
                  "value": "{{airline}}",
                  "disabled": true,
                  "description": "Optional. The airline is taken from the stored order; when sent, it must match the order's airline (400 `airline does not match the order` otherwise)."
                }
              ]
            },
            "description": "Check refund eligibility\n\nRead endpoint — available even while booking writes are gated. `booking_amount − not_quoted_amount − penalty_amount = refund_amount`."
          },
          "response": []
        },
        {
          "name": "Execute a refund",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "Reuse it when you retry the same write."
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/orders/{{orderId}}/refund",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "orders",
                "{{orderId}}",
                "refund"
              ],
              "query": [
                {
                  "key": "airline",
                  "value": "{{airline}}",
                  "disabled": true,
                  "description": "Optional. The airline is taken from the stored order; when sent, it must match the order's airline (400 `airline does not match the order` otherwise)."
                }
              ]
            },
            "description": "Execute a refund\n\nCancels the order at the airline (if still open) and marks it\n`refunded`; the airline returns the fare less its penalty to the\noriginal card. No request body. The Idempotency-Key is required.\n\n* Never paid: 409 `nothing_to_refund` — cancel it instead.\n* Cancelled without a refund request: 409 `refund_not_requested`.\n* Already refunded: 202 with `order_id` and `status` only.\n* 501 `refund_not_supported`: this airline's ticketed refunds are not\n  available through the API.\n\nBooking write — 503 `coming_soon` unless booking is enabled."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Monitoring",
      "description": "Airline connector health",
      "item": [
        {
          "name": "Airlines a search reaches, with their network carriers",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/network/airlines",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "network",
                "airlines"
              ]
            },
            "description": "Airlines a search reaches, with their network carriers\n\nThe airlines a search with this key reaches now, in the key's\nenvironment, for drawing a \"where can I fly\" map. Each lists the\ncarriers whose published non-stop routes\n(`/v1/aviation/airlines/{id}/routes`) make up its network: the airline\nitself plus the group and regional airlines it sells. Calls no airline;\nmetered as a data request."
          },
          "response": []
        },
        {
          "name": "Health of every airline connector",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/monitoring/airlines",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "monitoring",
                "airlines"
              ]
            },
            "description": "Health of every airline connector\n\nConnection health per airline in the key's environment, from scheduled\nchecks; calls no airline. Metered as a data request. Use it to tell\n\"no availability\" from \"airline unreachable\" after a search with\n`offers: null`."
          },
          "response": []
        },
        {
          "name": "Health of one airline connector",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/monitoring/airlines/{{airline}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "monitoring",
                "airlines",
                "{{airline}}"
              ]
            },
            "description": "Health of one airline connector"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Aviation Data",
      "description": "Airports, airlines, route networks, aircraft reference data (envelope responses)",
      "item": [
        {
          "name": "Search airports",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/airports",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "airports"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "london",
                  "disabled": true,
                  "description": "Search-box text: an exact IATA code, or part of the name or city. Ranked: exact code, city prefix, name prefix, then the rest; busier airports first within each"
                },
                {
                  "key": "commercial",
                  "value": "",
                  "disabled": true,
                  "description": "`true`: only points a ticket can be sold to (served by a published schedule, a large or medium airport, or a metro code; never a rail or bus station, port or off-line point)"
                },
                {
                  "key": "iata",
                  "value": "",
                  "disabled": true,
                  "description": "IATA code, or a comma-separated list (`MAD,BCN,LHR`)"
                },
                {
                  "key": "icao",
                  "value": "",
                  "disabled": true,
                  "description": "ICAO code, exact"
                },
                {
                  "key": "metro",
                  "value": "LON",
                  "disabled": true,
                  "description": "A metropolitan code: the city point and every airport filed under it"
                },
                {
                  "key": "country",
                  "value": "",
                  "disabled": true,
                  "description": "ISO 3166-1 alpha-2 country code"
                },
                {
                  "key": "city",
                  "value": "",
                  "disabled": true,
                  "description": "Case-insensitive substring of the city"
                },
                {
                  "key": "region",
                  "value": "",
                  "disabled": true,
                  "description": "Case-insensitive substring of the ISO 3166-2 subdivision"
                },
                {
                  "key": "type",
                  "value": "large_airport",
                  "disabled": true,
                  "description": "Exact classification"
                },
                {
                  "key": "name",
                  "value": "",
                  "disabled": true,
                  "description": "Case-insensitive substring of the name"
                },
                {
                  "key": "has_iata",
                  "value": "",
                  "disabled": true,
                  "description": "Only points with (true) or without (false) an IATA code"
                },
                {
                  "key": "scheduled_service",
                  "value": "",
                  "disabled": true,
                  "description": "`true`: only points whose own record claims scheduled service. Prefer `commercial`"
                },
                {
                  "key": "sort",
                  "value": "rank",
                  "disabled": true,
                  "description": "`rank` puts the busiest first; ignored with `q`. Default: by name"
                },
                {
                  "key": "page",
                  "value": "1",
                  "disabled": true,
                  "description": "1-based page. Above 1000 is `400 invalid_page`."
                },
                {
                  "key": "limit",
                  "value": "50",
                  "disabled": true,
                  "description": "Page size. Above 500 is capped at 500."
                }
              ]
            },
            "description": "Search airports"
          },
          "response": []
        },
        {
          "name": "Get an airport by IATA code or Norba id",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/airports/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "airports",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "IATA code or Norba id (the lowercase IATA code, or another identifier for an airfield without one), any case. Not an ICAO code."
                }
              ]
            },
            "description": "Get an airport by IATA code or Norba id\n\nAn ICAO code is not resolved here (404); use /v1/aviation/airports/icao/{icao}."
          },
          "response": []
        },
        {
          "name": "Unified airport profile (airport + runways + frequencies + navaids)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/airports/:id/full",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "airports",
                ":id",
                "full"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "IATA code or Norba id (the lowercase IATA code, or another identifier for an airfield without one), any case. Not an ICAO code."
                }
              ]
            },
            "description": "Unified airport profile (airport + runways + frequencies + navaids)"
          },
          "response": []
        },
        {
          "name": "Get an airport by IATA code",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/airports/iata/MAD",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "airports",
                "iata",
                "MAD"
              ]
            },
            "description": "Get an airport by IATA code"
          },
          "response": []
        },
        {
          "name": "Get an airport by ICAO code",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/airports/icao/LEMD",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "airports",
                "icao",
                "LEMD"
              ]
            },
            "description": "Get an airport by ICAO code"
          },
          "response": []
        },
        {
          "name": "Runways of an airport",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/airports/:id/runways",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "airports",
                ":id",
                "runways"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "IATA code or Norba id (the lowercase IATA code, or another identifier for an airfield without one), any case. Not an ICAO code."
                }
              ]
            },
            "description": "Runways of an airport"
          },
          "response": []
        },
        {
          "name": "Radio frequencies of an airport (TWR/APP/GND/ATIS…)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/airports/:id/frequencies",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "airports",
                ":id",
                "frequencies"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "IATA code or Norba id (the lowercase IATA code, or another identifier for an airfield without one), any case. Not an ICAO code."
                }
              ]
            },
            "description": "Radio frequencies of an airport (TWR/APP/GND/ATIS…)"
          },
          "response": []
        },
        {
          "name": "Navaids associated with an airport (VOR/DME/ILS/NDB)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/airports/:id/navaids",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "airports",
                ":id",
                "navaids"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "IATA code or Norba id (the lowercase IATA code, or another identifier for an airfield without one), any case. Not an ICAO code."
                }
              ]
            },
            "description": "Navaids associated with an airport (VOR/DME/ILS/NDB)"
          },
          "response": []
        },
        {
          "name": "Timezone of an airport",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/airports/:id/timezone",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "airports",
                ":id",
                "timezone"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "IATA code or Norba id (the lowercase IATA code, or another identifier for an airfield without one), any case. Not an ICAO code."
                }
              ]
            },
            "description": "Timezone of an airport"
          },
          "response": []
        },
        {
          "name": "Search airlines",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/airlines",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "airlines"
              ],
              "query": [
                {
                  "key": "iata",
                  "value": "",
                  "disabled": true,
                  "description": "IATA code, exact"
                },
                {
                  "key": "icao",
                  "value": "",
                  "disabled": true,
                  "description": "ICAO code, exact"
                },
                {
                  "key": "country",
                  "value": "",
                  "disabled": true,
                  "description": "ISO 3166-1 alpha-2 country code"
                },
                {
                  "key": "alliance",
                  "value": "",
                  "disabled": true,
                  "description": "oneworld, Star Alliance or SkyTeam; case, spaces and punctuation ignored"
                },
                {
                  "key": "status",
                  "value": "active",
                  "disabled": true
                },
                {
                  "key": "name",
                  "value": "",
                  "disabled": true,
                  "description": "Case-insensitive substring of the name"
                },
                {
                  "key": "page",
                  "value": "1",
                  "disabled": true,
                  "description": "1-based page. Above 1000 is `400 invalid_page`."
                },
                {
                  "key": "limit",
                  "value": "50",
                  "disabled": true,
                  "description": "Page size. Above 500 is capped at 500."
                }
              ]
            },
            "description": "Search airlines"
          },
          "response": []
        },
        {
          "name": "Get an airline by Norba id",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/airlines/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "airlines",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "Norba airline id, any case — the IATA code, or the ICAO code for an airline without one."
                }
              ]
            },
            "description": "Get an airline by Norba id\n\nThe id is the IATA code, or the ICAO code for an airline without one. For any ICAO code use /v1/aviation/airlines/icao/{icao}."
          },
          "response": []
        },
        {
          "name": "Get an airline by IATA code",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/airlines/iata/BA",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "airlines",
                "iata",
                "BA"
              ]
            },
            "description": "Get an airline by IATA code"
          },
          "response": []
        },
        {
          "name": "Get an airline by ICAO code",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/airlines/icao/BAW",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "airlines",
                "icao",
                "BAW"
              ]
            },
            "description": "Get an airline by ICAO code"
          },
          "response": []
        },
        {
          "name": "Operational status of an airline",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/airlines/:id/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "airlines",
                ":id",
                "status"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "",
                  "description": "Norba airline id, any case — the IATA code, or the ICAO code for an airline without one."
                }
              ]
            },
            "description": "Operational status of an airline"
          },
          "response": []
        },
        {
          "name": "Airlines that publish a route network, largest first",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/networks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "networks"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "",
                  "disabled": true,
                  "description": "The airline's IATA code exactly, or part of its name"
                },
                {
                  "key": "serving",
                  "value": "NDR",
                  "disabled": true,
                  "description": "Only airlines with a published route touching this airport (IATA code)"
                },
                {
                  "key": "page",
                  "value": "1",
                  "disabled": true,
                  "description": "1-based page. Above 1000 is `400 invalid_page`."
                },
                {
                  "key": "limit",
                  "value": "50",
                  "disabled": true,
                  "description": "Page size. Above 500 is capped at 500."
                }
              ]
            },
            "description": "Airlines that publish a route network, largest first\n\nEvery airline that publishes a schedule, with the size of its non-stop\nnetwork, most routes first. `serving` answers \"who flies to this\nairport\". Reference data from published schedules, not a list of the\nairlines bookable through Norba."
          },
          "response": []
        },
        {
          "name": "Airlines that fly one airport pair non-stop",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/routes?origin=MAD&destination=JFK",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "routes"
              ],
              "query": [
                {
                  "key": "origin",
                  "value": "MAD",
                  "disabled": false
                },
                {
                  "key": "destination",
                  "value": "JFK",
                  "disabled": false
                }
              ]
            },
            "description": "Airlines that fly one airport pair non-stop\n\nEvery airline that publishes a non-stop flight from `origin` to `destination` (one direction), busiest first. Metro codes match nothing. Not paginated."
          },
          "response": []
        },
        {
          "name": "One airline's published non-stop routes, busiest first",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/airlines/AA/routes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "airlines",
                "AA",
                "routes"
              ],
              "query": [
                {
                  "key": "origin",
                  "value": "",
                  "disabled": true,
                  "description": "Only pairs departing this airport (IATA code)"
                },
                {
                  "key": "destination",
                  "value": "",
                  "disabled": true,
                  "description": "Only pairs arriving at this airport (IATA code)"
                },
                {
                  "key": "q",
                  "value": "",
                  "disabled": true,
                  "description": "Prefix matched against either end of the pair: `BC` finds BCN as origin or destination"
                },
                {
                  "key": "page",
                  "value": "1",
                  "disabled": true,
                  "description": "1-based page. Above 1000 is `400 invalid_page`."
                },
                {
                  "key": "limit",
                  "value": "50",
                  "disabled": true,
                  "description": "Page size. Above 500 is capped at 500."
                }
              ]
            },
            "description": "One airline's published non-stop routes, busiest first"
          },
          "response": []
        },
        {
          "name": "Summary of one airline's published network",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/airlines/AA/network",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "airlines",
                "AA",
                "network"
              ]
            },
            "description": "Summary of one airline's published network"
          },
          "response": []
        },
        {
          "name": "Search aircraft types",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/aircraft-types",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "aircraft-types"
              ],
              "query": [
                {
                  "key": "manufacturer",
                  "value": "",
                  "disabled": true,
                  "description": "Case-insensitive substring of the manufacturer"
                },
                {
                  "key": "class",
                  "value": "",
                  "disabled": true,
                  "description": "narrowbody, widebody, regional, turboprop or rotorcraft"
                },
                {
                  "key": "page",
                  "value": "1",
                  "disabled": true,
                  "description": "1-based page. Above 1000 is `400 invalid_page`."
                },
                {
                  "key": "limit",
                  "value": "50",
                  "disabled": true,
                  "description": "Page size. Above 500 is capped at 500."
                }
              ]
            },
            "description": "Search aircraft types"
          },
          "response": []
        },
        {
          "name": "Get an aircraft type by ICAO type designator",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/aircraft-types/A320",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "aircraft-types",
                "A320"
              ]
            },
            "description": "Get an aircraft type by ICAO type designator\n\nIATA aircraft codes (`77W`) are 404."
          },
          "response": []
        },
        {
          "name": "List aircraft manufacturers",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/manufacturers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "manufacturers"
              ]
            },
            "description": "List aircraft manufacturers"
          },
          "response": []
        },
        {
          "name": "Aircraft types built by a manufacturer",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/aviation/manufacturers/BOEING/aircraft-types",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "aviation",
                "manufacturers",
                "BOEING",
                "aircraft-types"
              ]
            },
            "description": "Aircraft types built by a manufacturer\n\nThe exact manufacturer name, any case, as `/v1/aviation/manufacturers` lists it. Ordered by model; an unknown name is an empty list. Not paginated."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Reference",
      "description": "Upstream data-source catalog",
      "item": [
        {
          "name": "Catalog of upstream data sources",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/reference/sources",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "reference",
                "sources"
              ]
            },
            "description": "Catalog of upstream data sources\n\nThe data sources behind the Aviation Data API, with licence and sync status, for attribution. A source with `enabled` false feeds no endpoint."
          },
          "response": []
        }
      ]
    }
  ]
}
