Skip to main content

API Documentation

REST API for airport data, weather, and NOTAMs. All responses are JSON.
Base URL: https://dataskycenter.com

Attribution required

Show "Data by Data Sky Center" with a link wherever our data appears. Every response includes a ready-to-use attribution field (text, link, HTML and Markdown), so it's one line in your app. See Terms §9.

API Access

All API endpoints require an API key sent via the X-API-Key header. Create a free account and request your key below.

Get started in 2 minutes

Create a free account, request your API key, and start building. Keys are approved within 24 hours and sent to your email.

Create Account Log In

Quick Start

# curl
curl -H "X-API-Key: dsc_your_key_here" \
  https://dataskycenter.com/api/airports/KJFK

# Python
import requests
r = requests.get("https://dataskycenter.com/api/airports/KJFK",
    headers={"X-API-Key": "dsc_your_key_here"})
print(r.json())

# JavaScript
fetch("https://dataskycenter.com/api/airports/KJFK", {
  headers: { "X-API-Key": "dsc_your_key_here" }
}).then(r => r.json()).then(console.log);

Airport Data

GET
/api/airports/{ICAO}

Full airport data including coordinates, type, country, municipality, elevation, FIR, timezone, VFR/IFR capability, and associated services. is_closed is 1 only where an official closure record names the airport, and closure gives that record (status closed_permanently or closed_indefinitely, text, short and source); otherwise is_closed is 0 and closure is null, whatever the airport's NOTAMs say. A record can take effect at a set time. A US field that DSC matches to an FAA NASR facility by code (or, where NASR gives the field's code to another facility, by a pair of codes checked by hand), name and position, and that NASR lists as closed indefinitely or closed permanently, reads closed from the start of the first NASR cycle in which DSC found it closed (for the fields of cycle 2026-10-01: from 2026-10-01 09:01 UTC), with the text "Closed indefinitely, according to the FAA." or "Closed permanently, according to the FAA.", short "Closed (FAA)" and the latest NASR cycle that lists it as the source. A field NASR lists as closed that DSC does not match that way, for example where the two names differ, reads open, and a field NASR no longer lists at all keeps the record of the last cycle that listed it. VILD reads closed from 2026-11-26 00:00 UTC (NOTAM G1287/26, AIP India) and open before it.

Example: /api/airports/KJFK
GET
/api/airports/{ICAO}/runways

Runway designations, dimensions, surface type, PCN, lighting, NAVAIDs, and approach types. At the 158 US airports whose approach types a data script made up in February 2026, approach_types is the FAA's line for the runway: the names of the approach procedures FAA d-TPP publishes on it, or "No published approach (FAA)" on a runway FAA NASR lists there, or null where the FAA's list cannot be told apart by runway or the FAA does not list the runway (a closed or renumbered one). approach_official gives the runway's procedures, the airport's procedures tied to no runway, split_by_runway, the d-TPP cycle, valid_to and the source.

GET
/api/airports/{ICAO}/freqs

Communication frequencies — TWR, GND, APP, ATIS, AFIS, and more.

GET
/api/airports/{ICAO}/customs

Customs office hours, phone numbers, and on-request availability.

GET
/api/airports/{ICAO}/fees

Landing and parking fee formulas, currency, and remarks. At those 158 US airports landing_fee is FAA NASR's flag in words (charged to non-commercial users, or none for them), and landing_fee_official gives the flag (Y or N) and its source; the flag says nothing of the amount.

GET
/api/airports/{ICAO}/fuel_info

Available fuel types, prices per liter, and supplier info. For the US airports DSC has checked against FAA NASR, the rows are NASR's fuel list, each with a source and a facility_use: public, where NASR lists the fuel for public use, or private at a field NASR lists as private use. The X-Fuel-Source header names NASR and X-Fuel-Facility-Use gives the facility use. An empty list with those headers means NASR lists no fuel there; without them, DSC has no fuel data for the airport.

GET
/api/airports/{ICAO}/immigration

Immigration requirements, port of entry status, and remarks. Where the airport was checked against an official list, port_of_entry gives its status (yes, conditional, no or unclear), category, condition and source, and is_port_of_entry follows it (1, 0, or null when unclear). There the official record replaces a stored remark: remarks is null and remarks_note says why. At those 158 US airports apis_required is 1 and apis_official gives the federal eAPIS rule (19 CFR 122.22) and its source.

GET
/api/airports/{ICAO}/restrictions

