Demiton · Schema
portal_document contract v2
Documents downloaded from a client or tender portal, by project.
CompanyConstructionCivil EngineeringProject ManagementComplianceMCPArtificial IntelligenceOpen Contracting
Properties
| Name | Type | Description |
|---|---|---|
| name | string | The file name as the portal listed it. |
| sha256 | string | Content fingerprint of the fetched bytes; the integrity claim about a file whose bytes are not kept. |
| content | string | One generated sentence: "Portal document {name} fetched by estimating/portal_fetch (agent run {id})." The searchable prose half. |
| project | string | Declared `PROJECT` axis; populated only when the opportunity resolves to a project. |
| fact_class | string | Provenance class: an agent's metadata capture of a downloaded file, not a value the source system reported. |
| size_bytes | integer | Size of the fetched bytes at download time. |
| external_id | string | Identity of the fetched document: `{portal}:{document_id}`. Maps to `Fact.source_id`. |
| occurred_at | string | The download time, stamped at write; the event key of an episodic fact and the source `FINANCIAL_PERIOD` derives from. |
| agent_run_id | number | The `AgentRun` that performed the fetch; also the fact's `citation.origin_uri` (`demiton://agent/portal_fetch/run/{id}`). |
| source_portal | string | Which portal the document came from; defaults to the literal `"portal"` when the artifact omits it. |
| opportunity_ref | string | The opportunity the fetch was for, from the agent goal; a reference, not a resolved entity. |
| financial_period | string | Declared `FINANCIAL_PERIOD` axis; resolved from `occurred_at` when the writer passes no coordinate. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://docs.demiton.io/registers/portal_document/v2.json",
"title": "portal_document contract v2",
"type": "object",
"required": [
"external_id",
"fact_class",
"financial_period",
"name",
"occurred_at",
"sha256",
"size_bytes",
"source_portal"
],
"properties": {
"name": {
"type": "string",
"description": "The file name as the portal listed it.",
"x-demiton-requiredness": "required"
},
"sha256": {
"type": "string",
"description": "Content fingerprint of the fetched bytes; the integrity claim about a file whose bytes are not kept.",
"x-demiton-requiredness": "required"
},
"content": {
"type": "string",
"description": "One generated sentence: \"Portal document {name} fetched by estimating/portal_fetch (agent run {id}).\" The searchable prose half.",
"x-demiton-requiredness": "optional"
},
"project": {
"type": "string",
"description": "Declared `PROJECT` axis; populated only when the opportunity resolves to a project.",
"x-demiton-requiredness": "optional",
"x-demiton-reference": true
},
"fact_class": {
"type": "string",
"description": "Provenance class: an agent's metadata capture of a downloaded file, not a value the source system reported.",
"x-demiton-requiredness": "required"
},
"size_bytes": {
"type": "integer",
"description": "Size of the fetched bytes at download time.",
"x-demiton-requiredness": "required",
"x-demiton-unit": "bytes"
},
"external_id": {
"type": "string",
"description": "Identity of the fetched document: `{portal}:{document_id}`. Maps to `Fact.source_id`.",
"x-demiton-requiredness": "required"
},
"occurred_at": {
"type": "string",
"description": "The download time, stamped at write; the event key of an episodic fact and the source `FINANCIAL_PERIOD` derives from.",
"x-demiton-requiredness": "required",
"format": "date-time",
"x-demiton-type": "datetime"
},
"agent_run_id": {
"type": "number",
"description": "The `AgentRun` that performed the fetch; also the fact's `citation.origin_uri` (`demiton://agent/portal_fetch/run/{id}`).",
"x-demiton-requiredness": "optional"
},
"source_portal": {
"type": "string",
"description": "Which portal the document came from; defaults to the literal `\"portal\"` when the artifact omits it.",
"x-demiton-requiredness": "required"
},
"opportunity_ref": {
"type": "string",
"description": "The opportunity the fetch was for, from the agent goal; a reference, not a resolved entity.",
"x-demiton-requiredness": "optional"
},
"financial_period": {
"type": "string",
"description": "Declared `FINANCIAL_PERIOD` axis; resolved from `occurred_at` when the writer passes no coordinate.",
"x-demiton-requiredness": "required",
"format": "date",
"x-demiton-type": "date"
}
},
"x-demiton-register-type": "portal_document",
"x-demiton-contract-version": "2.0.2",
"x-demiton-store": "tenant",
"x-demiton-axes": [
{
"axis": "project",
"requirement": "optional",
"role": "subject"
},
{
"axis": "financial_period",
"requirement": "required",
"role": "context"
}
],
"x-demiton-measures": [],
"x-demiton-provenance": {
"standards": [
{
"code": "AS ISO 19650.1:2019 / AS ISO 19650.2:2019",
"title": "Organization and digitization of information about buildings and civil engineering works, including BIM - Information management using BIM - Part 1: Concepts and principles",
"access": "public_summary",
"region": "Australia",
"edition": "2019",
"checked_on": "2026-09-14"
},
{
"code": "AS ISO 19650.2:2019",
"title": "Information management using BIM - Part 2: Delivery phase of the assets",
"access": "public_summary",
"region": "Australia",
"edition": "2019",
"checked_on": "2026-09-14"
},
{
"code": "ISO 19650-1:2018 / ISO 19650-2:2018",
"title": "Information management using building information modelling - Part 1: Concepts and principles",
"access": "public_summary",
"region": "International",
"edition": "2018",
"checked_on": "2026-09-14"
},
{
"code": "ISO 19650-2:2018",
"title": "Information management using building information modelling - Part 2: Delivery phase of the assets",
"access": "public_summary",
"region": "International",
"edition": "2018",
"checked_on": "2026-09-14"
}
]
},
"description": "Documents downloaded from a client or tender portal, by project.",
"x-demiton-contract-url": "https://docs.demiton.io/registers/portal_document/",
"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-portal_document-v2"
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.