Эта страница пока не переведена на русский — ниже английская версия.
Aerodrome Charts
Access categorized aerodrome chart PDF links (GEN, GND, SID, STAR, APP) for airports across 91 countries. The correct national chart source is selected automatically from the ICAO prefix - no source override is needed in most integrations. Response times vary by country: some respond in under a second, others may take 5–15 seconds.
Требования
x-api-key в каждом запросе (прямая подписка). Подробнее →| Endpoint | When to use |
|---|---|
GET /charts/sources | Discover supported chart regions and ICAO prefixes — below |
GET /charts/{icao_code} | Full categorized chart index — below |
GET /charts/{icao_code}/{category} | Single category — by category |
Choosing an endpoint. Call GET /charts/sources once at startup to validate coverage. Use Fetch charts for a full briefing index. Use Charts by category when you only need one plate type (e.g. APP for approach panels).
A category with no published charts returns an empty array rather than 404; a completely unknown airport returns 404.
Chart categories
| Code | Content |
|---|---|
GEN | Airport diagram and general information |
GND | Ground movement and taxi charts |
SID | Standard instrument departures |
STAR | Standard terminal arrivals |
APP | Approach procedures - ILS, RNAV, VOR, etc. |
Chart sources
Returns all supported chart data sources and the ICAO prefixes each covers. Call once at startup to populate a source picker or validate coverage before fetching charts.
Request
https://data.skylinkapi.com/v3/charts/sourcesNo query parameters.
Response
{
"sources": [
{
"source_id": "uk",
"name": "United Kingdom",
"icao_prefixes": ["EG"]
}
],
"total_count": 91
}| Field | Type | Required | Description |
|---|---|---|---|
sources | array | Yes | Supported national chart sources |
total_count | integer | Yes | Number of sources returned |
Source item (sources[])
| Field | Type | Required | Description |
|---|---|---|---|
source_id | string | Yes | Source slug passed to the optional source query override |
name | string | Yes | Human-readable source label |
icao_prefixes | array | Yes | ICAO location prefixes handled by this source |
Coverage
Charts are available for airports in 91 countries and territories. The correct chart source is selected automatically from the airport's ICAO prefix.
Full coverage list by regionРазвернуть раздел
| Region | Countries / territories |
|---|---|
| Africa | Algeria, Cape Verde, Djibouti, Morocco, Somalia, South Africa, South Sudan |
| Africa (West & Central - ASECNA) | Benin, Burkina Faso, Cameroon, Central African Republic, Chad, Comoros, Congo, Côte d'Ivoire, Gabon, Guinea, Guinea-Bissau, Madagascar, Mali, Mauritania, Niger, Senegal, Togo |
| Americas - North | Canada, United States |
| Americas - Central | Belize, Costa Rica, El Salvador, Guatemala, Honduras, Nicaragua, Panama |
| Americas - Caribbean | Aruba, Cayman Islands, Cuba, Dominican Republic, Haiti |
| Americas - South | Argentina, Brazil, Chile, Colombia, Uruguay, Venezuela |
| Asia - East | China, Hong Kong, Japan, Mongolia, South Korea, Taiwan |
| Asia - South | Bangladesh, Bhutan, India, Maldives, Nepal, Pakistan, Sri Lanka |
| Asia - Southeast | Brunei, Malaysia, Myanmar, Singapore, Thailand |
| Asia - Central | Kazakhstan, Kyrgyzstan, Tajikistan, Turkmenistan, Uzbekistan |
| Middle East | Bahrain, Israel, Kuwait, Oman, Qatar, Saudi Arabia, UAE |
| Europe - Western | Austria, Belgium, France, Germany, Iceland, Ireland, Luxembourg, Netherlands, Norway, Portugal, Spain, Sweden, United Kingdom |
| Europe - Northern | Denmark, Estonia, Finland, Latvia, Lithuania |
| Europe - Eastern | Belarus, Czech Republic, Hungary, Poland, Romania, Russia, Slovakia, Ukraine |
| Europe - Southern | Cyprus, Georgia, Greece, Malta, Slovenia |
| Europe - Balkans | Albania, Bosnia and Herzegovina, Kosovo, North Macedonia, Serbia |
| Oceania | Australia, New Zealand |
For ICAO prefix to country mapping, use the icao_prefixes field on each source item.
Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Response Body
application/json
curl -X GET "https://data.skylinkapi.com/v3/charts/sources"{
"sources": [
{
"source_id": "string",
"name": "string",
"icao_prefixes": [
"string"
]
}
],
"total_count": 0
}Fetch charts for an aerodrome
Fetches all categorized chart PDF links for a given ICAO code. Three-letter US codes are auto-prefixed with K (e.g. JFK → KJFK).
Request
https://data.skylinkapi.com/v3/charts/{icao_code}| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
icao_code | string | Yes | - | ICAO airport code (3–4 characters) |
source | string | No | auto | Override auto-detected chart source (e.g. faa, france, uk) |
Allow longer read timeouts (30–60 s) for countries with slower chart hosting.
Response
{
"icao_code": "KJFK",
"source": "faa",
"charts": {
"GND": [
{
"name": "KJFK - Airport Diagram",
"url": "https://...",
"category": "GND"
}
],
"SID": [
{
"name": "KENNEDY TWO",
"url": "https://...",
"category": "SID"
}
]
},
"total_count": 42,
"fetched_at": "2026-02-11T12:00:00Z"
}| Field | Type | Required | Null? | Description |
|---|---|---|---|---|
icao_code | string | Yes | Never | Resolved ICAO code |
source | string | Yes | Never | Chart provider used for this fetch |
charts | object | No | Yes | Charts keyed by category (GEN, GND, SID, STAR, APP) |
total_count | integer | Yes | Never | Total charts across all categories |
fetched_at | string | No | Yes | ISO-8601 timestamp when charts were retrieved |
Chart item (charts[category][])
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Chart title as published by the source |
url | string | Yes | Direct URL to the chart PDF |
category | string | Yes | One of GEN, GND, SID, STAR, APP - see chart categories |
Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Path Parameters
ICAO airport code (e.g., KJFK, EGLL, LFPG)
3 <= length <= 4Query Parameters
Override auto-detected chart source (e.g., faa, france, uk)
Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3/charts/KJFK"{
"icao_code": "KJFK",
"source": "faa",
"charts": {
"GND": [
{
"name": "KJFK - Airport Diagram",
"url": "https://...",
"category": "GND"
}
],
"SID": [
{
"name": "KENNEDY TWO",
"url": "https://...",
"category": "SID"
}
]
},
"total_count": 42,
"fetched_at": "2026-02-11T12:00:00Z"
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Charts by category
Fetches charts filtered to a single category (GEN, GND, SID, STAR, or APP) for a given airport. Response envelope matches the all-charts endpoint above but charts contains only the requested category key.
Request
https://data.skylinkapi.com/v3/charts/{icao_code}/{category}| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
icao_code | string | Yes | - | ICAO airport code (3–4 characters) |
category | string | Yes | - | Chart category: GEN, GND, SID, STAR, or APP |
source | string | No | auto | Override auto-detected chart source |
Response
Same shape as the all-charts response with charts limited to the requested category. An empty category array is a normal success response. Chart items use the same chart item field table.
Important: Missing category → empty array in a 200 response. Unknown airport → 404. Allow longer read timeouts (30–60 s) for countries with slower chart hosting.
Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Path Parameters
ICAO airport code
3 <= length <= 4Chart category to filter by
"GEN" | "GND" | "SID" | "STAR" | "APP"Query Parameters
Override auto-detected chart source
Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3/charts/KJFK/approach"{
"icao_code": "string",
"source": "string",
"charts": {
"property1": [
{
"name": "string",
"url": "string",
"category": "GEN"
}
],
"property2": [
{
"name": "string",
"url": "string",
"category": "GEN"
}
]
},
"total_count": 0,
"fetched_at": "2019-08-24T14:15:22Z"
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Client types
"""Aerodrome chart response models for /charts/* endpoints."""from __future__ import annotationsfrom dataclasses import dataclassfrom typing import LiteralChartCategory = Literal["GEN", "GND", "SID", "STAR", "APP"]@dataclassclass Chart: name: str url: str category: str@dataclassclass ChartsResponse: icao_code: str source: str total_count: int charts: dict[str, list[Chart]] | None = None fetched_at: str | None = None@dataclassclass SourceInfo: source_id: str name: str icao_prefixes: list[str]@dataclassclass SourcesResponse: sources: list[SourceInfo] total_count: int@dataclassclass ChartLink: name: str url: str category: strIntegration
Fetch approach charts for a briefing panel and flatten them into download links.
The example below caches chart responses for 24 hours because chart publications change infrequently. Read timeouts are extended to 45 s because some countries respond slowly. The helper returns a flat ChartLink list and treats 404 as "no charts available" rather than a hard failure.
import osimport timefrom dataclasses import dataclassimport requestsHEADERS = { "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}BASE = "https://data.skylinkapi.com/v3"CACHE: dict[str, tuple[dict, float]] = {}CHARTS_TTL = 86_400 # 24 hChartCategory = str # GEN | GND | SID | STAR | APP@dataclassclass ChartLink: name: str url: str category: ChartCategorydef fetch_charts(icao: str, *, category: str | None = None) -> dict | None: icao = icao.upper().strip() if len(icao) == 3: icao = f"K{icao}" key = f"charts:{icao}:{category or 'all'}" cached = CACHE.get(key) if cached and time.time() < cached[1]: return cached[0] path = f"{BASE}/charts/{icao}" if category: path = f"{path}/{category.upper()}" try: r = requests.get(path, headers=HEADERS, timeout=(10, 45)) except requests.Timeout as exc: raise RuntimeError(f"SkyLink timeout fetching charts for {icao}") from exc if r.status_code == 404: return None r.raise_for_status() data = r.json() CACHE[key] = (data, time.time() + CHARTS_TTL) return datadef chart_links(icao: str, *, category: str | None = None) -> list[ChartLink]: data = fetch_charts(icao, category=category) if not data: return [] charts_by_cat: dict = data.get("charts") or {} if category: items = charts_by_cat.get(category.upper(), []) else: items = [c for group in charts_by_cat.values() for c in group] return [ ChartLink(name=item["name"], url=item["url"], category=item["category"]) for item in items ]if __name__ == "__main__": import json links = chart_links("KJFK", category="APP") print(json.dumps(links[:5], indent=2, default=str))Implementation notes
US code prefixing. Pass JFK or KJFK - both resolve to KJFK for US airports.
Category filtering. Use Charts by category with APP when you only need approach plates; it avoids downloading SID/STAR metadata you will not display.
PDF delivery. Chart url values point to hosted PDF files. Open in a new tab or proxy through your server if you need consistent CORS behavior.
Empty vs 404. Missing category → empty array in a 200 response. Unknown airport → 404.
Error responses
Shared platform errors: Error Handling. Endpoint-specific:
422 - invalid category or ICAO length
{
"detail": [
{
"type": "enum",
"loc": ["path", "category"],
"msg": "Input should be 'GEN', 'GND', 'SID', 'STAR' or 'APP'"
}
]
}404 - no charts for airport
Returned when Skylink cannot locate charts for the ICAO code in any configured source.
Related: Airports · Flight Briefing