Demiton · Schema

diary_photo_observation contract v1

What a site diary photo shows (subject, work type, quality, concerns), read from the image.

CompanyConstructionCivil EngineeringProject ManagementComplianceMCPArtificial IntelligenceOpen Contracting

Properties

Name Type Description
asset string Declared `ASSET` axis, inherited from the diary.
caption string One factual sentence describing the image; the shelf's payload and `Fact.content`.
project string Declared `PROJECT` axis, inherited from the diary.
quality string `poor`)
subject string What the photograph physically shows.
concerns array Review flags; the vision enum is `identifiable_people`, `vehicle_plate`, `third_party_branding`, `unsafe_practice_visible`, `poor_legibility`, `not_construction`.
work_type string The civil work visible, or the literal `none_visible`.
fact_class string Provenance class: this fact is a model's reading of an image, not a value the source reported.
occurred_at string Time of the parent diary event, inherited unchanged; the observation has no independent event time.
photo_index integer Zero-based ordinal of the photo within the diary, assigned in `_photo_urls` order; the other half of the identity.
legal_entity string Declared `LEGAL_ENTITY` axis, inherited from the diary.
source_image object Dimensions and container format of the fetched image, from the encoder.
observation_id string Stable identity of the per-photo observation: `{parent diary source id}:{photo ordinal}`. Maps to `Fact.source_id`/`external_id`.
financial_period string Declared `FINANCIAL_PERIOD` axis; derived from `occurred_at` when not inherited.
parent_diary_source_id string Source id of the `site_diary` fact this photo belongs to; the join back to the diary and the prefix of `observation_id`.
View JSON Schema on GitHub

JSON Schema

