GET /api/v1/
What this API is, where to start, and the daily allowance
Parameters: none
Everything the pages show, as JSON, with the same apparatus — free, unauthenticated and read-only.
Send GET requests to https://quiescence.eu/humantoll/api/v1/. Every response carries its status, scenario, run, methodology and data version, metrics, the sources behind it with their licences, the licence the response may be reused under, caveats and a citation. Until a validated run is published, figures are withheld and every response says so.
No figure is published yet. The API answers with the register — products, bills of materials, materials, conflicts, countries, channels, scenarios, sources — and every figure is null, with the reason beside it.
GET /api/v1/ — what the API is, its endpoints and the daily allowanceGET /api/v1/product/croissant — one product: both metrics on both routes, its bill of materials, and the chain it reachesGET /api/v1/compare?a=electric-car&b=petrol-car — two products drawn together: the interval of their ratioGET /api/v1/spend?category=07&amount=250 — €250 of EU households’ spending on transportGET /api/v1/openapi.json — this API as an OpenAPI 3.1 documentvalue is null, range_only is true).citation does: HumanToll <year>, run <id>, methodology v<version>. <page URL>The same keys on every endpoint. A key is never missing; where it has no value it is null, and withheld says why.
statusscenario · runmethodology_version · data_versionmetricsdatarecords from publishers’ releases, and results the run computed.withheldsourceslicencecaveats · citationEvery figure is an object: value (the central estimate, or null when the grade is INDICATIVE), low and high (the 5th and 95th percentiles of 2,000 draws), confidence (HIGH, MEDIUM, LOW or INDICATIVE), range_only and unit. It is built by the same function that writes every figure on the pages, so the API cannot show a number the pages would refuse.
All GET. Scenario, where it applies, is one of S-MAX (the default), S-EVID, S-RES, S-ARMS and S-CONS. An unknown parameter is refused by name.
GET /api/v1/What this API is, where to start, and the daily allowance
Parameters: none
GET /api/v1/productsThe product catalogue; with a published run, each product's deaths per unit and per kg
Parameters:
tier — semi_finished or finished. semi_finished · finishedcategory — A product category code, as each product's `category.code` gives it. sort — name, toll (deaths per kg on the material route), confidence or complete. name · toll · confidence · completescenario — The attribution scenario. The default is the published default (S-MAX). S-MAX · S-EVID · S-RES · S-ARMS · S-CONSGET /api/v1/product/{slug}One product: both routes and both metrics, the bill of materials and the chain it reaches
Parameters:
slug (required) — The product's permanent slug, as in its page's address. scenario — The attribution scenario. The default is the published default (S-MAX). S-MAX · S-EVID · S-RES · S-ARMS · S-CONSGET /api/v1/product/{slug}/contributionsWhat carries one figure: its breakdown by material, country, conflict, channel or industry
Parameters:
slug (required) — The product's permanent slug, as in its page's address. metric — deaths or injuries. deaths · injuriesmethod — material (the route through the bill of materials) or mrio (per €1,000). material · mriotype — One breakdown; all of the route's when absent. material · country · conflict · channel · sectorscenario — The attribution scenario. The default is the published default (S-MAX). S-MAX · S-EVID · S-RES · S-ARMS · S-CONSGET /api/v1/product/{slug}/explainThe audit trail of one figure: every stage, each summing to the headline
Parameters:
slug (required) — The product's permanent slug, as in its page's address. metric — deaths or injuries. deaths · injuriesscenario — The attribution scenario. The default is the published default (S-MAX). S-MAX · S-EVID · S-RES · S-ARMS · S-CONSGET /api/v1/compareTwo products drawn together: the interval of their ratio, and a verdict only where it holds
Parameters:
a (required) — The first product's slug. b (required) — The second product's slug. metric — deaths or injuries. deaths · injuriesscenario — The attribution scenario. The default is the published default (S-MAX). S-MAX · S-EVID · S-RES · S-ARMS · S-CONSGET /api/v1/spendEU households' spending on each consumption category: the harm in €amount, grouped against all spending
Parameters:
category — A COICOP 2018 category code; all of them when absent. amount — Euros spent; every figure and its interval scale with it. scenario — The attribution scenario. The default is the published default (S-MAX). S-MAX · S-EVID · S-RES · S-ARMS · S-CONSGET /api/v1/material/{slug}A raw material: who produces it, which products use it, and what it carries in a run
Parameters:
slug (required) — The material's permanent slug, as in its page's address. scenario — The attribution scenario. The default is the published default (S-MAX). S-MAX · S-EVID · S-RES · S-ARMS · S-CONSGET /api/v1/conflict/{slug}A scored conflict: the deaths UCDP counted, the model's attribution, and the products it reaches
Parameters:
slug (required) — The conflict's permanent slug, as in its page's address. scenario — The attribution scenario. The default is the published default (S-MAX). S-MAX · S-EVID · S-RES · S-ARMS · S-CONSGET /api/v1/country/{iso3}A country: the harm counted there, and the products it reaches
Parameters:
iso3 (required) — ISO 3166-1 alpha-3, in either case. scenario — The attribution scenario. The default is the published default (S-MAX). S-MAX · S-EVID · S-RES · S-ARMS · S-CONSGET /api/v1/channel/{code}A harm channel: what it counts, how it is attributed, and what it reaches
Parameters:
code (required) — C1 conflict · C2 work · C3 deprivation · C4 exposure. scenario — The attribution scenario. The default is the published default (S-MAX). S-MAX · S-EVID · S-RES · S-ARMS · S-CONSGET /api/v1/scenariosThe five attribution scenarios and their parameters
Parameters: none
GET /api/v1/runsThe published runs; none while figures are withheld
Parameters: none
GET /api/v1/runs/{id}One published run and the verdict of each validation gate
Parameters:
id (required) — The run id a figure's citation names. GET /api/v1/methodologyThe versions of the methodology
Parameters: none
GET /api/v1/sourcesThe source register: every source, its licence, and the basis it is used on
Parameters: none
GET /api/v1/searchFind a product, material, conflict, country or channel
Parameters:
q (required) — Two to 64 characters. GET /api/v1/openapi.jsonThis API as an OpenAPI 3.1 document, generated from the route table
Parameters: none
Real status codes, and one shape: {"ok": false, "error": {"code", "message", "detail"}}. The code is stable; detail names the parameter and what it accepts.
400401404405429500503100 requests a day from one address, reset at 00:00 UTC; every response says how many remain (X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset). The OpenAPI document is not counted.
No address is stored. The count is kept under a salted hash whose salt is drawn each day and destroyed, with the counts, when the day ends.
HumanToll is a research project, not a commercial service. For advanced API access, contact us at info@quiescence.eu. info@quiescence.eu
For research that needs more than the daily allowance, a key is issued on request, free of charge: write to info@quiescence.eu with what the work is and how much it needs. Send the key as Authorization: Bearer <key> (or X-API-Key); the allowance then counts per key instead of per address, and each response says how much of it remains.
A key is shown once, when it is issued, and HumanToll keeps only its fingerprint. A lost key is revoked and replaced — there is nothing to recover. A key that is not valid is refused with 401. Send it in a header, never in the URL: URLs are written to logs.
Any origin may read the API (Access-Control-Allow-Origin: *). No cookie is set, and none is needed.