22,000 aircraft. 2 million flights. One endpoint.
Programmatic access to tank-to-wake private-aviation emissions — every tail, flight, airport, route and event behind Carbon Sky Index, as clean JSON.
Beta · access is application-based · docs last updated June 2026
ESG & Scope 3
Auditable, flight-level CO₂ for corporate aviation — feed Scope 3 category 6 reporting and travel-policy disclosure with a defensible, methodology-backed source.
Editorial & investigative
Who flew where, when, and what it emitted. Power newsroom trackers and accountability reporting with the same data behind our event and spike pages.
Aviation finance & lessor intelligence
Utilisation, route patterns and emissions intensity per tail and per type — diligence signal for lessors, financiers and asset managers.
Every request is authenticated with an API key passed in the X-API-Key header. Keys are issued per organisation on approval — there is no public sign-up, and there is no gating on the data itself once you have a key.
curl https://api.carbonskyindex.com/v1/aircraft/N628AL \
--header "X-API-Key: $CSI_API_KEY"https://api.carbonskyindex.com/v1X-API-Key: <your-key>application/json120 requests / minute (beta)Path-pinned — /v1 is stableAll endpoints are GET and return JSON. Expand any row for an example response.
Subscribe to flight.completed and spike.detected events to receive a signed POST to your endpoint as soon as new activity is processed. Every delivery shares the same envelope.
eventstringEvent type, e.g. flight.completed or spike.detected.idstringStable identifier for the delivery.createdintegerUnix timestamp (seconds) when the event fired.dataobjectThe event payload — shape matches the related GET resource.POST https://your-app.example.com/csi-hook
Content-Type: application/json
X-CSI-Signature: t=1714780800,v1=4f1e…
{
"event": "spike.detected",
"id": "evt_9f2a…",
"created": 1714780800,
"data": {
"entity_type": "airport",
"entity_code": "KTEB",
"co2_change_pct": 214
}
}HTTP/1.1 200 OK
{ "received": true }Verify the X-CSI-Signature header against the raw request body before trusting a delivery. The signature is an HMAC-SHA256 of {timestamp}.{body} keyed with your signing secret.
const crypto = require('crypto');
// Verify the X-CSI-Signature header against the raw request body.
function verify(rawBody, header, secret) {
const [tPart, vPart] = header.split(',');
const timestamp = tPart.split('=')[1];
const signature = vPart.split('=')[1];
const expected = crypto
.createHmac('sha256', secret)
.update(timestamp + '.' + rawBody)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected),
);
}Every CO₂ figure the API returns is tank-to-wake, computed per flight from the observed ADS-B track and the aircraft type — not modelled from schedules or averages.
We match each flight to an aircraft type, derive distance from the flown track, apply type-specific fuel-burn and a tank-to-wake emissions factor, and benchmark against the route and type. Aggregates — airport, route, event — sum these per-flight figures over a window, with baselines drawn from the surrounding period. Coverage depends on ADS-B visibility and may understate activity at poorly-covered fields.
Ready to integrate?
Tell us about your workflow and we'll issue a key. Access is application-based — most institutional and editorial use cases are approved quickly.