{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/lenz-io/json-schema/lenz-io-claim-detail-out-schema.json",
  "title": "ClaimDetailOut",
  "description": "Full verification report.\n\nSlim top-level (verdict + confidence + lenz_score + sources). Audit\ndetail (panel reasoning, debate, individual panelist assessments)\nlives under ``audit``.\n\nSame field vocabulary as ``VerificationListItemOut`` (list view) and\n``AssessClaimOut`` (fast verdict). A consumer that branches on\n``verdict`` or ``confidence`` reads the same field name regardless\nof which endpoint produced the payload.",
  "x-generated": "2026-10-30",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/lenz-io-openapi.json#/components/schemas/ClaimDetailOut",
  "properties": {
    "verification_id": {
      "title": "Verification Id",
      "type": "string"
    },
    "claim": {
      "title": "Claim",
      "type": "string"
    },
    "visibility": {
      "default": "private",
      "title": "Visibility",
      "type": "string"
    },
    "depth": {
      "default": "standard",
      "title": "Depth",
      "type": "string"
    },
    "domain": {
      "default": "",
      "title": "Domain",
      "type": "string"
    },
    "entities": {
      "default": [],
      "items": {
        "$ref": "#/$defs/EntityRef"
      },
      "title": "Entities",
      "type": "array"
    },
    "presumed_intent": {
      "default": "",
      "title": "Presumed Intent",
      "type": "string"
    },
    "verdict": {
      "default": "",
      "description": "`True`, `Mostly True`, `Mixed`, `Mostly False` or `False`, or `No Public Record`: Lenz found no public record that settles the claim, which does not make it false. It has no `lenz_score` (null), a `confidence`, and is never warranted. Version `2026-05-13` never receives it: it reads such a run as a failure (`research_empty` when no source was found, else `research_insufficient`).",
      "title": "Verdict",
      "type": "string"
    },
    "confidence": {
      "default": "low",
      "title": "Confidence",
      "type": "string"
    },
    "lenz_score": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "description": "1-10; null for `No Public Record`.",
      "title": "Lenz Score"
    },
    "key_finding": {
      "default": "",
      "title": "Key Finding",
      "type": "string"
    },
    "executive_summary": {
      "default": "",
      "title": "Executive Summary",
      "type": "string"
    },
    "warnings": {
      "default": [],
      "items": {
        "type": "string"
      },
      "title": "Warnings",
      "type": "array"
    },
    "suggested_rewrite": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "A suggested rewrite of `claim` that this verification's findings support, to use in place of the original sentence. It has not been verified itself: before using it, review it or run it through `/verify`. `null` for a true claim, when no correction is established, and on verifications that predate the field. On every verification, single or listed; not on `/assess` rows.",
      "title": "Suggested Rewrite"
    },
    "created_at": {
      "default": "",
      "title": "Created At",
      "type": "string"
    },
    "completed_at": {
      "default": "",
      "description": "When the verification finished (ISO 8601). Always set on a completed verification; a rerun moves it. API version `2026-05-13` sends `modified_at` instead: this time, but only when it falls on a later UTC calendar day than `created_at`, else null.",
      "title": "Completed At",
      "type": "string"
    },
    "sources": {
      "default": [],
      "items": {
        "$ref": "#/$defs/SourceOut"
      },
      "title": "Sources",
      "type": "array"
    },
    "audit": {
      "allOf": [
        {
          "$ref": "#/$defs/AuditOut"
        }
      ],
      "default": {
        "adjudication_summary": "",
        "assessments": [],
        "debate_pro": {
          "argument": "",
          "rebuttal": "",
          "role": ""
        },
        "debate_con": {
          "argument": "",
          "rebuttal": "",
          "role": ""
        },
        "panel_agreement": ""
      }
    },
    "language": {
      "title": "Language",
      "type": "string"
    },
    "coverage": {
      "anyOf": [
        {
          "$ref": "#/$defs/CoverageOut"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "verification_id",
    "claim",
    "language"
  ],
  "type": "object",
  "$defs": {
    "AssessmentOut": {
      "description": "An adjudicator's individual assessment. Nested under ``audit``.\n\nCurrent verifications carry three independent reviewers (``Reviewer A``\nto ``Reviewer C``), each assigned a model from a different vendor (after a\nprovider failure a reviewer can run on another vendor's model), and two\nmore (``Reviewer D``, ``Reviewer E``) when those three disagree, all\nrunning the same checks over the evidence; ``warnings`` carries the source\nissues, evidence gaps and precision issues that reviewer found, in one\nlist. ``panelist_name`` is a display value, not a stable key.\nVerifications from before the change carry the specialist panelists\ninstead, one flag category each: logical fallacies (Logic Examiner),\nprecision issues (Precision Analyst), weakest sources (Source Auditor)\nand, before 2026-06, missing context (Context Analyst).",
      "properties": {
        "panelist_name": {
          "default": "",
          "title": "Panelist Name",
          "type": "string"
        },
        "focus_area": {
          "default": "",
          "title": "Focus Area",
          "type": "string"
        },
        "score": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Score"
        },
        "reasoning": {
          "default": "",
          "title": "Reasoning",
          "type": "string"
        },
        "warnings": {
          "default": [],
          "items": {
            "type": "string"
          },
          "title": "Warnings",
          "type": "array"
        }
      },
      "title": "AssessmentOut",
      "type": "object"
    },
    "AuditOut": {
      "description": "Audit / explainability block — for callers that need to show their work.\n\n``panel_agreement`` is derived from the panel: ``unanimous`` (all agree),\n``majority`` (score spread <= 2), or ``split`` — over every reviewer that\nvoted, so a panel that called in Reviewers D and E is counted whole.\nFor \"No Public Record\" it counts the no-record votes (``unanimous`` when\nevery voting reviewer voted no-record, ``majority`` when most did), and is\n``''`` when no panel voted (decided by research alone); its debate is\nempty.",
      "properties": {
        "adjudication_summary": {
          "default": "",
          "title": "Adjudication Summary",
          "type": "string"
        },
        "assessments": {
          "default": [],
          "items": {
            "$ref": "#/$defs/AssessmentOut"
          },
          "title": "Assessments",
          "type": "array"
        },
        "debate_pro": {
          "allOf": [
            {
              "$ref": "#/$defs/DebateSideOut"
            }
          ],
          "default": {
            "role": "",
            "argument": "",
            "rebuttal": ""
          }
        },
        "debate_con": {
          "allOf": [
            {
              "$ref": "#/$defs/DebateSideOut"
            }
          ],
          "default": {
            "role": "",
            "argument": "",
            "rebuttal": ""
          }
        },
        "panel_agreement": {
          "default": "",
          "title": "Panel Agreement",
          "type": "string"
        }
      },
      "title": "AuditOut",
      "type": "object"
    },
    "CoverageOut": {
      "description": "Whether this verdict carries a warranty, and if not, why not.\n\nPresent only when covered verification is enabled. It describes the pair\n(this account, this analysis), not the analysis alone: two accounts can\nhold two certificates over one cached verdict, so the block one customer\nsees is never the block another sees.\n\n``reasons`` is empty exactly when ``status`` is not ``uncovered``. The\nvocabulary is closed and deliberately smaller than the set of rules\nbehind the decision: ``plan`` and ``depth`` are actionable, ``account``\nmeans the account turned certificates off (Pro and Scale), ``verdict`` is\na product rule callers design around, ``quality`` covers everything a\ncaller can neither act on nor define, and ``withdrawn`` / ``issue_failed``\nare statements about Lenz rather than about the caller's claim.",
      "properties": {
        "status": {
          "default": "uncovered",
          "enum": [
            "covered",
            "uncovered",
            "pending_timestamp"
          ],
          "title": "Status",
          "type": "string"
        },
        "reasons": {
          "default": [],
          "items": {
            "enum": [
              "plan",
              "account",
              "depth",
              "verdict",
              "quality",
              "withdrawn",
              "issue_failed"
            ],
            "type": "string"
          },
          "title": "Reasons",
          "type": "array"
        },
        "certificate_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Certificate Id"
        },
        "certificate_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Certificate Url"
        },
        "as_of": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "As Of"
        },
        "currency": {
          "default": "",
          "title": "Currency",
          "type": "string"
        },
        "cap": {
          "default": 0,
          "title": "Cap",
          "type": "integer"
        },
        "aggregate": {
          "default": 0,
          "title": "Aggregate",
          "type": "integer"
        },
        "terms_version": {
          "default": "",
          "title": "Terms Version",
          "type": "string"
        }
      },
      "title": "CoverageOut",
      "type": "object"
    },
    "DebateSideOut": {
      "description": "One side of the debate (pro or con). Nested under ``audit``.",
      "properties": {
        "role": {
          "default": "",
          "title": "Role",
          "type": "string"
        },
        "argument": {
          "default": "",
          "title": "Argument",
          "type": "string"
        },
        "rebuttal": {
          "default": "",
          "title": "Rebuttal",
          "type": "string"
        }
      },
      "title": "DebateSideOut",
      "type": "object"
    },
    "EntityRef": {
      "description": "An entity (person, place, organization, concept) referenced in the\nsubmitted claim.\n\n``qid`` is the Wikidata Q identifier (e.g. ``Q42`` for Douglas Adams)\nwhen Lenz resolved the entity against its own entity catalog; ``null``\notherwise. Customers can join on ``qid`` to their own Wikidata-indexed\ncorpus, or hit the Wikidata API directly for richer metadata.",
      "properties": {
        "name": {
          "title": "Name",
          "type": "string"
        },
        "qid": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Qid"
        }
      },
      "required": [
        "name"
      ],
      "title": "EntityRef",
      "type": "object"
    },
    "SourceOut": {
      "description": "Canonical source citation, adding ``origin``.",
      "properties": {
        "source_name": {
          "default": "",
          "title": "Source Name",
          "type": "string"
        },
        "title": {
          "default": "",
          "title": "Title",
          "type": "string"
        },
        "url": {
          "default": "",
          "title": "Url",
          "type": "string"
        },
        "snippet": {
          "default": "",
          "description": "The sentence(s) quoted from the source page, verbatim and in the page's own language, with ` … ` between separate passages. A few sources carry no verified quote — for those it is the surrounding passage instead, which may run longer and contain line breaks.",
          "title": "Snippet",
          "type": "string"
        },
        "snippet_language": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "The language of `snippet` (the source page's own language) as an ISO 639-1 code (e.g. `uk`, `pt`), when it is not English; null for English or when unknown. The verdict's own language is `language`.",
          "title": "Snippet Language"
        },
        "date": {
          "default": "",
          "title": "Date",
          "type": "string"
        },
        "origin": {
          "default": "web",
          "description": "Whether this source came from live web retrieval (`web`) or caller-supplied text (`supplied`).",
          "enum": [
            "web",
            "supplied"
          ],
          "title": "Origin",
          "type": "string"
        }
      },
      "title": "SourceOut",
      "type": "object"
    }
  }
}