Dynamic Feed · Schema

OKF reliability object (v1 draft)

Optional reliability axis for an OKF concept/claim: how much to believe the claim itself, distinct from integrity (#140) and citation (#92/#94). Maturity ladder, not a mandate: the floor is `confidence` + `basis`; everything else is opt-in. Honesty rules the schema encodes as far as JSON Schema allows: (1) signed != verified, so `signals.signed` is never coupled to `verified`; (2) `verified:true` must assert at least 2 sources; (3) an UNVERIFIED band or a disputed conflict cannot be `verified`; (4) when a computed `score` is present it must be ordinally coherent with the band; (5) a disputed conflict caps the band at MEDIUM (HIGH excluded), since an open disagreement is a corroboration failure, while still letting the prevailing position carry up to MEDIUM. NOTE the band is NOT a pure re-banding of `score`: it also reflects a corroboration ceiling (a single-source reading, or a dispute, caps at MEDIUM even when its raw score is high), which is why MEDIUM/LOW carry no score-range floor.

Live DataAI AgentsMCPA2AAgent-NativeProvenanceWeatherNatural HazardsVulnerabilitiesSanctionsSpaceRoboticsx402ReceiptsNotaryAustralia

Properties

Name Type Description
confidence object Ordinal band. The interoperable surface everyone filters on.
basis object How the claim was obtained. Closed union of the live-data and authored-corpus vocabularies, ordered most to least authoritative when sources disagree: live-source > partner-attested > vendor-doc > for
score number Optional computed companion to `confidence`. Present ONLY when actually computed from `signals` (recomputable, not opaque). Absent means 'graded, not computed'.
sources integer Number of independent sources behind this reading.
verified boolean True ONLY when independently corroborated by 2+ sources (and, for live producers, fresh). Deliberately NOT coupled to signing: a signed claim can be unverified. When true, `sources` must be >= 2.
vantage object Observational vantage, a THIRD axis distinct from integrity and reliability (refined in in-toto/attestation#554): was the record made INDEPENDENTLY of the producer (`independent`), or is it the produc
conflict object First-class disagreement state, distinct from merely uncorroborated. While `disputed` is true, both contradicting positions are retained and `resolution` records what the trust ordering picked without
validity object Applicability window: WHEN/where the claim holds, a separate clock from `freshness` (measurement recency). Often version-keyed, which a wall-clock `expires` cannot express. Anonymous expiry (a value t
freshness object Measurement recency, a separate clock from `validity`. Right for a live metric; a producer fills this and may omit `validity`. NOTE: JSON Schema treats `format: date-time` as advisory by default, so c
signals object The transparent inputs `score`/`confidence` are recomputed from. `signed` is integrity only and is intentionally independent of `verified`. Conflict is NOT carried here: `conflict.disputed` is the sin
assessed_at string When the grade was last assessed, distinct from `freshness.as_of` (when measured). A recompute-per-read producer sets this to read time and omits `lifecycle.history`; a stored-ladder producer logs tra
lifecycle object Optional stored grade history for producers that persist a promotion/demotion ladder. Recompute-per-read producers omit this. Each transition records at minimum when (`at`, free string to allow versio
View JSON Schema on GitHub

JSON Schema

dynamicfeed-ai-okf-reliability-v1.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://dynamicfeed.ai/schemas/okf-reliability-v1.json",
  "title": "OKF reliability object (v1 draft)",
  "description": "Optional reliability axis for an OKF concept/claim: how much to believe the claim itself, distinct from integrity (#140) and citation (#92/#94). Maturity ladder, not a mandate: the floor is `confidence` + `basis`; everything else is opt-in. Honesty rules the schema encodes as far as JSON Schema allows: (1) signed != verified, so `signals.signed` is never coupled to `verified`; (2) `verified:true` must assert at least 2 sources; (3) an UNVERIFIED band or a disputed conflict cannot be `verified`; (4) when a computed `score` is present it must be ordinally coherent with the band; (5) a disputed conflict caps the band at MEDIUM (HIGH excluded), since an open disagreement is a corroboration failure, while still letting the prevailing position carry up to MEDIUM. NOTE the band is NOT a pure re-banding of `score`: it also reflects a corroboration ceiling (a single-source reading, or a dispute, caps at MEDIUM even when its raw score is high), which is why MEDIUM/LOW carry no score-range floor.",
  "type": "object",
  "required": ["confidence", "basis"],
  "additionalProperties": true,
  "$comment": "additionalProperties is intentionally open (maturity-ladder philosophy). Named CROSS-concept edges (supersedes / contradicts) MUST NOT appear on this object; they are typed links that live in #158/#148. This object covers only INTRA-concept reliability.",
  "properties": {
    "confidence": {
      "description": "Ordinal band. The interoperable surface everyone filters on.",
      "enum": ["HIGH", "MEDIUM", "LOW", "UNVERIFIED"]
    },
    "basis": {
      "description": "How the claim was obtained. Closed union of the live-data and authored-corpus vocabularies, ordered most to least authoritative when sources disagree: live-source > partner-attested > vendor-doc > forecast > computed > inferred. A new basis term requires cross-shape agreement and a schema version bump (unknown values fail, unlike the open additionalProperties elsewhere).",
      "enum": ["live-source", "partner-attested", "vendor-doc", "forecast", "computed", "inferred"]
    },
    "score": {
      "description": "Optional computed companion to `confidence`. Present ONLY when actually computed from `signals` (recomputable, not opaque). Absent means 'graded, not computed'.",
      "type": "number",
      "minimum": 0,
      "maximum": 1
    },
    "sources": {
      "description": "Number of independent sources behind this reading.",
      "type": "integer",
      "minimum": 0
    },
    "verified": {
      "description": "True ONLY when independently corroborated by 2+ sources (and, for live producers, fresh). Deliberately NOT coupled to signing: a signed claim can be unverified. When true, `sources` must be >= 2.",
      "type": "boolean"
    },
    "vantage": {
      "description": "Observational vantage, a THIRD axis distinct from integrity and reliability (refined in in-toto/attestation#554): was the record made INDEPENDENTLY of the producer (`independent`), or is it the producer attesting its own observation (`producer-reported`)? Corroboration is NOT independence: multiple sources can sit on the producer's side, so a signed, corroborated, fresh reading can still be producer-reported. The honesty ladder is signed != verified != observed-independently. A verifier needing independent observation should require `vantage: independent` rather than read a high score or a signature as independence.",
      "enum": ["independent", "producer-reported"]
    },
    "conflict": {
      "description": "First-class disagreement state, distinct from merely uncorroborated. While `disputed` is true, both contradicting positions are retained and `resolution` records what the trust ordering picked without discarding the loser. A resolved/collapsed conflict (disputed:false) may carry one position or none.",
      "type": "object",
      "required": ["disputed"],
      "additionalProperties": true,
      "properties": {
        "disputed": { "type": "boolean" },
        "positions": {
          "type": "array",
          "items": {
            "type": "object",
            "required": ["statement", "basis"],
            "additionalProperties": true,
            "properties": {
              "statement": { "type": "string" },
              "basis": { "$ref": "#/properties/basis" },
              "source": { "type": "string" }
            }
          }
        },
        "resolution": { "type": "string" }
      },
      "allOf": [
        {
          "$comment": "A live dispute must retain both sides and say how it was resolved; a resolved conflict need not.",
          "if": { "properties": { "disputed": { "const": true } }, "required": ["disputed"] },
          "then": {
            "required": ["positions", "resolution"],
            "properties": { "positions": { "minItems": 2 } }
          }
        }
      ]
    },
    "validity": {
      "description": "Applicability window: WHEN/where the claim holds, a separate clock from `freshness` (measurement recency). Often version-keyed, which a wall-clock `expires` cannot express. Anonymous expiry (a value that simply stops holding) lives here as `valid_until`; named supersession is a typed cross-concept edge elsewhere (#158/#148). `valid_from`/`valid_until` are free strings so a version like '5.0' or a date both fit.",
      "type": "object",
      "additionalProperties": true,
      "properties": {
        "keyed_by": { "enum": ["version", "date"] },
        "valid_from": { "type": ["string", "null"] },
        "valid_until": { "type": ["string", "null"] }
      }
    },
    "freshness": {
      "description": "Measurement recency, a separate clock from `validity`. Right for a live metric; a producer fills this and may omit `validity`. NOTE: JSON Schema treats `format: date-time` as advisory by default, so consumers should assert timestamp formats themselves.",
      "type": "object",
      "additionalProperties": true,
      "properties": {
        "as_of": { "type": "string", "format": "date-time" },
        "state": { "enum": ["fresh", "stale", "unavailable"] },
        "expires": { "type": ["string", "null"], "format": "date-time" }
      }
    },
    "signals": {
      "description": "The transparent inputs `score`/`confidence` are recomputed from. `signed` is integrity only and is intentionally independent of `verified`. Conflict is NOT carried here: `conflict.disputed` is the single source of truth (if a `conflict` key appears here it must agree with it).",
      "type": "object",
      "additionalProperties": true,
      "properties": {
        "signed": { "type": "boolean" },
        "corroborated": { "type": "boolean" },
        "fresh": { "type": "boolean" }
      }
    },
    "assessed_at": {
      "description": "When the grade was last assessed, distinct from `freshness.as_of` (when measured). A recompute-per-read producer sets this to read time and omits `lifecycle.history`; a stored-ladder producer logs transitions in `lifecycle`. (format date-time is advisory.)",
      "type": "string",
      "format": "date-time"
    },
    "lifecycle": {
      "description": "Optional stored grade history for producers that persist a promotion/demotion ladder. Recompute-per-read producers omit this. Each transition records at minimum when (`at`, free string to allow version-keyed ladders) and to which band (`confidence`).",
      "type": "object",
      "additionalProperties": true,
      "properties": {
        "stage": { "type": "string" },
        "history": {
          "type": "array",
          "items": {
            "type": "object",
            "required": ["at", "confidence"],
            "additionalProperties": true,
            "properties": {
              "at": { "type": "string" },
              "confidence": { "$ref": "#/properties/confidence" },
              "basis": { "$ref": "#/properties/basis" },
              "note": { "type": "string" }
            }
          }
        }
      }
    }
  },
  "allOf": [
    {
      "$comment": "An UNVERIFIED band cannot claim verified:true, and any computed score must be low.",
      "if": { "properties": { "confidence": { "const": "UNVERIFIED" } }, "required": ["confidence"] },
      "then": { "properties": { "verified": { "const": false }, "score": { "exclusiveMaximum": 0.5 } } }
    },
    {
      "$comment": "A disputed conflict is not independently corroborated, so it cannot be verified:true.",
      "if": {
        "properties": { "conflict": { "properties": { "disputed": { "const": true } }, "required": ["disputed"] } },
        "required": ["conflict"]
      },
      "then": { "properties": { "verified": { "const": false } } }
    },
    {
      "$comment": "Closes the corroboration lie: verified:true must assert at least 2 sources. Cannot force independence/freshness in schema; closes the numeric claim.",
      "if": { "properties": { "verified": { "const": true } }, "required": ["verified"] },
      "then": { "required": ["sources"], "properties": { "sources": { "minimum": 2 } } }
    },
    {
      "$comment": "Gross band/score incoherence guard: a HIGH band cannot ride a very low computed score. MEDIUM/LOW are intentionally unconstrained because the band also reflects a corroboration ceiling, not just the score.",
      "if": { "properties": { "confidence": { "const": "HIGH" } }, "required": ["confidence"] },
      "then": { "properties": { "score": { "minimum": 0.5 } } }
    },
    {
      "$comment": "If a redundant signals.conflict is carried, it must agree with the canonical conflict.disputed.",
      "if": {
        "properties": { "conflict": { "properties": { "disputed": { "const": true } }, "required": ["disputed"] } },
        "required": ["conflict"]
      },
      "then": { "properties": { "signals": { "properties": { "conflict": { "const": true } } } } }
    },
    {
      "$comment": "A disputed conflict caps the confidence band at MEDIUM (HIGH excluded): an open disagreement is a corroboration failure, so the claim cannot be HIGH. The prevailing position under the trust ordering may still carry up to MEDIUM, or a conservative producer may floor to LOW; either way disputed:true stays flagged. (Convergence with the multi-version-corpus shape in #158.)",
      "if": {
        "properties": { "conflict": { "properties": { "disputed": { "const": true } }, "required": ["disputed"] } },
        "required": ["conflict"]
      },
      "then": { "properties": { "confidence": { "enum": ["MEDIUM", "LOW", "UNVERIFIED"] } } }
    }
  ]
}

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/dynamicfeed-ai-okf-reliability-v1"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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.