Demiton · Schema
platform_research_finding contract v3
The Platform research finding register contract, version 3. JSON Schema (draft 2020-12); x-demiton-* keywords carry Demiton's own meaning and standard validators ignore them.
CompanyConstructionCivil EngineeringProject ManagementComplianceMCPArtificial IntelligenceOpen Contracting
Properties
| Name | Type | Description |
|---|---|---|
| label | string | how the finding is named on the surface, in the source's own terms - 'Mean total rework cost (115 Australian civil projects)' |
| caveat | string | the author's own plain-English limit on the figure, where the research pass gave one - 'Based on respondents' estimates, not records'; 'Size of the pot, not a loss' |
| currency | currency | ISO 4217 currency of a `per_*` figure (AUD, USD, NZD); null for ratios and `none`. The surface prints the amount in this currency, never as a bare dollar sign |
| confidence | string | the evidence grade, by the published rubric in github.com/demitonapp/disease-economics METHOD.md Section 4: `low` (read second-hand, unverifiable, or a model or estimate), `moderate` (read at source b |
| industries | array | ISIC Rev.4 divisions the evidence covers (`F42` civil engineering, `F` construction, `ALL`, `unknown`); the union of the finding's sources. Carried for display and future matching; not yet part of the |
| metric_key | string | the finding's stable identifier within its disease, e.g. `rework_total_civil_survey`. The seed's idempotency partner: re-running the seed updates the same row, and a genuinely new finding gets a new k |
| price_year | integer | the year a `per_*` amount is priced in; null otherwise |
| source_org | string | the publishing organisation or author of record |
| source_url | string | a resolvable link to the source |
| denominator | string | what a `ratio_of_other` figure is a share OF: `budget_at_decision`, `budget_at_announcement`, `construction_cost`, `amount_claimed`, `arbitration_cost`, `total_injury_cost` (the vocabulary of github.c |
| disease_key | string | which of the five margin diseases this finding prices - the key in `vocab/diseases.json` (`rework`, `overrun`, `forfeited_entitlements`, `disputes`, `non_compliance`) |
| sample_note | string | sample size, geography, sector and method - what bounds the figure. Null where the source did not disclose it |
| source_year | integer | the year of the source, for a vintage check - a 2001 benchmark and a 2025 one are not the same evidence |
| source_title | string | the paper, report or dataset title |
| exposure_kind | string | who bears the money: `contractor_loss` (the source measured money the contractor loses), `money_at_stake` (it measured how much is in play, not what is lost), `owner_side` (the client pays), or `socie |
| exposure_unit | string | how the figure may be projected: `ratio_of_contract` (multiplies a contract value), `ratio_of_other` (a share of something else, named by `denominator`; never multiplied), `per_wet_day`, `per_incident |
| jurisdictions | array | Where the evidence is from: ISO 3166 codes (`AU`, `AU-QLD`), `GLOBAL` (no limit claimed) or `unknown`; the union of the finding's sources. The exposure service applies a figure to a project only when |
| exposure_basis | string | what the figure is a percentage OF, in words - 'of original contract value'. Stored because the same disease yields 3-5% of one basis and 10% of another, and a bare number without its basis is the mos |
| exposure_value | number | the published figure in the source's own unit. A share of contract value is stored as a decimal fraction (10% is 0.10); a per-day or per-incident figure is stored in whole dollars. 0 when the source p |
| source_location | string | where in the document to look - 'abstract', 'p.5', 'table 23'. Null when the source did not permit it |
| source_secondary | boolean | true when the figure was read only through someone else's citation rather than at the primary document |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://docs.demiton.io/registers/platform_research_finding/v3.json",
"title": "platform_research_finding contract v3",
"type": "object",
"required": [
"confidence",
"disease_key",
"exposure_basis",
"exposure_kind",
"exposure_unit",
"exposure_value",
"label",
"metric_key",
"source_org",
"source_title",
"source_url"
],
"properties": {
"label": {
"type": "string",
"description": "how the finding is named on the surface, in the source's own terms - 'Mean total rework cost (115 Australian civil projects)'",
"x-demiton-requiredness": "required"
},
"caveat": {
"type": "string",
"description": "the author's own plain-English limit on the figure, where the research pass gave one - 'Based on respondents' estimates, not records'; 'Size of the pot, not a loss'",
"x-demiton-requiredness": "optional"
},
"currency": {
"type": "currency",
"description": "ISO 4217 currency of a `per_*` figure (AUD, USD, NZD); null for ratios and `none`. The surface prints the amount in this currency, never as a bare dollar sign",
"x-demiton-requiredness": "optional"
},
"confidence": {
"type": "string",
"description": "the evidence grade, by the published rubric in github.com/demitonapp/disease-economics METHOD.md Section 4: `low` (read second-hand, unverifiable, or a model or estimate), `moderate` (read at source but one organisation's data, people's own estimates, or a sampling problem the caveat names), `high` (read at source and none of those). Carried so the surface can rank its evidence honestly instead of presenting a secondary citation as a measurement",
"x-demiton-requiredness": "required"
},
"industries": {
"type": "array",
"description": "ISIC Rev.4 divisions the evidence covers (`F42` civil engineering, `F` construction, `ALL`, `unknown`); the union of the finding's sources. Carried for display and future matching; not yet part of the rule",
"items": {
"type": "string"
},
"x-demiton-requiredness": "optional"
},
"metric_key": {
"type": "string",
"description": "the finding's stable identifier within its disease, e.g. `rework_total_civil_survey`. The seed's idempotency partner: re-running the seed updates the same row, and a genuinely new finding gets a new key",
"x-demiton-requiredness": "required"
},
"price_year": {
"type": "integer",
"description": "the year a `per_*` amount is priced in; null otherwise",
"x-demiton-requiredness": "optional"
},
"source_org": {
"type": "string",
"description": "the publishing organisation or author of record",
"x-demiton-requiredness": "required"
},
"source_url": {
"type": "string",
"description": "a resolvable link to the source",
"x-demiton-requiredness": "required"
},
"denominator": {
"type": "string",
"description": "what a `ratio_of_other` figure is a share OF: `budget_at_decision`, `budget_at_announcement`, `construction_cost`, `amount_claimed`, `arbitration_cost`, `total_injury_cost` (the vocabulary of github.com/demitonapp/disease-economics schema/finding.schema.json). Null for every other unit",
"x-demiton-requiredness": "optional"
},
"disease_key": {
"type": "string",
"description": "which of the five margin diseases this finding prices - the key in `vocab/diseases.json` (`rework`, `overrun`, `forfeited_entitlements`, `disputes`, `non_compliance`)",
"x-demiton-requiredness": "required"
},
"sample_note": {
"type": "string",
"description": "sample size, geography, sector and method - what bounds the figure. Null where the source did not disclose it",
"x-demiton-requiredness": "optional"
},
"source_year": {
"type": "integer",
"description": "the year of the source, for a vintage check - a 2001 benchmark and a 2025 one are not the same evidence",
"x-demiton-requiredness": "optional"
},
"source_title": {
"type": "string",
"description": "the paper, report or dataset title",
"x-demiton-requiredness": "required"
},
"exposure_kind": {
"type": "string",
"description": "who bears the money: `contractor_loss` (the source measured money the contractor loses), `money_at_stake` (it measured how much is in play, not what is lost), `owner_side` (the client pays), or `societal` (workers and the community). Only contractor_loss and money_at_stake may reach the headline ledger",
"x-demiton-requiredness": "required"
},
"exposure_unit": {
"type": "string",
"description": "how the figure may be projected: `ratio_of_contract` (multiplies a contract value), `ratio_of_other` (a share of something else, named by `denominator`; never multiplied), `per_wet_day`, `per_incident`, `per_year_industry`, or `none` when no published figure exists. Multiplying a per-day or per-incident figure, or a share of an arbitration bill, by a contract value is nonsense, so the unit is declared rather than assumed",
"x-demiton-requiredness": "required"
},
"jurisdictions": {
"type": "array",
"description": "Where the evidence is from: ISO 3166 codes (`AU`, `AU-QLD`), `GLOBAL` (no limit claimed) or `unknown`; the union of the finding's sources. The exposure service applies a figure to a project only when this holds the project's place, its country, or GLOBAL",
"items": {
"type": "string"
},
"x-demiton-requiredness": "optional"
},
"exposure_basis": {
"type": "string",
"description": "what the figure is a percentage OF, in words - 'of original contract value'. Stored because the same disease yields 3-5% of one basis and 10% of another, and a bare number without its basis is the most common way a benchmark misleads",
"x-demiton-requiredness": "required"
},
"exposure_value": {
"type": "number",
"description": "the published figure in the source's own unit. A share of contract value is stored as a decimal fraction (10% is 0.10); a per-day or per-incident figure is stored in whole dollars. 0 when the source published no such figure",
"x-demiton-requiredness": "required",
"x-demiton-unit": "decimal fraction for ratio_of_contract; AUD for per_wet_day and per_incident"
},
"source_location": {
"type": "string",
"description": "where in the document to look - 'abstract', 'p.5', 'table 23'. Null when the source did not permit it",
"x-demiton-requiredness": "optional"
},
"source_secondary": {
"type": "boolean",
"description": "true when the figure was read only through someone else's citation rather than at the primary document",
"x-demiton-requiredness": "optional"
}
},
"x-demiton-register-type": "platform_research_finding",
"x-demiton-contract-version": "3.0.1",
"x-demiton-store": "platform",
"x-demiton-axes": [],
"x-demiton-measures": [
{
"key": "ratio_of_contract",
"accumulation": "instantaneous",
"dtype": "decimal",
"unit": "dimensionless"
}
],
"x-demiton-provenance": {
"standards": []
},
"description": "The Platform research finding register contract, version 3. JSON Schema (draft 2020-12); x-demiton-* keywords carry Demiton's own meaning and standard validators ignore them.",
"x-demiton-contract-url": "https://docs.demiton.io/registers/platform_research_finding/",
"x-demiton-register-catalog": "https://docs.demiton.io/concepts/register-catalog"
}
Work with this as data
Every JSON Schema 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 schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.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.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/demiton-io-platform_research_finding-v3"
All schemas
curl "https://apis.io/api/v1/json-schemas?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.