Save up to 17% with yearly billing

See pricing

NOTAM

Получайте действующие извещения для пилотов (Notices to Air Missions, NOTAM — официальные операционные извещения, относящиеся к определённому пункту или воздушному пространству) для любого кода аэропорта ICAO в мире. Используйте этот эндпоинт в процессах брифинга, на дашбордах диспетчеризации и в предполётных чек-листах, когда вам нужны операционные извещения без поддержки отдельного потока NOTAM.

Важно: к трёхбуквенным кодам пунктов США (например, JFK) автоматически добавляется префикс K. Пустой массив notams — это обычный ответ 200, когда действующих извещений нет, а не ошибка.

Каждая запись содержит полный текст NOTAM в стандартном формате ICAO (raw), идентификаторы ICAO и национальные идентификаторы (если применимо), время начала и окончания действия, отдельные разобранные пункты и необязательные метаданные об области действия. Фильтруйте записи на стороне клиента по scope и type или используйте exclude_qcode/exclude_scope, чтобы исключать категории NOTAM на стороне сервера и уменьшать размер ответа ещё до того, как он дойдёт до вас.

Планируете маршрут на более отдалённую дату? По умолчанию возвращаются только уже действующие NOTAM — так же, как в брифинге AIS в реальном времени. NOTAM, опубликованный с будущей датой вступления в силу (например, аэропорт заранее, за две недели, публикует изменение расписания работы), не появится до наступления этой даты. Передайте include_future=true, чтобы уже сейчас видеть такие предстоящие NOTAM с меткой status: "FUTURE", позволяющей отличить их от действующих сегодня.

Запрос

Требования

Авторизация
x-api-key в каждом запросе (прямая подписка). Подробнее →
GEThttps://data.skylinkapi.com/v3.1/notams/{icao}

exclude_qcode и exclude_scope фильтруют на стороне сервера; scope и type остаются в ответе для дополнительной фильтрации на стороне клиента.

ПараметрТипОбязательныйОписание
icaostringДаЧетырёхбуквенный ICAO-код аэропорта (например, KJFK, EGLL). К трёхбуквенным кодам США автоматически добавляется префикс K
exclude_qcodestring (query)НетПрефиксы Q-кодов ICAO через запятую для исключения на стороне сервера, например QK (вся тематическая категория — исключает все NOTAM-чек-листы QK*) или QKKKK (только точный код)
exclude_scopestring (query)НетЗначения scope через запятую для исключения на стороне сервера: AERODROME, FIR
include_futureboolean (query)НетТакже возвращать NOTAM, дата вступления в силу которых ещё не наступила, с меткой status: "FUTURE". Значение по умолчанию false возвращает только действующие в данный момент NOTAM. Истёкшие NOTAM не возвращаются ни в одном из случаев

Пример фильтрации на стороне сервера: GET /notams/EGLL?exclude_qcode=QK&exclude_scope=FIR исключает ежемесячные NOTAM-чек-листы (тематика Q-кода QK*, например QKKKK) и административные извещения и извещения на маршруте для всего FIR, возвращая только записи, относящиеся непосредственно к аэродрому EGLL.

Ответ

{
  "icao": "KJFK",
  "notams": [
    {
      "raw": "A0373/26 NOTAMN\nQ) KZNY/QMXLC/IV/M/A/000/999/4038N07346W005\nA) KJFK\nB) 2603241038\nC) 2608311800\nE) TWY D HLDG PSN MARKINGS FOR RWY 13L/31R NORTH SIDE NOT STD",
      "notam_id": "A0373/2026",
      "notam_id_domestic": "03/0373",
      "type": "N",
      "location": "KJFK",
      "effective": "202603241038",
      "expiration": "202608311800",
      "body": "TWY D HLDG PSN MARKINGS FOR RWY 13L/31R NORTH SIDE NOT STD",
      "schedule": null,
      "lower_limit": null,
      "upper_limit": null,
      "affected_fir": "KZNY",
      "q_code": "QMXLC",
      "qline": "KZNY/QMXLC/IV/M/A/000/999/4038N07346W005",
      "scope": "AERODROME",
      "status": "ACTIVE"
    }
  ],
  "total": 1
}

raw — это многострочная строка (с разделителем \n), содержащая извещение точно в том виде, в каком его публикует брифинг AIS. См. раздел Формат ICAO ниже.

Поля верхнего уровня

ПолеТипОбязательныйОписание
icaostringДаОпределённый для запроса код ICAO
notamsarrayДаДействующие записи NOTAM (может быть пустым)
totalintegerНетКоличество элементов в notams (по умолчанию 0)

Элемент NOTAM (notams[])

