← back

notams.coredoes.dev / api reference

!! NOT FOR OPERATIONAL USE !! data may be stale, incomplete, or wrong


notams.coredoes.dev is a free feed of international NOTAMs from the ICAO distribution network, noncommercial use only.

the point of this project is to make NOTAM data accessible without dealing with the red tape of getting access to government data feeds. i did that part and i'm redistributing the data for free, on the condition that your use is noncommercial.

new notams usually show up within ~30s. some get missed.

all read endpoints under /api/ require an api key, passed as the x-api-key header. keys are free, email notams@coredoes.dev.

if you'd rather have rows pushed to you than poll, that's available too. email notams@coredoes.dev.

authentication:

curl -H "x-api-key: nta_..." https://notams.coredoes.dev/api/notams

endpoints:

GET  /api/health                          public  service + intake snapshot
GET  /api/notams                          keyed   list NOTAMs (filters below)
GET  /api/notams/:id                      keyed   one NOTAM by CADS id
GET  /api/notams/by-number/:notam_number  keyed   all NOTAMs by ICAO number (array), e.g. A0906%2F26
GET  /api/notams.geojson                  keyed   FeatureCollection (same filters as /api/notams)

GET  /notams/:id                          public  HTML detail page
GET  /notams/by-number/:notam_number      public  HTML selector when a number matches multiple records
GET  /notams/:id/aixm.xml                 public  raw AIXM 5.1 XML
GET  /notams/:id/geojson                  public  GeoJSON Feature (rows with coordinates)

list filters (all optional, combinable):

icao_location=KJFK         substring/wildcard match against icao_location (use * as wildcard, e.g. OE*)
status=NEW                 exact match: one of NEW / REPLACE / CANCELLED
active=true                true = NEW or REPLACE only; false = CANCELLED only
q=runway                   substring/wildcard match against raw_text (same wildcard rules)
from=2026-04-09T00:00:00Z  lower bound on begin_position (ISO 8601, inclusive)
to=2026-04-10T00:00:00Z    upper bound on begin_position (ISO 8601, inclusive)
limit=50                   default 50, max 500
offset=0                   for pagination

NotamDto fields:

id              i32      CADS NOTAM ID (stable, integer); preferred stable identifier
nms_id          string   CADS message ID; stable and unique, but use id where possible
notam_number    string?  ICAO number, e.g. A0906/26; NOT unique, multiple records can share one
status          string?  NEW / REPLACE / CANCELLED
icao_location   string?  comma-joined ICAO location list
raw_text        string?  upstream NOTAM text
icao_text       string?  ICAO-formatted translation, HTML stripped
correlation_id  i64?     CADS sequence ID
latitude        f64?     decimal degrees
longitude       f64?     decimal degrees
radius_nm       f64?     affected radius, nautical miles
has_raw_xml              bool     true if /notams/:id/aixm.xml will return XML
begin_position           string?  gml:beginPosition, ISO 8601 validity start
end_position             string?  gml:endPosition, ISO 8601 validity end (absent for PERM)
replaces_notam_number    string?  NOTAM number superseded by this REPLACE or CANCEL

caveats:

- rebroadcast latency is ~30s normally, can stretch to a few minutes.
- some NOTAMs get missed. gap detection kicks off a resync automatically.
- coordinates come from the Q-line and may be missing or off.
- not for operational use.

!! NOT FOR OPERATIONAL USE !! data may be stale, incomplete, or wrong

© 2026 coredoes.dev