Get active NOTAMs for any airport via the FAA SWIM real-time feed. Returns raw NOTAM text plus fully parsed fields — NOTAM ID, type, location, effective time, expiration time, and body. No polling of government portals required.
The SkyLink NOTAM API taps directly into the FAA SWIM FNS (Flight Notification Service) real-time Solace messaging system, delivering NOTAMs the moment they are issued — no scraping, no delays, no polling aviationweather.gov or the ICAO NOTAM portal.
NOTAM (Notice to Air Missions) is a notice distributed to pilots and airline operations containing essential information about temporary changes to airspace, runways, navigation aids, and hazards. Every preflight check requires reviewing active NOTAMs for the planned route and destination. Examples:
- Runway closures and surface conditions
- ILS/VOR/ATIS out of service
- TFRs (Temporary Flight Restrictions) — VIP movements, disasters, special events
- Airspace closures and military operations
- Construction cranes and obstacles near airports
- Bird hazards and wildlife activity
- Real-time data from FAA SWIM FNS (Solace AMQP messaging / AIXM 5.1)
- Zero polling delay — NOTAMs delivered as issued, not on a timer
- Fully parsed fields — NOTAM ID, type (N/R/C), location, effective time, expiration time, body text
- Raw text preserved alongside parsed data — for display or manual review
- All active NOTAMs for a given airport in a single call
- Supports all ICAO airport codes worldwide
GET /v3/notams/{icao}
# Examples:
GET /v3/notams/KJFK # JFK International, New York
GET /v3/notams/EGLL # Heathrow, London
GET /v3/notams/KLAX # Los Angeles International
GET /v3/notams/KSFO # San Francisco International
GET /v3/notams/EDDM # Munich Airport
GET /v3/notams/RJTT # Tokyo Haneda
Sign up at RapidAPI — SkyLink API — 1,000 free requests/month, no credit card required.
import requests
headers = {
"x-rapidapi-key": "YOUR_API_KEY",
"x-rapidapi-host": "skylink-api.p.rapidapi.com"
}
r = requests.get(
"https://skylink-api.p.rapidapi.com/v3/notams/KJFK",
headers=headers
)
data = r.json()
print(f"{data['total_count']} active NOTAMs for {data['icao']}")
for notam in data["notams"][:5]:
print(f"\n[{notam['notam_id']}] Type: {notam['type']}")
print(f" Effective: {notam['effective']} → {notam['expiration']}")
print(f" {notam['body']}")r = requests.get(
"https://skylink-api.p.rapidapi.com/v3/notams/KJFK",
headers=headers
)
notams = r.json()["notams"]
# Filter for runway-related NOTAMs
runway_notams = [n for n in notams if "RWY" in n["body"] or "RUNWAY" in n["body"]]
print(f"{len(runway_notams)} runway NOTAMs active at KJFK")
for n in runway_notams:
print(f" [{n['notam_id']}] {n['body'][:120]}")
# Filter for ILS out of service
ils_notams = [n for n in notams if "ILS" in n["body"] or "LOC" in n["body"]]
print(f"\n{len(ils_notams)} ILS/LOC NOTAMs")import requests, time, json
headers = {
"x-rapidapi-key": "YOUR_API_KEY",
"x-rapidapi-host": "skylink-api.p.rapidapi.com"
}
icao = "KJFK"
seen_ids = set()
while True:
r = requests.get(
f"https://skylink-api.p.rapidapi.com/v3/notams/{icao}",
headers=headers
)
notams = r.json()["notams"]
current_ids = {n["notam_id"] for n in notams}
new_notams = [n for n in notams if n["notam_id"] not in seen_ids]
expired = seen_ids - current_ids
if new_notams:
print(f"NEW NOTAMs for {icao}:")
for n in new_notams:
print(f" + [{n['notam_id']}] {n['body'][:100]}")
if expired:
print(f"EXPIRED: {expired}")
seen_ids = current_ids
time.sleep(600) # check every 10 minutesconst axios = require('axios');
const headers = {
'x-rapidapi-key': 'YOUR_API_KEY',
'x-rapidapi-host': 'skylink-api.p.rapidapi.com'
};
const { data } = await axios.get(
'https://skylink-api.p.rapidapi.com/v3/notams/EGLL',
{ headers }
);
console.log(`${data.total_count} active NOTAMs at EGLL`);
data.notams.forEach(n => {
console.log(`[${n.notam_id}] ${n.body}`);
console.log(` Expires: ${n.expiration}`);
});curl -X GET "https://skylink-api.p.rapidapi.com/v3/notams/KJFK" \
-H "x-rapidapi-key: YOUR_API_KEY" \
-H "x-rapidapi-host: skylink-api.p.rapidapi.com"{
"icao": "KJFK",
"total_count": 23,
"notams": [
{
"notam_id": "1/0001",
"type": "N",
"location": "KJFK",
"effective": "2026-03-29T12:00:00Z",
"expiration": "2026-04-15T23:59:00Z",
"body": "RWY 04L/22R CLSD DAILY 2200-0600 LOCAL DUE TO CONSTRUCTION",
"raw": "!JFK 03/001 JFK RWY 04L/22R CLSD 2203292200-2204150600",
"source": "FAA SWIM FNS"
}
]
}NOTAM types:
N— New NOTAMR— Replace (supersedes previous NOTAM)C— Cancel
- EFB (Electronic Flight Bag) NOTAM briefing section — display parsed and categorized NOTAMs
- Preflight planning apps — integrate NOTAMs alongside weather for a complete briefing
- TFR (Temporary Flight Restriction) monitoring — track VIP movements and special events
- Drone/UAS BVLOS pre-flight checks — ensure no TFRs or closed airspace on planned route
- AI flight briefing pipelines — feed NOTAM data to LLMs alongside METAR/TAF
- Dispatch system integration — alert dispatchers to runway or navaid outages
- metar-api — METAR/TAF weather for preflight briefing
- aviation-weather-api — PIREPs, AIRMETs, SIGMETs
- aviation-utilities-api — AI-powered flight briefing that aggregates METAR + NOTAMs + PIREPs
- aerodrome-charts-api — approach and procedure charts for the same airports
notam faa aviation-api faa-swim airspace efb python javascript rest-api notams tfr free-api aviation
All features are included in a single SkyLink API subscription. No juggling 5 different providers. One key, one schema, one bill.
- Website: https://skylinkapi.com
- Full Docs: https://skylinkapi.com/docs
- RapidAPI: https://rapidapi.com/skylink-api-skylink-api-default/api/skylink-api
- Free Tier: 1,000 requests/month — no credit card required
- Data source: FAA SWIM FNS (Solace AMQP / AIXM 5.1) — real-time, worldwide airports