ПолеТипОбязательныйNull?Описание
rawstringДаНикогдаПолный текст NOTAM в стандартном формате ICAO (многострочный, с разделителем \n)
notam_idstringНетДаИдентификатор NOTAM ICAO (например, 373/2026)
notam_id_domesticstringНетДаНациональный идентификатор FAA (например, 03/373)
typestringНетДаN (новый), R (замена), C (отмена)
locationstringНетДаИдентификатор затрагиваемого пункта
effectivestringНетДаНачало действия (UTC, формат поставщика данных)
expirationstringНетДаОкончание действия (UTC, формат поставщика данных)
bodystringНетДаТекст NOTAM (пункт E) без заголовка
schedulestringНетДаРасписание действия (пункт D), например MON-FRI 0600-1800
lower_limitstringНетДаНижний предел по высоте (например, SFC, FL050)
upper_limitstringНетДаВерхний предел по высоте (например, FL195, UNL)
affected_firstringНетДаFIR/ARTCC, в котором зарегистрирован NOTAM
q_codestringНетДаQ-код NOTAM ICAO, если присутствует — может быть null в национальных извещениях FAA
qlinestringНетДаПолная строка Q ICAO, если предоставлена
scopestringНетДаAERODROME (объект аэропорта) или FIR (воздушное пространство на маршруте)
statusstringНетДаACTIVE (действует сейчас) или FUTURE (дата вступления в силу ещё не наступила — присутствует, только если запрошен include_future=true)

raw присутствует всегда. Большинство полей метаданных могут быть null в зависимости от того, как было закодировано исходное сообщение.

Важно: извещения с scope: "AERODROME" напрямую касаются аэропорта — показывайте их на видном месте в панелях брифинга. Извещения с scope: "FIR" относятся к воздушному пространству на маршруте и тоже присутствуют в ответе — выводите их в отдельном разделе или сворачивайте по умолчанию. Аналогично, считайте извещения с status: "FUTURE" предстоящими, а не текущими: в большинстве интерфейсов брифинга их следует показывать отдельно от действующих сегодня.

Формат ICAO

raw содержит извещение в стандартной структуре ICAO, которую пилоты учатся читать: строка идентификации, за которой следуют пункты, обозначенные буквами. Отображайте его в блоке с моноширинным шрифтом без повторного переноса строк:

A0373/26 NOTAMN
Q) KZNY/QMXLC/IV/M/A/000/999/4038N07346W005
A) KJFK
B) 2603241038
C) 2608311800
E) TWY D HLDG PSN MARKINGS FOR RWY 13L/31R NORTH SIDE NOT STD
ПунктЗначениеСоответствующее поле
Q)Строка Q — FIR, Q-код, тип движения, назначение, область действия, пределы, центр/радиусqline, q_code, affected_fir
A)Пункт, к которому относится извещениеlocation
B)Начало действия (YYMMDDHHMM, UTC)effective
C)Окончание действия или PERMexpiration
D)Расписание действия, если извещение действует периодическиschedule
E)Сам текст извещенияbody
F) / G)Нижний и верхний вертикальные пределыlower_limit, upper_limit

Если орган, издавший извещение, опубликовал собственный перевод в формате ICAO, raw воспроизводит его байт в байт; в противном случае текст составляется из перечисленных выше разобранных пунктов.

Пункты присутствуют в том виде, в каком были поданы. Пункт присутствует, только если его указал составитель:

  • Q) — международные извещения содержат полную строку Q. Многие национальные извещения США подаются вообще без Q-кода, поэтому Q), q_code и qline для них отсутствуют.
  • D) — только в извещениях с расписанием действия; большинство действуют непрерывно между B) и C).
  • F)/G) — только в извещениях о воздушном пространстве и навигации, в которых указан вертикальный диапазон.

Разбирайте raw для отображения, а отдельные поля — для логики; не требуйте наличия всех пунктов.

Клиентские типы

