{"components": {"securitySchemes": {"recoveryToken": {"description": "Opaque token returned in X-Vigil-Recovery-Token after authorization; not a wallet private key.", "scheme": "bearer", "type": "http"}}}, "info": {"description": "Bounded source observations and evidence, not a guarantee of truth. USDC payments on configured Base/Solana networks.", "title": "Vigil source verification", "version": "1.0.0"}, "openapi": "3.1.0", "paths": {"/api/agent/v1/capabilities": {"get": {"operationId": "vigilCapabilities", "responses": {"200": {"content": {"application/json": {"schema": {"type": "object"}}}, "description": "Available capability, schema, price and networks"}}}}, "/api/agent/v1/requests/{request_id}": {"get": {"operationId": "vigilRecoverSourceVerification", "parameters": [{"in": "path", "name": "request_id", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"content": {"application/json": {"schema": {"additionalProperties": false, "allOf": [{"if": {"properties": {"assessment_scope": {"const": "literal_quotation_only"}}}, "then": {"properties": {"claim_support": {"enum": ["not_assessed", "insufficient_evidence"]}, "evidence": {"items": {"properties": {"stance": {"const": "mentions"}}}}}}}, {"if": {"properties": {"claim_support": {"const": "supports"}}}, "then": {"properties": {"evidence": {"allOf": [{"contains": {"properties": {"stance": {"const": "supports"}}, "required": ["stance"]}, "minContains": 1}]}}}}, {"if": {"properties": {"claim_support": {"const": "contradicts"}}}, "then": {"properties": {"evidence": {"allOf": [{"contains": {"properties": {"stance": {"const": "contradicts"}}, "required": ["stance"]}, "minContains": 1}]}}}}, {"if": {"properties": {"claim_support": {"const": "mixed"}}}, "then": {"properties": {"evidence": {"allOf": [{"contains": {"properties": {"stance": {"const": "supports"}}, "required": ["stance"]}, "minContains": 1}, {"contains": {"properties": {"stance": {"const": "contradicts"}}, "required": ["stance"]}, "minContains": 1}]}}}}], "description": "A completed source observation and purchase. Retrieval failures return the error contract and are not submitted for settlement. Source support does not establish truth.", "properties": {"assessment_scope": {"enum": ["source_local_semantic_support", "literal_quotation_only"]}, "cache": {"additionalProperties": false, "properties": {"age_seconds": {"minimum": 0, "type": "integer"}, "hit": {"type": "boolean"}, "original_checked_at": {"format": "date-time", "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]{1,6})?Z$", "type": "string"}}, "required": ["hit", "age_seconds", "original_checked_at"], "type": "object"}, "checked_at": {"format": "date-time", "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]{1,6})?Z$", "type": "string"}, "claim": {"maxLength": 2000, "minLength": 1, "type": "string"}, "claim_support": {"enum": ["supports", "contradicts", "mixed", "insufficient_evidence", "not_assessed"]}, "confidence": {"description": "No numerical confidence is published before calibration.", "type": "null"}, "evidence": {"items": {"additionalProperties": false, "description": "Offsets count Unicode code points in source.normalized_text. Verify start < end and exact substring/digest matches independently; JSON Schema cannot establish them.", "properties": {"end": {"maximum": 100000, "minimum": 1, "type": "integer"}, "evidence_id": {"pattern": "^e[1-6]$", "type": "string"}, "quote": {"maxLength": 1000, "minLength": 1, "type": "string"}, "source_sha256": {"pattern": "^[0-9a-f]{64}$", "type": "string"}, "stance": {"enum": ["supports", "contradicts", "mentions"]}, "start": {"maximum": 99999, "minimum": 0, "type": "integer"}, "text_sha256": {"pattern": "^[0-9a-f]{64}$", "type": "string"}}, "required": ["evidence_id", "quote", "start", "end", "stance", "source_sha256", "text_sha256"], "type": "object"}, "maxItems": 6, "type": "array"}, "explanation": {"maxLength": 800, "type": "string"}, "limits": {"additionalProperties": false, "properties": {"fixture": {"const": true}, "max_decoded_bytes": {"maximum": 8388608, "minimum": 1, "type": "integer"}, "max_header_bytes": {"maximum": 65536, "minimum": 1, "type": "integer"}, "max_redirects": {"maximum": 5, "minimum": 0, "type": "integer"}, "max_text_chars": {"maximum": 100000, "minimum": 1, "type": "integer"}, "max_wire_bytes": {"maximum": 4194304, "minimum": 1, "type": "integer"}, "socket_timeout_seconds": {"anyOf": [{"maximum": 15, "minimum": 1, "type": "integer"}, {"pattern": "^(0|[1-9][0-9]*)\\.[0-9]+$", "type": "string"}]}, "timeout_seconds": {"anyOf": [{"maximum": 60, "minimum": 1, "type": "integer"}, {"pattern": "^(0|[1-9][0-9]*)\\.[0-9]+$", "type": "string"}]}}, "required": ["max_text_chars"], "type": "object"}, "methodology_version": {"maxLength": 256, "minLength": 1, "type": "string"}, "payment": {"additionalProperties": false, "description": "USDC uses six atomic decimals. Offline mock payments simulate USDC and move no funds. Null fees are unknown, not zero.", "properties": {"amount_atomic": {"pattern": "^(0|[1-9][0-9]{0,17})$", "type": "string"}, "asset": {"maxLength": 128, "minLength": 1, "type": "string"}, "currency": {"const": "USDC"}, "facilitator_fee_usd": {"anyOf": [{"maxLength": 32, "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$", "type": "string"}, {"type": "null"}]}, "mode": {"enum": ["offline", "testnet", "mainnet"]}, "network": {"enum": ["eip155:8453", "eip155:84532", "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", "none"]}, "network_fee_usd": {"anyOf": [{"maxLength": 32, "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$", "type": "string"}, {"type": "null"}]}, "price_usd": {"maxLength": 32, "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$", "type": "string"}, "provider": {"maxLength": 64, "minLength": 1, "type": "string"}, "simulated": {"type": "boolean"}, "status": {"const": "settled"}, "transaction": {"maxLength": 512, "type": ["string", "null"]}}, "required": ["status", "provider", "mode", "simulated", "network", "asset", "currency", "amount_atomic", "price_usd", "transaction", "facilitator_fee_usd", "network_fee_usd"], "type": "object"}, "reachable": {"const": true}, "receipt": {"additionalProperties": false, "description": "Pin Vigil's key independently. Verify the Ed25519 attestation, SHA256 of canonical envelope bytes, and SHA256 of the result with receipt removed. Schema validation alone does not authenticate a receipt.", "properties": {"attestation": {"additionalProperties": false, "properties": {"key_id": {"minimum": 0, "type": "integer"}, "label": {"maxLength": 200, "type": ["string", "null"]}, "prev_hash": {"pattern": "^[0-9a-f]{64}$", "type": "string"}, "pubkey_hex": {"pattern": "^[0-9a-f]{64}$", "type": "string"}, "receipt_hash": {"pattern": "^[0-9a-f]{64}$", "type": "string"}, "requested_by": {"maxLength": 128, "minLength": 1, "type": "string"}, "serial": {"minimum": 1, "type": "integer"}, "sig_ed25519_hex": {"pattern": "^[0-9a-f]{128}$", "type": "string"}, "subject_sha256": {"pattern": "^[0-9a-f]{64}$", "type": "string"}, "ts_ms": {"minimum": 0, "type": "integer"}, "ts_utc": {"format": "date-time", "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]{1,6})?Z$", "type": "string"}, "v": {"const": 1}}, "required": ["v", "serial", "subject_sha256", "label", "requested_by", "key_id", "ts_ms", "ts_utc", "prev_hash", "pubkey_hex", "receipt_hash", "sig_ed25519_hex"], "type": "object"}, "canonical_envelope_base64": {"contentEncoding": "base64", "maxLength": 16384, "minLength": 4, "pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$", "type": "string"}, "envelope": {"additionalProperties": false, "properties": {"checked_at": {"format": "date-time", "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]{1,6})?Z$", "type": "string"}, "issued_at": {"format": "date-time", "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]{1,6})?Z$", "type": "string"}, "methodology_version": {"maxLength": 256, "minLength": 1, "type": "string"}, "payment": {"additionalProperties": false, "description": "USDC uses six atomic decimals. Offline mock payments simulate USDC and move no funds. Null fees are unknown, not zero.", "properties": {"amount_atomic": {"pattern": "^(0|[1-9][0-9]{0,17})$", "type": "string"}, "asset": {"maxLength": 128, "minLength": 1, "type": "string"}, "currency": {"const": "USDC"}, "facilitator_fee_usd": {"anyOf": [{"maxLength": 32, "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$", "type": "string"}, {"type": "null"}]}, "mode": {"enum": ["offline", "testnet", "mainnet"]}, "network": {"enum": ["eip155:8453", "eip155:84532", "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", "none"]}, "network_fee_usd": {"anyOf": [{"maxLength": 32, "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$", "type": "string"}, {"type": "null"}]}, "price_usd": {"maxLength": 32, "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$", "type": "string"}, "provider": {"maxLength": 64, "minLength": 1, "type": "string"}, "simulated": {"type": "boolean"}, "status": {"const": "settled"}, "transaction": {"maxLength": 512, "type": ["string", "null"]}}, "required": ["status", "provider", "mode", "simulated", "network", "asset", "currency", "amount_atomic", "price_usd", "transaction", "facilitator_fee_usd", "network_fee_usd"], "type": "object"}, "request_id": {"format": "uuid", "type": "string"}, "result_sha256": {"pattern": "^[0-9a-f]{64}$", "type": "string"}, "type": {"const": "vigil.source-verification.purchase"}, "version": {"const": 1}}, "required": ["type", "version", "request_id", "result_sha256", "checked_at", "methodology_version", "payment", "issued_at"], "type": "object"}, "verification": {"maxLength": 1000, "minLength": 1, "type": "string"}}, "required": ["envelope", "canonical_envelope_base64", "attestation", "verification"], "type": "object"}, "request_id": {"format": "uuid", "type": "string"}, "risk_flags": {"items": {"maxLength": 128, "pattern": "^[a-z][a-z0-9_]*$", "type": "string"}, "maxItems": 32, "type": "array", "uniqueItems": true}, "schema_version": {"const": "1.0.0"}, "served_at": {"format": "date-time", "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]{1,6})?Z$", "type": "string"}, "source": {"additionalProperties": false, "properties": {"content_sha256": {"pattern": "^[0-9a-f]{64}$", "type": "string"}, "content_type": {"maxLength": 32768, "pattern": "^[Tt][Ee][Xx][Tt]/([Hh][Tt][Mm][Ll]|[Pp][Ll][Aa][Ii][Nn])(?:\\s*;.*)?$", "type": "string"}, "decoded_bytes": {"maximum": 8388608, "minimum": 0, "type": "integer"}, "final_url": {"format": "uri", "maxLength": 49152, "pattern": "^https://", "type": "string"}, "http_status": {"const": 200}, "normalized_text": {"maxLength": 100000, "type": "string"}, "offset_unit": {"const": "unicode_codepoint"}, "redirects": {"items": {"additionalProperties": false, "properties": {"status": {"enum": [301, 302, 303, 307, 308]}, "url": {"format": "uri", "maxLength": 49152, "pattern": "^https://", "type": "string"}}, "required": ["url", "status"], "type": "object"}, "maxItems": 5, "type": "array"}, "requested_url": {"format": "uri", "maxLength": 2048, "pattern": "^https://[^\\s]+$", "type": "string"}, "text_sha256": {"pattern": "^[0-9a-f]{64}$", "type": "string"}, "wire_bytes": {"maximum": 26000000, "minimum": 0, "type": "integer"}}, "required": ["requested_url", "final_url", "http_status", "content_type", "content_sha256", "text_sha256", "normalized_text", "offset_unit", "redirects", "wire_bytes", "decoded_bytes"], "type": "object"}, "source_identity": {"additionalProperties": false, "properties": {"hostname": {"maxLength": 253, "minLength": 1, "type": "string"}, "publisher_identity": {"const": "unknown"}, "tls_verified": {"type": "boolean"}}, "required": ["hostname", "tls_verified", "publisher_identity"], "type": "object"}, "status": {"const": "completed"}, "verification_type": {"const": "source"}}, "required": ["schema_version", "request_id", "status", "verification_type", "source", "reachable", "source_identity", "claim", "claim_support", "explanation", "evidence", "confidence", "risk_flags", "checked_at", "served_at", "methodology_version", "assessment_scope", "limits", "cache", "payment", "receipt"], "type": "object"}}}, "description": "Original result"}, "202": {"content": {"application/json": {"schema": {"additionalProperties": false, "properties": {"error": {"additionalProperties": false, "properties": {"code": {"maxLength": 128, "pattern": "^[a-z][a-z0-9_]*$", "type": "string"}, "message": {"maxLength": 2000, "minLength": 1, "type": "string"}, "retryable": {"type": "boolean"}}, "required": ["code", "message", "retryable"], "type": "object"}, "payment_required": {"type": "object"}, "quote": {"type": "object"}, "request_id": {"format": "uuid", "type": "string"}, "schema_version": {"const": "1.0.0"}, "status": {"enum": ["failed", "pending", "payment_required"]}}, "required": ["schema_version", "status", "error"], "type": "object"}}}, "description": "Pending"}, "404": {"content": {"application/json": {"schema": {"additionalProperties": false, "properties": {"error": {"additionalProperties": false, "properties": {"code": {"maxLength": 128, "pattern": "^[a-z][a-z0-9_]*$", "type": "string"}, "message": {"maxLength": 2000, "minLength": 1, "type": "string"}, "retryable": {"type": "boolean"}}, "required": ["code", "message", "retryable"], "type": "object"}, "payment_required": {"type": "object"}, "quote": {"type": "object"}, "request_id": {"format": "uuid", "type": "string"}, "schema_version": {"const": "1.0.0"}, "status": {"enum": ["failed", "pending", "payment_required"]}}, "required": ["schema_version", "status", "error"], "type": "object"}}}, "description": "Unknown or unauthorized"}, "410": {"content": {"application/json": {"schema": {"additionalProperties": false, "properties": {"error": {"additionalProperties": false, "properties": {"code": {"maxLength": 128, "pattern": "^[a-z][a-z0-9_]*$", "type": "string"}, "message": {"maxLength": 2000, "minLength": 1, "type": "string"}, "retryable": {"type": "boolean"}}, "required": ["code", "message", "retryable"], "type": "object"}, "payment_required": {"type": "object"}, "quote": {"type": "object"}, "request_id": {"format": "uuid", "type": "string"}, "schema_version": {"const": "1.0.0"}, "status": {"enum": ["failed", "pending", "payment_required"]}}, "required": ["schema_version", "status", "error"], "type": "object"}}}, "description": "Result expired"}}, "security": [{"recoveryToken": []}]}}, "/api/agent/v1/verify-source": {"post": {"description": "Retry with the identical body, Idempotency-Key and original payment. A pending settlement must not prompt a new payment. Unreachable, blocked or unsupported sources and execution failures return an error without submission for settlement. A completed insufficient_evidence or not_assessed result describes a successful bounded observation, including its declared assessment scope.", "operationId": "vigilVerifySource", "parameters": [{"in": "header", "name": "Idempotency-Key", "required": true, "schema": {"maxLength": 128, "minLength": 16, "pattern": "^[A-Za-z0-9_.:-]{16,128}$", "type": "string"}}, {"description": "Base64 x402 v2 payment payload; never log this header.", "in": "header", "name": "PAYMENT-SIGNATURE", "schema": {"type": "string"}}], "requestBody": {"content": {"application/json": {"schema": {"additionalProperties": false, "properties": {"claim": {"maxLength": 2000, "minLength": 1, "pattern": "\\S", "type": "string"}, "options": {"additionalProperties": false, "properties": {"max_age_seconds": {"default": 60, "maximum": 300, "minimum": 0, "type": "integer"}, "max_price_usd": {"maxLength": 32, "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$", "type": "string"}}, "type": "object"}, "source_url": {"format": "uri", "maxLength": 2048, "pattern": "^https://[^\\s]+$", "type": "string"}}, "required": ["source_url", "claim"], "type": "object"}}}, "required": true}, "responses": {"200": {"content": {"application/json": {"schema": {"additionalProperties": false, "allOf": [{"if": {"properties": {"assessment_scope": {"const": "literal_quotation_only"}}}, "then": {"properties": {"claim_support": {"enum": ["not_assessed", "insufficient_evidence"]}, "evidence": {"items": {"properties": {"stance": {"const": "mentions"}}}}}}}, {"if": {"properties": {"claim_support": {"const": "supports"}}}, "then": {"properties": {"evidence": {"allOf": [{"contains": {"properties": {"stance": {"const": "supports"}}, "required": ["stance"]}, "minContains": 1}]}}}}, {"if": {"properties": {"claim_support": {"const": "contradicts"}}}, "then": {"properties": {"evidence": {"allOf": [{"contains": {"properties": {"stance": {"const": "contradicts"}}, "required": ["stance"]}, "minContains": 1}]}}}}, {"if": {"properties": {"claim_support": {"const": "mixed"}}}, "then": {"properties": {"evidence": {"allOf": [{"contains": {"properties": {"stance": {"const": "supports"}}, "required": ["stance"]}, "minContains": 1}, {"contains": {"properties": {"stance": {"const": "contradicts"}}, "required": ["stance"]}, "minContains": 1}]}}}}], "description": "A completed source observation and purchase. Retrieval failures return the error contract and are not submitted for settlement. Source support does not establish truth.", "properties": {"assessment_scope": {"enum": ["source_local_semantic_support", "literal_quotation_only"]}, "cache": {"additionalProperties": false, "properties": {"age_seconds": {"minimum": 0, "type": "integer"}, "hit": {"type": "boolean"}, "original_checked_at": {"format": "date-time", "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]{1,6})?Z$", "type": "string"}}, "required": ["hit", "age_seconds", "original_checked_at"], "type": "object"}, "checked_at": {"format": "date-time", "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]{1,6})?Z$", "type": "string"}, "claim": {"maxLength": 2000, "minLength": 1, "type": "string"}, "claim_support": {"enum": ["supports", "contradicts", "mixed", "insufficient_evidence", "not_assessed"]}, "confidence": {"description": "No numerical confidence is published before calibration.", "type": "null"}, "evidence": {"items": {"additionalProperties": false, "description": "Offsets count Unicode code points in source.normalized_text. Verify start < end and exact substring/digest matches independently; JSON Schema cannot establish them.", "properties": {"end": {"maximum": 100000, "minimum": 1, "type": "integer"}, "evidence_id": {"pattern": "^e[1-6]$", "type": "string"}, "quote": {"maxLength": 1000, "minLength": 1, "type": "string"}, "source_sha256": {"pattern": "^[0-9a-f]{64}$", "type": "string"}, "stance": {"enum": ["supports", "contradicts", "mentions"]}, "start": {"maximum": 99999, "minimum": 0, "type": "integer"}, "text_sha256": {"pattern": "^[0-9a-f]{64}$", "type": "string"}}, "required": ["evidence_id", "quote", "start", "end", "stance", "source_sha256", "text_sha256"], "type": "object"}, "maxItems": 6, "type": "array"}, "explanation": {"maxLength": 800, "type": "string"}, "limits": {"additionalProperties": false, "properties": {"fixture": {"const": true}, "max_decoded_bytes": {"maximum": 8388608, "minimum": 1, "type": "integer"}, "max_header_bytes": {"maximum": 65536, "minimum": 1, "type": "integer"}, "max_redirects": {"maximum": 5, "minimum": 0, "type": "integer"}, "max_text_chars": {"maximum": 100000, "minimum": 1, "type": "integer"}, "max_wire_bytes": {"maximum": 4194304, "minimum": 1, "type": "integer"}, "socket_timeout_seconds": {"anyOf": [{"maximum": 15, "minimum": 1, "type": "integer"}, {"pattern": "^(0|[1-9][0-9]*)\\.[0-9]+$", "type": "string"}]}, "timeout_seconds": {"anyOf": [{"maximum": 60, "minimum": 1, "type": "integer"}, {"pattern": "^(0|[1-9][0-9]*)\\.[0-9]+$", "type": "string"}]}}, "required": ["max_text_chars"], "type": "object"}, "methodology_version": {"maxLength": 256, "minLength": 1, "type": "string"}, "payment": {"additionalProperties": false, "description": "USDC uses six atomic decimals. Offline mock payments simulate USDC and move no funds. Null fees are unknown, not zero.", "properties": {"amount_atomic": {"pattern": "^(0|[1-9][0-9]{0,17})$", "type": "string"}, "asset": {"maxLength": 128, "minLength": 1, "type": "string"}, "currency": {"const": "USDC"}, "facilitator_fee_usd": {"anyOf": [{"maxLength": 32, "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$", "type": "string"}, {"type": "null"}]}, "mode": {"enum": ["offline", "testnet", "mainnet"]}, "network": {"enum": ["eip155:8453", "eip155:84532", "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", "none"]}, "network_fee_usd": {"anyOf": [{"maxLength": 32, "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$", "type": "string"}, {"type": "null"}]}, "price_usd": {"maxLength": 32, "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$", "type": "string"}, "provider": {"maxLength": 64, "minLength": 1, "type": "string"}, "simulated": {"type": "boolean"}, "status": {"const": "settled"}, "transaction": {"maxLength": 512, "type": ["string", "null"]}}, "required": ["status", "provider", "mode", "simulated", "network", "asset", "currency", "amount_atomic", "price_usd", "transaction", "facilitator_fee_usd", "network_fee_usd"], "type": "object"}, "reachable": {"const": true}, "receipt": {"additionalProperties": false, "description": "Pin Vigil's key independently. Verify the Ed25519 attestation, SHA256 of canonical envelope bytes, and SHA256 of the result with receipt removed. Schema validation alone does not authenticate a receipt.", "properties": {"attestation": {"additionalProperties": false, "properties": {"key_id": {"minimum": 0, "type": "integer"}, "label": {"maxLength": 200, "type": ["string", "null"]}, "prev_hash": {"pattern": "^[0-9a-f]{64}$", "type": "string"}, "pubkey_hex": {"pattern": "^[0-9a-f]{64}$", "type": "string"}, "receipt_hash": {"pattern": "^[0-9a-f]{64}$", "type": "string"}, "requested_by": {"maxLength": 128, "minLength": 1, "type": "string"}, "serial": {"minimum": 1, "type": "integer"}, "sig_ed25519_hex": {"pattern": "^[0-9a-f]{128}$", "type": "string"}, "subject_sha256": {"pattern": "^[0-9a-f]{64}$", "type": "string"}, "ts_ms": {"minimum": 0, "type": "integer"}, "ts_utc": {"format": "date-time", "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]{1,6})?Z$", "type": "string"}, "v": {"const": 1}}, "required": ["v", "serial", "subject_sha256", "label", "requested_by", "key_id", "ts_ms", "ts_utc", "prev_hash", "pubkey_hex", "receipt_hash", "sig_ed25519_hex"], "type": "object"}, "canonical_envelope_base64": {"contentEncoding": "base64", "maxLength": 16384, "minLength": 4, "pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$", "type": "string"}, "envelope": {"additionalProperties": false, "properties": {"checked_at": {"format": "date-time", "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]{1,6})?Z$", "type": "string"}, "issued_at": {"format": "date-time", "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]{1,6})?Z$", "type": "string"}, "methodology_version": {"maxLength": 256, "minLength": 1, "type": "string"}, "payment": {"additionalProperties": false, "description": "USDC uses six atomic decimals. Offline mock payments simulate USDC and move no funds. Null fees are unknown, not zero.", "properties": {"amount_atomic": {"pattern": "^(0|[1-9][0-9]{0,17})$", "type": "string"}, "asset": {"maxLength": 128, "minLength": 1, "type": "string"}, "currency": {"const": "USDC"}, "facilitator_fee_usd": {"anyOf": [{"maxLength": 32, "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$", "type": "string"}, {"type": "null"}]}, "mode": {"enum": ["offline", "testnet", "mainnet"]}, "network": {"enum": ["eip155:8453", "eip155:84532", "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", "none"]}, "network_fee_usd": {"anyOf": [{"maxLength": 32, "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$", "type": "string"}, {"type": "null"}]}, "price_usd": {"maxLength": 32, "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,6})?$", "type": "string"}, "provider": {"maxLength": 64, "minLength": 1, "type": "string"}, "simulated": {"type": "boolean"}, "status": {"const": "settled"}, "transaction": {"maxLength": 512, "type": ["string", "null"]}}, "required": ["status", "provider", "mode", "simulated", "network", "asset", "currency", "amount_atomic", "price_usd", "transaction", "facilitator_fee_usd", "network_fee_usd"], "type": "object"}, "request_id": {"format": "uuid", "type": "string"}, "result_sha256": {"pattern": "^[0-9a-f]{64}$", "type": "string"}, "type": {"const": "vigil.source-verification.purchase"}, "version": {"const": 1}}, "required": ["type", "version", "request_id", "result_sha256", "checked_at", "methodology_version", "payment", "issued_at"], "type": "object"}, "verification": {"maxLength": 1000, "minLength": 1, "type": "string"}}, "required": ["envelope", "canonical_envelope_base64", "attestation", "verification"], "type": "object"}, "request_id": {"format": "uuid", "type": "string"}, "risk_flags": {"items": {"maxLength": 128, "pattern": "^[a-z][a-z0-9_]*$", "type": "string"}, "maxItems": 32, "type": "array", "uniqueItems": true}, "schema_version": {"const": "1.0.0"}, "served_at": {"format": "date-time", "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]{1,6})?Z$", "type": "string"}, "source": {"additionalProperties": false, "properties": {"content_sha256": {"pattern": "^[0-9a-f]{64}$", "type": "string"}, "content_type": {"maxLength": 32768, "pattern": "^[Tt][Ee][Xx][Tt]/([Hh][Tt][Mm][Ll]|[Pp][Ll][Aa][Ii][Nn])(?:\\s*;.*)?$", "type": "string"}, "decoded_bytes": {"maximum": 8388608, "minimum": 0, "type": "integer"}, "final_url": {"format": "uri", "maxLength": 49152, "pattern": "^https://", "type": "string"}, "http_status": {"const": 200}, "normalized_text": {"maxLength": 100000, "type": "string"}, "offset_unit": {"const": "unicode_codepoint"}, "redirects": {"items": {"additionalProperties": false, "properties": {"status": {"enum": [301, 302, 303, 307, 308]}, "url": {"format": "uri", "maxLength": 49152, "pattern": "^https://", "type": "string"}}, "required": ["url", "status"], "type": "object"}, "maxItems": 5, "type": "array"}, "requested_url": {"format": "uri", "maxLength": 2048, "pattern": "^https://[^\\s]+$", "type": "string"}, "text_sha256": {"pattern": "^[0-9a-f]{64}$", "type": "string"}, "wire_bytes": {"maximum": 26000000, "minimum": 0, "type": "integer"}}, "required": ["requested_url", "final_url", "http_status", "content_type", "content_sha256", "text_sha256", "normalized_text", "offset_unit", "redirects", "wire_bytes", "decoded_bytes"], "type": "object"}, "source_identity": {"additionalProperties": false, "properties": {"hostname": {"maxLength": 253, "minLength": 1, "type": "string"}, "publisher_identity": {"const": "unknown"}, "tls_verified": {"type": "boolean"}}, "required": ["hostname", "tls_verified", "publisher_identity"], "type": "object"}, "status": {"const": "completed"}, "verification_type": {"const": "source"}}, "required": ["schema_version", "request_id", "status", "verification_type", "source", "reachable", "source_identity", "claim", "claim_support", "explanation", "evidence", "confidence", "risk_flags", "checked_at", "served_at", "methodology_version", "assessment_scope", "limits", "cache", "payment", "receipt"], "type": "object"}}}, "description": "Completed result and signed receipt", "headers": {"PAYMENT-RESPONSE": {"description": "Base64 x402 settlement response when supplied by the provider.", "schema": {"type": "string"}}, "X-Vigil-Idempotent-Replay": {"description": "Present when returning an existing purchase.", "schema": {"const": "true", "type": "string"}}, "X-Vigil-Recovery-Token": {"description": "Opaque private recovery credential; retain securely.", "schema": {"type": "string"}}}}, "202": {"content": {"application/json": {"schema": {"additionalProperties": false, "properties": {"error": {"additionalProperties": false, "properties": {"code": {"maxLength": 128, "pattern": "^[a-z][a-z0-9_]*$", "type": "string"}, "message": {"maxLength": 2000, "minLength": 1, "type": "string"}, "retryable": {"type": "boolean"}}, "required": ["code", "message", "retryable"], "type": "object"}, "payment_required": {"type": "object"}, "quote": {"type": "object"}, "request_id": {"format": "uuid", "type": "string"}, "schema_version": {"const": "1.0.0"}, "status": {"enum": ["failed", "pending", "payment_required"]}}, "required": ["schema_version", "status", "error"], "type": "object"}}}, "description": "In progress or settlement outcome unknown; retry same payment", "headers": {"Retry-After": {"description": "Suggested retry delay in seconds.", "schema": {"type": "string"}}, "X-Vigil-Recovery-Token": {"description": "Returned when available; retain without logging.", "schema": {"type": "string"}}}}, "400": {"content": {"application/json": {"schema": {"additionalProperties": false, "properties": {"error": {"additionalProperties": false, "properties": {"code": {"maxLength": 128, "pattern": "^[a-z][a-z0-9_]*$", "type": "string"}, "message": {"maxLength": 2000, "minLength": 1, "type": "string"}, "retryable": {"type": "boolean"}}, "required": ["code", "message", "retryable"], "type": "object"}, "payment_required": {"type": "object"}, "quote": {"type": "object"}, "request_id": {"format": "uuid", "type": "string"}, "schema_version": {"const": "1.0.0"}, "status": {"enum": ["failed", "pending", "payment_required"]}}, "required": ["schema_version", "status", "error"], "type": "object"}}}, "description": "Invalid request"}, "402": {"content": {"application/json": {"schema": {"additionalProperties": false, "properties": {"error": {"additionalProperties": false, "properties": {"code": {"maxLength": 128, "pattern": "^[a-z][a-z0-9_]*$", "type": "string"}, "message": {"maxLength": 2000, "minLength": 1, "type": "string"}, "retryable": {"type": "boolean"}}, "required": ["code", "message", "retryable"], "type": "object"}, "payment_required": {"type": "object"}, "quote": {"type": "object"}, "request_id": {"format": "uuid", "type": "string"}, "schema_version": {"const": "1.0.0"}, "status": {"enum": ["failed", "pending", "payment_required"]}}, "required": ["schema_version", "status", "error"], "type": "object"}}}, "description": "Payment requirement, invalid authorization, or failed settlement", "headers": {"PAYMENT-REQUIRED": {"description": "Base64 x402 PaymentRequired; present for a payment challenge.", "schema": {"type": "string"}}}}, "409": {"content": {"application/json": {"schema": {"additionalProperties": false, "properties": {"error": {"additionalProperties": false, "properties": {"code": {"maxLength": 128, "pattern": "^[a-z][a-z0-9_]*$", "type": "string"}, "message": {"maxLength": 2000, "minLength": 1, "type": "string"}, "retryable": {"type": "boolean"}}, "required": ["code", "message", "retryable"], "type": "object"}, "payment_required": {"type": "object"}, "quote": {"type": "object"}, "request_id": {"format": "uuid", "type": "string"}, "schema_version": {"const": "1.0.0"}, "status": {"enum": ["failed", "pending", "payment_required"]}}, "required": ["schema_version", "status", "error"], "type": "object"}}}, "description": "Idempotency/payment conflict"}, "410": {"content": {"application/json": {"schema": {"additionalProperties": false, "properties": {"error": {"additionalProperties": false, "properties": {"code": {"maxLength": 128, "pattern": "^[a-z][a-z0-9_]*$", "type": "string"}, "message": {"maxLength": 2000, "minLength": 1, "type": "string"}, "retryable": {"type": "boolean"}}, "required": ["code", "message", "retryable"], "type": "object"}, "payment_required": {"type": "object"}, "quote": {"type": "object"}, "request_id": {"format": "uuid", "type": "string"}, "schema_version": {"const": "1.0.0"}, "status": {"enum": ["failed", "pending", "payment_required"]}}, "required": ["schema_version", "status", "error"], "type": "object"}}}, "description": "Expired quote/result"}, "415": {"content": {"application/json": {"schema": {"additionalProperties": false, "properties": {"error": {"additionalProperties": false, "properties": {"code": {"maxLength": 128, "pattern": "^[a-z][a-z0-9_]*$", "type": "string"}, "message": {"maxLength": 2000, "minLength": 1, "type": "string"}, "retryable": {"type": "boolean"}}, "required": ["code", "message", "retryable"], "type": "object"}, "payment_required": {"type": "object"}, "quote": {"type": "object"}, "request_id": {"format": "uuid", "type": "string"}, "schema_version": {"const": "1.0.0"}, "status": {"enum": ["failed", "pending", "payment_required"]}}, "required": ["schema_version", "status", "error"], "type": "object"}}}, "description": "Use application/json"}, "422": {"content": {"application/json": {"schema": {"additionalProperties": false, "properties": {"error": {"additionalProperties": false, "properties": {"code": {"maxLength": 128, "pattern": "^[a-z][a-z0-9_]*$", "type": "string"}, "message": {"maxLength": 2000, "minLength": 1, "type": "string"}, "retryable": {"type": "boolean"}}, "required": ["code", "message", "retryable"], "type": "object"}, "payment_required": {"type": "object"}, "quote": {"type": "object"}, "request_id": {"format": "uuid", "type": "string"}, "schema_version": {"const": "1.0.0"}, "status": {"enum": ["failed", "pending", "payment_required"]}}, "required": ["schema_version", "status", "error"], "type": "object"}}}, "description": "Verification/retrieval failure or caller budget exceeded; not submitted for settlement"}, "429": {"content": {"application/json": {"schema": {"additionalProperties": false, "properties": {"error": {"additionalProperties": false, "properties": {"code": {"maxLength": 128, "pattern": "^[a-z][a-z0-9_]*$", "type": "string"}, "message": {"maxLength": 2000, "minLength": 1, "type": "string"}, "retryable": {"type": "boolean"}}, "required": ["code", "message", "retryable"], "type": "object"}, "payment_required": {"type": "object"}, "quote": {"type": "object"}, "request_id": {"format": "uuid", "type": "string"}, "schema_version": {"const": "1.0.0"}, "status": {"enum": ["failed", "pending", "payment_required"]}}, "required": ["schema_version", "status", "error"], "type": "object"}}}, "description": "Rate limited"}, "503": {"content": {"application/json": {"schema": {"additionalProperties": false, "properties": {"error": {"additionalProperties": false, "properties": {"code": {"maxLength": 128, "pattern": "^[a-z][a-z0-9_]*$", "type": "string"}, "message": {"maxLength": 2000, "minLength": 1, "type": "string"}, "retryable": {"type": "boolean"}}, "required": ["code", "message", "retryable"], "type": "object"}, "payment_required": {"type": "object"}, "quote": {"type": "object"}, "request_id": {"format": "uuid", "type": "string"}, "schema_version": {"const": "1.0.0"}, "status": {"enum": ["failed", "pending", "payment_required"]}}, "required": ["schema_version", "status", "error"], "type": "object"}}}, "description": "Disabled or unavailable capacity/provider"}}, "summary": "Observe a public source and assess support for one claim"}}}, "servers": [{"url": "https://vigilnotary.com"}]}
