For developers

Developer guide

How to consume Warconomy as a developer or researcher: fetch the static dataset, join observations to sources, use provenance, read version diffs, and load the CSV/JSONL distributions. No runtime API, no auth, no SDK — just prerendered files. Partial coverage, not real-time.

static reference · data June 5, 2026

Warconomy is a fully static, source-linked dataset. To consume it, fetch the prerendered files directly — there is no runtime API, no authentication, no rate limits, and no SDK to install. Start with data.json for the full dataset, join each observation to its source by sourceId, use provenance.json for record-level lineage, and read the version diffs for what changed. Cite the linked source for any figure, and never cite the clearly-labeled sample rows as current data.

  • No runtime API · no auth · no SDK — static files only.
  • 7 copy-paste examples; OpenAPI 3.1 contract at /api/openapi.json.
  • Machine-readable at /developers/data.json.

Key endpoints

Consumer contract

A typed, versioned, reproducible contract around the dataset export: a data-package manifest, deterministic checksums, downloadable TypeScript types and declarations, contract fixtures, a validation guide, a contract changelog, per-surface JSON Schemas, and a record-level history index. All static files — backward-compatible and id/path-based.

Examples

Fetch the dataset

Everything is a static file — a plain GET, no key, no client.

const res = await fetch("https://warconomy.com/datasets/conflict-economic-impact/data.json");
const data = await res.json();
console.log(data.version, data.observations.length);

Read live observations

Filter to genuinely sourced live values; sample rows are labeled.

const { observations } = await (await fetch("https://warconomy.com/datasets/conflict-economic-impact/data.json")).json();
const live = observations.filter((o) => o.dataMode === "live");
for (const o of live) console.log(o.metricId, o.value, o.unit, o.asOf, o.sourceId);

Join observations to their sources

Resolve each observation's sourceId against the sources array.

const data = await (await fetch("https://warconomy.com/datasets/conflict-economic-impact/data.json")).json();
const byId = Object.fromEntries(data.sources.map((s) => [s.id, s]));
const cited = data.observations.map((o) => ({
  value: o.value,
  asOf: o.asOf,
  source: byId[o.sourceId]?.title,
  url: byId[o.sourceId]?.url,
}));

Use the provenance export

One row per source-linked record with authority/readiness and the page it appears on.

const prov = await (await fetch("https://warconomy.com/datasets/conflict-economic-impact/provenance.json")).json();
const highReadiness = prov.records.filter((r) => r.citationReadiness === "high");
console.log(highReadiness.length, "high-readiness records");

Read a version diff

Value-level diff between two materialized versions; field-level via record-diffs.json.

const diff = await (await fetch("https://warconomy.com/datasets/conflict-economic-impact/versions/1.187.0/diff.json")).json();
console.log(diff.previousVersion, "->", diff.version, "valueLevel:", diff.valueLevel);
const recs = await (await fetch("https://warconomy.com/datasets/conflict-economic-impact/versions/1.187.0/record-diffs.json")).json();
console.log(recs.changedRecordCount, "records changed");

Load CSV / JSONL distributions

Tabular mirrors for spreadsheets and data tools (RFC-4180 CSV; one JSON object per line).

curl -s https://warconomy.com/datasets/conflict-economic-impact/observations.csv -o observations.csv
curl -s https://warconomy.com/datasets/conflict-economic-impact/provenance.jsonl | head -n 1

Cite a page or value

Cite the linked source for a figure; cite Warconomy for the structured context and dataset version.

Warconomy, "Conflict economic-impact dataset" (v1.187.0),
https://warconomy.com/datasets/conflict-economic-impact, accessed 2026-06-05. Underlying value: see the cited source on the indicator page.

Notes

Warconomy is fully static: every endpoint is a prerendered file. There is no runtime API, no authentication, no rate limits, and no SDK package to install — fetch and cache the files directly. Coverage is partial and not real-time; cite live/static values, never sample rows.

See the static endpoint index /api, the OpenAPI 3.1 contract, the TypeScript types, the contract fixtures, the validation guide, the contract changelog, the route catalog, the data dictionary, and the representative contract examples.

Related Warconomy pages