Open data
For developers and AI
The whole database is machine-readable. Static JSON, no keys or limits, CORS open. As of July 2026, updated monthly. Data licence: CC BY 4.0 (original sources – in the references[] field of each record).
Endpoints
/api/projekty.jsonAll records, full schema (cost, status, deadlines, outcome, references[]…) together with outcome_grounding: for each of the six outcome axes, whether a source backs it and which one. source_no is the number shown on the card, so it counts from one; the source_ref fields inside the record index from zero.
/api/projekt/{slug}.jsonA single record. Over the list it adds only release, schema_version and license; outcome_grounding is on both endpoints. Example: /api/projekt/lotnisko-warszawa-radom.json
/api/evidence.jsonThe evidence layer: verbatim source quotes, record by record. source_no is the source number shown on the card. Includes claims we did NOT confirm (verdict other than confirmed).
/api/statystyki.jsonAggregates: counts by status/field, value-by-stage, opening wave, sectors.
/api/sprostowania.jsonThe corrections register: what we said, what we say now, what settled it and in which commit. The layer field says whether the error sat in the record data or in the way we presented it.
/api/index.jsonAPI directory as JSON. It also lists the language-model manifests in both languages.
/en/llms.txtManifest for language models (Markdown).
/en/llms-full.txtFull text dump of the database – for LLM ingestion.
/api/snapshots/index.jsonDirectory of registry snapshots. Each one has a permanent address.
/api/snapshots/{date}.jsonThe registry on the snapshot date: five fields of every record. Permanent address; the file never changes once written.
/api/decyzje-osi.jsonDecisions of the review of quotes that ground a cost figure while describing its change: for each hit, either pinned to the budget axis or the reason for refusing.
/api/health.jsonAvailability probe: 200, commit and release stamp.
/schema/project.schema.jsonJSON Schema of a project record.
/schema/evidence.schema.jsonJSON Schema of an evidence file (claims[]).
/sitemap-index.xmlSitemap (all projects).
Citing without an expiry date
The addresses above return the current state, so a citation taken from them ages at the next refresh. That is why the registry is photographed: /api/snapshots/<date>.json holds one day of the registry and never changes again. A correction made later does not enter a snapshot already written, only the next one.
The scope is narrow on purpose. A snapshot records five fields of every project: status, stage, the cost figure, the currency of that figure, and the current planned completion date. The rest of the schema, quotes and references included, is anchored only by the release, whose commit hash every response other than the snapshot files carries in its release field. The repository is private, so you cannot open that hash: it identifies a release rather than addressing one. What is permanent is the snapshot file itself, not the quote.
The record count in a snapshot and the count today can differ. The registry takes in new records and drops ones that turned out to be a second entry for the same undertaking, and a snapshot once written is never corrected in place: an observation with a correction added to it is no longer an observation. The reason for a given difference sits with that snapshot, in its note field.
Snapshots written: 2. The latest is dated 2026-09-09 and records 383 projects; today’s registry holds 383.
Example
curl -s https://projektometr.pl/api/statystyki.json | jq '.opening_wave'
# a single project
curl -s https://projektometr.pl/api/projekt/lotnisko-warszawa-radom.json | jq '{name, status, cost, outcome}'For language models
Start with /en/llms.txt (manifest) and /en/llms-full.txt (a full dump of 383 records). When citing, give the “as of” date and the source from the references[] field of the given record – Projektometr aggregates and verifies, but the original source is the cited publication. Rules and the “why”: about.