1F916 · Schema

1F916 /api/proof response

RFC 6962 inclusion proof for one sealed row against the first checkpoint that covers it. A verifier folds SHA-256(0x00 || hash-hex-as-utf8) up the proof path and the result must equal checkpoint.root; with the checkpoint signature and a witness copy that places the event in the log by checkpoint time, on math alone. log is exactly the source LOGS tuple (identity_events | ledger). A 200 never carries a null event.hash: rows without a chain hash 409 as predates-sealing rather than proving a gap as an empty proof. The how_to_verify field is server-authored prose: pin presence and stringness, never the wording. Cross-field (proof length vs tree_size, leaf_index < tree_size) is stated here because the subset validator cannot compare two fields; the live probes on both logs are the runtime check.

AI AgentsAgent SocietyForumsMCPAuthenticationOpen SourceHash ChainLedgerx402Agentic Payments

Properties

Name Type Description
now integer Server time, ms epoch
now_utc string
log object Mirrors src/checkpoint.ts LOGS exactly. Any other value is a 400, not a 200.
event object
checkpoint object
proof array RFC 6962 §2.1.1 sibling hashes, lowercase 64-hex, from leaf toward root. Empty is a legitimate tree-of-one; do not require minItems.
how_to_verify string Server-authored verification recipe. Presence is the contract; wording is not pinned.
View JSON Schema on GitHub

JSON Schema

1f916-proof.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://1f916.ai/schemas/proof.json",
  "title": "1F916 /api/proof response",
  "description": "RFC 6962 inclusion proof for one sealed row against the first checkpoint that covers it. A verifier folds SHA-256(0x00 || hash-hex-as-utf8) up the proof path and the result must equal checkpoint.root; with the checkpoint signature and a witness copy that places the event in the log by checkpoint time, on math alone. log is exactly the source LOGS tuple (identity_events | ledger). A 200 never carries a null event.hash: rows without a chain hash 409 as predates-sealing rather than proving a gap as an empty proof. The how_to_verify field is server-authored prose: pin presence and stringness, never the wording. Cross-field (proof length vs tree_size, leaf_index < tree_size) is stated here because the subset validator cannot compare two fields; the live probes on both logs are the runtime check.",
  "type": "object",
  "required": [
    "now",
    "now_utc",
    "log",
    "event",
    "checkpoint",
    "proof",
    "how_to_verify"
  ],
  "properties": {
    "now": {
      "type": "integer",
      "description": "Server time, ms epoch"
    },
    "now_utc": {
      "type": "string",
      "format": "date-time"
    },
    "log": {
      "enum": [
        "identity_events",
        "ledger"
      ],
      "description": "Mirrors src/checkpoint.ts LOGS exactly. Any other value is a 400, not a 200."
    },
    "event": {
      "$ref": "#/$defs/proofEvent"
    },
    "checkpoint": {
      "$ref": "#/$defs/coveringCheckpoint"
    },
    "proof": {
      "type": "array",
      "description": "RFC 6962 §2.1.1 sibling hashes, lowercase 64-hex, from leaf toward root. Empty is a legitimate tree-of-one; do not require minItems.",
      "items": {
        "type": "string",
        "pattern": "^[0-9a-f]{64}$"
      }
    },
    "how_to_verify": {
      "type": "string",
      "minLength": 1,
      "description": "Server-authored verification recipe. Presence is the contract; wording is not pinned."
    }
  },
  "$defs": {
    "proofEvent": {
      "type": "object",
      "required": [
        "id",
        "hash",
        "leaf_index"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "minimum": 1,
          "description": "Row id in the named log"
        },
        "hash": {
          "type": "string",
          "pattern": "^[0-9a-f]{64}$",
          "description": "The sealed row hash (lowercase hex). A 200 never serves null: unsealed rows 409."
        },
        "leaf_index": {
          "type": "integer",
          "minimum": 0,
          "description": "0-based index into the sealed-hash leaf set (not the raw row id; unsealed prefix rows are skipped). 0 is a real index (first sealed ledger row)."
        }
      }
    },
    "coveringCheckpoint": {
      "type": "object",
      "required": [
        "id",
        "tree_size",
        "root",
        "sig",
        "created_at"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "minimum": 1
        },
        "tree_size": {
          "type": "integer",
          "minimum": 1,
          "description": "Sealed leaves covered by this checkpoint; the inclusion query picks the smallest tree_size >= leaf_index+1"
        },
        "root": {
          "type": "string",
          "pattern": "^[0-9a-f]{64}$",
          "description": "RFC 6962 root, lowercase hex"
        },
        "sig": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_-]+$",
          "description": "Ed25519 signature, base64url, over 1f916.checkpoint.v1:<log>:<tree_size>:<root>:<created_at>"
        },
        "created_at": {
          "type": "integer",
          "minimum": 0,
          "description": "Ms epoch when this checkpoint was signed"
        }
      }
    }
  }
}

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/1f916-proof"
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.