Market-wide air traffic and capacity

API TraderAPI QuantAPI Developer

Japanese air traffic and capacity for the whole market: passengers carried, revenue passenger-kilometres, seat-kilometres and cargo on Japanese airlines, with domestic and international flying counted separately, from the Ministry of Land, Infrastructure, Transport and Tourism's monthly preliminary survey.

It is the monthly read on the demand ANA and Japan Airlines are flying into, and on whether Japanese international capacity is keeping up with the traffic returning to it, about two months after the month closes and well before either group reports the quarter.

The preliminary release aggregates every Japanese carrier and names none of them, which is why it is served here rather than on the per-instrument air_traffic endpoint alongside the regulators that do name airlines.

Air passengers for the five European countries that report nothing to Eurostat's airport tables, from each national statistics office: Albania (INSTAT), Kosovo (the Kosovo Agency of Statistics, with arrivals, departures and flights at Prishtina), Moldova (the National Bureau of Statistics), Belarus (Belstat) and Ukraine (the State Statistics Service).

Available Data Points:

  • Period Date: The period the value describes — what the number is about (the valid clock).
  • Published At: When the value first became knowable — when the publisher released it (the knowledge clock). Filter on this for anything where look-ahead bias would matter.
  • Value: The numeric value, where the series has one.
  • Value Text: The textual value, for categorical series such as a trial's status or phase.
  • Unit: Unit of the value, e.g. vehicles, percent, USD.
  • Value Type: number, percent, currency, count or text.
  • Frequency: How often the publisher releases the series.
  • Market: The market the reading describes — an ISO-3166 alpha-2 code (DE), a sub-national one (US-CA), a supranational aggregate (EA, EU) or GLOBAL.
  • Series Slug: Which series the reading belongs to. Unique within a publisher, not globally.
  • Series Name: Human-readable name of the series.
  • Source Slug: Publisher/feed identifier, e.g. kba_registrations.
  • Source Name: Human-readable name of the publisher or feed.
  • Publisher: Who publishes the underlying data.
  • Entity Ref: The publisher's own identifier for what the reading is about — a manufacturer name, a securitisation trust, a reactor unit, a country code. Kept so any value can be traced back to the row it was parsed from.

This dataset describes a market, not a company

Every reading here is about a country or a whole market, so there is no ticker in the path and no instrument in the response envelope. That is deliberate: attaching a national print to a listing would be a claim the data does not support. Read it as the context the company-level endpoints are measured against.

Coverage

Japan: monthly, published through the national statistics portal about 60 days after the month closes. Market level only: the per-operator tables exist in the survey's later definitive series and are not imported, so nothing here is either airline's own traffic.

AL, XK, MD, BY and UA: each market has its own series because each office counts something different - Albania passengers at its airports, Kosovo Prishtina airport's own count, Moldova passengers carried by Moldovan airlines (monthly to December 2025) plus a quarterly line NBS does not define, Belarus and Ukraine running totals from January. Belstat stopped publishing its air line after April 2022, and Ukraine's ends with December 2021: civil airspace has been closed since 24 February 2022, and there is no current Ukrainian air data.

What to look for

Divide passenger-kilometres by seat-kilometres for the seat utilization rate the ministry publishes, and never average that ratio across months.

Read domestic and international apart rather than adding them. An international seat-kilometre earns several times a domestic one, and the two blocks have been moving in different directions.

Never add the five European markets to each other or to Eurostat's airport series, and compare a running total with the same month of another year, never with last month.

Two dates on every reading, and the difference is the edge

periodDate is what the number is about. publishedAt is when it first became knowable. The gap between them is the whole point of alternative data — and it is also the trap. A Form 10-D describing July is filed in mid-August, so a backtest that treats the period as the knowledge date reads a document six weeks before it existed.

from_date and to_date filter on periodDate, because that is the axis you plot against. Join on publishedAt when you are joining against returns.

Filtering: one market or all of them

Called with no filters, the endpoint returns every series in the dataset, for every market ORTEX covers it in. Each row names its own market, seriesSlug and sourceSlug, so a single request is enough to chart the whole dataset.

Narrow it with any combination of market (one market), series (one measure) and source (one publisher). Filter values that are each valid but select nothing together return 400 invalidSelection rather than a misleading empty result.

A series slug identifies a series within a publisher, not globally

unemployment_rate is published under that exact slug by the US Bureau of Labor Statistics, the UK Office for National Statistics and Statistics Canada. Where a slug names more than one series in a dataset, passing it alone returns 400 invalidSeries listing the alternatives — pair it with market or source. ORTEX would rather refuse than hand you one country's print labelled as another's.

How much history there is

Several of these publishers overwrite their own pages and keep no archive. Where that is so, the series begins on the day ORTEX started capturing it and lengthens from there — nobody, including the publisher, can supply the days before that. Everything ORTEX has ever fetched is archived on capture, so the series only ever grows.

Try it out! You can test the API with the trial key TEST. Simply include it in your request headers; either here, or add the header "Ortex-Api-Key": "TEST" to your http request.

Trial key restrictions: Trial keys may be limited to a specific date range and set of regions. Requests outside the allowed regions or entirely outside the allowed date range are rejected; a date window that partially overlaps the allowed range is trimmed to it, reported in meta.restriction.

Get full access! Get a key at app.ortex.com/apis

Query Params
string

Restrict the response to one market. Case-insensitive. This endpoint covers: AL, BY, JP, MD, UA, US, XK. Omit it to receive every market at once - the rows carry their own market, so one request is enough to chart all of them. An unrecognized value returns 400 invalidMarket naming the accepted set.

date
required

Inclusive start of the returned date window. Format: YYYY-MM-DD.

date

Inclusive end of the returned date window (defaults to today). Format: YYYY-MM-DD.

string

Restrict the response to one measure within this dataset. Case-insensitive. Carried here: airport_passengers_domestic, airport_passengers_international, airport_departures_domestic, airport_departures_international, airport_seats_domestic, airport_seats_international, state_passengers_domestic, state_passengers_international, state_departures_domestic, state_departures_international, state_seats_domestic, state_seats_international (and 21 more - see the Alt Data catalog). Omit it to receive every measure. A slug is unique within a publisher rather than globally, so where several publishers in this dataset use the same one, pair it with market or source - an ambiguous slug returns 400 invalidSeries naming the alternatives rather than guessing which country you meant.

string

Restrict the response to one publisher. Case-insensitive. Feeding this endpoint: bts_airport_traffic, mlit_japan_air, eastern_europe_air_traffic. Most useful as the disambiguator for a series slug more than one publisher uses. An unrecognized value returns 400 invalidSource naming the accepted set.

integer

Page number within the paginated result set. Must be >= 1. Defaults to 1.

integer

Number of rows per page. The default and the maximum allowed depend on the API tier; a value above the tier maximum is rejected with 400 invalidPageSize.

string
enum
Defaults to json

Response format. "json" (default) or "csv".

Allowed:
Headers
string
enum
Defaults to application/json

Generated from available response content types

Allowed:
Responses

Language
Credentials
Header
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json
text/csv