Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/carbonara-co2-org:carbonara-co2-org-report-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Sootcase Report API
version: 0.1.0
description: Freight emissions calculator following the GLEC Framework / ISO 14083 approach. Emissions are in kg CO2e. TTW = tank-to-wheel, WTW = well-to-wheel.
license:
name: PolyForm Noncommercial 1.0.0
identifier: PolyForm-Noncommercial-1.0.0
servers:
- url: https://sootcase.org
description: 'Free test service; send your API key as ''Authorization: Bearer <key>'' (get one at https://sootcase.org)'
- url: http://localhost:8080
description: sootcase serve
tags:
- name: Report
paths:
/v1/report:
post:
summary: ISO 14083 style report over up to 10,000 shipments
description: 'Calculates the shipments and aggregates them: totals split into operational (TTW) and energy provision (WTT) emissions, per mode, per hub type and per energy carrier, data quality, DAFs, and notes on omissions. Failed shipments are excluded and listed.'
parameters:
- name: add_road_legs
in: query
schema:
type: boolean
default: true
description: false adds no road legs for shipments that don't set add_road_legs themselves.
- name: format
in: query
schema:
type: string
enum:
- json
- md
description: md returns Markdown
- name: results
in: query
schema:
type: boolean
default: false
description: Also return each shipment's full result (results[], as in a batch, in input order)
- name: markdown
in: query
schema:
type: boolean
default: false
description: Also return the report as Markdown (markdown), alongside the JSON
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- shipments
properties:
title:
type: string
maxLength: 1000
organisation:
type: string
maxLength: 1000
period_from:
type: string
format: date
period_to:
type: string
format: date
reference:
type: string
maxLength: 1000
description: Where supporting information can be found
declare_iso:
type: boolean
description: Add the ISO 14083:2023 conformity statement. Only the reporter can make this claim.
scope3_category:
type: integer
enum:
- 4
- 9
description: GHG Protocol scope 3 category of the transport for the reporting company (4 transport it pays for, 9 sold products moved by transport it doesn't pay for); with a CSV body, a query parameter.
shipments:
type: array
items:
$ref: '#/components/schemas/Shipment'
responses:
'200':
description: Report
content:
application/json:
schema:
$ref: '#/components/schemas/Report'
text/markdown:
schema:
type: string
'400':
$ref: '#/components/responses/Error'
'413':
$ref: '#/components/responses/Error'
'500':
$ref: '#/components/responses/Error'
'503':
$ref: '#/components/responses/Busy'
'504':
$ref: '#/components/responses/Error'
tags:
- Report
operationId: postV1Report
x-operation-id-source: derived
components:
responses:
Busy:
description: Too many requests in progress; retry after the given seconds
headers:
Retry-After:
schema:
type: integer
content:
application/json:
schema:
type: object
properties:
error:
type: string
Error:
description: Error
content:
application/json:
schema:
type: object
properties:
error:
type: string
schemas:
Location:
type: object
description: Coordinates, or a code instead of them.
properties:
name:
type: string
code:
type: string
description: UN/LOCODE (NLRTM) or IATA airport code (CPH), used when lat and lon are not given. Find codes with GET /v1/places.
example: NLRTM
lat:
type: number
lon:
type: number
Shipment:
type: object
required:
- legs
description: Give weight_kg, or teu with teu_net_tonnes or container_load; teu alone uses the dataset's "average" profile (GLEC, 10 t per TEU).
properties:
id:
type: string
weight_kg:
type: number
exclusiveMinimum: 0
teu:
type: number
exclusiveMinimum: 0
teu_net_tonnes:
type: number
description: Net cargo tonnes per TEU
container_load:
type: string
description: Profile name from the dataset's container_loads
cargo_type:
type: string
description: Optional GLEC cargo or load category from the dataset's cargo_types (container, temperature_controlled, light, heavy, European rail commodities); picks GLEC's value for it where the leg's vehicle has one
legs:
type: array
minItems: 1
items:
$ref: '#/components/schemas/Leg'
hubs:
type: array
items:
$ref: '#/components/schemas/HubStop'
add_road_legs:
type: boolean
default: true
description: 'Add road legs where the trip doesn''t join up: across a gap of more than 5 km between one leg''s end and the next leg''s start, and to or from a port or rail terminal when a sea, rail or inland waterway leg starts or ends off its network (the leg is moved there). Added and moved legs are marked in the result. When false, gaps and inland sea ends are only warnings.
'
HubStop:
type: object
required:
- hub_type
properties:
id:
type: string
hub_type:
type: string
example: transshipment
description: 'GLEC v3.3 Table 3 hub types: transshipment, storage_transshipment, warehouse, liquid_bulk_terminal (add _mixed for ambient and temperature-controlled sites; per tonne), intermodal_terminal, intermodal_terminal_temperature_controlled (per container)'
containers:
type: number
description: Containers handled, for per-container hub types (intermodal terminals)
DistanceType:
type: string
enum:
- sfd
- gcd
- actual
description: Shortest feasible, great-circle, or actually travelled distance (GLEC / ISO 14083)
Report:
type: object
description: See pkg/report for every field. Emissions in kg CO2e.
properties:
title:
type: string
organisation:
type: string
period:
type: object
properties:
from:
type: string
to:
type: string
level:
type: string
example: transport_or_hub_services
statement:
type: string
reference:
type: string
datasets:
type: array
items:
type: string
generated:
type: string
format: date-time
coverage:
type: object
properties:
shipments:
type: integer
calculated:
type: integer
failed:
type: integer
failed_ids:
type: array
items:
type: string
description: First 100
retryable_failed:
type: integer
description: 'Failures that weren''t the data''s fault (a routing service didn''t answer, also when tried again): calculate them again'
legs:
type: integer
hub_stops:
type: integer
weight_t:
type: number
added_road_legs:
type: integer
description: Road legs added by the calculator
included in legs and totals: null
added_road_km:
type: number
added_road_leg_shipments:
type: integer
warned_shipments:
type: integer
warnings:
type: array
description: Warnings by kind
items:
type: object
properties:
reason:
type: string
shipments:
type: integer
total:
type: object
properties:
wtw_kg:
type: number
transport_wtw_kg:
type: number
ttw_kg:
type: number
description: Operational emissions
transport: null
wtt_kg:
type: number
description: Energy provision emissions
transport: null
hub_wtw_kg:
type: number
tonne_km:
type: number
intensity_g_per_tkm:
type: number
distance_types:
type: object
additionalProperties:
type: number
description: Share of tonne-km per distance type (sfd, gcd, actual, unspecified)
modes:
type: array
items:
type: object
hubs:
type: array
items:
type: object
energy_carriers:
type: array
items:
type: object
data_quality:
type: object
distance_adjustments:
type: array
items:
type: object
notes:
type: array
items:
type: string
ghg_protocol:
type: object
description: 'The totals by GHG Protocol scope: the shipper''s scope 3 category, and the operator''s scopes 1, 2 and 3 category 3'
FuelUse:
type: object
required:
- fuel
- amount
properties:
fuel:
type: string
example: diesel
amount:
type: number
description: In the fuel factor's unit
vehicle_tonne_km:
type: number
description: Total tonne-km on the vehicle trip, for allocation. 0 or absent = whole trip.
factor:
type: object
description: The fuel supplier's or your own emission factor, used instead of the dataset's (fuel is then just its name).
required:
- unit
- wtw_kg_per_unit
- source
properties:
unit:
type: string
example: l
wtw_kg_per_unit:
type: number
exclusiveMinimum: 0
description: Well-to-wheel kg CO2e per unit
ttw_kg_per_unit:
type: number
minimum: 0
description: Tank-to-wheel kg CO2e per unit
part of WTW: null
source:
type: string
description: Who gives the factor
and for what: null
biogenic_co2_kg_per_unit:
type: number
minimum: 0
description: Reported apart
not in WTW: null
Mode:
type: string
enum:
- road
- rail
- sea
- air
- inland_waterway
OwnFactor:
type: object
description: The carrier's or your own intensity for a leg (primary data, ISO 14083 7.2.3), used instead of a default value.
required:
- wtw_g_per_tkm
- source
properties:
wtw_g_per_tkm:
type: number
exclusiveMinimum: 0
ttw_g_per_tkm:
type: number
minimum: 0
description: Part of WTW; the rest is WTT
source:
type: string
description: Who measured it
and for what (e.g. the carrier's TOC report and year): null
distance_basis:
type: string
enum:
- sfd
- gcd
- actual
description: Distance type the intensity is per tonne-km of. Absent = the leg's own distance type, so no DAF.
Leg:
type: object
required:
- mode
properties:
id:
type: string
mode:
$ref: '#/components/schemas/Mode'
cargo_type:
type: string
description: Overrides the shipment's cargo_type for this leg
vehicle_type:
type: string
example: hgv
description: Must exist in the loaded dataset; list them with GET /v1/factors
from:
$ref: '#/components/schemas/Location'
to:
$ref: '#/components/schemas/Location'
distance_km:
type: number
description: Overrides computed distance when > 0
distance_type:
$ref: '#/components/schemas/DistanceType'
fuel:
$ref: '#/components/schemas/FuelUse'
load_factor:
type: number
exclusiveMinimum: 0
maximum: 1
description: 'Load as a share of the load model''s payload (DESNZ''s average full load, e.g. 17.9 t for an artic over 33 t), not of the truck''s rated payload; switches the leg to the dataset''s load model. Give this or load_tonnes. In GLEC and EcoTransIT a load factor is a share of the rated payload, so the same value means more tonnes there: to compare, or when the weight is known, give load_tonnes.
'
load_tonnes:
type: number
exclusiveMinimum: 0
description: 'Tonnes on the truck (all cargo, average over the loaded km); switches the leg to the load model. Up to 1.6 × the model''s payload: above its payload the model is extended linearly.
'
empty_trip_factor:
type: number
minimum: 0
description: Empty km per loaded km (needs load_factor or load_tonnes)
repositioning_km:
type: number
minimum: 0
description: 'Trucks: km driven empty for this trip (to the pickup, or back after delivery), shared over the truck''s load like empty running (added to the empty trip factor as km per actual loaded km). Without a load, the shipment is taken as the truck''s whole load.
'
energy_kwh_per_tkm:
type: number
exclusiveMinimum: 0
description: Electricity per tonne-km; with country, switches the leg to the energy method
country:
type: string
description: ISO 3166-1 alpha-3 country whose grid powers the leg, e.g. DNK
own_factor:
$ref: '#/components/schemas/OwnFactor'