demiton-io-diary_photo_observation-v1-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://docs.demiton.io/registers/diary_photo_observation/v1.json",
  "title": "diary_photo_observation contract v1",
  "type": "object",
  "required": [
    "caption",
    "fact_class",
    "financial_period",
    "observation_id",
    "occurred_at",
    "parent_diary_source_id",
    "photo_index",
    "subject"
  ],
  "properties": {
    "asset": {
      "type": "string",
      "description": "Declared `ASSET` axis, inherited from the diary.",
      "x-demiton-requiredness": "optional",
      "x-demiton-reference": true
    },
    "caption": {
      "type": "string",
      "description": "One factual sentence describing the image; the shelf's payload and `Fact.content`.",
      "x-demiton-requiredness": "required"
    },
    "project": {
      "type": "string",
      "description": "Declared `PROJECT` axis, inherited from the diary.",
      "x-demiton-requiredness": "optional",
      "x-demiton-reference": true
    },
    "quality": {
      "type": "string",
      "description": "`poor`)",
      "x-demiton-requiredness": "optional",
      "x-demiton-unit": "`acceptable`\\"
    },
    "subject": {
      "type": "string",
      "description": "What the photograph physically shows.",
      "x-demiton-requiredness": "required"
    },
    "concerns": {
      "type": "array",
      "description": "Review flags; the vision enum is `identifiable_people`, `vehicle_plate`, `third_party_branding`, `unsafe_practice_visible`, `poor_legibility`, `not_construction`.",
      "x-demiton-requiredness": "optional"
    },
    "work_type": {
      "type": "string",
      "description": "The civil work visible, or the literal `none_visible`.",
      "x-demiton-requiredness": "optional"
    },
    "fact_class": {
      "type": "string",
      "description": "Provenance class: this fact is a model's reading of an image, not a value the source reported.",
      "x-demiton-requiredness": "required"
    },
    "occurred_at": {
      "type": "string",
      "description": "Time of the parent diary event, inherited unchanged; the observation has no independent event time.",
      "x-demiton-requiredness": "required",
      "format": "date-time",
      "x-demiton-type": "datetime"
    },
    "photo_index": {
      "type": "integer",
      "description": "Zero-based ordinal of the photo within the diary, assigned in `_photo_urls` order; the other half of the identity.",
      "x-demiton-requiredness": "required"
    },
    "legal_entity": {
      "type": "string",
      "description": "Declared `LEGAL_ENTITY` axis, inherited from the diary.",
      "x-demiton-requiredness": "optional",
      "x-demiton-reference": true
    },
    "source_image": {
      "type": "object",
      "description": "Dimensions and container format of the fetched image, from the encoder.",
      "x-demiton-requiredness": "optional",
      "x-demiton-unit": "px / —"
    },
    "observation_id": {
      "type": "string",
      "description": "Stable identity of the per-photo observation: `{parent diary source id}:{photo ordinal}`. Maps to `Fact.source_id`/`external_id`.",
      "x-demiton-requiredness": "required"
    },
    "financial_period": {
      "type": "string",
      "description": "Declared `FINANCIAL_PERIOD` axis; derived from `occurred_at` when not inherited.",
      "x-demiton-requiredness": "required",
      "format": "date",
      "x-demiton-type": "date"
    },
    "parent_diary_source_id": {
      "type": "string",
      "description": "Source id of the `site_diary` fact this photo belongs to; the join back to the diary and the prefix of `observation_id`.",
      "x-demiton-requiredness": "required"
    }
  },
  "x-demiton-register-type": "diary_photo_observation",
  "x-demiton-contract-version": "1.0.3",
  "x-demiton-store": "tenant",
  "x-demiton-axes": [
    {
      "axis": "project",
      "requirement": "optional",
      "role": "subject"
    },
    {
      "axis": "asset",
      "requirement": "optional",
      "role": "subject"
    },
    {
      "axis": "legal_entity",
      "requirement": "optional",
      "role": "context"
    },
    {
      "axis": "financial_period",
      "requirement": "required",
      "role": "context"
    }
  ],
  "x-demiton-measures": [],
  "x-demiton-provenance": {
    "standards": [
      {
        "code": "AS/NZS ISO 14001:2016",
        "title": "Environmental management systems",
        "access": "paywalled_secondary",
        "clause": "10.2",
        "region": "Australia",
        "edition": "2016 (adopts ISO 14001:2015)",
        "checked_on": "2026-09-14"
      },
      {
        "code": "AS/NZS ISO 45001:2018",
        "title": "Occupational health and safety management systems",
        "access": "paywalled_secondary",
        "clause": "6.1.2.1, 6.1.2.2, 8.1, 10.2",
        "region": "Australia",
        "edition": "2018 incl. Amd 1:2024",
        "checked_on": "2026-09-14"
      },
      {
        "code": "AS/NZS ISO 9001:2016",
        "title": "Quality management systems - Requirements",
        "access": "paywalled_secondary",
        "clause": "7.5, 8.7, 10.2",
        "region": "Australia",
        "edition": "2016 (adopts ISO 9001:2015)",
        "checked_on": "2026-09-14"
      },
      {
        "code": "GDA2020 / MGA2020",
        "title": "Geocentric Datum of Australia 2020",
        "access": "full_text_verified",
        "region": "Australia",
        "edition": "GDA2020",
        "checked_on": "2026-09-14"
      },
      {
        "code": "ISO 14001:2026",
        "title": "Environmental management systems",
        "access": "paywalled_secondary",
        "clause": "10.2",
        "region": "International",
        "edition": "2026 (published 2026-04-15)",
        "checked_on": "2026-09-14"
      },
      {
        "code": "ISO 45001:2018",
        "title": "Occupational health and safety management systems",
        "access": "paywalled_secondary",
        "clause": "6.1.2.1, 6.1.2.2, 8.1, 10.2",
        "region": "International",
        "edition": "2018 incl. Amd 1:2024",
        "checked_on": "2026-09-14"
      },
      {
        "code": "ISO 9001:2015",
        "title": "Quality management systems - Requirements",
        "access": "paywalled_secondary",
        "clause": "7.5, 8.7, 10.2",
        "region": "International",
        "edition": "2015 (ISO 9001:2026 successor expected; unverified)",
        "checked_on": "2026-09-14"
      },
      {
        "code": "Health and Safety at Work Act 2015 (NZ)",
        "title": "Records of notifiable events",
        "access": "public_summary",
        "region": "New Zealand",
        "edition": "as amended",
        "checked_on": "2026-09-14"
      },
      {
        "code": "29 CFR Part 1904",
        "title": "OSHA Recording and Reporting Occupational Injuries and Illnesses",
        "access": "full_text_verified",
        "clause": "1904.33",
        "region": "United States",
        "edition": "as amended",
        "checked_on": "2026-09-14"
      }
    ]
  },
  "description": "What a site diary photo shows (subject, work type, quality, concerns), read from the image.",
  "x-demiton-contract-url": "https://docs.demiton.io/registers/diary_photo_observation/",
  "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.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/demiton-io-diary_photo_observation-v1"
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.