Airline route network
Every non-stop city pair one airline publishes, busiest first.
/v1/aviation/airlines/{id}/routesRequires X-API-KeyOne carrier's published non-stop network, page by page, ordered by weekly frequency (busiest first; pairs published without a frequency last), then by origin and destination — so the first page answers "where does this airline actually fly".
The data comes from the schedules airlines publish, as compiled by OpenTravelData. It describes the airline's network, not what Norba can book: use POST /v1/shopping/offers to find out what is for sale.
**{id} is the two-character IATA airline code** (IB, ib), not an ICAO code — anything else is 400 invalid_airline.
Filters:
- origin, destination — exact three-letter airport code at that end of the pair
- q — an airport code prefix matched at either end: BC finds pairs to and from BCN
Each pair is one direction; the return leg is its own record. A route an airline sells only as a codeshare is filed under the airline that operates it.
404 vs. empty page. A carrier that publishes no network at all is 404 not_found; a filter that matches nothing on a carrier that does is 200 with an empty data.
Request example
curl --request GET \
--url https://api.norba.io/v1/aviation/airlines/{id}/routes \
--header "X-API-Key: $NORBA_KEY"Response example
{
"data": [
{
"airline_iata": "IB",
"origin": "MAD",
"destination": "BCN",
"weekly_frequency": 98,
"monthly_seats": 72400,
"source": "opentraveldata"
},
{
"airline_iata": "IB",
"origin": "MAD",
"destination": "LHR",
"weekly_frequency": 63,
"monthly_seats": 51800,
"source": "opentraveldata"
}
],
"meta": {
"request_id": "5f3a9c0e7b21d4a8",
"page": 1,
"limit": 50,
"count": 2,
"total": 141,
"last_updated": "2026-10-12T03:10:44Z"
},
"errors": []
}Path parameters
idstringRequiredTwo-character IATA airline code, in either case.
IBQuery parameters
originstringThree-letter IATA code of the departure airport, exact match.
MADdestinationstringThree-letter IATA code of the arrival airport, exact match.
qstringAirport code prefix matched against either end of the pair.
BCpageinteger1-based page number, at most 1000. Default: 1.
limitintegerPage size. Default: 50; values above 500 are capped at 500.
Response fields
airline_iatastringRequiredThe carrier the pair is filed under.
originstringRequiredDeparture airport, IATA code.
destinationstringRequiredArrival airport, IATA code.
weekly_frequencynumberFlights a week averaged over the schedule season. Absent when the pair was published without one.
monthly_seatsintegerSeats offered a month on the pair. Absent when not published.
sourcestringThe dataset the pair comes from: opentraveldata.
Error codes
400invalid_airline — {id} is not two characters long; invalid_page — page is above 1000.
404not_found — the airline publishes no network we hold (only when no filter is set).