{
  "components": {
    "schemas": {
      "AuditLogEntry": {
        "additionalProperties": false,
        "description": "One frozen, hash-chained entry in the append-only audit log (\u00a77.1).\n\nInternal consistency (payload\u2194``payload_hash``, core\u2194``entry_hash``,\n``operation_type``\u2194payload) is enforced on every construction \u2014 including\nreload from stored JSON, so a forged or corrupted stored entry is rejected\n(SEC-IV-6, re-validate on load). **Cross-entry** linkage (monotonic\n``sequence``; ``previous_entry_hash`` == the prior entry's ``entry_hash``)\nis verified by :meth:`AuditLog.verify_chain`, since a single entry cannot\nsee its predecessor.",
        "properties": {
          "entry_hash": {
            "title": "Entry Hash",
            "type": "string"
          },
          "operation_type": {
            "enum": [
              "rating_recorded",
              "rating_retracted",
              "verification_committed"
            ],
            "title": "Operation Type",
            "type": "string"
          },
          "payload": {
            "discriminator": {
              "mapping": {
                "rating_recorded": "#/components/schemas/RatingRecordedPayload",
                "rating_retracted": "#/components/schemas/RatingRetractedPayload",
                "verification_committed": "#/components/schemas/VerificationCommittedPayload"
              },
              "propertyName": "operation_type"
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/RatingRecordedPayload"
              },
              {
                "$ref": "#/components/schemas/RatingRetractedPayload"
              },
              {
                "$ref": "#/components/schemas/VerificationCommittedPayload"
              }
            ],
            "title": "Payload"
          },
          "payload_hash": {
            "title": "Payload Hash",
            "type": "string"
          },
          "previous_entry_hash": {
            "title": "Previous Entry Hash",
            "type": "string"
          },
          "recorded_at": {
            "format": "date-time",
            "title": "Recorded At",
            "type": "string"
          },
          "sequence": {
            "title": "Sequence",
            "type": "integer"
          }
        },
        "required": [
          "sequence",
          "operation_type",
          "payload",
          "payload_hash",
          "previous_entry_hash",
          "recorded_at",
          "entry_hash"
        ],
        "title": "AuditLogEntry",
        "type": "object"
      },
      "ClaimVerificationRequest": {
        "additionalProperties": false,
        "description": "One financial-statement claim a tenant asks Artizar to verify.\n\nThe subject is market-scoped (D-S76-3): under ``market=\"edgar\"`` (the\ndefault \u2014 additive, so every pre-SA-3 request means what it meant) exactly\none of ``ticker`` / ``cik`` identifies the filer (D-VLS1-2), verbatim;\nunder ``market=\"tadawul\"`` exactly one of ``symbol`` / ``isin`` does. The\nclaim is \"``metric`` for ``period`` was ``claimed_value`` ``unit``\".",
        "properties": {
          "cik": {
            "anyOf": [
              {
                "maxLength": 10,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cik"
          },
          "claimed_value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
                "type": "string"
              }
            ],
            "title": "Claimed Value"
          },
          "isin": {
            "anyOf": [
              {
                "maxLength": 12,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Isin"
          },
          "market": {
            "default": "edgar",
            "enum": [
              "edgar",
              "tadawul"
            ],
            "title": "Market",
            "type": "string"
          },
          "metric": {
            "enum": [
              "revenue",
              "net_income",
              "eps",
              "total_debt",
              "shares_outstanding",
              "cash",
              "gross_profit",
              "operating_income",
              "operating_cash_flow",
              "rnd_expense",
              "total_assets",
              "stockholders_equity",
              "capex",
              "ebitda_calculated",
              "interest_expense",
              "income_tax_expense",
              "depreciation_amortization",
              "free_cash_flow_calculated"
            ],
            "title": "Metric",
            "type": "string"
          },
          "period": {
            "maxLength": 8,
            "title": "Period",
            "type": "string"
          },
          "symbol": {
            "anyOf": [
              {
                "maxLength": 4,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Symbol"
          },
          "ticker": {
            "anyOf": [
              {
                "maxLength": 10,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ticker"
          },
          "unit": {
            "maxLength": 16,
            "title": "Unit",
            "type": "string"
          }
        },
        "required": [
          "metric",
          "period",
          "claimed_value",
          "unit"
        ],
        "title": "ClaimVerificationRequest",
        "type": "object"
      },
      "CommittedVerificationRecord": {
        "additionalProperties": false,
        "description": "The stored envelope: record + commitment + the public-log anchor (VL-S6).\n\nSelf-verifying (the ``AuditLogEntry`` discipline): construction \u2014 including\nreload from the durable store \u2014 recomputes the commitment from the record and\nrejects a mismatch, so the private store and the public tree **cannot diverge**\n(the ADR D2 required check, enforced by type). ``leaf_index``/``entry_hash``\nanchor the record to its ``verification_committed`` entry for VL-S7 proofs.",
        "properties": {
          "commitment": {
            "title": "Commitment",
            "type": "string"
          },
          "entry_hash": {
            "title": "Entry Hash",
            "type": "string"
          },
          "leaf_index": {
            "minimum": 0.0,
            "title": "Leaf Index",
            "type": "integer"
          },
          "record": {
            "$ref": "#/components/schemas/TenantVerificationRecord"
          },
          "recorded_at": {
            "format": "date-time",
            "title": "Recorded At",
            "type": "string"
          }
        },
        "required": [
          "record",
          "commitment",
          "leaf_index",
          "entry_hash",
          "recorded_at"
        ],
        "title": "CommittedVerificationRecord",
        "type": "object"
      },
      "ConfidenceRating": {
        "additionalProperties": false,
        "description": "The final, deterministic rating for an AtomicClaim (\u00a710.1).",
        "properties": {
          "claim_id": {
            "format": "uuid",
            "title": "Claim Id",
            "type": "string"
          },
          "decay_class": {
            "enum": [
              "static",
              "slow",
              "standard",
              "volatile"
            ],
            "title": "Decay Class",
            "type": "string"
          },
          "evidence_verification_ids": {
            "default": [],
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "maxItems": 256,
            "title": "Evidence Verification Ids",
            "type": "array"
          },
          "fired_rule": {
            "enum": [
              "R1",
              "R2",
              "R3",
              "R4",
              "R5",
              "R7"
            ],
            "title": "Fired Rule",
            "type": "string"
          },
          "rating_id": {
            "format": "uuid",
            "title": "Rating Id",
            "type": "string"
          },
          "rationale": {
            "maxLength": 4000,
            "minLength": 1,
            "title": "Rationale",
            "type": "string"
          },
          "score": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
                "type": "string"
              }
            ],
            "ge": 0,
            "le": 1,
            "title": "Score"
          },
          "scoring_policy_version": {
            "maxLength": 64,
            "minLength": 1,
            "title": "Scoring Policy Version",
            "type": "string"
          },
          "tier": {
            "enum": [
              "green",
              "yellow",
              "red",
              "no_rating"
            ],
            "title": "Tier",
            "type": "string"
          },
          "verified_at": {
            "format": "date-time",
            "title": "Verified At",
            "type": "string"
          }
        },
        "required": [
          "rating_id",
          "claim_id",
          "tier",
          "fired_rule",
          "score",
          "rationale",
          "scoring_policy_version",
          "verified_at",
          "decay_class"
        ],
        "title": "ConfidenceRating",
        "type": "object"
      },
      "ContextNote": {
        "additionalProperties": false,
        "description": "One analyst-grade caveat riding a verdict (ADR-DP-A, D-DP-2).\n\nNotes are curated and deterministic in v1: ``code`` is the machine-readable\nkey an agent branches on, ``text`` its static-template human rendering (a\ncaveat, not a paragraph \u2014 anything longer belongs in the trust pack), and\n``origin`` stamps authorship. The single-value literal is deliberate\n(D-DP-2): no LLM authors a note in v1; the field exists so LLM-authored\nnotes could arrive later as a vocabulary widening (the FX-3\n``rationale_origin`` pattern), never a schema break.",
        "properties": {
          "code": {
            "maxLength": 64,
            "title": "Code",
            "type": "string"
          },
          "origin": {
            "const": "deterministic",
            "title": "Origin",
            "type": "string"
          },
          "text": {
            "maxLength": 280,
            "minLength": 1,
            "title": "Text",
            "type": "string"
          }
        },
        "required": [
          "code",
          "text",
          "origin"
        ],
        "title": "ContextNote",
        "type": "object"
      },
      "CosignedTreeHead": {
        "additionalProperties": false,
        "description": "An STH bundled with the witness cosignatures collected for it (\u00a77.3).",
        "properties": {
          "cosignatures": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/WitnessCosignature"
            },
            "title": "Cosignatures",
            "type": "array"
          },
          "sth": {
            "$ref": "#/components/schemas/SignedTreeHead"
          }
        },
        "required": [
          "sth"
        ],
        "title": "CosignedTreeHead",
        "type": "object"
      },
      "DocumentState": {
        "additionalProperties": false,
        "description": "Identity of the source-document state used for verification (D3).\n\nEither a SHA-256 over the raw retrieved bytes (``raw_bytes_sha256``) or a\nrepository-provided stable version id where raw bytes are unavailable\n(``repository_version_id`` \u2014 e.g. an EDGAR accession plus amendment number).",
        "properties": {
          "kind": {
            "enum": [
              "raw_bytes_sha256",
              "repository_version_id"
            ],
            "title": "Kind",
            "type": "string"
          },
          "value": {
            "maxLength": 512,
            "minLength": 1,
            "title": "Value",
            "type": "string"
          }
        },
        "required": [
          "kind",
          "value"
        ],
        "title": "DocumentState",
        "type": "object"
      },
      "ErrorBody": {
        "additionalProperties": false,
        "description": "The machine-readable error detail.\n\n``code`` is stable and ``message`` is safe to show; ``details`` lists the\nfailing input locations, never the values sent. The other fields appear\nonly when set: whether retrying can help, how long to wait, the one failing\nparameter and its allowed values, and a link to this code's documentation.",
        "properties": {
          "allowed_values": {
            "default": [],
            "description": "The closed vocabulary for param, from Artizar's registries (never caller input); present for body.metric and body.market.",
            "items": {
              "type": "string"
            },
            "title": "Allowed Values",
            "type": "array"
          },
          "code": {
            "title": "Code",
            "type": "string"
          },
          "details": {
            "default": [],
            "items": {
              "type": "string"
            },
            "title": "Details",
            "type": "array"
          },
          "doc_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "This code's entry in the public error reference.",
            "title": "Doc Url"
          },
          "message": {
            "title": "Message",
            "type": "string"
          },
          "param": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The one failing input location, as in details; present only when exactly one location failed. Never the value sent.",
            "title": "Param"
          },
          "retry_after_seconds": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "A sufficient wait before retrying, present only when the server knows one; always equal to the Retry-After header on the same response.",
            "title": "Retry After Seconds"
          },
          "retryable": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "description": "Whether the identical request can succeed later without any change by the caller. Present on every error this API emits.",
            "title": "Retryable"
          }
        },
        "required": [
          "code",
          "message"
        ],
        "title": "ErrorBody",
        "type": "object"
      },
      "ErrorEnvelope": {
        "additionalProperties": false,
        "description": "The uniform error wrapper returned for every 4xx/5xx response.",
        "properties": {
          "error": {
            "$ref": "#/components/schemas/ErrorBody"
          }
        },
        "required": [
          "error"
        ],
        "title": "ErrorEnvelope",
        "type": "object"
      },
      "InclusionProof": {
        "additionalProperties": false,
        "description": "RFC 6962 \u00a72.1.1 audit path: proof that ``leaf`` is at ``leaf_index``.\n\nSelf-contained: it carries the ``root`` it attests to, so a third party can\nre-validate it on load and run :func:`verify_inclusion` with no access to\nthe log internals. All hash fields are re-validated as SHA-256 hex on\nconstruction (SEC-IV-6).",
        "properties": {
          "audit_path": {
            "items": {
              "type": "string"
            },
            "title": "Audit Path",
            "type": "array"
          },
          "leaf": {
            "title": "Leaf",
            "type": "string"
          },
          "leaf_index": {
            "title": "Leaf Index",
            "type": "integer"
          },
          "root": {
            "title": "Root",
            "type": "string"
          },
          "tree_size": {
            "title": "Tree Size",
            "type": "integer"
          }
        },
        "required": [
          "leaf",
          "leaf_index",
          "tree_size",
          "audit_path",
          "root"
        ],
        "title": "InclusionProof",
        "type": "object"
      },
      "IssuedKeyResponse": {
        "additionalProperties": false,
        "description": "The one-time issuance response (``POST /v1/tenants/{tenant_id}/keys``, S49).\n\n``raw_key`` appears **here and nowhere else, once** (D-S49-4): it is not\npersisted (digest-only at rest), not logged, and not retrievable by any read \u2014\nthe tenant-status view returns identification-grade material only. The route\nreturns this with ``201 Created``.",
        "properties": {
          "api_version": {
            "const": "v1",
            "default": "v1",
            "title": "Api Version",
            "type": "string"
          },
          "key_id": {
            "title": "Key Id",
            "type": "string"
          },
          "last4": {
            "title": "Last4",
            "type": "string"
          },
          "prefix": {
            "title": "Prefix",
            "type": "string"
          },
          "raw_key": {
            "title": "Raw Key",
            "type": "string"
          },
          "tenant_id": {
            "title": "Tenant Id",
            "type": "string"
          }
        },
        "required": [
          "tenant_id",
          "key_id",
          "prefix",
          "last4",
          "raw_key"
        ],
        "title": "IssuedKeyResponse",
        "type": "object"
      },
      "Locator": {
        "additionalProperties": false,
        "description": "Structured location within a document; all fields optional.\n\nAn all-``None`` locator is valid \u2014 e.g. a value retrieved from a structured\nXBRL API call has no page/section/paragraph.",
        "properties": {
          "page": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Page"
          },
          "paragraph": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Paragraph"
          },
          "section": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Section"
          },
          "span": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Span"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "title": "Locator",
        "type": "object"
      },
      "Provenance": {
        "additionalProperties": false,
        "description": "The immutable provenance chain for a retrieved passage (\u00a712.1).\n\n``content_hash`` is always derived from ``verbatim_text``; supplying a\nmismatching value raises (D3). Re-fetching the source later and re-hashing\nyields a mismatch against the audit-logged digest, making tampering between\nverification and inspection detectable (\u00a712.2).",
        "properties": {
          "content_hash": {
            "title": "Content Hash",
            "type": "string"
          },
          "document_id": {
            "maxLength": 256,
            "minLength": 1,
            "title": "Document Id",
            "type": "string"
          },
          "document_repository": {
            "maxLength": 128,
            "minLength": 1,
            "title": "Document Repository",
            "type": "string"
          },
          "document_state": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DocumentState"
              },
              {
                "type": "null"
              }
            ]
          },
          "document_url_stable": {
            "title": "Document Url Stable",
            "type": "string"
          },
          "locator": {
            "$ref": "#/components/schemas/Locator"
          },
          "parent_provenance": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Provenance"
              },
              {
                "type": "null"
              }
            ]
          },
          "retrieval_method": {
            "enum": [
              "api",
              "search_index",
              "web_fetch",
              "ocr"
            ],
            "title": "Retrieval Method",
            "type": "string"
          },
          "retrieval_time": {
            "format": "date-time",
            "title": "Retrieval Time",
            "type": "string"
          },
          "source_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Id"
          },
          "transformations": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/Transformation"
            },
            "title": "Transformations",
            "type": "array"
          },
          "verbatim_text": {
            "maxLength": 50000,
            "minLength": 1,
            "title": "Verbatim Text",
            "type": "string"
          }
        },
        "required": [
          "document_id",
          "document_repository",
          "document_url_stable",
          "locator",
          "verbatim_text",
          "content_hash",
          "retrieval_time",
          "retrieval_method"
        ],
        "title": "Provenance",
        "type": "object"
      },
      "ProvisioningAck": {
        "additionalProperties": false,
        "description": "Acknowledgement for a recorded provisioning action (S49).\n\nEvery mutating provisioning action is a new append-only event\n(``ApiKeyEvent``/``QuotaGrantEvent``) \u2014 never a tier/rating/audit-log change\n(rules 1, 6, 10). The routes return this with ``201 Created``.",
        "properties": {
          "action": {
            "title": "Action",
            "type": "string"
          },
          "api_version": {
            "const": "v1",
            "default": "v1",
            "title": "Api Version",
            "type": "string"
          },
          "key_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Key Id"
          },
          "limit": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Limit"
          },
          "tenant_id": {
            "title": "Tenant Id",
            "type": "string"
          }
        },
        "required": [
          "tenant_id",
          "action"
        ],
        "title": "ProvisioningAck",
        "type": "object"
      },
      "RatingRecordedPayload": {
        "additionalProperties": false,
        "description": "The payload of a ``rating_recorded`` entry: a rating + its full evidence.\n\nCarries the deterministic :class:`~artizar.types.ConfidenceRating` the\nConfidence Scorer produced together with the :class:`~artizar.types.\nVerification` records that stand behind it \u2014 each carrying immutable\n:class:`~artizar.types.Provenance`. Recording the full evidence (never a\nlossy summary) is what makes the verification replayable from the log alone\n(CLAUDE.md rule 2; architecture-spec \u00a77.1, algorithm-spec \u00a712.2).\n\n``operation_type`` is a field on the payload (not just the entry) so the\ntype space stays discriminator-ready for ``retraction`` without a second\nsource of truth.",
        "properties": {
          "operation_type": {
            "const": "rating_recorded",
            "default": "rating_recorded",
            "title": "Operation Type",
            "type": "string"
          },
          "rating": {
            "$ref": "#/components/schemas/ConfidenceRating"
          },
          "verifications": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/Verification"
            },
            "title": "Verifications",
            "type": "array"
          }
        },
        "required": [
          "rating"
        ],
        "title": "RatingRecordedPayload",
        "type": "object"
      },
      "RatingRetractedPayload": {
        "additionalProperties": false,
        "description": "The payload of a ``rating_retracted`` entry: a supersession record (\u00a713.2).\n\nRecords *that* a prior rating was retracted, *by whom* (two distinct principals \u2014\nan Editor drafts, a Source-Tier/Editorial Principal approves, the security-spec\n\u00a75.1 two-party rule), *why* (a structured :class:`RetractionReason`), and *with*\na mandatory written explanation surfaced in per-claim history. It writes **no\ntier and no `ConfidenceRating`** \u2014 a human issues a retraction *signal*, never a\nverdict (CLAUDE.md rule 1); the deterministic Red consequence is the scorer's R2\nrule (a separate slice). The original rating entry is preserved unedited\n(rule 10); this is a *new* appended entry that cites it.\n\n``claim_id`` is resolved from the recorded rating by the writer, never supplied by\na caller (the BOLA defense, security-spec SEC-AC-1).",
        "properties": {
          "approved_by": {
            "maxLength": 256,
            "minLength": 1,
            "title": "Approved By",
            "type": "string"
          },
          "claim_id": {
            "format": "uuid",
            "title": "Claim Id",
            "type": "string"
          },
          "drafted_by": {
            "maxLength": 256,
            "minLength": 1,
            "title": "Drafted By",
            "type": "string"
          },
          "explanation": {
            "maxLength": 4000,
            "minLength": 1,
            "title": "Explanation",
            "type": "string"
          },
          "operation_type": {
            "const": "rating_retracted",
            "default": "rating_retracted",
            "title": "Operation Type",
            "type": "string"
          },
          "reason": {
            "$ref": "#/components/schemas/RetractionReason"
          },
          "retracted_rating_id": {
            "format": "uuid",
            "title": "Retracted Rating Id",
            "type": "string"
          }
        },
        "required": [
          "retracted_rating_id",
          "claim_id",
          "reason",
          "explanation",
          "drafted_by",
          "approved_by"
        ],
        "title": "RatingRetractedPayload",
        "type": "object"
      },
      "RetractionReason": {
        "description": "Why a published rating was retracted (\u00a713.2).\n\nThese mirror the algorithm-spec R2 input families (a Tier-1 primary-source\ncontradiction, confirmed material media manipulation, an editor's judgment, a\nlegal demand, or supersession by a later correction). The reason is recorded\nevidence; it does **not** set a tier \u2014 the deterministic Red consequence is the\nConfidence Scorer's R2 rule (CLAUDE.md rule 1).",
        "enum": [
          "primary_source_contradiction",
          "media_manipulation",
          "editor_judgment",
          "legal",
          "superseded_by_correction"
        ],
        "title": "RetractionReason",
        "type": "string"
      },
      "SealedVerdictRecord": {
        "additionalProperties": false,
        "description": "The self-contained, portable, signed sealed-verdict artifact (D-VLS8-1).\n\nFrozen, ``extra=\"forbid\"``, hashes/signature-shapes re-validated on load\n(SEC-IV-6). Cross-field *consistency* (does the signature actually verify?)\nis **not** asserted here \u2014 a tampered record must yield a typed\n``valid=False`` from :func:`artizar.seal.verify_sealed_verdict`, never a\nconstruction exception in the customer's deserializer. The signer, by\ncontrast, can only *produce* a consistent record: it derives every signed\nfield from a self-verifying :class:`~artizar.types.CommittedVerificationRecord`\n(see :class:`artizar.seal.VerificationSealSigner`).",
        "properties": {
          "commitment": {
            "title": "Commitment",
            "type": "string"
          },
          "commitment_version": {
            "default": "commit-v1",
            "title": "Commitment Version",
            "type": "string"
          },
          "entry_hash": {
            "title": "Entry Hash",
            "type": "string"
          },
          "leaf_index": {
            "minimum": 0.0,
            "title": "Leaf Index",
            "type": "integer"
          },
          "record_id": {
            "format": "uuid",
            "title": "Record Id",
            "type": "string"
          },
          "seal_key_id": {
            "title": "Seal Key Id",
            "type": "string"
          },
          "seal_signature": {
            "title": "Seal Signature",
            "type": "string"
          },
          "seal_version": {
            "default": "seal/v1",
            "title": "Seal Version",
            "type": "string"
          },
          "sealed_at": {
            "format": "date-time",
            "title": "Sealed At",
            "type": "string"
          },
          "tenant_id": {
            "title": "Tenant Id",
            "type": "string"
          },
          "verdict": {
            "$ref": "#/components/schemas/VerificationVerdict"
          }
        },
        "required": [
          "verdict",
          "record_id",
          "tenant_id",
          "commitment",
          "leaf_index",
          "entry_hash",
          "sealed_at",
          "seal_key_id",
          "seal_signature"
        ],
        "title": "SealedVerdictRecord",
        "type": "object"
      },
      "SignedTreeHead": {
        "additionalProperties": false,
        "description": "RFC 6962 \u00a72.2 signed tree head: the operator's signature over (size, root).\n\nFrozen, ``extra=\"forbid\"``; all hashes/signatures re-validated on load\n(SEC-IV-6). The signature is verified by :func:`verify_tree_head` with the\noperator's **public** key.",
        "properties": {
          "key_id": {
            "title": "Key Id",
            "type": "string"
          },
          "log_version": {
            "default": "audit-log/v1",
            "title": "Log Version",
            "type": "string"
          },
          "merkle_version": {
            "default": "merkle-log/v1",
            "title": "Merkle Version",
            "type": "string"
          },
          "root_hash": {
            "title": "Root Hash",
            "type": "string"
          },
          "signature": {
            "title": "Signature",
            "type": "string"
          },
          "signed_at": {
            "format": "date-time",
            "title": "Signed At",
            "type": "string"
          },
          "sth_version": {
            "default": "sth/v1",
            "title": "Sth Version",
            "type": "string"
          },
          "tree_size": {
            "title": "Tree Size",
            "type": "integer"
          }
        },
        "required": [
          "tree_size",
          "root_hash",
          "signed_at",
          "key_id",
          "signature"
        ],
        "title": "SignedTreeHead",
        "type": "object"
      },
      "Span": {
        "additionalProperties": false,
        "description": "A character range within a document.",
        "properties": {
          "end_char": {
            "minimum": 0.0,
            "title": "End Char",
            "type": "integer"
          },
          "start_char": {
            "minimum": 0.0,
            "title": "Start Char",
            "type": "integer"
          }
        },
        "required": [
          "start_char",
          "end_char"
        ],
        "title": "Span",
        "type": "object"
      },
      "TenantVerificationRecord": {
        "additionalProperties": false,
        "description": "The canonical, blinded, tenant-private content one commitment binds (ADR D2).\n\nFrozen and ``extra=\"forbid\"`` (the ``ArtizarModel`` invariants) \u2014 the ``commit-v1``\ncanonical form is exactly this field set, pinned by a schema-snapshot test so it\ncannot drift silently. ``record_id`` is the server-generated id the VL-S7\n``GET /v1/verifications/{id}`` surface will key on.",
        "properties": {
          "blinding": {
            "title": "Blinding",
            "type": "string"
          },
          "commitment_version": {
            "const": "commit-v1",
            "default": "commit-v1",
            "title": "Commitment Version",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "rating": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ConfidenceRating"
              },
              {
                "type": "null"
              }
            ]
          },
          "record_id": {
            "format": "uuid",
            "title": "Record Id",
            "type": "string"
          },
          "tenant_id": {
            "title": "Tenant Id",
            "type": "string"
          },
          "verdict": {
            "$ref": "#/components/schemas/VerificationVerdict"
          },
          "verifications": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/Verification"
            },
            "maxItems": 16,
            "title": "Verifications",
            "type": "array"
          }
        },
        "required": [
          "record_id",
          "tenant_id",
          "verdict",
          "rating",
          "blinding",
          "created_at"
        ],
        "title": "TenantVerificationRecord",
        "type": "object"
      },
      "TimestampToken": {
        "additionalProperties": false,
        "description": "One RFC 3161 time-stamp token over a cosigned tree head's signed input.\n\n``tsr_der_b64`` is the time-stamping authority's DER ``TimeStampResp``; ``tsa_id`` names\nits entry in the published ``artizar-tsa.json`` (the certificates it verifies against);\n``recipe`` names the exact bytes stamped; ``gen_time`` echoes the token's own time.",
        "properties": {
          "gen_time": {
            "format": "date-time",
            "title": "Gen Time",
            "type": "string"
          },
          "recipe": {
            "const": "sth-signed-input-sha256/v1",
            "default": "sth-signed-input-sha256/v1",
            "title": "Recipe",
            "type": "string"
          },
          "tsa_id": {
            "maxLength": 32,
            "minLength": 1,
            "pattern": "^[a-z0-9-]{1,32}$",
            "title": "Tsa Id",
            "type": "string"
          },
          "tsr_der_b64": {
            "maxLength": 22000,
            "minLength": 4,
            "title": "Tsr Der B64",
            "type": "string"
          }
        },
        "required": [
          "tsa_id",
          "gen_time",
          "tsr_der_b64"
        ],
        "title": "TimestampToken",
        "type": "object"
      },
      "Transformation": {
        "additionalProperties": false,
        "description": "A single recorded modification of retrieved content (D2).\n\n``params`` is a small flat map of scalar settings so the step is replayable\nwithout over-specifying a structure before any transformer exists.",
        "properties": {
          "kind": {
            "enum": [
              "normalize",
              "chunk",
              "translate",
              "ocr",
              "derive"
            ],
            "title": "Kind",
            "type": "string"
          },
          "params": {
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "number"
                },
                {
                  "type": "boolean"
                }
              ]
            },
            "maxProperties": 16,
            "title": "Params",
            "type": "object"
          }
        },
        "required": [
          "kind"
        ],
        "title": "Transformation",
        "type": "object"
      },
      "UsageResponse": {
        "additionalProperties": false,
        "description": "A tenant's own current-period usage picture (``GET /v1/usage``, S75).\n\n``limit``/``remaining`` are ``None`` when no quota grant exists \u2014 the\ndeny-by-default state stated honestly, never an implied unlimited plan.\nDerived from the charging metering store at request time; nothing stored.",
        "properties": {
          "api_version": {
            "const": "v1",
            "default": "v1",
            "title": "Api Version",
            "type": "string"
          },
          "limit": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Limit"
          },
          "period": {
            "title": "Period",
            "type": "string"
          },
          "remaining": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Remaining"
          },
          "tenant_id": {
            "title": "Tenant Id",
            "type": "string"
          },
          "used": {
            "title": "Used",
            "type": "integer"
          }
        },
        "required": [
          "tenant_id",
          "period",
          "limit",
          "used",
          "remaining"
        ],
        "title": "UsageResponse",
        "type": "object"
      },
      "Verification": {
        "additionalProperties": false,
        "description": "A single agent's structured output about a single AtomicClaim.",
        "properties": {
          "agent_id": {
            "maxLength": 128,
            "minLength": 1,
            "title": "Agent Id",
            "type": "string"
          },
          "agent_role": {
            "enum": [
              "claim_extractor",
              "source_tier_classifier",
              "cross_reference",
              "contradiction",
              "primary_source_verifier",
              "confidence_scorer"
            ],
            "title": "Agent Role",
            "type": "string"
          },
          "claim_id": {
            "format": "uuid",
            "title": "Claim Id",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "evidence": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Provenance"
              },
              {
                "type": "null"
              }
            ]
          },
          "input_hash": {
            "title": "Input Hash",
            "type": "string"
          },
          "model_provider": {
            "maxLength": 64,
            "minLength": 1,
            "title": "Model Provider",
            "type": "string"
          },
          "model_version": {
            "maxLength": 128,
            "minLength": 1,
            "title": "Model Version",
            "type": "string"
          },
          "outcome": {
            "enum": [
              "confirms",
              "contradicts",
              "neutral",
              "no_evidence"
            ],
            "title": "Outcome",
            "type": "string"
          },
          "output_hash": {
            "title": "Output Hash",
            "type": "string"
          },
          "prompt_template_hash": {
            "title": "Prompt Template Hash",
            "type": "string"
          },
          "source_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Id"
          },
          "verification_id": {
            "format": "uuid",
            "title": "Verification Id",
            "type": "string"
          }
        },
        "required": [
          "verification_id",
          "claim_id",
          "agent_role",
          "agent_id",
          "outcome",
          "model_provider",
          "model_version",
          "prompt_template_hash",
          "input_hash",
          "output_hash",
          "created_at"
        ],
        "title": "Verification",
        "type": "object"
      },
      "VerificationCommittedPayload": {
        "additionalProperties": false,
        "description": "A ``verification_committed`` payload: a hash commitment, nothing else (VL-S6, ADR D2).\n\nThe tenant-privacy half of the \u00a712.2 model realized in code: a tenant\nverification enters the **same** global log/tree/witnessing as everything else,\nbut the world-public entry structurally contains **only** the commitment \u2014\n``payload_hash`` over the canonical, blinded\n:class:`~artizar.types.TenantVerificationRecord` \u2014 plus its format version.\nThere is no tenant id, claim id, metric, value, or verdict field to leak\n(privacy by unconstructibility; ``extra=\"forbid\"`` rejects smuggling one in).\nThe 256-bit blinding inside the record makes the commitment non-brute-forceable\neven for a fully-guessable claim. The full record lives in the tenant-private\nstore (`artizar.storage.verification_records`), which the public API never\nimports.\n\n``claim_id`` is deliberately ``None``: a commitment entry never matches the\npublic per-claim ``history()`` filter, so holding a leaked claim UUID confirms\nnothing against the public log (ratified at plan review).",
        "properties": {
          "commitment": {
            "title": "Commitment",
            "type": "string"
          },
          "commitment_version": {
            "const": "commit-v1",
            "default": "commit-v1",
            "title": "Commitment Version",
            "type": "string"
          },
          "operation_type": {
            "const": "verification_committed",
            "default": "verification_committed",
            "title": "Operation Type",
            "type": "string"
          }
        },
        "required": [
          "commitment"
        ],
        "title": "VerificationCommittedPayload",
        "type": "object"
      },
      "VerificationProofResponse": {
        "additionalProperties": false,
        "description": "A record's witnessed inclusion proof (``GET /v1/verifications/{id}/proof``).\n\nMirrors :class:`ClaimHistoryItem`: the world-public commitment ``entry``, its\n``inclusion_proof`` at the ``checkpoint``'s tree size (one served-state\nsnapshot), and the cosigned ``checkpoint`` itself \u2014 everything\n:func:`~artizar.audit.monitor.verify_record_against_checkpoint` needs, offline.\nCarries no tenant content beyond what the entry already publishes (a blinded\nhash).",
        "properties": {
          "api_version": {
            "const": "v1",
            "default": "v1",
            "title": "Api Version",
            "type": "string"
          },
          "checkpoint": {
            "$ref": "#/components/schemas/CosignedTreeHead"
          },
          "entry": {
            "$ref": "#/components/schemas/AuditLogEntry"
          },
          "inclusion_proof": {
            "$ref": "#/components/schemas/InclusionProof"
          },
          "timestamp_tokens": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/TimestampToken"
            },
            "maxItems": 8,
            "title": "Timestamp Tokens",
            "type": "array"
          }
        },
        "required": [
          "checkpoint",
          "entry",
          "inclusion_proof"
        ],
        "title": "VerificationProofResponse",
        "type": "object"
      },
      "VerificationRecordResponse": {
        "additionalProperties": false,
        "description": "A tenant's own committed record (``GET /v1/verifications/{id}``, VL-S7).\n\nThe **full** :class:`~artizar.types.CommittedVerificationRecord` envelope \u2014\ncanonical record (blinding included), commitment, and public-log anchor \u2014 i.e.\nthe complete selective-disclosure package: whoever holds this response can\nrecompute ``commitment == payload_hash(record)`` and verify the leaf against the\nwitnessed head offline. Served only to the record's own tenant (BOLA \u2014 a\nnon-owned id is the same ``404`` as an unknown one).",
        "properties": {
          "api_version": {
            "const": "v1",
            "default": "v1",
            "title": "Api Version",
            "type": "string"
          },
          "record": {
            "$ref": "#/components/schemas/CommittedVerificationRecord"
          }
        },
        "required": [
          "record"
        ],
        "title": "VerificationRecordResponse",
        "type": "object"
      },
      "VerificationSealedResponse": {
        "additionalProperties": false,
        "description": "The stored sealed verdict (``GET /v1/verifications/{record_id}/sealed``, FX-2).\n\nThe SAME portable artifact the original ``POST`` returned, recovered from\nthe durable sealed-record store byte-identically (review finding 9) \u2014 for\nthe customer who lost the response. Deliberately NOT re-verified against\nthe current seal key on this path: after a seal-key rotation the\nhistorical artifact must remain retrievable; its verifiability is the\nholder's offline check against the published key set.",
        "properties": {
          "api_version": {
            "const": "v1",
            "default": "v1",
            "title": "Api Version",
            "type": "string"
          },
          "sealed": {
            "$ref": "#/components/schemas/SealedVerdictRecord"
          }
        },
        "required": [
          "sealed"
        ],
        "title": "VerificationSealedResponse",
        "type": "object"
      },
      "VerificationSubmissionResponse": {
        "additionalProperties": false,
        "description": "A sealed verdict (``POST /v1/verifications``, VL-S8 \u2014 the \u00a75.2 write half).\n\nWraps the **full** :class:`~artizar.seal.SealedVerdictRecord` \u2014 the portable\nartifact binding the verdict to its tenant, record id, commitment, and leaf\nposition under the operator's seal key (D-VLS8-1). The holder verifies it\noffline with :func:`~artizar.seal.verify_sealed_verdict`; the witnessed\ninclusion proof for ``sealed.leaf_index`` arrives via\n``GET /v1/verifications/{record_id}/proof`` after the next cosigning (the\ndeliberate no-proof-in-the-seal asymmetry \u2014 see :mod:`artizar.seal.record`).",
        "properties": {
          "api_version": {
            "const": "v1",
            "default": "v1",
            "title": "Api Version",
            "type": "string"
          },
          "proof_expected_after_seconds": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Seconds after sealed.sealed_at within which a witnessed inclusion proof for this record is expected at GET /v1/verifications/{record_id}/proof; null when this node publishes no timed checkpoints.",
            "title": "Proof Expected After Seconds"
          },
          "sealed": {
            "$ref": "#/components/schemas/SealedVerdictRecord"
          }
        },
        "required": [
          "sealed"
        ],
        "title": "VerificationSubmissionResponse",
        "type": "object"
      },
      "VerificationVerdict": {
        "additionalProperties": false,
        "description": "The verdict for one request: tier + evidence + stamps, never \"true\".\n\nThe subject echo/``metric``/``period``/claimed value echo the *resolved*\nrequest so the verdict is self-describing and replayable (ADR D6) without\na join back to Artizar. ``evidence`` carries full ``Provenance`` \u2014 the\nstable primary-source URL and content hash the customer re-checks (rule 2).\n\nThe subject echo is market-scoped since ``verdict-v3`` (SA-3, D-S76-3):\n``subject_market``/``subject_issuer_id`` carry the resolved pair, and\n``subject_cik`` is RETAINED, populated iff the market is ``edgar`` (where\nit equals ``subject_issuer_id``) \u2014 existing consumers keep their field.\nAll three are absent/None only for a ``not_verifiable`` refusal issued\nbefore the subject could be resolved (e.g. an unknown ticker, or a market\nwith no retrieval arm yet). Serialization deliberately **omits** the two\nv3 fields when unset (D-S78-1): a v2-era sealed record must re-serialize\nbyte-identically or every historical seal/commitment would stop verifying\n(both are re-derived over the re-parsed model). ``subject_cik`` keeps\nunconditional presence \u2014 v2 canonical bytes include its ``null``.\n\n``verdict-v4`` (DP-1, ADR-DP-A) adds ``context_notes`` (\u22648 curated\ndeterministic caveats) + ``notes_version`` (the table that derived them)\nunder the same omit-when-unset rule. DORMANT until DP-2 ships the notes\ntable: nothing derives a note, both fields hold their empty defaults, and\na fresh verdict's serialized shape differs from v3 only in the stamp.",
        "properties": {
          "binding_version": {
            "maxLength": 32,
            "title": "Binding Version",
            "type": "string"
          },
          "claimed_unit": {
            "maxLength": 16,
            "title": "Claimed Unit",
            "type": "string"
          },
          "claimed_value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
                "type": "string"
              }
            ],
            "title": "Claimed Value"
          },
          "context_notes": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ContextNote"
            },
            "maxItems": 8,
            "title": "Context Notes",
            "type": "array"
          },
          "evidence": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/Provenance"
            },
            "maxItems": 16,
            "title": "Evidence",
            "type": "array"
          },
          "lexicon_version": {
            "maxLength": 32,
            "title": "Lexicon Version",
            "type": "string"
          },
          "metric": {
            "enum": [
              "revenue",
              "net_income",
              "eps",
              "total_debt",
              "shares_outstanding",
              "cash",
              "gross_profit",
              "operating_income",
              "operating_cash_flow",
              "rnd_expense",
              "total_assets",
              "stockholders_equity",
              "capex",
              "ebitda_calculated",
              "interest_expense",
              "income_tax_expense",
              "depreciation_amortization",
              "free_cash_flow_calculated"
            ],
            "title": "Metric",
            "type": "string"
          },
          "notes_version": {
            "anyOf": [
              {
                "maxLength": 32,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Notes Version"
          },
          "outcome": {
            "enum": [
              "confirmed",
              "contradicted",
              "no_evidence",
              "not_verifiable"
            ],
            "title": "Outcome",
            "type": "string"
          },
          "period": {
            "maxLength": 8,
            "title": "Period",
            "type": "string"
          },
          "rationale": {
            "maxLength": 4000,
            "minLength": 1,
            "title": "Rationale",
            "type": "string"
          },
          "refusal_reason": {
            "anyOf": [
              {
                "enum": [
                  "unresolved_subject",
                  "unmapped_metric",
                  "quarterly_period_v1",
                  "unsupported_value",
                  "unsupported_market",
                  "ambiguous_fiscal_label"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Refusal Reason"
          },
          "scoring_policy_version": {
            "maxLength": 64,
            "title": "Scoring Policy Version",
            "type": "string"
          },
          "subject_cik": {
            "anyOf": [
              {
                "maxLength": 10,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subject Cik"
          },
          "subject_issuer_id": {
            "anyOf": [
              {
                "maxLength": 20,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subject Issuer Id"
          },
          "subject_market": {
            "anyOf": [
              {
                "enum": [
                  "edgar",
                  "tadawul"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Subject Market"
          },
          "tier": {
            "enum": [
              "green",
              "yellow",
              "red",
              "no_rating"
            ],
            "title": "Tier",
            "type": "string"
          },
          "verdict_id": {
            "format": "uuid",
            "title": "Verdict Id",
            "type": "string"
          },
          "verdict_schema_version": {
            "maxLength": 32,
            "title": "Verdict Schema Version",
            "type": "string"
          },
          "verified_at": {
            "format": "date-time",
            "title": "Verified At",
            "type": "string"
          },
          "verified_unit": {
            "anyOf": [
              {
                "maxLength": 16,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Verified Unit"
          },
          "verified_value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Verified Value"
          }
        },
        "required": [
          "verdict_id",
          "metric",
          "period",
          "claimed_value",
          "claimed_unit",
          "outcome",
          "tier",
          "rationale",
          "verified_at",
          "verdict_schema_version",
          "binding_version",
          "scoring_policy_version",
          "lexicon_version"
        ],
        "title": "VerificationVerdict",
        "type": "object"
      },
      "WitnessCosignature": {
        "additionalProperties": false,
        "description": "One independent witness's signature attesting it observed a given STH.",
        "properties": {
          "cosigned_at": {
            "format": "date-time",
            "title": "Cosigned At",
            "type": "string"
          },
          "signature": {
            "title": "Signature",
            "type": "string"
          },
          "witness_id": {
            "title": "Witness Id",
            "type": "string"
          }
        },
        "required": [
          "witness_id",
          "cosigned_at",
          "signature"
        ],
        "title": "WitnessCosignature",
        "type": "object"
      }
    },
    "securitySchemes": {
      "tenantApiKey": {
        "description": "Tenant API key (artz_...), delivered via the design-partner onboarding bundle. Every failure is a generic 401.",
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "description": "The tenant-facing verification surface: submit a claim, read your own records, proofs, and sealed verdicts, read your own usage, and rotate your own keys. This reference deliberately covers only the authenticated tenant surface; the anonymous transparency-log read routes and all operational surfaces are documented in the trust pack, not enumerated here. Authentication: every route requires a tenant API key (`Authorization: Bearer artz_...`); all failures are a generic 401. Verdicts are verifiable, not infallible: a green tier is a statement about the pinned filing under a published rule, never a truth claim.",
    "title": "Artizar Verification API",
    "version": "v1"
  },
  "openapi": "3.1.0",
  "paths": {
    "/v1/keys/rotations": {
      "post": {
        "description": "Mint a successor key for your own tenant (the raw key is shown **once**).\n\nThe response body is the only place the raw key ever appears (the D-S49-4 discipline):\ndigest-only at rest, never logged, never retrievable \u2014 hand it to your secret manager\nimmediately. The presenting key stays active during the overlap; retire it with\n``POST /v1/keys/{key_id}/revocations`` once the successor is deployed. A rotation while\ntwo keys are already active is refused (``409 rotation_blocked``, D-S70-3).\n\nExample::\n\n    curl -X POST https://api.artizar.example/v1/keys/rotations              -H 'authorization: Bearer artz_<key-id>_<secret>'",
        "operationId": "rotate_key_v1_keys_rotations_post",
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssuedKeyResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`unauthenticated`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "unauthenticated",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-unauthenticated",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`forbidden`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "forbidden",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-forbidden",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`rotation_blocked`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "rotation_blocked",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-rotation_blocked",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`payload_too_large`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "payload_too_large",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-payload_too_large",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`rate_limited`: retryable; wait retry_after_seconds, which equals Retry-After.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying; equals the body's retry_after_seconds.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "x-artizar-error-codes": [
              {
                "code": "rate_limited",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-rate_limited",
                "retry": "always",
                "retry_after": "rate_limit"
              }
            ]
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`internal_error`: retryable only for an idempotent request (a GET, or a POST resent with its original Idempotency-Key).",
            "x-artizar-error-codes": [
              {
                "code": "internal_error",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-internal_error",
                "retry": "idempotent_only",
                "retry_after": "none"
              }
            ]
          }
        },
        "summary": "Rotate Key",
        "tags": [
          "tenant-keys"
        ]
      }
    },
    "/v1/keys/{key_id}/revocations": {
      "post": {
        "description": "Retire one of your own tenant's keys (append-only revoke event).\n\nAn unknown key **or another tenant's key** is the same ``404`` (no existence oracle); a\nkey already revoked is ``409``; your **last** active key is refused (``409\nlast_active_key`` \u2014 rotate first, D-S70-4). Revocation is immediately authoritative: the\nrevoked key's next request is a ``401``. Revoking the key you are presenting (with the\nsuccessor still active) is allowed \u2014 it just ends your own session's credential.",
        "operationId": "revoke_own_key_v1_keys__key_id__revocations_post",
        "parameters": [
          {
            "in": "path",
            "name": "key_id",
            "required": true,
            "schema": {
              "maxLength": 16,
              "minLength": 16,
              "pattern": "^[0-9a-f]{16}$",
              "title": "Key Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProvisioningAck"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`unauthenticated`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "unauthenticated",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-unauthenticated",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`forbidden`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "forbidden",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-forbidden",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`not_found`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "not_found",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-not_found",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`key_already_revoked`: not retryable. `last_active_key`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "key_already_revoked",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-key_already_revoked",
                "retry": "never",
                "retry_after": "none"
              },
              {
                "code": "last_active_key",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-last_active_key",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`payload_too_large`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "payload_too_large",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-payload_too_large",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`invalid_request`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "invalid_request",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-invalid_request",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`rate_limited`: retryable; wait retry_after_seconds, which equals Retry-After.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying; equals the body's retry_after_seconds.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "x-artizar-error-codes": [
              {
                "code": "rate_limited",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-rate_limited",
                "retry": "always",
                "retry_after": "rate_limit"
              }
            ]
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`internal_error`: retryable only for an idempotent request (a GET, or a POST resent with its original Idempotency-Key).",
            "x-artizar-error-codes": [
              {
                "code": "internal_error",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-internal_error",
                "retry": "idempotent_only",
                "retry_after": "none"
              }
            ]
          }
        },
        "summary": "Revoke Own Key",
        "tags": [
          "tenant-keys"
        ]
      }
    },
    "/v1/usage": {
      "get": {
        "description": "Your own tenant's current-period quota, consumption, and remaining budget.\n\nExample::\n\n    curl https://api.artizar.example/v1/usage              -H 'authorization: Bearer artz_<key-id>_<secret>'",
        "operationId": "get_usage_v1_usage_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsageResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`unauthenticated`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "unauthenticated",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-unauthenticated",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`forbidden`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "forbidden",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-forbidden",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`rate_limited`: retryable; wait retry_after_seconds, which equals Retry-After.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying; equals the body's retry_after_seconds.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "x-artizar-error-codes": [
              {
                "code": "rate_limited",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-rate_limited",
                "retry": "always",
                "retry_after": "rate_limit"
              }
            ]
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`internal_error`: retryable only for an idempotent request (a GET, or a POST resent with its original Idempotency-Key).",
            "x-artizar-error-codes": [
              {
                "code": "internal_error",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-internal_error",
                "retry": "idempotent_only",
                "retry_after": "none"
              }
            ]
          }
        },
        "summary": "Get Usage",
        "tags": [
          "tenant-usage"
        ]
      }
    },
    "/v1/verifications": {
      "post": {
        "description": "Verify one claim and return the sealed verdict (``201`` \u2014 a record was created).\n\nThe body is the VL-S1 :class:`~artizar.types.ClaimVerificationRequest`\n(``extra=\"forbid\"``: a smuggled ``tier``/``outcome``/anything is a ``422``,\nnever read). Identity and tenancy come only from the resolved principal.\nEvery produced verdict \u2014 refusals included \u2014 is charged and committed;\nthe record is immediately retrievable at ``GET /v1/verifications/{id}``.\nWithout an ``Idempotency-Key``, resubmission is deliberately NOT idempotent\n(verdict replay OFF, the default): a fresh verification, charge, and\nunlinkably fresh commitment (D-VLS8-7). With one (VL-S11), a retry carrying\nthe same key and request within 24 hours returns the original sealed verdict\nas a ``200`` with ``Idempotent-Replayed: true``: no charge, record, or log\nentry (D-VLS11-2); the same key with a different request is a\n``409 idempotency_key_reused``. With ``VERDICT_REPLAY_ENABLED`` a repeat\nclaim within the evidence epoch returns the prior sealed record\n**verbatim** as a ``200`` (nothing was created) after the same full-price\ncharge (D-S56-1/D-S55-6).",
        "operationId": "submit_verification_v1_verifications_post",
        "parameters": [
          {
            "description": "Optional. A unique key per logical request (a UUID is ideal): a retry carrying it within 24 hours returns the original sealed verdict, uncharged.",
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional. A unique key per logical request (a UUID is ideal): a retry carrying it within 24 hours returns the original sealed verdict, uncharged.",
              "maxLength": 255,
              "minLength": 1,
              "pattern": "^[\\x21-\\x7E]+$",
              "title": "Idempotency-Key"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClaimVerificationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VerificationSubmissionResponse"
                }
              }
            },
            "description": "Served, not created: a keyed retry inside its window (with `Idempotent-Replayed: true`, uncharged) or an opt-in claim-hash replay.",
            "headers": {
              "Idempotent-Replayed": {
                "description": "`true` when an Idempotency-Key retry served its original seal.",
                "schema": {
                  "enum": [
                    "true"
                  ],
                  "type": "string"
                }
              }
            }
          },
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VerificationSubmissionResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`unauthenticated`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "unauthenticated",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-unauthenticated",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`forbidden`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "forbidden",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-forbidden",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`idempotency_key_reused`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "idempotency_key_reused",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-idempotency_key_reused",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`payload_too_large`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "payload_too_large",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-payload_too_large",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`invalid_request`: not retryable. `unknown_metric`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "invalid_request",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-invalid_request",
                "retry": "never",
                "retry_after": "none"
              },
              {
                "code": "unknown_metric",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-unknown_metric",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`rate_limited`: retryable; wait retry_after_seconds, which equals Retry-After. `quota_exhausted`: not retryable.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying; equals the body's retry_after_seconds.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "x-artizar-error-codes": [
              {
                "code": "rate_limited",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-rate_limited",
                "retry": "always",
                "retry_after": "rate_limit"
              },
              {
                "code": "quota_exhausted",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-quota_exhausted",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`internal_error`: retryable only for an idempotent request (a GET, or a POST resent with its original Idempotency-Key).",
            "x-artizar-error-codes": [
              {
                "code": "internal_error",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-internal_error",
                "retry": "idempotent_only",
                "retry_after": "none"
              }
            ]
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`verification_unavailable`: retryable.",
            "x-artizar-error-codes": [
              {
                "code": "verification_unavailable",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-verification_unavailable",
                "retry": "always",
                "retry_after": "none"
              }
            ]
          }
        },
        "summary": "Submit Verification",
        "tags": [
          "verifications"
        ]
      }
    },
    "/v1/verifications/{record_id}": {
      "get": {
        "description": "Return the tenant's own committed record \u2014 the full disclosure package.\n\n``record_id`` is parsed as a UUID (an injection/oversized string is a ``422``,\nnever reflected). The served envelope self-verified on load (VL-S6), so the\ncaller can recompute ``commitment == payload_hash(record)`` immediately.",
        "operationId": "get_verification_record_v1_verifications__record_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "record_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Record Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VerificationRecordResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`unauthenticated`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "unauthenticated",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-unauthenticated",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`forbidden`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "forbidden",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-forbidden",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`not_found`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "not_found",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-not_found",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`invalid_request`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "invalid_request",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-invalid_request",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`rate_limited`: retryable; wait retry_after_seconds, which equals Retry-After.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying; equals the body's retry_after_seconds.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "x-artizar-error-codes": [
              {
                "code": "rate_limited",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-rate_limited",
                "retry": "always",
                "retry_after": "rate_limit"
              }
            ]
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`internal_error`: retryable only for an idempotent request (a GET, or a POST resent with its original Idempotency-Key).",
            "x-artizar-error-codes": [
              {
                "code": "internal_error",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-internal_error",
                "retry": "idempotent_only",
                "retry_after": "none"
              }
            ]
          }
        },
        "summary": "Get Verification Record",
        "tags": [
          "verifications"
        ]
      }
    },
    "/v1/verifications/{record_id}/proof": {
      "get": {
        "description": "Return the record's inclusion proof against the latest witnessed head.\n\nOwnership resolves first (the same ``404`` as unknown); the proof triple binds to\none served-state snapshot, so ``verify_record_against_checkpoint`` accepts it\nas-is. A record committed after the latest cosigned checkpoint is\n``404 proof_not_available`` until the next cosigning (the record itself is\nalready served by the sibling route).\n\nWhen the checkpoint has been time-stamped, the response adds ``timestamp_tokens``:\neach an RFC 3161 token from an independent time-stamping authority over the\ncheckpoint's signed input, verified before it is served. The field is absent until\nthe checkpoint has been time-stamped.",
        "operationId": "get_verification_proof_v1_verifications__record_id__proof_get",
        "parameters": [
          {
            "in": "path",
            "name": "record_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Record Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VerificationProofResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`unauthenticated`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "unauthenticated",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-unauthenticated",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`forbidden`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "forbidden",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-forbidden",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`not_found`: not retryable. `proof_not_available`: retryable; wait retry_after_seconds, which equals Retry-After, when the node states it. `no_checkpoint`: retryable; wait retry_after_seconds, which equals Retry-After, when the node states it.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying; equals the body's retry_after_seconds.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "x-artizar-error-codes": [
              {
                "code": "not_found",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-not_found",
                "retry": "never",
                "retry_after": "none"
              },
              {
                "code": "proof_not_available",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-proof_not_available",
                "retry": "always",
                "retry_after": "head_window"
              },
              {
                "code": "no_checkpoint",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-no_checkpoint",
                "retry": "always",
                "retry_after": "head_window"
              }
            ]
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`invalid_request`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "invalid_request",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-invalid_request",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`rate_limited`: retryable; wait retry_after_seconds, which equals Retry-After.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying; equals the body's retry_after_seconds.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "x-artizar-error-codes": [
              {
                "code": "rate_limited",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-rate_limited",
                "retry": "always",
                "retry_after": "rate_limit"
              }
            ]
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`internal_error`: retryable only for an idempotent request (a GET, or a POST resent with its original Idempotency-Key).",
            "x-artizar-error-codes": [
              {
                "code": "internal_error",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-internal_error",
                "retry": "idempotent_only",
                "retry_after": "none"
              }
            ]
          }
        },
        "summary": "Get Verification Proof",
        "tags": [
          "verifications"
        ]
      }
    },
    "/v1/verifications/{record_id}/sealed": {
      "get": {
        "description": "Return the stored sealed verdict \u2014 the artifact the original POST carried (FX-2).\n\nFor the customer who lost the POST response: the durable sealed-record store\nrecovers it byte-identically (review finding 9); refusal outcomes included\n(D-VLS8-3). Ownership resolves first (the same byte-identical ``404`` as\nunknown, SEC-AC-1); an owned record with no recoverable seal \u2014 committed\nbefore the store existed, or a row the store's integrity check refused \u2014 is\n``404 seal_not_available`` (the ``proof_not_available`` taxonomy shape).\nDeliberately not re-verified against the current seal key: rotation must\nnot vanish history; verification is the holder's offline check against the\npublished key set.",
        "operationId": "get_verification_sealed_v1_verifications__record_id__sealed_get",
        "parameters": [
          {
            "in": "path",
            "name": "record_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Record Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VerificationSealedResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`unauthenticated`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "unauthenticated",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-unauthenticated",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`forbidden`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "forbidden",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-forbidden",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`not_found`: not retryable. `seal_not_available`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "not_found",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-not_found",
                "retry": "never",
                "retry_after": "none"
              },
              {
                "code": "seal_not_available",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-seal_not_available",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`invalid_request`: not retryable.",
            "x-artizar-error-codes": [
              {
                "code": "invalid_request",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-invalid_request",
                "retry": "never",
                "retry_after": "none"
              }
            ]
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`rate_limited`: retryable; wait retry_after_seconds, which equals Retry-After.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying; equals the body's retry_after_seconds.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "x-artizar-error-codes": [
              {
                "code": "rate_limited",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-rate_limited",
                "retry": "always",
                "retry_after": "rate_limit"
              }
            ]
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            },
            "description": "`internal_error`: retryable only for an idempotent request (a GET, or a POST resent with its original Idempotency-Key).",
            "x-artizar-error-codes": [
              {
                "code": "internal_error",
                "doc_url": "https://artizar.ai/docs/quickstart.html#error-internal_error",
                "retry": "idempotent_only",
                "retry_after": "none"
              }
            ]
          }
        },
        "summary": "Get Verification Sealed",
        "tags": [
          "verifications"
        ]
      }
    }
  },
  "security": [
    {
      "tenantApiKey": []
    }
  ]
}
