# Runways API
> Every runway in the world as an API — 47,000+ runways at 40,000+ airports, from the OurAirports dataset. List all the runways at any airport by ICAO/local ident (e.g. KJFK → four runways, the longest 13R/31L at 14,511 ft), with each runway's length (feet and metres), width, surface (asphalt, concrete, grass, …), lighting and both-end designators, true headings and coordinates. Or filter runways fleet-wide by surface, minimum length and lighting. Ideal for flight planning, flight simulators, EFB and aeronautical apps, and aviation analytics.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/runways-api/..."
```

## Pricing
- **Free** (Free) — 3,500 calls/Mo, 2 req/s
- **Starter** ($5/Mo) — 45,000 calls/Mo, 8 req/s
- **Pro** ($17/Mo) — 250,000 calls/Mo, 20 req/s
- **Mega** ($42/Mo) — 1,250,000 calls/Mo, 50 req/s

## Endpoints

### Runways

#### `GET /v1/airport` — All runways at an airport

**Parameters:**
- `ident` (query, required, string) — Airport ident, e.g. KJFK Example: `KJFK`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/runways-api/v1/airport?ident=KJFK"
```

**Response:**
```json
{
    "data": {
        "count": 4,
        "airport": "KJFK",
        "runways": [
            {
                "closed": false,
                "airport": "KJFK",
                "lighted": true,
                "low_end": {
                    "ident": "13R",
                    "latitude": 40.6484,
                    "longitude": -73.8167,
                    "heading_deg": 121
                },
                "surface": "PEM",
                "high_end": {
                    "ident": "31L",
                    "latitude": 40.6279,
                    "longitude": -73.7716,
                    "heading_deg": 301
                },
                "length_m": 4423,
                "width_ft": 200,
                "length_ft": 14511,
                "designation": "13R/31L"
            },
            {
                "closed": false,
                "airport": "KJFK",
                "lighted": true,
                "low_end": {
                    "ident": "04L",
                    "latitude": 40.622,
                    "longitude": -73.7856,
                    "heading_deg": 31
                },
                "surface": "PEM",
                "high_end": {
                    "ident": "22R",
                    "latitude": 40.6488,
                    "longitude": -73.7647,
                    "heading_deg": 211
                },
                "length_m": 3682,
                "width_ft": 200,
                "length_ft": 12079,
                "designation
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/search` — Filter runways by surface / length / lighting

**Parameters:**
- `airport` (query, optional, string) — Restrict to an airport ident
- `surface` (query, optional, string) — Surface code, e.g. ASP (asphalt), CON (concrete), TURF (grass) Example: `ASP`
- `min_length_ft` (query, optional, string) — Minimum runway length in feet
- `lighted` (query, optional, string) — true = lighted runways only
- `limit` (query, optional, string) — Results per page (1-100, default 20) Example: `20`
- `offset` (query, optional, string) — Pagination offset Example: `0`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/runways-api/v1/search?surface=ASP&limit=20&offset=0"
```

**Response:**
```json
{
    "data": {
        "count": 20,
        "limit": 20,
        "total": 11359,
        "offset": 0,
        "filters": {
            "airport": null,
            "lighted": null,
            "surface": "ASP",
            "min_length_ft": null
        },
        "results": [
            {
                "airport": "04CA",
                "lighted": false,
                "surface": "ASP",
                "length_m": 2438,
                "length_ft": 8000,
                "designation": "8/26"
            },
            {
                "airport": "04TT",
                "lighted": false,
                "surface": "ASP",
                "length_m": 1565,
                "length_ft": 5134,
                "designation": "18/36"
            },
            {
                "airport": "05OG",
                "lighted": true,
                "surface": "ASP",
                "length_m": 15,
                "length_ft": 50,
                "designation": "H1"
            },
            {
                "airport": "10CN",
                "lighted": false,
                "surface": "ASP",
                "length_m": 18,
                "length_ft": 60,
                "designation": "H1/H1"
            },
            {
                "airport": "10FL",
                "lighted": false,
                "surface": "ASP",
                "length_m": 20,
                "length_ft": 65,
                "designation": "H1"
            },
            {
                "airport": "
…(truncated, see openapi.json for full schema)
```

### Meta

#### `GET /v1/meta` — Totals & surface breakdown

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/runways-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "note": "Surface codes are as published (ASP/ASPH = asphalt, CON/CONC = concrete, TURF/GRS = grass, PEM = porous friction course, …). Headings in degrees true.",
        "total": 47984,
        "fields": [
            "airport",
            "designation",
            "length_ft",
            "length_m",
            "width_ft",
            "surface",
            "lighted",
            "closed",
            "low_end",
            "high_end"
        ],
        "source": "OurAirports runways dataset",
        "lighted": 12302,
        "airports": 40895,
        "top_surfaces": [
            {
                "count": 11355,
                "surface": "ASP"
            },
            {
                "count": 7490,
                "surface": "TURF"
            },
            {
                "count": 3620,
                "surface": "CON"
            },
            {
                "count": 3102,
                "surface": "CONC"
            },
            {
                "count": 2229,
                "surface": "GRS"
            },
            {
                "count": 1676,
                "surface": "ASPH"
            },
            {
                "count": 1539,
                "surface": "GRE"
            },
            {
                "count": 1280,
                "surface": "Turf"
            },
            {
                "count": 1055,
                "surface": "GVL"
            },
            {
                "count": 1013,
     
…(truncated, see openapi.json for full schema)
```


---
Marketplace page: https://www.oanor.com/api/runways-api
OpenAPI spec: https://www.oanor.com/api/runways-api/openapi.json
