Save up to 17% with yearly billing

See pricing

Выбросы 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 в каждом запросе (прямая подписка). Подробнее →
GEThttps://data.skylinkapi.com/v3.1/carbon/estimate
ПараметрТипОбязательныйПо умолчаниюОписание
departure_icaostringВ режиме пары аэропортов-Код ICAO аэропорта вылета, например EGLL. Обязателен вместе с arrival_icao, если не задан callsign
arrival_icaostringВ режиме пары аэропортов-Код ICAO аэропорта прибытия, например KJFK. Обязателен вместе с departure_icao, если не задан callsign
callsignstringВ режиме позывного-Позывной рейса, например BAW117. Маршрут и расстояние определяются автоматически
aircraft_typestringНетопределяется автоматическиКод типа ICAO, например B77W, A320. Не указывайте, чтобы тип был определён по позывному или использовалось среднее значение по категории
passengersintegerНетзначение для категорииЧисло пассажиров (1–900). Не указывайте, чтобы использовать типичное число кресел для категории ВС
include_rfibooleanНет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_icaostringДаНикогдаКод ICAO аэропорта вылета
arrival_icaostringДаНикогдаКод ICAO аэропорта прибытия
aircraft_typestring | nullНетДаИспользованный тип ICAO, если известен
aircraft_categorystringДаНикогдаКатегория коэффициента выбросов — например, wide_body_large (дальнемагистральный широкофюзеляжный), narrow_body_medium (типичный узкофюзеляжный реактивный)
distance_kmnumberДаНикогдаРасстояние маршрута в километрах
distance_nmnumberДаНикогдаРасстояние маршрута в морских милях
passengersintegerДаНикогдаЧисло пассажиров, использованное в расчёте
passengers_sourcestringДаНикогда"provided" или "category_default"
co2_kg_totalnumberДаНикогдаОбщий CO₂ рейса в килограммах
co2_kg_per_passengernumberДаНикогдаCO₂ на пассажира в килограммах
rfi_appliedbooleanДаНикогдаБыл ли RFI включён в поля эквивалента
rfi_factornumberДаНикогдаМножитель RFI (1.9 при применении)
co2_equivalent_kg_totalnumber | nullНетДаПолное климатическое воздействие в кг при include_rfi=true
co2_equivalent_kg_per_passengernumber | nullНетДаКлиматическое воздействие на пассажира в кг при применении RFI
methodologystringДаНикогдаИдентификатор методологии, например ICAO-Doc9988
confidencestringДаНикогдаhigh, medium или low — отражает достоверность данных о расстоянии и ВС
distance_sourcestringДаНикогдаhaversine или источник исторического трека, если в режиме позывного определена фактическая траектория
notesstringДаНикогдаПонятное человеку примечание о RFI и режиме расчёта
callsignstringНетДаПереданный позывной, если использовался режим позывного
callsign_resolvedbooleanНетДаСопоставлен ли позывной с известным маршрутом
route_confidencestringНетДаДостоверность определения маршрута в режиме позывного

Важно: при 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, либо если параметры не проходят валидацию.

GET
/carbon/estimate
x-api-key<token>

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

In: header

Query Parameters

departure_icao?|

Departure airport ICAO code (e.g. 'EGLL'). Required unless callsign is provided.

arrival_icao?|

Arrival airport ICAO code (e.g. 'KJFK'). Required unless callsign is provided.

callsign?|

Flight callsign (e.g. 'BAW123'). Resolves route and distance automatically.

aircraft_type?|

ICAO aircraft type code (e.g. 'B77W', 'A320'). Omit to infer from callsign or use category average.

passengers?|

Number of passengers. Omit to use the aircraft category's typical seat count.

include_rfi?Include Rfi

Include Radiative Forcing Index (total climate impact, not just CO2)

Defaultfalse

Response 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": {}
    }
  ]
}