{"title":"Commodity: Verified Official Data Catalog","description":"A continuously verified, machine-readable catalog of official public-sector APIs and datasets from European and global government sources. Each entry carries proof-based officialness scoring, live availability checks, and provenance for every field.","homepage":"https://c0mm0.com","formats":{"turtle":"https://c0mm0.com/api/v1/catalog/dcat.ttl","jsonld":"https://c0mm0.com/api/v1/catalog/dcat.jsonld","json":"https://c0mm0.com/api/v1/entries","rss":"https://c0mm0.com/api/v1/feeds/rss","okf":"https://c0mm0.com/api/v1/okf/bundle.tar.gz"},"license":"CC0-1.0","standards":["DCAT-AP/3.0.1","schema.org/Dataset","DCAT/3 (W3C)","OKF/0.1"],"counts":{"total":13670,"apis":10564,"datasets":3106,"portals":89,"public_sector":13670,"countries":34,"institutions":98,"last_verified_at":"2026-10-01T15:24:04.402Z"},"populations":[{"key":"total","label":"The canonical catalog: official, ACTIVE, non-portal, past the drip-publish gate","predicate":"status = 'ACTIVE' AND is_public_sector = true AND type <> 'PORTAL' AND (published_at IS NULL OR published_at < date_trunc('day', NOW()))","measure":"count(*)","table":"entries","time_varying":true,"note":"The population every public read applies by default (packages/db buildEntryConditions, official_only). Time-varying: it grows at midnight without any new discovery.","value":13670,"generated_at":"2026-10-01T15:29:05.581Z"},{"key":"apis","label":"Canonical catalog entries of type API","predicate":"status = 'ACTIVE' AND is_public_sector = true AND type <> 'PORTAL' AND (published_at IS NULL OR published_at < date_trunc('day', NOW())) AND type = 'API'","measure":"count(*)","table":"entries","time_varying":true,"value":10564,"generated_at":"2026-10-01T15:29:05.586Z"},{"key":"datasets","label":"Canonical catalog entries of type DATASET","predicate":"status = 'ACTIVE' AND is_public_sector = true AND type <> 'PORTAL' AND (published_at IS NULL OR published_at < date_trunc('day', NOW())) AND type = 'DATASET'","measure":"count(*)","table":"entries","time_varying":true,"value":3106,"generated_at":"2026-10-01T15:29:05.586Z"},{"key":"countries","label":"Distinct country codes present in the canonical catalog","predicate":"status = 'ACTIVE' AND is_public_sector = true AND type <> 'PORTAL' AND (published_at IS NULL OR published_at < date_trunc('day', NOW()))","measure":"count(distinct country_code)","table":"entries","time_varying":true,"note":"Narrower than /api/v1/insights/overview, which counts countries across ALL ACTIVE entries including portals and unofficial ones. Both are correct; they are different questions.","value":34,"generated_at":"2026-10-01T15:29:05.586Z"},{"key":"institutions","label":"Distinct publishing institutions in the canonical catalog","predicate":"status = 'ACTIVE' AND is_public_sector = true AND type <> 'PORTAL' AND (published_at IS NULL OR published_at < date_trunc('day', NOW()))","measure":"count(distinct institution_id)","table":"entries","time_varying":true,"value":98,"generated_at":"2026-10-01T15:29:05.586Z"},{"key":"portals","label":"Official ACTIVE portals past the drip-publish gate — the population beside the canonical catalog, never inside it","predicate":"status = 'ACTIVE' AND is_public_sector = true AND type = 'PORTAL' AND (published_at IS NULL OR published_at < date_trunc('day', NOW()))","measure":"count(*)","table":"entries","time_varying":true,"note":"Portals are folded out of `canonical` because they are indexes of data, not data. Counting them here rather than inside the catalog is what keeps `portals` from inflating `total` (that arithmetic once shipped a subset larger than its superset on /catalog/summary).","value":89,"generated_at":"2026-10-01T15:29:05.581Z"},{"key":"public_sector","label":"Public-sector entries: the canonical catalog is official-only, so this equals `total` by construction","predicate":"status = 'ACTIVE' AND is_public_sector = true AND type <> 'PORTAL' AND (published_at IS NULL OR published_at < date_trunc('day', NOW()))","measure":"count(*)","table":"entries","time_varying":true,"note":"The population every public read applies by default (packages/db buildEntryConditions, official_only). Time-varying: it grows at midnight without any new discovery.","value":13670,"generated_at":"2026-10-01T15:29:05.581Z"}],"canonical_scope":"status = 'ACTIVE' AND is_public_sector = true AND type <> 'PORTAL' AND (published_at IS NULL OR published_at < date_trunc('day', NOW()))","generated_at":"2026-10-01T15:29:05.581Z","manifest":{"answer_sha256":"21cec68c11e5f3e54a588d1ac9c54ba19514229c75ca6fe5223922113ba6a22b","answer_sha256_rule":"sha256 (hex, UTF-8) of JSON.stringify(this body) after deleting the keys listed in manifest.stamped_keys from manifest, and deleting manifest itself if it is then empty. The hash was computed before the stamp existed, so no field of the stamp is inside it.","stamped_keys":["answer_sha256","answer_sha256_rule","stamped_keys","row_count","row_count_basis","live","live_basis","created_at","created_at_basis","durable_citation"],"row_count":7,"row_count_basis":"Objects that are elements of a JSON array anywhere in this body, excluding manifest. Not a claim about which collection is the answer. Largest single collection: populations[] (7 rows).","live":true,"live_basis":"This body was produced by executing the request.","created_at":"2026-10-01T15:29:05.655Z","created_at_basis":"When this response body was assembled, deliberately OUTSIDE the hashed bytes so the same answer hashes identically on every request. Not the upstream read time — that is provenance[].retrieved_at. A zone-cached replay carries the assembly time, not your receipt time.","durable_citation":"This manifest is produced at response time and is NOT stored. A durable, replayable citation is persisted only on an explicit cite: GET /api/v1/entries/{id-or-slug}/evidence, or the MCP cite_query tool. Both are entry-scoped, because evidence_manifests is entry-shaped; a domain answer spanning several sources has no single entry and cannot be persisted through that path."}}