Curfew hours, noise chapter minimums, and restriction remarks. A curfew stored as 00:00 to 00:00 was a placeholder, not a curfew: both fields are null, listed in not_recorded, and curfew_note says so.

GET
/api/airports/{ICAO}/alternates

Designated alternate airports with distance, IFR capability, and port of entry status, with port_of_entry where the alternate was checked against an official list; there immigration_remarks is null and remarks_note says the official record replaces it.

Weather

GET
/api/weather/{ICAO}

Live METAR and TAF from aviationweather.gov. Includes raw text and observation time.

Example: /api/weather/EGLL

NOTAMs

GET
/api/notams/{ICAO}

Current NOTAMs with severity, impact type, effective start/end, schedule, and full text. Each response also says what the list is worth, in its coverage object:

  • level: checked (a national source covers this airport: DECEA AISWEB in Brazil, NAV CANADA in Canada. That alone does not mean the source answered: checked_at is when it last answered, null if it never has, and complete is true only when that answer is current), feed (US: built from the FAA NOTAM feed as NOTAMs are issued, not checked against the FAA's full list), relayed (elsewhere: NOTAMs the FAA feed relays, or ones a source sent earlier and is not asked for now; coverage can be incomplete), none (no live source covers this location, so an empty notams list does NOT mean there are no NOTAMs) or unavailable (HTTP 503: NOTAMs could not be read and notams is null)
  • complete: true only when level is checked and stale_warning is false
  • known: false when the code is neither an airport nor a FIR in our data (null when unavailable)
  • note: one plain sentence to show next to the list
  • pull_source and checked_at: the national source and when it last answered; feed_last_message_at: when the FAA feed last delivered NOTAMs (feed and relayed levels)

A NOTAM that gives no end time has effective_end null, end_note "No end time given" ("No end time given (PERM)" when its C) line says PERM) and received_at, when DSC received it. An aerodrome closure among them whose C) line does not say PERM also has no_end_closure true and display_severity caution at most: the map alerts and the flight brief leave it out. An FAA feed NOTAM with no end time last received before 2026-08-13 was stored before DSC fixed how the feed's times are read. When its own times can be read back from the message DSC stored, to within the hour, it is listed like any NOTAM, with its own display_severity: times_read_back is true, effective_start is the earliest time it can start and effective_end the latest time it can end, start_window and end_window give the earliest and latest time each can be (YYYY-MM-DD HH:MM, UTC), start_note and end_note say those windows, and times_note says how they were read; the map alerts (/api/notam_alerts), the airspace restrictions and the flight brief count it with those bounds. Once the latest end has passed, the NOTAM has ended and is no longer listed. When its times cannot be read back, it has unconfirmed_since "2026-08-12", null times with start_note and end_note, and display_severity info, and nothing counts it.

last_fetched is when a national source last answered for this airport (UTC, YYYY-MM-DD HH:MM:SS), and null when none did. stale_warning is true when the list may be out of date.

Example: /api/notams/SBGR

Airspace Restrictions

GET
/api/airspace_restrictions

Active airspace restrictions including conflict zones, NOTAMs with geographic coordinates, severity levels, and affected FIR codes. An old FAA feed NOTAM whose times were read back from the message DSC stored has times_read_back true, start_window and end_window, and its effective_start and effective_end are the earliest time it can start and the latest time it can end.

Notes

  • All endpoints return JSON with Content-Type: application/json
  • ICAO codes are 4-letter uppercase (e.g., KJFK, EGLL, SBGR)
  • API key required — include as X-API-Key header in all requests
  • Rate limited to 30 requests/minute per endpoint
  • Data is maintained by Data Sky Center, with community corrections, and should not replace official AIP publications
  • Every response carries the credit to display: an attribution object (text, url, html, markdown) on JSON objects, and X-Data-Attribution / X-Data-Attribution-URL headers on all responses
  • Weather from aviationweather.gov. NOTAMs from the FAA NOTAM feed (US, plus international NOTAMs it relays), DECEA AISWEB (Brazil) and NAV CANADA (Canada). Other countries can have partial or no coverage: each /api/notams response says which in its coverage field
  • Since October 2026, last_fetched is null when no national source has answered for that airport
  • A stored value with nothing behind it comes back as null, its field listed in not_recorded with a note saying why: curfew_note for a 00:00 to 00:00 curfew, not_recorded_note for a value a data script generated in February 2026 at 158 US airports