Empty Legs API

A read-only REST key over our own board and the record behind it: every empty leg we have read from an operator, when it appeared, when it went, and what happened to its price in between. USD 550 a month. The price is on this page because we could not find a competitor that publishes one.

What is in it

Everything below was read on 1 September 2026 and will have moved since. These are counts from our own board, so they are what we read from the operators we cover, not the whole market.

1,041 live legs right now, from 17 operators, across 657 departure airports and 86 aircraft type strings. 225 of them carry a published price, which is a little over one in five: that ratio is itself a fact most of the market will not tell you.

3,871 legs recorded in total since 31 July 2026, of which 541 have gone. The record starts on that date because that is when we started keeping it, and it grows from there. Anyone selling you a deeper archive of this market should be asked where it came from.

What you are actually paying for

Be clear about this, because we would rather say it than have you find out. The live board is already free. It is on this website, and the read key is in the page source. If all you want is what is available today, take it, no charge, no key from us needed.

What is not public, and what this subscription is, is the record. When each leg first appeared. When it stopped appearing, which is the closest thing there is to a signal that it sold. What the price was before it changed. Which tail flew it. Which operator page it came from. None of that is readable without a key, and none of it can be reconstructed after the fact by scraping, because the leg is gone by then.

That is the difference between a list of what is on sale and a record of what this market does.

The fields

On the live board:

FieldWhat it is
operator_nameThe operator that published the leg.
from_airport, from_iataDeparture, as the operator writes it, plus the code where we have one.
to_airport, to_iataArrival, same.
departure_dateThe date the operator published.
aircraft_typeAs published. 86 distinct strings on the board today, not a normalised list.
seatsWhere the operator states it.
est_flight_timeWhere the operator states it.
price_noteThe operator's published figure for the whole aircraft, verbatim, currency included.
prev_price_note, price_changed_atThe previous figure and when it moved.
published_atWhen we published the leg.

And on the record, which is the part that is not public:

FieldWhat it is
first_seen_atThe first time we read this leg from the operator.
last_seen_atThe last time it was still there.
gone_atWhen it stopped appearing. Null while it is still live.
tail_numberWhere the operator publishes it.
from_icao, to_icaoThe ICAO codes, where the source carries them.
source_urlThe operator page the leg was read from.
collected_atThe read that produced this row.

How it works

You get your own read-only key. It is a standard PostgREST endpoint, so you filter, sort and page in the query string and get JSON back. No SDK, no client library, nothing to install.

# every leg departing on or after a date, soonest first
curl -s "$ENDPOINT/empty_legs?departure_date=gte.2026-09-01&order=departure_date.asc" \
     -H "apikey: $YOUR_KEY"

# everything that has ever touched Luton, including the legs that are gone
curl -s "$ENDPOINT/empty_legs_staging?or=(from_iata.eq.LTN,to_iata.eq.LTN)&select=*" \
     -H "apikey: $YOUR_KEY"

# how long legs on one corridor survived before they disappeared
curl -s "$ENDPOINT/empty_legs_staging?from_iata=eq.LTN&to_iata=eq.NCE\
&select=departure_date,aircraft_type,price_note,first_seen_at,gone_at" \
     -H "apikey: $YOUR_KEY"

The board is re-read from operator sources three times a day and every row carries the timestamp of the read that produced it, so you never have to guess how old a figure is.

What it is not

It is not a booking API. We are a listing service: not a broker, not an operator, not a party to any booking, and we take no commission. Nothing here reserves an aircraft.

Prices are the operator's published figure for the whole aircraft, passed through exactly as written, currency and all. They are never per seat and we never estimate one. About four in five legs carry no price at all, and those come through as null rather than as a guess.

A leg disappearing is not proof that it sold. It is proof that the operator stopped publishing it, which is a different thing, and the field is named gone_at rather than sold_at for that reason.

There is no uptime guarantee on this page because we are not going to invent one. If that matters to you, ask and we will tell you what we actually run on.

Price

USD 550 a month

USD 5,500 a year if you prefer it annually, which is two months off. Fourteen days free on a trial key first, so you can look at the data before you decide it is worth anything to you.

For what it is worth on the comparison: on 1 September 2026 the only other empty leg API we could find, Aviapages, published no price at all, you log in or email for a quote. AeroDataBox, which is general aviation data rather than empty legs, publishes tiers at 19, 99 and 499 dollars a month. We would rather be the one with a number on the page.

Start

Tell us what you want to do with it and we will send a trial key. If it is a redistribution or a white label rather than your own use, say so and we will price that separately, because it is a different thing.

Ask for a trial key