{"openapi":"3.1.0","info":{"title":"ValidJSON Public API","description":"The authoritative ValidJSON public contract. Domain authority results (`accepted`, `refused`, `pending_review`) are returned at HTTP 2xx and are NOT errors: a typed refusal is a successful authority outcome. Transport and security failures use the problem envelope. All public vocabularies are OPEN and append-only within a contract version: clients must tolerate unknown values and must never treat an unknown value as success.","version":"2"},"paths":{"/v2/discovery":{"get":{"tags":["Discovery"],"summary":"Discover the public contract","description":"Describes the public contract of THIS application: its version, the operations reachable right now, and the open public vocabularies. Operations listed under `reserved_operations` are contract concepts only and are not callable. All vocabularies are OPEN (`closed: false`): clients must tolerate unknown values and must never treat an unknown value as success.","operationId":"discovery","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoveryResponse"}}}},"500":{"description":"Internal error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemEnvelope"}}}}}}},"/v2/process":{"post":{"tags":["Processing"],"summary":"Process supplied text against a supplied schema","description":"Deterministic supplied-schema processing. A `schema` is REQUIRED; there is no model, provider, endpoint, or workflow selection, and no durable run is created. Authority results (`accepted`, `refused`) are returned at HTTP 200 — a typed refusal is a successful evaluation, not an error. `result_type` is OPEN: tolerate unknown values and never treat one as `accepted`.","operationId":"synchronous_processing","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProcessRequest"}}},"required":true},"responses":{"200":{"description":"Authority result (accepted or refused).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessResult"}}}},"413":{"description":"Source or schema too large.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemEnvelope"}}}},"422":{"description":"Invalid request, invalid schema, or unsupported schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemEnvelope"}}}},"500":{"description":"Internal error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemEnvelope"}}}}}}},"/v2/validate-record":{"post":{"tags":["Validation"],"summary":"Validate a supplied machine-readable record (no extraction)","description":"Validates a machine-readable JSON record that YOU supply, against either a schema you supply or a published business-record pack — exactly one of the two. The record is checked as supplied: nothing is repaired, defaulted, coerced, or re-authored. This is not `/v2/process`, which authors a candidate record from text; every result states its `operation_type` so the two can never be confused. `accepted` means the record conformed to the selected schema and, for a pack, that its deterministic business rules held. It does NOT mean the record is factually true, approved, or authorized for payment, storage, export, transmission, accounting entry, or workflow continuation. Nothing is persisted; no model is invoked.","operationId":"record_validation","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordValidationRequest"}}},"required":true},"responses":{"200":{"description":"Validation result (accepted or refused). A refusal is a result.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessResult"}}}},"413":{"description":"Record or schema too large.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemEnvelope"}}}},"422":{"description":"Invalid request, unsupported schema, or unknown pack.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemEnvelope"}}}},"500":{"description":"Internal error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemEnvelope"}}}}}}},"/v2/schema-compatibility":{"post":{"tags":["Schema"],"summary":"Evaluate a supplied schema for compatibility (no source processing)","description":"Evaluates a supplied schema WITHOUT processing any source. Returns a compatibility report: whether the schema is structurally valid, supported, and admitted under the CURRENT engine policy for record validation, plus the normalized schema, canonical hash, and required structured-extraction source grammar when admitted. `compatible: true` does NOT establish extraction safety, registration, activation, or permanent admission; the grammar names an input-layout requirement, not a correctness guarantee. `schema_hash` is a semantic fingerprint, not a schema_id. Nothing is persisted. Structurally invalid/unsupported schemas are 422 problems, not reports.","operationId":"schema_compatibility","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaCompatibilityRequest"}}},"required":true},"responses":{"200":{"description":"Compatibility report (admitted or policy-refused).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaCompatibilityReport"}}}},"413":{"description":"Schema too large.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemEnvelope"}}}},"422":{"description":"Invalid request, invalid schema, or unsupported schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemEnvelope"}}}},"500":{"description":"Internal error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemEnvelope"}}}}}}}},"components":{"schemas":{"AuthorityLimits":{"properties":{"stateless_evaluation_only":{"type":"boolean","title":"Stateless Evaluation Only","default":true},"durable_resource_created":{"type":"boolean","title":"Durable Resource Created","default":false},"schema_registered":{"type":"boolean","title":"Schema Registered","default":false},"review_completed":{"type":"boolean","title":"Review Completed","default":false},"export_authorized":{"type":"boolean","title":"Export Authorized","default":false},"future_admission_guaranteed":{"type":"boolean","title":"Future Admission Guaranteed","default":false},"current_downstream_authority":{"type":"boolean","title":"Current Downstream Authority","default":false},"cryptographically_authenticated":{"type":"boolean","title":"Cryptographically Authenticated","default":false}},"additionalProperties":false,"type":"object","title":"AuthorityLimits","description":"Machine-readable statement of what the receipt does NOT confer. Every flag participates in\nreceipt integrity (it is inside the hashed payload). These are limitations, not a transferable\npermission token."},"CallerSuppliedSchemaAuthorityEvidence":{"properties":{"source_type":{"type":"string","const":"caller_supplied_schema","title":"Source Type","default":"caller_supplied_schema"},"authority_type":{"type":"string","const":"request_scoped_selection","title":"Authority Type","default":"request_scoped_selection"},"authority_status":{"type":"string","enum":["selected_for_evaluation","not_admitted_for_evaluation"],"title":"Authority Status"},"selection_source":{"type":"string","const":"current_request","title":"Selection Source","default":"current_request"}},"additionalProperties":false,"type":"object","required":["authority_status"],"title":"CallerSuppliedSchemaAuthorityEvidence","description":"Request-scoped selection of schema content supplied in this request."},"Continuation":{"properties":{"may_review":{"type":"boolean","title":"May Review","default":false},"may_correct":{"type":"boolean","title":"May Correct","default":false},"may_retry":{"type":"boolean","title":"May Retry","default":false},"may_export":{"type":"boolean","title":"May Export","default":false},"may_terminate":{"type":"boolean","title":"May Terminate","default":false},"requires_fresh_admission":{"type":"boolean","title":"Requires Fresh Admission","default":true},"blocked_reasons":{"items":{"type":"string"},"type":"array","title":"Blocked Reasons"}},"additionalProperties":false,"type":"object","title":"Continuation","description":"Resource-relative next-action projection (PI-001 §E). Always fully populated; a\n``may_*: false`` means 'not permitted now', never 'unknown'. This stateless operation\ncreates no durable resource, so nothing can be resumed: every ``may_*`` is ``false`` and\n``requires_fresh_admission`` is ``true`` (any further action is a new evaluation)."},"DeploymentSourceIdentity":{"properties":{"status":{"type":"string","title":"Status","description":"`resolved_from_git` (observed in the deployed tree), `declared_by_environment` (asserted by the service unit, unverified), or `unresolved`. OPEN vocabulary."},"commit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commit","description":"Full commit id, or null when unresolved. NOT proof the running bytes match."},"tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag","description":"Tag naming this exact commit, or null when the commit carries none. Never a nearest-ancestor tag: an untagged deployment must not present as a tagged release."},"tag_resolution":{"type":"string","title":"Tag Resolution","description":"How `tag` was selected. Always exact-match; ancestor tags are never used.","default":"exact_match_only"}},"additionalProperties":false,"type":"object","required":["status"],"title":"DeploymentSourceIdentity","description":"Which committed source this process is serving (TIER-A-DEPLOY-001).\n\nDeliberately narrow. `status` says HOW the answer was obtained, because \"observed from the\ndeployed git tree\" and \"declared in a unit file\" are different strengths of claim and\ncollapsing them would let the weaker one borrow the credibility of the stronger."},"DiscoveryResponse":{"properties":{"contract_version":{"type":"string","title":"Contract Version","description":"Version of the external contract (not the engine or package).","default":"2"},"operations":{"items":{"$ref":"#/components/schemas/PublicOperation"},"type":"array","title":"Operations","description":"Operations reachable in this application right now."},"reserved_operations":{"items":{"$ref":"#/components/schemas/ReservedOperation"},"type":"array","title":"Reserved Operations","description":"Contract concepts reserved for future coordinates. NOT available: calling them will not succeed."},"result_types":{"$ref":"#/components/schemas/OpenVocabulary","description":"Public domain result vocabulary emitted by the record-validation and structured-extraction operations. The union is OPEN."},"input_source_types":{"$ref":"#/components/schemas/OpenVocabulary","description":"Public input-source vocabulary accepted by structured extraction. The union is OPEN."},"extraction_source_grammars":{"$ref":"#/components/schemas/OpenVocabulary","description":"Named source-text grammar profiles accepted by structured extraction. Text outside an advertised grammar, including broader unlabelled prose for string-bearing schemas, is refused. Record validation is a separate operation. Advertising a grammar grants no downstream authority."},"problem_categories":{"$ref":"#/components/schemas/OpenVocabulary","description":"Public problem categories. Append-only within this contract version."},"capabilities":{"$ref":"#/components/schemas/ReceiptCapabilities","description":"Descriptive receipt/hash capabilities. Not an authority or selection claim."},"source_identity":{"$ref":"#/components/schemas/DeploymentSourceIdentity","description":"Which committed source this deployment is serving. Evidence for correlating an observed origin with a reviewed commit — never an attestation that the running bytes match it, and never a build, release, or environment identity."}},"additionalProperties":false,"type":"object","required":["operations","reserved_operations","result_types","input_source_types","extraction_source_grammars","problem_categories","capabilities","source_identity"],"title":"DiscoveryResponse"},"EvaluationReceipt":{"properties":{"receipt_version":{"type":"string","const":"2","title":"Receipt Version","default":"2"},"receipt_type":{"type":"string","const":"stateless_evaluation","title":"Receipt Type","default":"stateless_evaluation"},"receipt_of":{"type":"string","enum":["record_validation","structured_extraction"],"title":"Receipt Of"},"input_evidence":{"$ref":"#/components/schemas/InputEvidence"},"schema_evidence":{"$ref":"#/components/schemas/SchemaEvidenceV2"},"schema_authority_evidence":{"oneOf":[{"$ref":"#/components/schemas/CallerSuppliedSchemaAuthorityEvidence"},{"$ref":"#/components/schemas/PublishedPackSchemaAuthorityEvidence"}],"title":"Schema Authority Evidence","discriminator":{"propertyName":"source_type","mapping":{"caller_supplied_schema":"#/components/schemas/CallerSuppliedSchemaAuthorityEvidence","published_pack":"#/components/schemas/PublishedPackSchemaAuthorityEvidence"}}},"result_evidence":{"$ref":"#/components/schemas/ResultEvidence"},"execution_evidence":{"$ref":"#/components/schemas/ExecutionEvidence"},"authority_limits":{"$ref":"#/components/schemas/AuthorityLimits"},"integrity":{"$ref":"#/components/schemas/ReceiptIntegrity"}},"additionalProperties":false,"type":"object","required":["receipt_of","input_evidence","schema_evidence","schema_authority_evidence","result_evidence","execution_evidence","authority_limits","integrity"],"title":"EvaluationReceipt","description":"Unsigned, stateless evidence of one completed public evaluation."},"ExecutionEvidence":{"properties":{"execution_mode":{"type":"string","title":"Execution Mode","description":"The route's execution mode."},"deterministic":{"type":"boolean","title":"Deterministic","description":"Whether the evaluation was deterministic."},"model_used":{"type":"boolean","title":"Model Used","description":"Whether a language model executed."},"endpoint_used":{"type":"boolean","title":"Endpoint Used","description":"Whether an external endpoint executed."},"fallback_used":{"type":"boolean","title":"Fallback Used","description":"Whether a fallback path executed."}},"additionalProperties":false,"type":"object","required":["execution_mode","deterministic","model_used","endpoint_used","fallback_used"],"title":"ExecutionEvidence","description":"Only execution facts THIS route can prove. The deterministic supplied-schema route never\ninvokes a model, endpoint, or fallback (a configured endpoint is not evidence it executed).\nNo provider / model / endpoint / engine / deployment identity appears (VR-002 §11/§12)."},"InlineTextSource":{"properties":{"type":{"type":"string","const":"inline_text","title":"Type","description":"Discriminator. Only `inline_text` is admitted in this contract build."},"content":{"type":"string","title":"Content","description":"The text to process. Required."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Presentation-only label for the source. Non-authoritative; not input."},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Advisory, non-authoritative caller metadata. Never processing input."}},"additionalProperties":false,"type":"object","required":["type","content"],"title":"InlineTextSource","description":"The only admitted public source in PI-003C: caller-supplied inline text.\n\nUploads, URL/reference sources, and any other source type are rejected by the closed\n``type`` literal + ``extra=\"forbid\"`` (an unknown authority-bearing field is a 422, not\na silent drop)."},"InputEvidence":{"properties":{"submitted_content_hash":{"type":"string","title":"Submitted Content Hash","description":"SHA-256 over the decoded source.content string (not HTTP wire bytes)."},"normalized_content_hash":{"type":"string","title":"Normalized Content Hash","description":"SHA-256 over normalize_supplied_text(source.content) — what extraction ran on."},"normalization_profile":{"type":"string","title":"Normalization Profile","description":"Identifier of the applied normalization (zero-width strip + full-width delimiter fold; NOT NFC / line-ending / whitespace normalization)."},"source_type":{"type":"string","title":"Source Type","description":"The admitted source type (inline_text)."},"submitted_character_count":{"type":"integer","title":"Submitted Character Count","description":"len(source.content), a size — not bytes."},"normalized_character_count":{"type":"integer","title":"Normalized Character Count","description":"len of the normalized content."},"source_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Name","description":"Caller-supplied presentation label, only if provided."}},"additionalProperties":false,"type":"object","required":["submitted_content_hash","normalized_content_hash","normalization_profile","source_type","submitted_character_count","normalized_character_count"],"title":"InputEvidence","description":"Binds both source representations. ``submitted_content_hash`` is over the decoded\n``source.content`` STRING the processing boundary received — NOT the raw HTTP wire bytes (the\nserver never retains those). ``normalized_content_hash`` is over the exact\n``normalize_supplied_text`` output the extraction path consumes."},"OpenVocabulary":{"properties":{"values":{"items":{"type":"string"},"type":"array","title":"Values","description":"Values defined by the contract today."},"closed":{"type":"boolean","title":"Closed","description":"False means the vocabulary is OPEN and append-only within this contract version. Clients must tolerate unknown values and must never treat an unknown value as success.","default":false}},"additionalProperties":false,"type":"object","required":["values"],"title":"OpenVocabulary","description":"A public vocabulary plus its extension doctrine (PI-002C §5/§8).\n\n``closed=False`` is the contract's OPEN declaration: values may be added additively\nwithin a contract version, so clients MUST tolerate unknown values."},"PackReference":{"properties":{"pack_id":{"type":"string","title":"Pack Id","description":"Public pack identifier, e.g. `purchase_order_v1`."},"pack_version":{"type":"string","title":"Pack Version","description":"Exact published pack version, e.g. `1`. Required; never defaulted."}},"additionalProperties":false,"type":"object","required":["pack_id","pack_version"],"title":"PackReference","description":"A frozen public business-record pack, selected by id AND version.\n\n``pack_version`` is REQUIRED and has no default: resolving an unspecified version to\n\"latest\" would silently change which rules ran between two identical-looking requests."},"ProblemCategory":{"type":"string","enum":["authentication_required","permission_denied","not_found","invalid_request","unsupported_source_grammar","invalid_schema","unsupported_schema","conflict","limit_exceeded","internal_error","unavailable"],"title":"ProblemCategory","description":"Coarse, machine-readable, APPEND-ONLY problem vocabulary (PI-002C §2).\n\nClients MUST tolerate an unknown category, MUST NOT treat one as success, and\nMUST fall back to the HTTP status class."},"ProblemEnvelope":{"properties":{"contract_version":{"type":"string","title":"Contract Version","description":"Version of the external contract that shaped this problem.","default":"2"},"category":{"$ref":"#/components/schemas/ProblemCategory","description":"Coarse machine-readable category. Append-only within contract_version 1: tolerate unknown values, never treat them as success, and fall back to the HTTP status class."},"code":{"type":"string","title":"Code","description":"Specific machine-readable code. Unknown values must be tolerated."},"message":{"type":"string","title":"Message","description":"Human-readable and NON-authoritative. May change within a contract version; clients must not parse it. Use `details` for machine-readable data."},"details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Details","description":"Structured, additive machine-readable detail. Omitted when empty."},"correlation_id":{"type":"string","title":"Correlation Id","description":"Server-generated, opaque. Authoritative for tracing only."},"client_request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Request Id","description":"Untrusted caller-supplied correlation evidence, echoed only when valid. Never identity, authority, or an idempotency key."}},"additionalProperties":false,"type":"object","required":["category","code","message","correlation_id"],"title":"ProblemEnvelope","description":"The frozen public problem shape. Field names are contractual."},"ProcessResult":{"properties":{"contract_version":{"type":"string","title":"Contract Version","description":"External contract version."},"operation_type":{"type":"string","title":"Operation Type","description":"Which operation produced this result: `record_validation` (a record YOU supplied was checked) or `structured_extraction` (a candidate record was authored from text you supplied). Never infer the operation from the route alone."},"result_type":{"type":"string","title":"Result Type","description":"Authority verdict: `accepted` or `refused` today. OPEN and append-only: tolerate unknown values and never treat an unknown value as `accepted`."},"continuation":{"$ref":"#/components/schemas/Continuation","description":"Resource-relative next-action projection."},"outcome":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Outcome","description":"The grounded output. Present only when `result_type` is `accepted`."},"issues":{"items":{"$ref":"#/components/schemas/ResultIssue"},"type":"array","title":"Issues","description":"Findings/refusal detail. Non-empty for `refused`; empty for `accepted`."},"evaluation_receipt":{"$ref":"#/components/schemas/EvaluationReceipt","description":"PROV-002 stateless evaluation receipt. An INVARIANT of a completed result — present for both `accepted` and `refused`, never request-optional, never on a problem. Unsigned: a matching `integrity.receipt_hash` proves internal consistency, not issuer identity. `receipt_of` and `schema_authority_evidence` are integrity covered. It confers no durable, registration, review, export, downstream, or future-admission authority (see `authority_limits`)."}},"additionalProperties":false,"type":"object","required":["contract_version","operation_type","result_type","continuation","evaluation_receipt"],"title":"ProcessResult","description":"The public authority-result envelope. Returned at HTTP 200 for BOTH ``accepted`` and\n``refused`` — a typed refusal is a successful evaluation, not an error (PI-001/PI-003B1).\n\nThe union is OPEN: ``result_type`` may take a value a client does not recognize, which\nmust never be treated as ``accepted``."},"PublicOperation":{"properties":{"id":{"type":"string","title":"Id"},"method":{"type":"string","title":"Method"},"path":{"type":"string","title":"Path"},"availability":{"type":"string","const":"available","title":"Availability","default":"available"}},"additionalProperties":false,"type":"object","required":["id","method","path"],"title":"PublicOperation","description":"An operation that is reachable in THIS application right now."},"PublicProcessRequest":{"properties":{"source":{"$ref":"#/components/schemas/InlineTextSource","description":"The input source envelope."},"schema":{"additionalProperties":true,"type":"object","title":"Schema","description":"The required JSON output schema. Must be a non-null object."}},"additionalProperties":false,"type":"object","required":["source","schema"],"title":"PublicProcessRequest","description":"POST /v1/process request. A supplied schema is MANDATORY and non-null — that is what\nkeeps inferred-schema/model execution unreachable (PI-003B5 §G).\n\n``extra=\"forbid\"`` rejects every prohibited/unknown field (workflow selection,\nmodel/provider/endpoint/fallback, ``run_id``, review/export state) as ``invalid_request``\nrather than ignoring it."},"PublishedPackSchemaAuthorityEvidence":{"properties":{"source_type":{"type":"string","const":"published_pack","title":"Source Type","default":"published_pack"},"authority_type":{"type":"string","const":"published_pack_selection","title":"Authority Type","default":"published_pack_selection"},"authority_status":{"type":"string","const":"selected_for_evaluation","title":"Authority Status","default":"selected_for_evaluation"},"selection_source":{"type":"string","const":"current_request","title":"Selection Source","default":"current_request"},"pack_id":{"type":"string","title":"Pack Id"},"pack_version":{"type":"string","title":"Pack Version"},"pack_definition_hash":{"type":"string","title":"Pack Definition Hash"},"pack_definition_hash_family":{"type":"string","const":"pack.definition_hash_v1","title":"Pack Definition Hash Family","default":"pack.definition_hash_v1"},"rule_set_hash":{"type":"string","title":"Rule Set Hash"},"rule_set_hash_family":{"type":"string","const":"pack.rule_set_hash_v1","title":"Rule Set Hash Family","default":"pack.rule_set_hash_v1"},"publication_profile":{"type":"string","const":"validjson-public-pack-registry-v1","title":"Publication Profile","default":"validjson-public-pack-registry-v1"}},"additionalProperties":false,"type":"object","required":["pack_id","pack_version","pack_definition_hash","rule_set_hash"],"title":"PublishedPackSchemaAuthorityEvidence","description":"Exact code-owned pack definition selected by id and version in this request."},"ReceiptCapabilities":{"properties":{"evaluation_receipts":{"type":"boolean","title":"Evaluation Receipts","description":"Whether completed results carry an inline evaluation_receipt."},"evaluation_receipt_versions":{"items":{"type":"string"},"type":"array","title":"Evaluation Receipt Versions","description":"Receipt-schema versions this contract emits."},"evaluation_receipt_types":{"items":{"type":"string"},"type":"array","title":"Evaluation Receipt Types","description":"Receipt discriminator types this contract emits."},"receipt_of_types":{"items":{"type":"string"},"type":"array","title":"Receipt Of Types","description":"Operations that current evaluation receipts can evidence."},"schema_authority_source_types":{"items":{"type":"string"},"type":"array","title":"Schema Authority Source Types","description":"Schema authority source variants current receipts can carry."},"legacy_validation_receipt_verification":{"type":"boolean","title":"Legacy Validation Receipt Verification","description":"Whether frozen v1 validation receipts remain verifiable offline."},"schema_hash_families":{"items":{"type":"string"},"type":"array","title":"Schema Hash Families","description":"Hash-family ids used for selected-source and admitted-schema evidence."},"output_hash_families":{"items":{"type":"string"},"type":"array","title":"Output Hash Families","description":"Hash-family ids used for the accepted output hash."},"receipt_hash_families":{"items":{"type":"string"},"type":"array","title":"Receipt Hash Families","description":"Hash-family ids used for receipt integrity."}},"additionalProperties":false,"type":"object","required":["evaluation_receipts","evaluation_receipt_versions","evaluation_receipt_types","receipt_of_types","schema_authority_source_types","legacy_validation_receipt_verification","schema_hash_families","output_hash_families","receipt_hash_families"],"title":"ReceiptCapabilities","description":"Describes current evaluation receipts and legacy offline verification."},"ReceiptIntegrity":{"properties":{"receipt_hash_family":{"type":"string","title":"Receipt Hash Family","description":"Hash-family id used to compute receipt_hash."},"receipt_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Hash","description":"Portable hash over the receipt payload (excluding this field)."}},"additionalProperties":false,"type":"object","required":["receipt_hash_family"],"title":"ReceiptIntegrity","description":"Receipt tamper-evidence. ``receipt_hash`` is computed over the whole receipt payload with\nTHIS ``receipt_hash`` field removed (``receipt_hash_family`` retained), canonicalized with\nRFC 8785 and prefixed. Unsigned: this proves internal consistency, not issuer identity."},"ReceiptIssue":{"properties":{"category":{"type":"string","title":"Category","description":"Coarse public refusal/finding category."},"code":{"type":"string","title":"Code","description":"Exact code (OPEN vocabulary)."}},"additionalProperties":false,"type":"object","required":["category","code"],"title":"ReceiptIssue","description":"Refusal/finding identity bound by STABLE codes only — no human-readable message enters the\nreceipt (VR-002 §8: codes are the semantic identity, prose is not)."},"RecordValidationRequest":{"properties":{"record":{"additionalProperties":true,"type":"object","title":"Record","description":"The machine-readable record to validate, as supplied. It is never repaired, normalized semantically, defaulted, coerced, or re-authored."},"supplied_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Supplied Schema","description":"A JSON Schema inside the `validjson-supplied-schema-v1` profile. Mutually exclusive with `pack_reference`."},"pack_reference":{"anyOf":[{"$ref":"#/components/schemas/PackReference"},{"type":"null"}],"description":"A published business-record pack to validate against. Mutually exclusive with `supplied_schema`."}},"additionalProperties":false,"type":"object","required":["record"],"title":"RecordValidationRequest","description":"POST /v1/validate-record request.\n\n``extra=\"forbid\"`` rejects unknown fields as ``invalid_request`` rather than ignoring\nthem, so a caller cannot smuggle workflow selection, model/provider routing, review or\nexport state past the contract."},"ReservedOperation":{"properties":{"id":{"type":"string","title":"Id"},"availability":{"type":"string","const":"reserved","title":"Availability","default":"reserved"}},"additionalProperties":false,"type":"object","required":["id"],"title":"ReservedOperation","description":"A reserved contract concept. NOT reachable and NOT implemented."},"ResultEvidence":{"properties":{"result_type":{"type":"string","title":"Result Type","description":"accepted or refused."},"issues":{"items":{"$ref":"#/components/schemas/ReceiptIssue"},"type":"array","title":"Issues","description":"Refusal/finding codes (empty for accepted)."},"requires_fresh_admission":{"type":"boolean","title":"Requires Fresh Admission","description":"Whether any further action requires a fresh admission."},"blocked_reasons":{"items":{"type":"string"},"type":"array","title":"Blocked Reasons","description":"Continuation blocked-reason categories."},"output_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Hash","description":"Portable hash of the validated output (accepted only)."},"output_hash_family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Hash Family","description":"Hash-family id for output_hash (accepted only)."}},"additionalProperties":false,"type":"object","required":["result_type","requires_fresh_admission"],"title":"ResultEvidence","description":"Binds the public result identity. For ``accepted`` it carries the portable\n``output_hash`` over the validated output value; for ``refused`` it carries no output hash\n(no validated output was produced) and binds the refusal by stable codes."},"ResultIssue":{"properties":{"category":{"type":"string","title":"Category","description":"Coarse public finding/refusal category (branchable)."},"code":{"type":"string","title":"Code","description":"Exact code. OPEN vocabulary; tolerate unknown values."},"message":{"type":"string","title":"Message","description":"Human-readable, non-authoritative."},"details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Details","description":"Additive machine detail."}},"additionalProperties":false,"type":"object","required":["category","code","message"],"title":"ResultIssue","description":"A finding/refusal detail (PI-001 §G/§H). Clients branch on ``category`` (coarse) and\n``code`` (exact, OPEN — unknown codes must be tolerated). ``message`` is\nnon-authoritative; ``details`` is additive."},"SchemaCompatibilityReport":{"properties":{"contract_version":{"type":"string","title":"Contract Version","description":"External contract version."},"profile":{"type":"string","title":"Profile","description":"The bounded schema structural and policy-processing profile identifier."},"compatible":{"type":"boolean","title":"Compatible","description":"True iff structurally valid, supported, and admitted under CURRENT policy for record validation. This does not establish extraction safety."},"extraction_source_grammar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extraction Source Grammar","description":"Named source-grammar profile required when this schema is used for structured extraction. It identifies a required input layout; it does not guarantee correct extraction or source truth. Omitted when current policy refuses the schema."},"structural_status":{"type":"string","const":"valid","title":"Structural Status","description":"Always `valid` in a report (invalid/unsupported are 422 problems).","default":"valid"},"support_status":{"type":"string","const":"supported","title":"Support Status","description":"Always `supported` in a report.","default":"supported"},"policy_status":{"type":"string","title":"Policy Status","description":"`admitted` or `refused` under the current engine policy. OPEN vocabulary."},"normalized_schema":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Normalized Schema","description":"The schema that would govern processing. Present only when admitted."},"schema_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema Hash","description":"Canonical fingerprint of the normalized semantic structure. Present only when admitted. NOT a schema_id, NOT a stored revision, NOT proof of registration."},"policy_refusals":{"items":{"$ref":"#/components/schemas/SchemaPolicyRefusal"},"type":"array","title":"Policy Refusals","description":"Non-empty when `policy_status` is `refused`; empty when admitted."},"resource_created":{"type":"boolean","const":false,"title":"Resource Created","description":"Always false. This operation registers and persists nothing.","default":false},"annotation_only_keywords":{"items":{"type":"string"},"type":"array","title":"Annotation Only Keywords","description":"Schema keywords this profile ADMITS but does NOT evaluate against record values. A schema carrying only these is still reported compatible and its records are still `accepted`, because acceptance is evidence about the checks that ran — and these are not among them. `format` is admitted so a schema can carry its intent and so the profile can reject unknown format tokens, but no record value is matched against it. Callers who need a value constrained must express that with an evaluated keyword. OPEN vocabulary: tolerate unknown entries."}},"additionalProperties":false,"type":"object","required":["contract_version","profile","compatible","policy_status"],"title":"SchemaCompatibilityReport","description":"The compatibility report (HTTP 200). Reached only when the schema is structurally valid\nand supported; structurally invalid/unsupported schemas are 422 problems, never a report.\n\n``policy_status`` distinguishes ``admitted`` (normalized schema + hash present) from\n``refused`` (policy_refusals present; no normalized schema/hash, because the process\nadmission seam produces none before refusing)."},"SchemaCompatibilityRequest":{"properties":{"schema":{"additionalProperties":true,"type":"object","title":"Schema","description":"The JSON schema to evaluate. Required, non-null object."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Presentation-only label. Non-authoritative; not evaluation input."},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Advisory, non-authoritative caller metadata. Not evaluation input."}},"additionalProperties":false,"type":"object","required":["schema"],"title":"SchemaCompatibilityRequest","description":"POST /v1/schema-compatibility request. A schema is REQUIRED and non-null; there is no\nsource content (a compatibility check evaluates the schema alone).\n\n``extra=\"forbid\"`` rejects every prohibited/unknown field (source content, workflow\nselection, model/provider/endpoint, registration, actor/workspace, normalization options)\nas ``invalid_request`` rather than ignoring it."},"SchemaEvidenceV2":{"properties":{"source_schema_hash":{"type":"string","title":"Source Schema Hash","description":"Hash of the schema artifact selected by the request. For a caller-supplied schema this is the submitted artifact; for a pack it is the published pack schema."},"source_schema_hash_family":{"type":"string","title":"Source Schema Hash Family","description":"Hash-family id for source_schema_hash."},"schema_admitted":{"type":"boolean","title":"Schema Admitted","description":"Whether the schema passed the bounded structural and policy profile."},"schema_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema Hash","description":"Canonical hash of the admitted normalized schema."},"schema_hash_family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema Hash Family","description":"Hash-family id for schema_hash."},"schema_profile":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema Profile","description":"Only the bounded structural and policy-processing profile applied to schema content. It never identifies origin, publication, registration, adoption, selection authority, or downstream authority."}},"additionalProperties":false,"type":"object","required":["source_schema_hash","source_schema_hash_family","schema_admitted"],"title":"SchemaEvidenceV2","description":"Schema content and admission evidence, without implying its authority source."},"SchemaPolicyRefusal":{"properties":{"category":{"type":"string","title":"Category","description":"Coarse public refusal category, e.g. `schema_refusal`."},"code":{"type":"string","title":"Code","description":"Exact refusal code. OPEN vocabulary; tolerate unknown values."},"message":{"type":"string","title":"Message","description":"Human-readable, non-authoritative."}},"additionalProperties":false,"type":"object","required":["category","code","message"],"title":"SchemaPolicyRefusal","description":"One reason the current engine policy would not admit a structurally-valid schema.\nDistinct from a structural ``SchemaViolation`` (which is a 422 problem, not a report field).\nClients branch on ``category`` (coarse) and ``code`` (exact, OPEN — tolerate unknown)."}}}}