New rate limits now apply to all accounts.

Flight Briefing

Generate a preflight briefing for an origin–destination ICAO pair. The endpoint assembles METAR, TAF, NOTAMs, and optional PIREPs, then returns either structured JSON or render-ready text.

This briefing is assistive — it does not replace official dispatch release or authority publications. Show a visible disclaimer in user-facing apps.

Enterprise AI endpoints (including this briefing) run on IBM Granite infrastructure.

Request

Requirements

Auth
x-api-key on every request (direct subscription). Learn more →
ICAO
4-letter airport code (e.g. KJFK). US fields often use a leading K. Learn more →
GEThttps://data.skylinkapi.com/v3/briefing/flight
ParameterTypeRequiredDefaultDescription
originstringYes-Origin ICAO airport code, e.g. KJFK
destinationstringYes-Destination ICAO airport code, e.g. EGLL
include_weatherbooleanNotrueInclude METAR/TAF
include_notamsbooleanNotrueInclude active NOTAMs
include_pirepsbooleanNofalseInclude recent PIREPs along the route (higher latency)
formatstringNojsonjson, markdown, plain_text, or html

Response

Structured JSON (format=json)

{
  "origin": "KJFK",
  "destination": "EGLL",
  "summary": "VFR at KJFK, MVFR at EGLL with light rain.",
  "critical_restrictions": [],
  "origin_briefing": {
    "icao": "KJFK",
    "weather": {
      "metar_raw": "KJFK 151856Z 31008KT 10SM FEW250 08/M06 A3012 RMK AO2 SLP204",
      "taf_raw": "TAF KJFK 151730Z 1518/1624 30010KT P6SM FEW250"
    },
    "notams": []
  },
  "destination_briefing": {
    "icao": "EGLL",
    "weather": {
      "metar_raw": "EGLL 151850Z 22012KT 4000 -RA BKN030 07/05 Q1009",
      "taf_raw": "TAF EGLL 151658Z 1518/1624 22012KT 6000 -RA BKN030"
    },
    "notams": []
  },
  "pireps": []
}

Text/markup (format=markdown|plain_text|html)

{
  "origin": "KJFK",
  "destination": "EGLL",
  "briefing": "# Flight Briefing\n\n- Route: KJFK -> EGLL\n- Weather: ..."
}

Core fields

FieldTypeFormatDescription
originstringallOrigin ICAO
destinationstringallDestination ICAO
summarystringjsonAI-generated operational summary
critical_restrictionsstring[]jsonHigh-priority constraints
origin_briefingobjectjsonPer-airport section for origin
destination_briefingobjectjsonPer-airport section for destination
pirepsarrayjsonRoute-relevant PIREPs when enabled
briefingstringtext/htmlRender-ready content

Client types

"""Flight briefing models for /briefing/flight."""from __future__ import annotationsfrom dataclasses import dataclass, fieldfrom typing import Any@dataclassclass FlightBriefingRequest:    origin: str    destination: str    include_weather: bool = True    include_notams: bool = True    include_pireps: bool = False    format: str = "json"@dataclassclass FlightBriefingStructuredResponse:    origin: str    destination: str    summary: str    critical_restrictions: list[str] = field(default_factory=list)    origin_briefing: dict[str, Any] = field(default_factory=dict)    destination_briefing: dict[str, Any] = field(default_factory=dict)    pireps: list[Any] = field(default_factory=list)@dataclassclass FlightBriefingTextResponse:    origin: str    destination: str    briefing: str

Integration

import osimport requestsBASE = "https://data.skylinkapi.com/v3"HEADERS = {    "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}def fetch_flight_briefing(origin: str, destination: str) -> dict:    """Generate an AI-powered briefing for a route."""    r = requests.get(        f"{BASE}/briefing/flight",        headers=HEADERS,        params={            "origin": origin,            "destination": destination,            "include_weather": "true",            "include_notams": "true",            "include_pireps": "false",            "format": "json",        },        timeout=(10, 25),    )    r.raise_for_status()    return r.json()if __name__ == "__main__":    import json    briefing = fetch_flight_briefing("KJFK", "KLAX")    print(json.dumps(briefing, indent=2, default=str)[:4000])

Implementation notes

Latency trade-off. include_pireps=true adds a spatial lookup step and increases response time. Keep it off for fast-refresh UI modes.

Operational disclaimer. The AI summary is assistive, not authoritative flight dispatch documentation.

Error responses

422 - invalid ICAO or unsupported format

{
  "detail": [
    {
      "type": "string_pattern_mismatch",
      "loc": ["query", "format"],
      "msg": "String should match pattern '^(json|markdown|plain_text|html)$'"
    }
  ]
}
GET
/briefing/flight
x-api-key<token>

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

In: header

Query Parameters

origin*string

Origin ICAO airport code (e.g. KJFK)

Length4 <= length <= 4
destination*string

Destination ICAO airport code (e.g. EGLL)

Length4 <= length <= 4
include_weather?boolean

Include METAR/TAF weather data

Defaulttrue
include_notams?boolean

Include NOTAMs

Defaulttrue
include_pireps?boolean

Include PIREPs (pilot reports)

Defaultfalse
format?string

Output format: 'json' (structured), 'markdown', 'plain_text', or 'html'

Default"json"
Match^(json|markdown|plain_text|html)$

Response Body

application/json

application/json

curl -X GET "https://data.skylinkapi.com/v3/briefing/flight?origin=stri&destination=stri"

{
  "origin": "KJFK",
  "destination": "EGLL",
  "summary": "VFR conditions at KJFK with clear skies and light winds. EGLL is MVFR with broken clouds at 3,000 feet and visibility 4 statute miles in light rain. No critical restrictions at either airport. Expect minor delays at EGLL due to wet runway conditions.",
  "critical_restrictions": [],
  "origin_briefing": {
    "icao": "KJFK",
    "weather": {
      "metar_raw": "KJFK 151856Z 31008KT 10SM FEW250 08/M06 A3012 RMK AO2 SLP204",
      "taf_raw": "TAF KJFK 151730Z 1518/1624 31010KT P6SM FEW250",
      "conditions": "VFR. Visibility 10 statute miles. Few clouds at 25,000 feet. Wind from 310 degrees at 8 knots. Temperature 8°C, dewpoint -6°C. Altimeter 30.12 inHg."
    },
    "notams": [
      {
        "title": "Taxiway B closed",
        "description": "Taxiway B between A and C is closed for maintenance. Use Taxiway D as alternate. Valid until Feb 20 at 18:00 UTC.",
        "affected": "TWY B",
        "notam_id": "01/234"
      }
    ]
  },
  "destination_briefing": {
    "icao": "EGLL",
    "weather": {
      "metar_raw": "EGLL 151850Z AUTO 24012KT 4000 -RA BKN030 06/04 Q1023",
      "taf_raw": "TAF EGLL 151700Z 1518/1624 24015KT 5000 -RA BKN025",
      "conditions": "MVFR. Visibility 4,000 meters (2.5 statute miles) in light rain. Broken clouds at 3,000 feet. Wind from 240 degrees at 12 knots. Temperature 6°C, dewpoint 4°C. Altimeter 1023 hPa."
    },
    "notams": []
  },
  "data_included": [
    "metar",
    "taf",
    "notams"
  ],
  "disclaimer": "This briefing is AI-generated and for informational purposes only. Always verify with official sources before flight operations."
}

Empty
Empty
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}
Empty

Related: METAR · NOTAMs