"""NOTAM response models for GET /notams/{icao}."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass NotamEntry:    raw: str    notam_id: str | None = None    notam_id_domestic: str | None = None    type: str | None = None    location: str | None = None    effective: str | None = None    expiration: str | None = None    body: str | None = None    schedule: str | None = None    lower_limit: str | None = None    upper_limit: str | None = None    affected_fir: str | None = None    q_code: str | None = None    qline: str | None = None    scope: str | None = None@dataclassclass NotamResponse:    icao: str    notams: list[NotamEntry]    total: int = 0@dataclassclass NotamSummary:    notam_id: str | None    type: str | None    body: str | None    effective: str | None    expiration: str | None    scope: str | None

Интеграция

Опрашивайте действующие NOTAM для аэропорта вылета и выводите компактный сводный список в интерфейсе брифинга.

Пример ниже кэширует ответы NOTAM на 5 минут, поскольку в периоды активной работы извещения могут часто меняться. Каждый запрос использует тайм-аут чтения 30 с, чтобы справляться с большими наборами NOTAM в загруженных хабах. Вспомогательная функция преобразует записи в сокращённый NotamSummary для отображения в списке, сохраняя raw для детального просмотра.

import osimport timefrom dataclasses import dataclassimport requestsHEADERS = {    "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}BASE = "https://data.skylinkapi.com/v3.1"CACHE: dict[str, tuple[dict, float]] = {}NOTAM_TTL = 300  # 5 min@dataclassclass NotamSummary:    notam_id: str | None    type: str | None    body: str | None    effective: str | None    expiration: str | None    scope: str | Nonedef fetch_notams(icao: str) -> dict:    icao = icao.upper().strip()    if len(icao) == 3:        icao = f"K{icao}"    key = f"notams:{icao}"    cached = CACHE.get(key)    if cached and time.time() < cached[1]:        return cached[0]    try:        r = requests.get(f"{BASE}/notams/{icao}", headers=HEADERS, timeout=(10, 30))    except requests.Timeout as exc:        raise RuntimeError(f"SkyLink timeout fetching NOTAMs for {icao}") from exc    r.raise_for_status()    data = r.json()    CACHE[key] = (data, time.time() + NOTAM_TTL)    return datadef notam_summaries(icao: str) -> list[NotamSummary]:    data = fetch_notams(icao)    return [        NotamSummary(            notam_id=item.get("notam_id"),            type=item.get("type"),            body=item.get("body"),            effective=item.get("effective"),            expiration=item.get("expiration"),            scope=item.get("scope"),        )        for item in data.get("notams", [])    ]if __name__ == "__main__":    import json    summaries = notam_summaries("KJFK")    print(json.dumps(summaries[:5], indent=2, default=str))

Примечания по реализации

Кэширование с коротким TTL. В продакшне используйте окна кэширования 2–5 минут; в процессах авиации общего назначения и чартерных перевозок обходите кэш в течение часа до вылета.

Обработка отмен. Записи с type: "C" отменяют ранее опубликованный NOTAM — если вы храните локальное состояние, отслеживайте их по notam_id.

Префикс для кодов США. Принимайте от пользователей JFK; API преобразует его в KJFK.

Планирование маршрута на будущие даты. В инструментах планирования полётов, проверяющих аэропорт на несколько дней или недель вперёд, запрашивайте ?include_future=true и разделяйте записи по status: показывайте извещения ACTIVE как текущие условия, а FUTURE — как предстоящие изменения, о которых экипаж должен знать до полёта.

Ответы с ошибками

Общие ошибки платформы: Обработка ошибок. Ошибки, специфичные для эндпоинта:

422 — недопустимая длина кода ICAO

{
  "detail": [
    {
      "type": "string_too_short",
      "loc": ["path", "icao"],
      "msg": "String should have at least 4 characters"
    }
  ]
}

Возвращается, если параметр пути короче четырёх символов и не может быть нормализован.

GET
/notams/{icao}
x-api-key<token>

Your SkyLink licence key, for keys bought direct from skylinkapi.com.

In: header

Path Parameters

icao*Icao

4-letter ICAO airport code (e.g. KJFK, EGLL)

Length4 <= length <= 4

Query Parameters

exclude_qcode?|

Comma-separated ICAO Q-code prefixes to exclude, e.g. QKKKK (exact code) or QK (whole subject category — drops every QK* checklist NOTAM).

exclude_scope?|

Comma-separated scopes to exclude: AERODROME, FIR. exclude_scope=FIR drops en-route/FIR-wide administrative notices.

include_future?Include Future

Also include NOTAMs whose effective start date is still in the future (not yet active), tagged with status=FUTURE. Default false returns only currently-active NOTAMs, matching a live AIS briefing.

Defaultfalse

Response Body

application/json

application/json

curl -X GET "https://data.skylinkapi.com/v3.1/notams/KJFK"
{
  "icao": "OMDB",
  "notams": [
    {
      "raw": "A2161/26 NOTAMN\nQ) OMAE/QMRLC/IV/NBO/A/000/999/2515N05521E005\nA) OMDB B) 2607162130 C) 2607302215\nE) RWY 12L/30R CLSD",
      "notam_id": "A2161/2026",
      "notam_id_domestic": "07/2161",
      "type": "N",
      "location": "OMDB",
      "effective": "202607162130",
      "expiration": "202607302215",
      "body": "RWY 12L/30R CLSD",
      "qline": "OMAE/QMRLC/IV/NBO/A/000/999/2515N05521E005",
      "scope": "AERODROME"
    }
  ],
  "total": 1
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

См. также: Полётный брифинг · Задержки FAA · METAR