Freight Shipping
Carbon Emissions API
Calculate CO2e for any shipment across road, rail, sea, and air. Integrate into your TMS, ERP, or e-commerce platform today. No sales calls required.
View transparent pricing · 500 free requests/month
"emissions": {
"co2e": 847.3,
"co2e_unit": "kg",
"ghg_protocol_scopes": { ... }
},
"route": {
"total_distance_km": 8142,
"transport_mode": "sea",
"transit_countries": ["NL", "GB", "US"]
},
"source_trail": [{ "source": "GLEC", ... }]
}
All transport modes. One API.
Calculate emissions for road, rail, sea, and air freight with mode-specific emission factors.
Road Freight
Small vans to articulated lorries with fuel-specific factors for diesel, electric, HVO, hydrogen, and 9 more fuel types. Real road routing with optional polyline for map rendering.
Rail Freight
Intermodal container and bulk rail with regional grid carbon intensity for electric traction.
Sea Freight
Container ships, bulk carriers and average vessel types with real shipping lane distances via Suez, Panama, and Cape routes.
Air Freight
Belly cargo and dedicated freighters with distance-based haul factors and great circle routing.
Real-world use cases
See how logistics platforms, e-commerce stores, and TMS providers integrate freight carbon emissions.
E-commerce Checkout
Show customers the carbon footprint of their delivery at checkout. Compare shipping options by emissions, not just price and speed.
- Display CO2e per delivery option
- Offer carbon-neutral shipping upgrades
- Compare road vs rail for the same route
- Differentiate with sustainability data
Eco-conscious shoppers convert 17% higher when shown carbon data.
// Compare delivery emissions at checkout
const modes = ["road", "rail"];
const base = "https://api.emissions.dev/v1/freight/emissions?"
+ `origin_country=US&origin_location=Chicago`
+ `&destination_country=US&destination_location=Denver`
+ `&weight=${cart.totalWeightKg}`;
const results = await Promise.all(
modes.map(mode =>
fetch(`${base}&transport_mode=${mode}`, {
headers: { Authorization: `Bearer ${apiKey}` }
}).then(r => r.json())
)
);
// Extract from standard response envelope
const [road, rail] = results.map(r => ({
co2e: r.data.attributes.emissions.co2e,
km: r.data.attributes.route.total_distance_km,
}));
// Display to customer
// 🚚 Standard (road): 2.4 kg CO₂e — 1,610 km — $4.99
// 🚂 Eco (rail): 0.8 kg CO₂e — 1,800 km — $5.99 ← 67% less carbon
TMS / Fleet Management
Embed emissions tracking into transport management systems. Calculate CO2e for every shipment automatically with refrigerated cargo and empty return support.
- Batch calculate historical shipments
- Real-time emissions for new bookings
- Refrigerated cargo surcharge (+20%)
- Export data for Scope 3 reporting
# Calculate emissions for all Q4 shipments
import requests
def calculate_shipment_emissions(shipment):
params = {
"origin_country": shipment['origin_country'],
"origin_location": shipment['origin_city'],
"destination_country": shipment['dest_country'],
"destination_location": shipment['dest_city'],
"weight": shipment['weight_kg'],
"transport_mode": shipment['mode'],
"vehicle_type": shipment.get('vehicle', 'average'),
"fuel_source": shipment.get('fuel', 'diesel'),
}
# Cold chain? Adds ~20% to emissions automatically
if shipment.get('refrigerated'):
params["refrigerated"] = "true"
# Dedicated vehicle? Include empty return leg
if shipment.get('dedicated'):
params["include_empty_return"] = "true"
resp = requests.get(
"https://api.emissions.dev/v1/freight/emissions",
headers={"Authorization": f"Bearer {API_KEY}"},
params=params,
)
return resp.json()['data']['attributes']['emissions']
# Process shipments (use /v1/freight/batch for 100+ at once)
totals = [calculate_shipment_emissions(s) for s in shipments]
scope_3 = sum(t['ghg_protocol_scopes']['freight_buyer']['scope_3_category_4'] for t in totals)
Route Visualization
Render actual road routes on a map alongside emissions data. Show customers and stakeholders exactly where their shipment travels — with transit countries and estimated duration.
- Encoded polyline for smooth map rendering
- Compatible with Leaflet, Google Maps, Mapbox
- Transit countries for customs awareness
- Route duration and distance included
Add detailed_route=true — zero extra API calls, same request.
// Fetch route with full polyline for map rendering
const resp = await fetch(
"https://api.emissions.dev/v1/freight/emissions?" +
"origin_country=GB&origin_location=London" +
"&destination_country=DE&destination_location=Berlin" +
"&weight=5000&detailed_route=true",
{ headers: { Authorization: `Bearer ${apiKey}` }}
);
const { data } = await resp.json();
const route = data.attributes.route;
// route.polyline → Google-encoded polyline (precision 5)
// route.duration_formatted → "11h 56m"
// route.total_distance_km → 1098
// Decode and render on Leaflet
const decoded = L.Polyline.fromEncoded(route.polyline);
decoded.addTo(map).setStyle({
color: '#10b981', weight: 3, opacity: 0.8
});
map.fitBounds(decoded.getBounds(), { padding: [30, 30] });
// Show transit countries: GB → FR → BE → NL → DE
const countries = data.attributes.geography.transit_countries;
// Also works with: google.maps.geometry.encoding.decodePath()
// polyline.decode() in Python
// Mapbox, OpenLayers, etc.
Multimodal Comparison
Compare emissions across different transport modes and routes. Help shippers choose the lowest-carbon option.
- Road vs rail vs sea comparison
- Intermodal route optimization
- Pre/post-leg drayage included
# Sea freight (lowest emissions)
$ curl "https://api.emissions.dev/v1/freight/emissions?\
origin_country=CN&origin_location=Shanghai&\
destination_country=DE&destination_location=Hamburg&\
weight=20000&transport_mode=sea" \
-H "Authorization: Bearer em_live_xxx"
{ "co2e": 4280, "co2e_unit": "kg", "distance_km": 19847 }
# Air freight (fastest, highest emissions)
$ curl "https://api.emissions.dev/v1/freight/emissions?\
origin_country=CN&origin_location=Shanghai&\
destination_country=DE&destination_location=Hamburg&\
weight=20000&transport_mode=air" \
-H "Authorization: Bearer em_live_xxx"
{ "co2e": 158400, "co2e_unit": "kg", "distance_km": 8861 }
# Sea freight produces 97% less CO₂e than air
Digital Product Passport
Calculate per-product transport carbon footprint for EU Digital Product Passport and Product Carbon Footprint (PCF) compliance. Map emissions to EN 15804 lifecycle stages.
- Per-product allocation by mass
- EN 15804 lifecycle stages (A2, A4, C2)
- ISO 14067 compatible output
- Combine multiple transport legs per product
EU DPP regulation requires transport emissions per product from 2027.
# Calculate transport footprint per unit for DPP compliance
# Shipment: 500 units × 2.5 kg each, factory → warehouse
resp = requests.get(
"https://api.emissions.dev/v1/freight/emissions",
headers={"Authorization": f"Bearer {API_KEY}"},
params={
"origin_country": "CN",
"origin_location": "Shenzhen",
"destination_country": "DE",
"destination_location": "Hamburg",
"weight": 1250, # 500 × 2.5 kg
"transport_mode": "sea",
# DPP allocation parameters
"lifecycle_stage": "A2", # Transport to manufacturer
"product_weight_kg": 2.5, # Weight per unit
"product_quantity": 500, # Units in shipment
}
)
allocation = resp.json()['data']['attributes']['allocation']
# {
# "co2e_per_product_kg": 0.0427,
# "product_quantity": 500,
# "allocation_method": "mass",
# "lifecycle_stage": "A2"
# }
# Add to product DPP record
product.transport_a2_co2e = allocation['co2e_per_product_kg']
# Repeat for A4 (to site) and C2 (end-of-life) legs
ESG & Carbon Reporting
Automate Scope 3 Category 4 reporting by calculating emissions across your entire supply chain. Every response maps directly to GHG Protocol disclosure categories.
- Aggregate emissions by route, mode, or period
- GHG Protocol scope mapping in every response
- Source trail satisfies auditor documentation requirements
- Well-to-wheel breakdown (TTW + WTT) included
// Generate Scope 3 Category 4 totals for annual disclosure
$shipments = Shipment::whereYear('shipped_at', 2025)->get();
$results = $shipments->map(function ($shipment) {
$response = Http::withToken(config('services.emissions.key'))
->get('https://api.emissions.dev/v1/freight/emissions', [
'origin_country' => $shipment->origin_country,
'origin_location' => $shipment->origin_city,
'destination_country' => $shipment->dest_country,
'destination_location' => $shipment->dest_city,
'weight' => $shipment->weight_kg,
'transport_mode' => $shipment->mode,
]);
return $response->json('data.attributes.emissions');
});
// Map to GHG Protocol scopes — ready for disclosure
$report = [
'scope_3_category_4' => $results->sum('ghg_protocol_scopes.freight_buyer.scope_3_category_4'),
'vehicle_operation' => $results->sum('lifecycle_breakdown.vehicle_operation'),
'energy_provision' => $results->sum('lifecycle_breakdown.energy_provision'),
'methodology' => 'GLEC Framework v3.1',
'gwp' => 'IPCC AR6 GWP100',
'shipments_counted' => $results->count(),
'source_trails' => $results->pluck('source_trail'),
];
Audit-ready methodology
Transparent calculations backed by internationally recognised standards.
Every response includes a full source trail, protecting your platform
from greenwashing claims.
GLEC Framework v3.1
The only globally recognised methodology for logistics emissions, developed by Smart Freight Centre.
GHG Protocol
Compatible with corporate Scope 3 reporting under the Greenhouse Gas Protocol standard.
ISO 14083
Every response includes full source trail with emission factor source, version, year, and region.
Well-to-Wheel
Full lifecycle emissions including fuel extraction, refining, and combustion (WTT + TTW).
{
"emissions": {
"co2e": 156.78,
"co2e_unit": "kg",
"co2e_calculation_method": "ipcc_ar6_gwp100",
"lifecycle_breakdown": {
"vehicle_operation": 125.42,
"energy_provision": 31.36
},
"ghg_protocol_scopes": {
"freight_buyer": { "scope_3_category_4": 156.78 }
},
"source_trail": [{
"data_category": "emission_factor",
"name": "Articulated HGV - Diesel",
"source": "GLEC",
"source_dataset": "Default fuel efficiency and GHG emission intensity values v3.1",
"year": "2025",
"region": "GLOBAL"
}]
},
"meta": {
"methodology": "GLEC Framework v3.1",
"standards_compliance": {
"ISO_14083": true,
"EN_16258": true,
"GHG_Protocol": "Scope 3 Category 4"
}
}
}
Global coverage
Calculate emissions for any international freight route. We support addresses, postcodes, and city names with automatic geocoding.
Real driving distances
Real sea routes
Air freight routing
Intermodal routing
Integrate in minutes
Simple REST API. No complex setup or configuration.
Get your API key
Sign up and get your key instantly. No approval process, no sales calls.
Make your first request
Pass origin, destination, weight, and transport mode. Get CO2e in JSON.
Ship to production
Swap your test key for a live key. Scale to millions of requests.
Freight API FAQ
Common questions about transport carbon emissions.
At minimum, you need:
- Origin — Country code (
origin_country) + optional city/postcode (origin_location) - Destination — Country code
(
destination_country) + optional city/postcode (destination_location) - Weight — Cargo weight (
weight) in kg, g, lb, or tonnes
For more accurate results, you can also specify:
transport_mode, vehicle_type,
fuel_source, service_type, and whether the cargo is
refrigerated. For route visualization, add detailed_route=true.
We use real shipping lane distances, not straight lines. Our routing considers major shipping routes (Suez Canal, Panama Canal, Cape of Good Hope) and calculates port-to-port distances using maritime network data. This is significantly more accurate than great circle distance for sea freight.
Yes. Our calculations are designed for corporate carbon reporting:
- GLEC Framework compliant (the global logistics standard)
- GHG Protocol Category 4 (upstream) & 9 (downstream) compatible
- All factors expressed in CO₂e using IPCC AR6 GWP100
- Full source trail with emission factor names, datasets, and years in every response
Every API response includes the source_trail and
standards_compliance fields so your auditors can verify the
calculations.
We support six vehicle classes via the vehicle_type parameter:
small_van— Small van (under 1.5t)van— Van (up to 3.5t)truck— Truck (7.5–17t)hgv— HGV Rigid (17–26t)articulated— Articulated lorry (33–44t)average— Fleet average (default)
Each vehicle type supports 13 fuel sources across four categories:
- Fossil:
diesel,petrol,lng,cng - Electric/Hybrid:
electric,hybrid,plugin_hybrid - Biofuels:
hvo,biodiesel,b20,biogas - Future fuels:
hydrogen,e_fuel
Yes. By default, we calculate well-to-wheel (WTW)
emissions which include both well-to-tank (WTT) — fuel extraction and refining —
and tank-to-wheel (TTW) — fuel combustion. The response includes a
lifecycle_breakdown showing vehicle_operation (TTW)
and energy_provision (WTT) separately, plus
ghg_protocol_scopes mapping these to Scope 1 and Scope 3 Category
3.
Yes. Add detailed_route=true to any road freight request and the response includes:
- An encoded polyline (Google format, precision 5) for smooth map rendering
- Sampled waypoints for lightweight rendering
- Duration (
duration_secondsandduration_formatted) - Transit countries the route passes through
The polyline works with Leaflet, Google Maps, Mapbox, OpenLayers, and any library that supports Google's polyline encoding. This adds zero extra API calls — it's the same request with richer route geometry.
Rate limits depend on your plan:
| Plan | Requests/month | Rate limit |
|---|---|---|
| Free | 500 | 2 req/sec |
| Launch ($39/mo) | 5,000 | 5 req/sec (burst 10) |
| Starter ($79/mo) | 10,000 | 10 req/sec (burst 25) |
| Growth ($199/mo) | 50,000 | 15 req/sec (burst 40) |
| Scale ($499/mo) | 200,000 | 25 req/sec (burst 75) |
All responses include X-RateLimit-Remaining and
X-Monthly-Usage headers. Growth and Scale plans include batch
processing. Need higher limits? Contact us for Enterprise
pricing.
No. We do not store, log, or retain any shipment details (origins, destinations, weights, or customer information). We only store anonymised usage metrics (request counts, response times) for billing and performance monitoring. Your logistics data never leaves your infrastructure beyond the API call itself.
Yes. Growth and Scale plans include batch processing:
POST /v1/freight/batch
Content-Type: application/json
{
"shipments": [
{
"origin_country": "NL",
"origin_location": "Rotterdam",
"destination_country": "DE",
"destination_location": "Munich",
"weight": 2500
},
{
"origin_country": "US",
"origin_location": "Chicago",
"destination_country": "US",
"destination_location": "Houston",
"weight": 1200
}
// Growth: up to 100, Scale: up to 500 per request
]
}
Batch requests are processed in parallel and return all results in a single response. This is significantly faster than individual requests for bulk historical analysis or TMS integrations.
Start calculating freight emissions
Get your API key in 30 seconds. 500 free requests per month. No credit card required.