Trip carbon footprint calculator for car, train, plane, or bus
This trip carbon footprint calculator turns a travel distance and a transport mode into a clear estimate of carbon dioxide equivalent emissions.
Run — free
Enter the distance in kilometres, choose car, train, plane, or bus, and receive the estimated kilograms of CO2e together with the factor used. It is useful for comparing realistic journey options, preparing a travel report, or adding a consistent estimate to an application. The result is an indicative passenger-travel estimate, not a complete lifecycle assessment or a measurement of one specific vehicle.
Start with the distance that matches your decision
A useful estimate begins with a distance that represents the journey you actually want to assess. Enter kilometres for one direction if you are comparing one-way options, or add both directions before estimating a return trip. If a route includes several legs, you can calculate each leg separately and add the resulting kilograms of CO2e, especially when the transport mode changes along the way. The calculator treats distance as passenger travel, so the result represents one traveller using the selected mode. It does not infer road routing, airport connections, transfers, or detours; supply a distance that already includes those details when they matter. For a fair comparison, use the same origin, destination, and trip boundaries for every mode. A rail distance and a road distance may differ even between the same cities, while a flight estimate may need the actual flown or published route distance rather than a straight line on a map. Clear boundaries make the comparison repeatable and prevent an apparently precise result from hiding inconsistent assumptions.
Understand the factor-based calculation
The calculation multiplies the supplied kilometres by a fixed emissions factor for the chosen mode. The factors are expressed as kilograms of CO2e per passenger-kilometre: 0.171 for car, 0.041 for train, 0.246 for plane, and 0.104 for bus. CO2e combines climate effects into a common carbon-dioxide-equivalent unit, which makes broad comparisons easier. The response includes the factor as well as the total, so the assumption remains visible in reports and automated workflows. These are standard representative factors, not claims about every operator, vehicle, fuel, route, or occupancy level. A full car can have lower emissions per passenger than a car carrying one person; an electric train depends on its electricity mix; and aircraft results vary with distance, load, cabin class, and operational conditions. The estimate therefore works best as a consistent screening figure. It helps answer which option is likely to have the smaller footprint under one shared method, while a supplier-specific inventory may require audited factors and more detailed activity data.
Use the result responsibly in comparisons and reporting
Read estimated_co2e_kg as an indicative total for the distance and mode you submitted. Keep distance_km, mode, and emission_factor_kg_co2e_per_km beside that total whenever you store or publish it; those fields explain how the number was produced and make later recalculation straightforward. When comparing alternatives, run one request per mode with the appropriate route distance, then compare the totals rather than comparing factors alone. The lower factor does not always guarantee the lower trip total if the routes have very different lengths. For recurring travel, multiply or sum individual trip results outside the calculator, preserving each trip's boundaries so you can audit the total. Avoid describing the output as an exact measurement, a verified offset amount, or a complete organisational inventory. It excludes vehicle manufacture, infrastructure, accommodation, local transfers not included in the distance, and other indirect effects. The API costs $0.002 per request and uses the same deterministic calculation every time, making it suitable for spreadsheets, booking comparisons, internal dashboards, and repeatable estimation workflows where transparent assumptions matter more than false precision.
What you can do with it
Compare transport choices
Estimate equivalent journeys by car, train, plane, and bus before selecting a lower-emission option.
Summarise business travel
Apply one consistent factor set to trip records for an indicative internal travel-emissions summary.
Add estimates to a booking workflow
Show a transparent CO2e estimate beside itinerary options while retaining the distance and factor used.
FAQ
What does an estimate cost through the API?
Each request costs $0.002. The calculation is also deterministic, so the same valid input returns the same result.
Is the distance one way or round trip?
It is whichever boundary you provide. Enter the one-way distance for one direction or the combined distance for a round trip.
What does CO2e mean?
CO2e means carbon dioxide equivalent, a common unit used to express climate impacts in a comparable form.
Does the car estimate account for passengers?
The fixed factor is a representative passenger-kilometre estimate. It does not adjust for the number of occupants or a specific vehicle.
Why might an operator publish a different figure?
Operator figures may use specific vehicles, fuels, electricity sources, occupancy, routes, cabin classes, or reporting boundaries. This calculator uses one consistent general factor set.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/life/carbon-footprint-travel-estimate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"distance_km":350,"mode":"train"}'const res = await fetch("https://api.kit.forhosting.com/life/carbon-footprint-travel-estimate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"distance_km": 350,
"mode": "train"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/life/carbon-footprint-travel-estimate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"distance_km": 350,
"mode": "train"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/life/carbon-footprint-travel-estimate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"distance_km":350,"mode":"train"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"distance_km":350,"mode":"train"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/life/carbon-footprint-travel-estimate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"distance_km": 350,
"mode": "train"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "life.carbon_footprint_travel_estimate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |