---
title: "Airport lookup by IATA or ICAO code: name, coordinates, elevation, time zone; nearest airports"
method: GET
path: "/v1/ref/airport"
tags: ["deterministic", "no-api-key", "ref", "travel", "airports"]
---

# Airport lookup by IATA or ICAO code: name, coordinates, elevation, time zone; nearest airports

`GET /v1/ref/airport`

## Request

- Base URL: `https://api.duoleads.com`
- URL: `https://api.duoleads.com/v1/ref/airport`
- Auth: none declared

Airport lookup by IATA or ICAO code: get the airport's name, city, country, ISO 3166-2 region code, WGS-84 coordinates, elevation and IANA time zone, or find the nearest airports to a coordinate within a radius. Covers every airport worldwide that holds a three-letter IATA code and scheduled service. Returns the code type that matched and the distance in kilometres for proximity results.

**Output (`data`):** found, matched_on (iata|icao), airport {iata, icao, name, municipality, country, region, lat, lon, elevation_ft (number|null, null when OurAirports has no elevation, 129 airports), type, timezone}, nearby (for near: the same plus distance_km and bearing_deg, nearest first; distance is haversine on a 6,371.0088 km sphere, bearing is the initial bearing in degrees from the query point; matched_on is absent). A code matches IATA (3 characters) first, then ICAO/local identifier. found is false for an unknown code or an empty nearby list. timezone is the IANA zone of the airport location, derived offline at build time from its coordinates (timezone-boundary-builder 2026d); it is the geographic zone, not an airline convention (Xinjiang airports read Asia/Urumqi, UTC+6, although flights run on Beijing time). Coordinates on a zone border can resolve to the neighbouring zone (Gold Coast OOL reads Australia/Sydney).

Deterministic: identical input returns identical output, so the response is served with `Cache-Control: private, max-age=31536000, immutable` (the paying client may cache it indefinitely; shared caches must not, because the response is paid).

Sources: ourairports 2026-09-28 extract (published 2026-09-28, Public Domain); timezone-boundary-builder 2026d (published 2026-09-29, ODbL-1.0). Echoed in `meta.sources`.

Price: $0.05 USDC per call (x402, Base). Route contract version 1.0.0. Docs: https://api.duoleads.com/docs#ref-airport

## Query parameters

- `code` string
- `near` string
- `radius_km` number
- `limit` integer
- `country` string

## Response `200`

Paid and settled. `data` is route-specific; a route that judges its input returns 200 with `data.valid: false` for a bad value.

- object
  - `ok` unknown, required
  - `route` '/v1/ref/airport', required
  - `version` '1.0.0', required
  - `data` object, required: found, matched_on (iata|icao), airport {iata, icao, name, municipality, country, region, lat, lon, elevation_ft (number|null, null when OurAirports has no elevation, 129 airports), type, timezone}, nearby (for near: the same plus distance_km and bearing_deg, nearest first; distance is haversine on a 6,371.0088 km sphere, bearing is the initial bearing in degrees from the query point; matched_on is absent). A code matches IATA (3 characters) first, then ICAO/local identifier. found is false for an unknown code or an empty nearby list. timezone is the IANA zone of the airport location, derived offline at build time from its coordinates (timezone-boundary-builder 2026d); it is the geographic zone, not an airline convention (Xinjiang airports read Asia/Urumqi, UTC+6, although flights run on Beijing time). Coordinates on a zone border can resolve to the neighbouring zone (Gold Coast OOL reads Australia/Sydney).
    - `found` boolean, required
    - `matched_on` string
    - `airport` object
      - `iata` string, required
      - `icao` string, required
      - `name` string, required
      - `municipality` string, required
      - `country` string, required
      - `region` string, required
      - `lat` number, required
      - `lon` number, required
      - `elevation_ft` number, nullable, required
      - `type` string, required
      - `timezone` string, required
    - `nearby` object[]
      - `iata` string, required
      - `icao` string, required
      - `name` string, required
      - `municipality` string, required
      - `country` string, required
      - `region` string, required
      - `lat` number, required
      - `lon` number, required
      - `elevation_ft` number, nullable, required
      - `type` string, required
      - `timezone` string, required
      - `distance_km` number, required
      - `bearing_deg` number, required
  - `meta` Meta, required
    - `disclaimer` string, required: Legal short disclaimer, identical on every response.
    - `request_id` string, required: ULID.
    - `computed_at` string, date-time, required: RFC 3339 UTC with milliseconds.
    - `price_usd` string, required: Decimal string, "0.05".
    - `deterministic` boolean, required
    - `sources` object[]: Present only on routes that read a vendored dataset: the exact edition that answered.
      - `id` string, required
      - `version` string, required
      - `published` string, required
      - `attribution` string
      - `licence` string

## Other responses

- `400`: MISSING_PARAM, INVALID_PARAM or UNSUPPORTED_VALUE. Not charged: validation runs before the paywall.
- `402`: Payment required. No valid PAYMENT-SIGNATURE was supplied: read the base64 PAYMENT-REQUIRED header (or this body) for the price ($0.05 = 50000 atomic USDC on eip155:8453), sign an EIP-3009 authorization and retry. Also returned when settlement is declined (PAYMENT_FAILED). Nothing is charged on a 402.
- `404`: NOT_FOUND: unknown path. Not charged.
- `405`: METHOD_NOT_ALLOWED: only GET and HEAD are served. Not charged.
- `413`: INPUT_TOO_LARGE: a parameter exceeded its documented maximum length. Not charged.
- `500`: INTERNAL: a server bug. Not charged.

---

[API](https://skmtc.dev/duoleads/apis/duo-data-utilities-iban-isin-vat-tax-id-barcode-timezone-geo.md) · [All operations](https://skmtc.dev/duoleads/apis/duo-data-utilities-iban-isin-vat-tax-id-barcode-timezone-geo/llms.txt) · [OpenAPI document](https://skmtc.dev/duoleads/apis/duo-data-utilities-iban-isin-vat-tax-id-barcode-timezone-geo/revisions/18790d59615e?raw)
