Выбросы CO₂
Оценки выбросов CO₂ для отдельного рейса по методологии калькулятора выбросов углерода ICAO (Doc 9988) — стандарту расчёта CO₂ в авиации. Используйте этот эндпоинт для меток углеродного следа, которые видят путешественники, ESG-отчётности или сценариев оформления компенсации выбросов, где вместе с результатом нужны проверяемые входные данные (расстояние, категория ВС, число пассажиров).
Поддерживаются два режима запроса:
По аэропортам — укажите departure_icao + arrival_icao. По умолчанию используется расстояние по ортодромии между координатами аэропортов.
По позывному — укажите callsign (например, BAW117). SkyLink автоматически определяет маршрут и предпочитает фактически пройденное расстояние недавнего подходящего рейса (за последние 7 дней), а при отсутствии трека использует расстояние по ортодромии.
Необязательные параметры aircraft_type, passengers и include_rfi уточняют оценку. RFI (индекс радиационного воздействия) учитывает не связанные с CO₂ эффекты потепления от инверсионных следов и озона с использованием коэффициента IPCC 1.9×. При применении RFI результаты выражаются в CO₂e (эквивалент CO₂ — полное климатическое воздействие с учётом RFI).
Важно: установите include_rfi=true для отчётности о полном климатическом воздействии, однако нормативные требования и правила информирования потребителей по-разному определяют, что показывать — CO₂ или CO₂e, — поэтому указывайте, какое значение вы отображаете.
Запрос
Требования
x-api-key в каждом запросе (прямая подписка). Подробнее →https://data.skylinkapi.com/v3.1/carbon/estimate| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
departure_icao | string | В режиме пары аэропортов | - | Код ICAO аэропорта вылета, например EGLL. Обязателен вместе с arrival_icao, если не задан callsign |
arrival_icao | string | В режиме пары аэропортов | - | Код ICAO аэропорта прибытия, например KJFK. Обязателен вместе с departure_icao, если не задан callsign |
callsign | string | В режиме позывного | - | Позывной рейса, например BAW117. Маршрут и расстояние определяются автоматически |
aircraft_type | string | Нет | определяется автоматически | Код типа ICAO, например B77W, A320. Не указывайте, чтобы тип был определён по позывному или использовалось среднее значение по категории |
passengers | integer | Нет | значение для категории | Число пассажиров (1–900). Не указывайте, чтобы использовать типичное число кресел для категории ВС |
include_rfi | boolean | Нет | false | Включить индекс радиационного воздействия в поля co2_equivalent_kg_* |
Укажите либо (departure_icao + arrival_icao), либо callsign, не смешивая оба режима противоречивым образом.
Ответ
{
"departure_icao": "EGLL",
"arrival_icao": "KJFK",
"aircraft_type": "B77W",
"aircraft_category": "wide_body_large",
"distance_km": 5539.8,
"distance_nm": 2991.3,
"passengers": 280,
"passengers_source": "provided",
"co2_kg_total": 271451.4,
"co2_kg_per_passenger": 847.3,
"rfi_applied": false,
"rfi_factor": 1.9,
"co2_equivalent_kg_total": null,
"co2_equivalent_kg_per_passenger": null,
"methodology": "ICAO-Doc9988",
"confidence": "high",
"distance_source": "haversine",
"notes": "CO2 only. Add include_rfi=true for total climate impact estimate."
}Объект оценки
| Поле | Тип | Обязательный | Null? | Описание |
|---|---|---|---|---|
departure_icao | string | Да | Никогда | Код ICAO аэропорта вылета |
arrival_icao | string | Да | Никогда | Код ICAO аэропорта прибытия |
aircraft_type | string | null | Нет | Да | Использованный тип ICAO, если известен |
aircraft_category | string | Да | Никогда | Категория коэффициента выбросов — например, wide_body_large (дальнемагистральный широкофюзеляжный), narrow_body_medium (типичный узкофюзеляжный реактивный) |
distance_km | number | Да | Никогда | Расстояние маршрута в километрах |
distance_nm | number | Да | Никогда | Расстояние маршрута в морских милях |
passengers | integer | Да | Никогда | Число пассажиров, использованное в расчёте |
passengers_source | string | Да | Никогда | "provided" или "category_default" |
co2_kg_total | number | Да | Никогда | Общий CO₂ рейса в килограммах |
co2_kg_per_passenger | number | Да | Никогда | CO₂ на пассажира в килограммах |
rfi_applied | boolean | Да | Никогда | Был ли RFI включён в поля эквивалента |
rfi_factor | number | Да | Никогда | Множитель RFI (1.9 при применении) |
co2_equivalent_kg_total | number | null | Нет | Да | Полное климатическое воздействие в кг при include_rfi=true |
co2_equivalent_kg_per_passenger | number | null | Нет | Да | Климатическое воздействие на пассажира в кг при применении RFI |
methodology | string | Да | Никогда | Идентификатор методологии, например ICAO-Doc9988 |
confidence | string | Да | Никогда | high, medium или low — отражает достоверность данных о расстоянии и ВС |
distance_source | string | Да | Никогда | haversine или источник исторического трека, если в режиме позывного определена фактическая траектория |
notes | string | Да | Никогда | Понятное человеку примечание о RFI и режиме расчёта |
callsign | string | Нет | Да | Переданный позывной, если использовался режим позывного |
callsign_resolved | boolean | Нет | Да | Сопоставлен ли позывной с известным маршрутом |
route_confidence | string | Нет | Да | Достоверность определения маршрута в режиме позывного |
Важно: при include_rfi=false поля co2_equivalent_kg_* равны null — показывайте только значения CO₂. При include_rfi=true показывайте и CO₂, и CO₂e и указывайте, какое значение является основным.
Клиентские типы
"""Carbon estimate response models for /carbon/estimate."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass CarbonEstimateResponse: departure_icao: str arrival_icao: str aircraft_type: str | None aircraft_category: str distance_km: float distance_nm: float passengers: int passengers_source: str co2_kg_total: float co2_kg_per_passenger: float rfi_applied: bool rfi_factor: float co2_equivalent_kg_total: float | None co2_equivalent_kg_per_passenger: float | None methodology: str confidence: str distance_source: str notes: str callsign: str | None = None callsign_resolved: bool | None = None route_confidence: str | None = NoneИнтеграция
Метки углеродного следа в сценариях бронирования обычно запрашивают оценку один раз для каждого сегмента маршрута и кэшируют результаты на время сессии. Пример ниже запрашивает оценку для пары аэропортов с явно заданным числом пассажиров, преобразует итоговые значения в строки для отображения в тоннах/кг и обрабатывает include_rfi для панелей устойчивого развития, отражающих полное климатическое воздействие.
import osfrom dataclasses import dataclassimport requestsBASE = "https://data.skylinkapi.com/v3.1"HEADERS = { "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}@dataclassclass CarbonLabel: route: str co2_kg_total: float co2_kg_per_passenger: float passengers: int methodology: str rfi_applied: booldef fetch_carbon_estimate( *, departure_icao: str | None = None, arrival_icao: str | None = None, callsign: str | None = None, aircraft_type: str | None = None, passengers: int | None = None, include_rfi: bool = False,) -> dict: """Estimate flight CO2 using ICAO methodology.""" params: dict[str, str | int | bool] = {} if departure_icao and arrival_icao: params["departure_icao"] = departure_icao.upper() params["arrival_icao"] = arrival_icao.upper() elif callsign: params["callsign"] = callsign.upper() else: raise ValueError("Provide departure_icao+arrival_icao or callsign") if aircraft_type: params["aircraft_type"] = aircraft_type.upper() if passengers is not None: params["passengers"] = passengers if include_rfi: params["include_rfi"] = True r = requests.get(f"{BASE}/carbon/estimate", headers=HEADERS, params=params, timeout=(10, 20)) r.raise_for_status() return r.json()def carbon_label( departure_icao: str, arrival_icao: str, *, passengers: int | None = None, aircraft_type: str | None = None,) -> CarbonLabel: data = fetch_carbon_estimate( departure_icao=departure_icao, arrival_icao=arrival_icao, passengers=passengers, aircraft_type=aircraft_type, ) return CarbonLabel( route=f"{data['departure_icao']} → {data['arrival_icao']}", co2_kg_total=float(data["co2_kg_total"]), co2_kg_per_passenger=float(data["co2_kg_per_passenger"]), passengers=int(data["passengers"]), methodology=data["methodology"], rfi_applied=bool(data["rfi_applied"]), )if __name__ == "__main__": import json from dataclasses import asdict label = carbon_label("KJFK", "KLAX", passengers=180, aircraft_type="B738") print(json.dumps(asdict(label), indent=2))Примечания по реализации
Важно: значения API указаны в килограммах. Для текстов, адресованных пассажирам дальнемагистральных рейсов, переводите их в тонны (÷ 1000).
Позывной или пара аэропортов. Режим позывного может повысить точность расстояния, если есть недавний трек ADS-B; режим пары аэропортов проще для гипотетических бронирований.
Раскрытие RFI. При include_rfi=true показывайте и CO₂, и CO₂e — нормативные требования по-разному определяют, нужно ли показывать RFI потребителям.
Ответы с ошибками
Общие ошибки платформы описаны в разделе Обработка ошибок. Поведение, специфичное для эндпоинта:
422 — отсутствуют данные маршрута
Возвращается, если не указаны ни корректная пара аэропортов, ни callsign, либо если параметры не проходят валидацию.
Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Query Parameters
Departure airport ICAO code (e.g. 'EGLL'). Required unless callsign is provided.
Arrival airport ICAO code (e.g. 'KJFK'). Required unless callsign is provided.
Flight callsign (e.g. 'BAW123'). Resolves route and distance automatically.
ICAO aircraft type code (e.g. 'B77W', 'A320'). Omit to infer from callsign or use category average.
Number of passengers. Omit to use the aircraft category's typical seat count.
Include Radiative Forcing Index (total climate impact, not just CO2)
falseResponse Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/carbon/estimate"null{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}