{"openapi":"3.1.0","info":{"title":"Batchloom Agent Services","version":"1.4.0","description":"Citation evidence for static public sources and a local SVG asset toolkit, through agent-only APIs."},"servers":[{"url":"https://batchloom-studio-0913.xuikatwsicrdsidm.chatgpt.site"}],"x-free-compute-rate-limit":{"requests":20,"windowSeconds":60,"scope":"per_client","enforcement":"database_required","operations":["previewAssets","validateBatch","validateEvidenceRequest","fixedEvidenceDemo","prepareEvidenceRequest","compareEvidenceSnapshots","trialEvidence","auditReportCitations"],"mcp_tools":["preview_assets","validate_batch","validate_evidence_request","prepare_evidence_request","compare_evidence_snapshots","trial_evidence","audit_report_citations"]},"tags":[{"name":"Discovery"},{"name":"Free tools"},{"name":"Purchase"},{"name":"MCP"}],"paths":{"/.well-known/agent.json":{"get":{"operationId":"getAgentManifest","tags":["Discovery"],"summary":"Read capabilities, prices, limits and purchase instructions","responses":{"200":{"description":"Public machine manifest with runtime activation state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Manifest"}}}}}}},"/openapi.json":{"get":{"operationId":"getOpenApi","tags":["Discovery"],"summary":"Read this OpenAPI 3.1 document","responses":{"200":{"description":"OpenAPI document.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/llms.txt":{"get":{"operationId":"getAgentInstructions","tags":["Discovery"],"summary":"Read concise agent usage instructions","responses":{"200":{"description":"Plain-text usage, pricing, limits and recovery instructions.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/client-example.mjs":{"get":{"operationId":"getPaymentClientExample","tags":["Discovery"],"summary":"Inspect a caller-controlled x402 client recipe","responses":{"200":{"description":"Example JavaScript client code; importing it does not authorize a payment.","content":{"text/javascript":{"schema":{"type":"string"}}}}}}},"/v1/status":{"get":{"operationId":"readServiceStatus","tags":["Discovery"],"summary":"Check whether payments are active","responses":{"200":{"description":"Service and payment activation status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceStatus"}}}},"503":{"description":"Service unavailable. For a paid request, preserve both original payment credentials and retry without signing again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/schema":{"get":{"operationId":"getRenderInputSchema","tags":["Free tools"],"summary":"Read the complete renderer input JSON Schema","description":"JSON Schema 2020-12 for local batches and free validation. Free preview uses the same contract with products.maxItems=1. Runtime validation adds the Unicode and product-ID uniqueness rules described by the schema.","responses":{"200":{"description":"Standalone JSON Schema, not a rendered asset or source toolkit.","content":{"application/json":{"schema":{"type":"object","required":["$schema","type","properties","$defs"]}}}},"503":{"description":"Service unavailable. For a paid request, preserve both original payment credentials and retry without signing again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/sample":{"get":{"operationId":"inspectFreeSample","tags":["Free tools"],"summary":"Inspect three fixed SVG examples for free","responses":{"200":{"description":"Three predefined SVG assets with renderer version and warnings; no toolkit source.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetResult"}}}},"503":{"description":"Service unavailable. For a paid request, preserve both original payment credentials and retry without signing again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/preview":{"post":{"operationId":"previewAssets","tags":["Free tools"],"summary":"Render a free preview for one product","description":"Accepts at most 1 product and 3 unique formats. Maximum request body: 8192 UTF-8 bytes. Default formats are square, portrait and story. Returns SVG assets and structured warnings; never returns toolkit source.","x-max-body-bytes":8192,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewInput"},"example":{"brand":"FIELDWORK","products":[{"id":"everyday-kit","title":"A better everyday.","subtitle":"Thoughtful essentials.","price":"$29","cta":"Explore"}],"formats":["square"],"theme":"lime","style":"editorial"}}}},"responses":{"200":{"description":"One product rendered into up to three assets.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetResult"}}}},"400":{"description":"Malformed JSON or invalid request envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"The UTF-8 request body exceeds this endpoint's byte limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"Use Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Renderer input rejected; no source toolkit is returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationFailure"}}}},"429":{"description":"Rate limited; retry later.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"Delay in seconds before retrying the same request and original payment credentials, if any.","schema":{"type":"integer","minimum":1}}}},"503":{"description":"Service unavailable. For a paid request, preserve both original payment credentials and retry without signing again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/validate":{"post":{"operationId":"validateBatch","tags":["Free tools"],"summary":"Validate a full batch before buying or rendering","description":"Accepts up to 100 products and 3 unique formats. Maximum request body: 65536 UTF-8 bytes. Returns valid=true, productCount, expected assetCount and validation warnings. It does not return assets or toolkit source; layout warnings arise during rendering.","x-max-body-bytes":65536,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderInput"}}}},"responses":{"200":{"description":"Input is valid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationSuccess"}}}},"400":{"description":"Malformed JSON or invalid request envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"The UTF-8 request body exceeds this endpoint's byte limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"Use Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Renderer input rejected; no source toolkit is returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationFailure"}}}},"429":{"description":"Rate limited; retry later.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"Delay in seconds before retrying the same request and original payment credentials, if any.","schema":{"type":"integer","minimum":1}}}},"503":{"description":"Service unavailable. For a paid request, preserve both original payment credentials and retry without signing again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/kit":{"get":{"operationId":"buyAgentAssetKit","tags":["Purchase"],"summary":"Purchase the source toolkit for 0.99 USDC on Base","description":"A one-time source license, not a metered rendering subscription. Use the exact URL without query parameters and Accept: application/json. An unpaid request returns HTTP 402 when payments are active. Use an operator-authorized x402 v2 exact EVM client to sign the advertised native USDC amount. Before purchase, generate 32 cryptographically random bytes and encode them as 64 lowercase hex characters. Persist this private X-Delivery-Token before signing. Send it with the initial GET and all retries. Persist PAYMENT-SIGNATURE before sending it. After an uncertain response, retry the identical URL, signature and token; do not authorize another payment. No MCP tool signs, pays, or grants a license.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.99"}},"parameters":[{"name":"X-Delivery-Token","in":"header","required":true,"description":"Client-generated private recovery secret. Recommended on the first unpaid GET and required before any signed request can settle. Preserve the same token across retries.","schema":{"type":"string","pattern":"^[a-f0-9]{64}$"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"description":"Base64-encoded x402 v2 payment payload from the buying agent's authorized client. Omit to inspect the 402 offer; preserve unchanged once signed.","schema":{"type":"string","maxLength":24000}}],"responses":{"200":{"description":"Purchased toolkit files and SHA-256 hashes, including recovery of an already settled purchase.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Kit"}}},"headers":{"PAYMENT-RESPONSE":{"description":"Base64-encoded JSON settlement receipt with success, transaction, network and payer.","schema":{"type":"string"}}}},"400":{"description":"Unsupported query parameters, malformed payment payload, legacy X-PAYMENT, excessive payment header, or a mismatched resource URL.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Payment required, offer mismatch, or payment not validated. Read the machine offer before authorizing payment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}},"headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 offer. USDC amount is in six-decimal atomic units.","schema":{"type":"string"}},"X-Delivery-Token-Required":{"description":"Recovery token is required before settlement.","schema":{"const":"true"}}}},"403":{"description":"This payment authorization is bound to another private delivery token or payload. Recover the original credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"406":{"description":"HTML browser checkout is unavailable. Use an x402 JSON client.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The original payment is already processing. Retry the same credentials later.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"Delay in seconds before retrying the same request and original payment credentials, if any.","schema":{"type":"integer","minimum":1}}}},"428":{"description":"A signed request has a missing or malformed X-Delivery-Token; no settlement is attempted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Payment attempts are rate limited. Retry the original credentials later.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"Delay in seconds before retrying the same request and original payment credentials, if any.","schema":{"type":"integer","minimum":1}}}},"503":{"description":"Service unavailable. For a paid request, preserve both original payment credentials and retry without signing again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"Delay in seconds before retrying the same request and original payment credentials, if any.","schema":{"type":"integer","minimum":1}}}}}}},"/v1/mcp":{"post":{"operationId":"callMcp","tags":["MCP"],"summary":"Use eleven free MCP tools over JSON","description":"MCP 2025-11-25, with 2025-03-26 and 2025-06-18 compatibility. Initialize, send notifications/initialized, then use tools/list or tools/call. Each POST is one JSON-RPC 2.0 message; batch arrays and SSE are unsupported. No session IDs are issued. Maximum HTTP body: 196608 UTF-8 bytes; Tool arguments retain separate limits: preview_assets 8192 bytes, validate_batch 65536 bytes, evidence preparation/validation 32768 bytes, snapshot comparison 196608 bytes (within the HTTP envelope limit). All tools are free and provide no payment-signing capability.","x-max-body-bytes":196608,"parameters":[{"name":"MCP-Protocol-Version","in":"header","required":false,"description":"Send the negotiated protocol version on requests after initialization.","schema":{"enum":["2025-11-25","2025-03-26","2025-06-18"]}},{"name":"Accept","in":"header","required":true,"description":"MCP clients advertise JSON and SSE support; this server chooses JSON responses.","schema":{"type":"string","example":"application/json, text/event-stream"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcRequest"},"examples":{"initialize":{"value":{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"example-agent","version":"1.0.0"}}}},"listTools":{"value":{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}},"preview":{"value":{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"preview_assets","arguments":{"brand":"FIELDWORK","products":[{"id":"everyday-kit","title":"A better everyday.","subtitle":"Thoughtful essentials.","price":"$29","cta":"Explore"}],"formats":["square"],"theme":"lime","style":"editorial"}}}}}}}},"responses":{"200":{"description":"JSON-RPC result or protocol error. A tool validation failure returns result.isError=true and result.structuredContent={valid:false,error:{code,message,issues}}. It does not use HTTP 422.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcResponse"}}}},"202":{"description":"Notification accepted; the response body is empty."},"400":{"description":"Malformed JSON-RPC or unsupported transport/protocol input.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcResponse"}}}},"403":{"description":"Invalid Origin header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"The UTF-8 request body exceeds this endpoint's byte limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"Use Content-Type: application/json.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Free compute calls are rate limited across REST and MCP.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"Delay in seconds before retrying the same request and original payment credentials, if any.","schema":{"type":"integer","minimum":1}}}},"503":{"description":"Service unavailable. For a paid request, preserve both original payment credentials and retry without signing again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"operationId":"mcpGetUnsupported","tags":["MCP"],"summary":"SSE is not available","responses":{"405":{"description":"Use POST /v1/mcp; this endpoint does not offer an SSE stream.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Allow":{"schema":{"type":"string","example":"POST"}}}}}}},"/v1/evidence/schema":{"get":{"summary":"Read citation input schema","tags":["Free tools"],"responses":{"200":{"description":"Read citation input schema","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Malformed JSON or invalid request envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Free compute rate limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Fixed live source unavailable; no payment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Service unavailable. For a paid request, preserve both original payment credentials and retry without signing again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/evidence/contract":{"get":{"summary":"Read source coverage, pricing, privacy and recovery","tags":["Free tools"],"responses":{"200":{"description":"Read source coverage, pricing, privacy and recovery","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Malformed JSON or invalid request envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Free compute rate limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Fixed live source unavailable; no payment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Service unavailable. For a paid request, preserve both original payment credentials and retry without signing again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/evidence/sample":{"get":{"summary":"Read a synthetic evidence fixture","tags":["Free tools"],"responses":{"200":{"description":"Read a synthetic evidence fixture","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Malformed JSON or invalid request envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Free compute rate limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Fixed live source unavailable; no payment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Service unavailable. For a paid request, preserve both original payment credentials and retry without signing again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/evidence/demo":{"get":{"summary":"Run only the fixed example.com demonstration","tags":["Free tools"],"responses":{"200":{"description":"Run only the fixed example.com demonstration","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Malformed JSON or invalid request envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Free compute rate limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Fixed live source unavailable; no payment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Service unavailable. For a paid request, preserve both original payment credentials and retry without signing again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/evidence/validate":{"post":{"operationId":"validateEvidenceRequest","summary":"Validate source/quote input without crawling or paying","tags":["Free tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceInput"}}}},"responses":{"200":{"description":"Valid input, with sourceCount, quoteCount, availabilityChecked=false.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Malformed JSON or invalid request envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"The UTF-8 request body exceeds this endpoint's byte limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"Use JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Invalid input.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Free quota exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Service unavailable. For a paid request, preserve both original payment credentials and retry without signing again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/evidence":{"post":{"operationId":"buyCitationEvidence","summary":"Check up to 20 literal quotes on up to 5 sources for 0.01 USDC","description":"Set requireAllSources:true to require every source to be readable before settlement. Without that option: one fixed payment per batch when at least one source is completely readable. A readable page with no matching quotes is still chargeable. Mixed batches include explicit failures and cost the same. When every source is unusable, no settlement is submitted and no evidence is delivered. Persist a private 32-byte X-Delivery-Token, the original input, intent ID and PAYMENT-SIGNATURE before sending a signed request. Retry all originals. A stored result is delivered only after confirmed settlement. The same receipt returns the same snapshot; a fresh snapshot requires a new explicit purchase intent. Never sign again to recover uncertainty. Unsigned price discovery only; no source fetching, authorization or settlement. Actual purchase and recovery require POST with valid input. Signed GET/HEAD are rejected. Paused sales return 503. When every source is unusable, the client may expose a bounded diagnosis tied to the current attempt and original input. It contains no source URLs, quotes or excerpts. It reports no settlement submitted in this attempt only; it is not a cryptographic no-payment guarantee. paymentStatus stays unresolved. Preserve original receipts; changed input requires separate explicit authorization. Never automatically replace a payment because of an error body. Set true before signing to require every source to be readable before any settlement submission in that attempt. Zero literal matches may still be chargeable. The policy is bound to the original input hash and immutable receipt; never change it for recovery.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}},"x-max-body-bytes":32768,"tags":["Purchase"],"parameters":[{"name":"X-Delivery-Token","in":"header","required":false,"description":"Required on signed requests; persist privately before signing.","schema":{"type":"string","pattern":"^[a-f0-9]{64}$"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"type":"string","maxLength":24000}},{"name":"X-Evidence-Attempt","in":"header","required":false,"description":"Optional fresh 16-byte hex correlation per signed HTTP attempt. Not an authorization, payment nonce, secret or purchase intent.","schema":{"type":"string","pattern":"^[a-f0-9]{32}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceInput"},"example":{"sources":[{"url":"https://example.com/","quotes":["This domain is for use in documentation examples"]}]}}}},"responses":{"200":{"description":"Settled evidence result. Mixed batches and zero matched quotes on readable pages are chargeable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceResult"}}},"headers":{"PAYMENT-RESPONSE":{"schema":{"type":"string"}},"X-Evidence-Receipt":{"schema":{"type":"string"}},"X-Result-SHA256":{"schema":{"type":"string"}}}},"400":{"description":"Malformed JSON or invalid request envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"x402 v2 exact offer: 10000 atomic native Base USDC. Unsigned empty-body or empty-object POST and GET/HEAD inspect POST terms only. Signed purchase requires a valid body.","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Original purchase is processing or credentials/input conflict.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"The UTF-8 request body exceeds this endpoint's byte limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"Use uncompressed JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"428":{"description":"Private delivery token required before settlement.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Retry original credentials later.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"All sources unusable, or requireAllSources policy unmet; no settlement submitted in this attempt. Preserve original private receipt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Service unavailable. For a paid request, preserve both original payment credentials and retry without signing again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/evidence/prepare":{"post":{"operationId":"prepareEvidenceRequest","tags":["Free tools"],"summary":"Prepare exact price, input binding and recovery instructions without payment","description":"POST the original input to /v1/evidence/prepare for its canonical input hash, exact price, receipt storage observation and client instructions. No secret, source fetch, signing or payment is generated. Source and facilitator availability remain unchecked.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceInput"}}}},"responses":{"200":{"description":"Input hash, exact offer, receipt-storage observation and instructions. Source and facilitator availability are not checked; no secret or signature generated.","content":{"application/json":{"schema":{"type":"object","required":["valid","inputHash","price","readiness","authorized","paymentSubmitted"],"properties":{"valid":{"const":true},"inputHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"authorized":{"const":false},"paymentSubmitted":{"const":false},"price":{"type":"object"},"readiness":{"type":"object"}}}}}},"400":{"description":"Malformed JSON or invalid request envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"The UTF-8 request body exceeds this endpoint's byte limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"Use JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Input validation failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Free compute quota exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Service unavailable. For a paid request, preserve both original payment credentials and retry without signing again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/evidence/compare":{"post":{"operationId":"compareEvidenceSnapshots","tags":["Free tools"],"summary":"Compare supplied evidence snapshots without fetching or paying","description":"Compares supplied snapshots without fetching, paying or storing their contents. Unreadable sources are never labeled quote removals. Missing/different processing profiles, non-increasing fetch times and redirect/content-type changes yield review-only observations. Recovered identical results are the same snapshot, not fresh data. Input/snapshot hashes are consistency checks, not authenticity proofs.","x-max-body-bytes":196608,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Compare two saved citation evidence snapshots","type":"object","additionalProperties":false,"required":["input","before","after"],"properties":{"input":{"type":"object","additionalProperties":false,"required":["sources"],"properties":{"requireAllSources":{"type":"boolean","description":"Preserve the exact billing policy from the original request, including omission."},"sources":{"type":"array","minItems":1,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["url","quotes"],"properties":{"url":{"type":"string","format":"uri","pattern":"^https://","maxLength":2048},"quotes":{"type":"array","minItems":1,"maxItems":4,"items":{"type":"string","minLength":12,"maxLength":400}}}}}}},"before":{"type":"object","additionalProperties":true,"required":["inputHash","evidence"],"description":"Saved inputHash plus a bounded version-1 evidence body. Other client-result fields are ignored; no payment/authenticity claim is inferred.","properties":{"inputHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"evidence":{"type":"object","required":["version","results","usableSources","allResultsUnusable","warnings"],"description":"At most 65536 canonical UTF-8 bytes. Detailed status/match consistency is enforced by the runtime.","properties":{"version":{"const":"1"},"processingProfile":{"type":"string","pattern":"^[a-f0-9]{64}$"},"results":{"type":"array","minItems":1,"maxItems":5,"items":{"type":"object"}},"usableSources":{"type":"integer","minimum":0,"maximum":5},"allResultsUnusable":{"type":"boolean"},"warnings":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":2000}}}}}},"after":{"type":"object","additionalProperties":true,"required":["inputHash","evidence"],"description":"Saved inputHash plus a bounded version-1 evidence body. Other client-result fields are ignored; no payment/authenticity claim is inferred.","properties":{"inputHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"evidence":{"type":"object","required":["version","results","usableSources","allResultsUnusable","warnings"],"description":"At most 65536 canonical UTF-8 bytes. Detailed status/match consistency is enforced by the runtime.","properties":{"version":{"const":"1"},"processingProfile":{"type":"string","pattern":"^[a-f0-9]{64}$"},"results":{"type":"array","minItems":1,"maxItems":5,"items":{"type":"object"}},"usableSources":{"type":"integer","minimum":0,"maximum":5},"allResultsUnusable":{"type":"boolean"},"warnings":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":2000}}}}}}},"description":"Pure offline comparison; no source fetching or payment. Both inputHash values must equal SHA-256 of the canonical input. Old or different processing profiles and non-increasing/unknown timestamps receive review-only observations.","x-max-utf8-bytes":196608,"x-output-max-utf8-bytes-exclusive":32768}}}},"responses":{"200":{"description":"Bounded source/quote transitions and review reasons; no quoted content echoed.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Malformed JSON or invalid request envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"The UTF-8 request body exceeds this endpoint's byte limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"Use JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Malformed, mismatched or contradictory snapshots.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Free compute quota exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Service unavailable. For a paid request, preserve both original payment credentials and retry without signing again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/evidence/trial":{"post":{"operationId":"trialEvidence","tags":["Free tools"],"summary":"Try one real supported URL and quote without paying","security":[],"x-max-body-bytes":4096,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Free custom evidence trial","type":"object","additionalProperties":false,"required":["sources"],"description":"Try one supported source and one quote with the production extractor. No payment or durable receipt. Shared free quota plus 2 attempts/client/UTC day and 100 attempts/service/UTC day.","properties":{"requireAllSources":{"type":"boolean","description":"When true, settlement requires every requested source to be readable. Does not require quotes to match. Original input and policy must be preserved for recovery."},"sources":{"type":"array","minItems":1,"maxItems":1,"items":{"type":"object","additionalProperties":false,"required":["url","quotes"],"properties":{"url":{"type":"string","format":"uri","maxLength":2048,"pattern":"^https://","description":"Exact host must occur in x-allowed-hosts; no subdomain wildcards."},"quotes":{"type":"array","minItems":1,"maxItems":1,"items":{"type":"string","minLength":12,"maxLength":400,"description":"12–400 Unicode code points, also after NFC and whitespace normalization. No non-whitespace control characters or unpaired surrogates."}}}}}},"x-max-utf8-bytes":4096,"x-allowed-hosts":["docs.docker.com","react.dev","docs.astral.sh","www.typescriptlang.org","www.postgresql.org","proceedings.mlr.press","aclanthology.org","example.com","arxiv.org","en.wikipedia.org","developers.cloudflare.com","www.sec.gov","www.federalreserve.gov","docs.python.org","developer.mozilla.org","www.nasa.gov","science.nasa.gov","www.noaa.gov","www.nist.gov","www.cdc.gov","www.who.int","www.worldbank.org","data.worldbank.org","www.imf.org","www.oecd.org","www.un.org","www.gov.uk","www.legislation.gov.uk","eur-lex.europa.eu","doc.rust-lang.org","go.dev","nodejs.org","tc39.es","www.rfc-editor.org"]}}}},"responses":{"200":{"description":"Bounded result; no payment submitted and no durable paid receipt.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Malformed JSON or invalid request envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"The UTF-8 request body exceeds this endpoint's byte limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"Use uncompressed UTF-8 JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Invalid input.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Shared free quota or daily trial allowance exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Trial source unusable; no payment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Service unavailable. For a paid request, preserve both original payment credentials and retry without signing again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/evidence/report-audit":{"post":{"operationId":"auditReportCitations","tags":["Free tools"],"summary":"Audit report citation structure and prepare all-readable evidence batches","security":[],"x-max-body-bytes":98304,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Batchloom report citation preflight","type":"object","additionalProperties":false,"required":["report","references"],"description":"Audit caller-supplied text using explicit [cite:id] markers, including inside code or quotations. Blank-line-separated nonempty blocks are counted as text blocks, not factual claims. No remote pages are read. Runtime limits and validation are authoritative.","properties":{"report":{"type":"string","minLength":1,"maxLength":24000},"references":{"type":"array","maxItems":20,"items":{"type":"object","additionalProperties":false,"required":["id","url","quotes"],"properties":{"id":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,31}$"},"url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"description":"Use null when the reference URL is missing; unsupported URLs are reported, never fetched."},"quotes":{"type":"array","maxItems":4,"items":{"type":"string","maxLength":400},"description":"Literal source quotations to check; 12–400 code points are required for a prepared evidence request."}}}}},"x-max-utf8-bytes":98304}}}},"responses":{"200":{"description":"Bounded result; no payment submitted and no durable paid receipt.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Malformed JSON or invalid request envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"The UTF-8 request body exceeds this endpoint's byte limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"Use uncompressed UTF-8 JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Invalid input.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Shared free quota or daily trial allowance exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Trial source unusable; no payment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Service unavailable. For a paid request, preserve both original payment credentials and retry without signing again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}},"components":{"schemas":{"RenderInput":{"title":"Batchloom Agent Kit render input","description":"Render deterministic, self-contained SVG product cards. No HTML, image, font or URL resources are accepted. Strings are displayed as escaped plain text. Runtime validation additionally rejects invalid Unicode, remaining Unicode format controls outside the BMP, whitespace-only required text and product IDs that collide ignoring ASCII case.","type":"object","additionalProperties":false,"required":["brand","products"],"properties":{"brand":{"allOf":[{"type":"string","pattern":"^[^\u0000-\u001f-­؀-؅؜۝܏࢐-࢑࣢᠎​-‏ -‮⁠-⁯﻿￹-￻￾￿]*$","description":"Plain text only. C0/C1, zero-width/direction controls and line/paragraph separators are forbidden. No markup is interpreted. NFC, outer whitespace and repeated ASCII spaces are normalized with a warning. Length is measured in Unicode code points."}],"minLength":1,"maxLength":40},"products":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["id","title"],"properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","description":"Portable filename identifier, unique across products ignoring ASCII case."},"title":{"allOf":[{"type":"string","pattern":"^[^\u0000-\u001f-­؀-؅؜۝܏࢐-࢑࣢᠎​-‏ -‮⁠-⁯﻿￹-￻￾￿]*$","description":"Plain text only. C0/C1, zero-width/direction controls and line/paragraph separators are forbidden. No markup is interpreted. NFC, outer whitespace and repeated ASCII spaces are normalized with a warning. Length is measured in Unicode code points."}],"minLength":1,"maxLength":100},"subtitle":{"allOf":[{"type":"string","pattern":"^[^\u0000-\u001f-­؀-؅؜۝܏࢐-࢑࣢᠎​-‏ -‮⁠-⁯﻿￹-￻￾￿]*$","description":"Plain text only. C0/C1, zero-width/direction controls and line/paragraph separators are forbidden. No markup is interpreted. NFC, outer whitespace and repeated ASCII spaces are normalized with a warning. Length is measured in Unicode code points."}],"maxLength":180,"default":""},"price":{"allOf":[{"type":"string","pattern":"^[^\u0000-\u001f-­؀-؅؜۝܏࢐-࢑࣢᠎​-‏ -‮⁠-⁯﻿￹-￻￾￿]*$","description":"Plain text only. C0/C1, zero-width/direction controls and line/paragraph separators are forbidden. No markup is interpreted. NFC, outer whitespace and repeated ASCII spaces are normalized with a warning. Length is measured in Unicode code points."}],"maxLength":35,"default":""},"cta":{"allOf":[{"type":"string","pattern":"^[^\u0000-\u001f-­؀-؅؜۝܏࢐-࢑࣢᠎​-‏ -‮⁠-⁯﻿￹-￻￾￿]*$","description":"Plain text only. C0/C1, zero-width/direction controls and line/paragraph separators are forbidden. No markup is interpreted. NFC, outer whitespace and repeated ASCII spaces are normalized with a warning. Length is measured in Unicode code points."}],"maxLength":45,"default":""}}}},"formats":{"type":"array","minItems":1,"maxItems":3,"uniqueItems":true,"default":["square","portrait","story"],"items":{"enum":["square","portrait","story"]}},"theme":{"enum":["lime","blue","pink"],"default":"lime"},"style":{"enum":["editorial","bold","minimal"],"default":"editorial"}}},"PreviewInput":{"title":"Batchloom free preview input","description":"Render deterministic, self-contained SVG product cards. No HTML, image, font or URL resources are accepted. Strings are displayed as escaped plain text. Runtime validation additionally rejects invalid Unicode, remaining Unicode format controls outside the BMP, whitespace-only required text and product IDs that collide ignoring ASCII case. Free HTTP previews accept one product and a JSON body up to 8192 UTF-8 bytes.","type":"object","additionalProperties":false,"required":["brand","products"],"properties":{"brand":{"allOf":[{"type":"string","pattern":"^[^\u0000-\u001f-­؀-؅؜۝܏࢐-࢑࣢᠎​-‏ -‮⁠-⁯﻿￹-￻￾￿]*$","description":"Plain text only. C0/C1, zero-width/direction controls and line/paragraph separators are forbidden. No markup is interpreted. NFC, outer whitespace and repeated ASCII spaces are normalized with a warning. Length is measured in Unicode code points."}],"minLength":1,"maxLength":40},"products":{"type":"array","minItems":1,"maxItems":1,"items":{"type":"object","additionalProperties":false,"required":["id","title"],"properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","description":"Portable filename identifier, unique across products ignoring ASCII case."},"title":{"allOf":[{"type":"string","pattern":"^[^\u0000-\u001f-­؀-؅؜۝܏࢐-࢑࣢᠎​-‏ -‮⁠-⁯﻿￹-￻￾￿]*$","description":"Plain text only. C0/C1, zero-width/direction controls and line/paragraph separators are forbidden. No markup is interpreted. NFC, outer whitespace and repeated ASCII spaces are normalized with a warning. Length is measured in Unicode code points."}],"minLength":1,"maxLength":100},"subtitle":{"allOf":[{"type":"string","pattern":"^[^\u0000-\u001f-­؀-؅؜۝܏࢐-࢑࣢᠎​-‏ -‮⁠-⁯﻿￹-￻￾￿]*$","description":"Plain text only. C0/C1, zero-width/direction controls and line/paragraph separators are forbidden. No markup is interpreted. NFC, outer whitespace and repeated ASCII spaces are normalized with a warning. Length is measured in Unicode code points."}],"maxLength":180,"default":""},"price":{"allOf":[{"type":"string","pattern":"^[^\u0000-\u001f-­؀-؅؜۝܏࢐-࢑࣢᠎​-‏ -‮⁠-⁯﻿￹-￻￾￿]*$","description":"Plain text only. C0/C1, zero-width/direction controls and line/paragraph separators are forbidden. No markup is interpreted. NFC, outer whitespace and repeated ASCII spaces are normalized with a warning. Length is measured in Unicode code points."}],"maxLength":35,"default":""},"cta":{"allOf":[{"type":"string","pattern":"^[^\u0000-\u001f-­؀-؅؜۝܏࢐-࢑࣢᠎​-‏ -‮⁠-⁯﻿￹-￻￾￿]*$","description":"Plain text only. C0/C1, zero-width/direction controls and line/paragraph separators are forbidden. No markup is interpreted. NFC, outer whitespace and repeated ASCII spaces are normalized with a warning. Length is measured in Unicode code points."}],"maxLength":45,"default":""}}}},"formats":{"type":"array","minItems":1,"maxItems":3,"uniqueItems":true,"default":["square","portrait","story"],"items":{"enum":["square","portrait","story"]}},"theme":{"enum":["lime","blue","pink"],"default":"lime"},"style":{"enum":["editorial","bold","minimal"],"default":"editorial"}}},"Warning":{"type":"object","required":["code","path","message"],"properties":{"code":{"type":"string"},"path":{"type":"string"},"message":{"type":"string"},"format":{"enum":["square","portrait","story"]}}},"Asset":{"type":"object","required":["productId","format","width","height","filename","svg"],"properties":{"productId":{"type":"string"},"format":{"enum":["square","portrait","story"]},"width":{"const":1080},"height":{"enum":[1080,1350,1920]},"filename":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}-(square|portrait|story)\\.svg$"},"svg":{"type":"string","description":"Self-contained SVG markup containing escaped plain text and geometry. This is an asset, not renderer source."}}},"AssetResult":{"type":"object","required":["version","assets","warnings"],"properties":{"version":{"type":"string","description":"Renderer version; may differ from the service catalog version."},"assets":{"type":"array","maxItems":3,"items":{"$ref":"#/components/schemas/Asset"}},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"ValidationSuccess":{"type":"object","required":["valid","productCount","assetCount","warnings"],"properties":{"valid":{"const":true},"productCount":{"type":"integer","minimum":1,"maximum":100},"assetCount":{"type":"integer","minimum":1,"maximum":300},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}},"ErrorDetail":{"anyOf":[{"type":"string"},{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"issues":{"type":"array","items":{"$ref":"#/components/schemas/Warning"}}}}]},"ValidationFailure":{"type":"object","required":["valid","error"],"properties":{"valid":{"const":false},"error":{"$ref":"#/components/schemas/ErrorDetail"}}},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"$ref":"#/components/schemas/ErrorDetail"},"reason":{"type":"string"},"retry_after_seconds":{"type":"integer","minimum":1}}},"KitFile":{"type":"object","required":["path","sha256","content"],"properties":{"path":{"type":"string","description":"Relative kit filename. Save only safe expected filenames in a new directory."},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"content":{"type":"string","description":"UTF-8 file content, licensed to the purchasing operator."}}},"Kit":{"type":"object","required":["name","version","license","entrypoint","schema","files"],"properties":{"name":{"const":"Batchloom Agent Asset Kit"},"version":{"type":"string"},"audience":{"type":"string"},"license":{"type":"string"},"entrypoint":{"const":"render.mjs"},"schema":{"const":"schema.json"},"files":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/KitFile"}}}},"PaymentRequirement":{"type":"object","required":["scheme","network","amount","asset","payTo","maxTimeoutSeconds","extra"],"properties":{"scheme":{"const":"exact"},"network":{"const":"eip155:8453"},"amount":{"const":"990000"},"asset":{"const":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"},"payTo":{"const":"0x609f8d893c270c5ec0d909660c7d01df94fc01ea"},"maxTimeoutSeconds":{"const":300},"extra":{"type":"object","required":["name","version"],"properties":{"name":{"const":"USD Coin"},"version":{"const":"2"}}}}},"PaymentRequired":{"type":"object","required":["x402Version","resource","accepts"],"properties":{"x402Version":{"const":2},"resource":{"type":"object","required":["url","description","mimeType"],"properties":{"url":{"const":"https://batchloom-studio-0913.xuikatwsicrdsidm.chatgpt.site/v1/kit"},"description":{"type":"string"},"mimeType":{"const":"application/json"}}},"accepts":{"type":"array","minItems":1,"maxItems":1,"items":{"$ref":"#/components/schemas/PaymentRequirement"}},"extensions":{"type":"object"},"error":{"type":"string"},"recovery":{"type":"string"}}},"ServiceStatus":{"type":"object","required":["name","version","paymentsEnabled","price","currency","network"],"properties":{"name":{"const":"Batchloom Agent Services"},"version":{"const":"1.4.0"},"paymentsEnabled":{"type":"boolean"},"price":{"const":"0.01"},"currency":{"const":"USDC"},"network":{"const":"eip155:8453"},"audience":{"type":"string"},"agentIdentityProof":{"const":false},"evidencePaymentsEnabled":{"type":"boolean"},"evidencePrice":{"const":"0.01"},"featuredProduct":{"const":"evidence-v1"},"kitPrice":{"const":"0.99"},"kitPaymentsEnabled":{"type":"boolean"}}},"Manifest":{"type":"object","required":["name","version","endpoint","pricing","payment","discovery","mcp","limits"],"properties":{"name":{"const":"Batchloom Agent Services"},"version":{"const":"1.4.0"},"description":{"type":"string"},"pricing":{"type":"object","required":["amount","amount_atomic","currency","network","asset","pay_to"],"properties":{"amount":{"const":"0.01"},"amount_atomic":{"const":"10000"},"currency":{"const":"USDC"},"network":{"const":"eip155:8453"},"asset":{"const":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"},"pay_to":{"const":"0x609f8d893c270c5ec0d909660c7d01df94fc01ea"}}},"payments_enabled":{"type":"boolean","description":"Whether new purchases of the default evidence product are enabled."},"endpoint":{"type":"object"},"payment":{"type":"object"},"discovery":{"type":"object"},"mcp":{"type":"object"},"limits":{"type":"object"}}},"JsonRpcRequest":{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","integer"],"description":"Omit for notifications; requests require a non-null ID."},"method":{"type":"string","description":"initialize, notifications/initialized, ping, tools/list, or tools/call."},"params":{"type":"object","properties":{"protocolVersion":{"type":"string"},"capabilities":{"type":"object"},"clientInfo":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}}},"name":{"enum":["audit_report_citations","trial_evidence","compare_evidence_snapshots","prepare_evidence_request","get_evidence_contract","get_evidence_sample","validate_evidence_request","get_manifest","get_sample","preview_assets","validate_batch"]},"arguments":{"type":"object","description":"For preview_assets and validate_batch, pass renderer input directly. For prepare_evidence_request and validate_evidence_request, pass evidence input directly. For compare_evidence_snapshots, pass {input,before,after}. Only get_manifest, get_sample, get_evidence_contract and get_evidence_sample accept {}."}}}}},"JsonRpcResponse":{"oneOf":[{"type":"object","required":["jsonrpc","id","result"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","integer"]},"result":{"type":"object","description":"MCP initialize, ping, tools/list or tools/call result. Tool results include content and may include structuredContent and isError."}}},{"type":"object","required":["jsonrpc","id","error"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","integer","null"]},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"integer"},"message":{"type":"string"},"data":{}}}}}]},"EvidenceInput":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"Batchloom static citation evidence input","type":"object","additionalProperties":false,"required":["sources"],"description":"UTF-8 serialized request at most 32768 bytes. Exact built-in publisher hosts only; HTTPS port 443, no credentials, fragments, IP addresses or controls. Runtime validation is authoritative.","properties":{"requireAllSources":{"type":"boolean","description":"When true, settlement requires every requested source to be readable. Does not require quotes to match. Original input and policy must be preserved for recovery."},"sources":{"type":"array","minItems":1,"maxItems":5,"items":{"type":"object","additionalProperties":false,"required":["url","quotes"],"properties":{"url":{"type":"string","format":"uri","maxLength":2048,"pattern":"^https://","description":"Exact host must occur in x-allowed-hosts; no subdomain wildcards."},"quotes":{"type":"array","minItems":1,"maxItems":4,"items":{"type":"string","minLength":12,"maxLength":400,"description":"12–400 Unicode code points, also after NFC and whitespace normalization. No non-whitespace control characters or unpaired surrogates."}}}}}},"x-max-utf8-bytes":32768,"x-allowed-hosts":["docs.docker.com","react.dev","docs.astral.sh","www.typescriptlang.org","www.postgresql.org","proceedings.mlr.press","aclanthology.org","example.com","arxiv.org","en.wikipedia.org","developers.cloudflare.com","www.sec.gov","www.federalreserve.gov","docs.python.org","developer.mozilla.org","www.nasa.gov","science.nasa.gov","www.noaa.gov","www.nist.gov","www.cdc.gov","www.who.int","www.worldbank.org","data.worldbank.org","www.imf.org","www.oecd.org","www.un.org","www.gov.uk","www.legislation.gov.uk","eur-lex.europa.eu","doc.rust-lang.org","go.dev","nodejs.org","tc39.es","www.rfc-editor.org"]},"EvidenceResult":{"type":"object","required":["version","results","usableSources","allResultsUnusable"],"properties":{"version":{"const":"1"},"usableSources":{"type":"integer","minimum":0,"maximum":5},"allResultsUnusable":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"results":{"type":"array","minItems":1,"maxItems":5,"items":{"type":"object","required":["originalUrl","finalUrl","status","code","complete","matches","normalization","offsetUnit","normalizedTextSha256"],"properties":{"originalUrl":{"type":"string"},"finalUrl":{"type":"string"},"status":{"enum":["ready","blocked","unsupported","http_error","timeout","cancelled","fetch_failed"]},"code":{"type":"string"},"httpStatus":{"type":["integer","null"]},"fetchedAt":{"type":["string","null"]},"complete":{"type":"boolean"},"normalization":{"const":"nfc-whitespace-v1"},"offsetUnit":{"const":"unicode-code-points"},"normalizedTextSha256":{"type":["string","null"]},"normalizedCodePoints":{"type":"integer","maximum":100000},"matches":{"type":"array","minItems":1,"maxItems":4,"items":{"type":"object","required":["status","start","end","excerpt","matchCount"],"properties":{"status":{"enum":["matched","not_found_in_fetched_text","not_checked"]},"start":{"type":["integer","null"]},"end":{"type":["integer","null"],"description":"Exclusive Unicode code-point offset in normalized source text."},"excerpt":{"type":["string","null"],"maxLength":500},"matchCount":{"type":"integer","minimum":0}}}}}}},"processingProfile":{"type":"string","pattern":"^[a-f0-9]{64}$","description":"Implementation identifier on new results; absent from historical receipts."}}}}}}