{"sku":"evidence-v1","name":"Batchloom Citation Evidence","stage":"experimental","description":"Check literal quotations against fresh static public publisher pages. Return source URLs, fetch time, normalized-text SHA-256, match offsets and bounded excerpts. No semantic truth verification.","endpoint":{"method":"POST","path":"/v1/evidence","url":"https://batchloom-studio-0913.xuikatwsicrdsidm.chatgpt.site/v1/evidence"},"discoveryProbes":{"methods":["GET","HEAD","POST"],"postBodies":["empty body","empty JSON object","valid evidence input"],"behavior":"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."},"price":{"amount":"0.01","amountAtomic":"10000","currency":"USDC","network":"eip155:8453","asset":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","payTo":"0x609f8d893c270c5ec0d909660c7d01df94fc01ea"},"chargePolicy":"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.","limits":{"inputBytes":32768,"sources":5,"quotesPerSource":4,"quoteMin":12,"quoteMax":400,"urlCharacters":2048,"pageBytes":262144,"normalizedCodePoints":100000,"excerptCodePoints":500,"sourceTimeoutMs":8000,"redirects":3,"concurrency":2,"robotsBytes":512000,"robotsRules":4096,"robotsMatchOperations":200000,"totalQuotes":20,"resultBytes":65536,"signedAttemptsPerMinute":6},"sourceHosts":[{"host":"docs.docker.com","label":"Docker documentation","category":"documentation"},{"host":"react.dev","label":"React documentation","category":"documentation"},{"host":"docs.astral.sh","label":"uv documentation","category":"documentation"},{"host":"www.typescriptlang.org","label":"TypeScript documentation","category":"documentation"},{"host":"www.postgresql.org","label":"PostgreSQL documentation","category":"documentation"},{"host":"proceedings.mlr.press","label":"PMLR research abstracts","category":"research"},{"host":"aclanthology.org","label":"ACL Anthology abstracts","category":"research"},{"host":"example.com","label":"Example fixture publisher","category":"fixture"},{"host":"arxiv.org","label":"arXiv","category":"research"},{"host":"en.wikipedia.org","label":"English Wikipedia","category":"reference"},{"host":"developers.cloudflare.com","label":"Cloudflare developer documentation","category":"documentation"},{"host":"www.sec.gov","label":"US Securities and Exchange Commission","category":"public agency"},{"host":"www.federalreserve.gov","label":"US Federal Reserve","category":"public agency"},{"host":"docs.python.org","label":"Python documentation","category":"documentation"},{"host":"developer.mozilla.org","label":"MDN Web Docs","category":"documentation"},{"host":"www.nasa.gov","label":"NASA","category":"public agency"},{"host":"science.nasa.gov","label":"NASA Science","category":"public agency"},{"host":"www.noaa.gov","label":"NOAA","category":"public agency"},{"host":"www.nist.gov","label":"NIST","category":"public agency"},{"host":"www.cdc.gov","label":"CDC","category":"public agency"},{"host":"www.who.int","label":"World Health Organization","category":"public institution"},{"host":"www.worldbank.org","label":"World Bank","category":"public institution"},{"host":"data.worldbank.org","label":"World Bank Data","category":"public institution"},{"host":"www.imf.org","label":"International Monetary Fund","category":"public institution"},{"host":"www.oecd.org","label":"OECD","category":"public institution"},{"host":"www.un.org","label":"United Nations","category":"public institution"},{"host":"www.gov.uk","label":"UK government","category":"public agency"},{"host":"www.legislation.gov.uk","label":"UK legislation","category":"public agency"},{"host":"eur-lex.europa.eu","label":"European Union law","category":"public institution"},{"host":"doc.rust-lang.org","label":"Rust documentation","category":"documentation"},{"host":"go.dev","label":"Go documentation","category":"documentation"},{"host":"nodejs.org","label":"Node.js documentation","category":"documentation"},{"host":"tc39.es","label":"ECMAScript standards","category":"documentation"},{"host":"www.rfc-editor.org","label":"RFC Editor","category":"documentation"}],"supported":["Static UTF-8 HTML, plain text and Markdown","Exact listed HTTPS hosts, port 443","Case-sensitive literal matching after NFC and Unicode whitespace normalization","First match offsets in Unicode code points, end exclusive; total literal occurrence count"],"exclusions":["Arbitrary domains, authenticated pages, paywalls, PDFs, JavaScript rendering","Search/discovery of new URLs, semantic entailment, truth or relevance judgments","Browser/CSS visibility guarantees, source publication freshness guarantees","Whole-page text delivery"],"extraction":"Replace head, scripts, styles, navigation, footer, templates, SVG, canvas, iframe, object, noembed/noframes and explicit hidden attributes/inline styles with whitespace. Insert whitespace around block elements; decode HTML entities per lexical text node except raw-text xmp/plaintext. This is a static text extraction, not a browser rendering.","sourceAccess":"Respect robots.txt for BatchloomEvidenceBot. A listed host can still be unavailable. Redirects must stay within the fixed host list; missing robots.txt (404) permits access, other inaccessible or unsupported robots responses block it.","recovery":"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.","privacy":"The server stores hashes of the input and private delivery token, payment authorization/receipt metadata, and the bounded result (including public URLs and matched source excerpts) for recovery without an automatic expiry. It does not store the full fetched page. Client receipts contain the original input and private recovery secret. Do not submit sensitive or private data.","endpoints":{"schema":"/v1/evidence/schema","sample":"/v1/evidence/sample","contract":"/v1/evidence/contract","validate":"/v1/evidence/validate","prepare":"/v1/evidence/prepare","demo":"/v1/evidence/demo","client":"/evidence-client.mjs","example":"/evidence-example.json"},"preparation":"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.","processingProfile":"New results contain a processingProfile SHA-256 identifying the bundled extraction implementation. Compare only the same input and matching profiles; old receipts retain their original results. This is an implementation identifier, not a publisher signature or runtime attestation.","comparison":{"endpoint":"/v1/evidence/compare","method":"POST","price":"free","offlineModule":"/compare-evidence.mjs","schema":"/evidence-comparison-schema.json","example":"/evidence-comparison-example.json","limits":{"inputBytes":196608,"originalInputBytes":32768,"snapshotBytes":65536,"outputBytes":32768,"sources":5,"quotesPerSource":4,"quoteMin":12,"quoteMax":400,"excerptCodePoints":500,"sourceCodePoints":100000,"maxDepth":16,"maxNodes":8192},"input":"{input,before:{inputHash,evidence},after:{inputHash,evidence}}","behavior":"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."},"buyerBridge":{"transport":"stdio","runtime":"Node.js 20+","readme":"/agent-bridge/README.md","files":["/agent-bridge/bridge.mjs","/agent-bridge/cli.mjs","/agent-bridge/evidence-client.mjs","/agent-bridge/package.json","/agent-bridge/bridge-config.example.json","/agent-bridge/README.md","/agent-bridge/viem-buyer-signer.mjs","/agent-bridge/viem-env-signer.mjs","/agent-bridge/evidence-cli.mjs","/agent-bridge/viem-bridge-config.example.json","/agent-bridge/BUYER-QUICKSTART.md"],"tools":["prepare_evidence_request","purchase_evidence"],"defaultPurchaseIntentsPerProcess":0,"policy":"Only an explicitly configured caller-owned local signer can authorize a new purchase. Limit is per process, counts distinct attempted intents including recoveries and resets on restart. No server key custody or automatic purchase at startup.","quickstart":"/agent-bridge/BUYER-QUICKSTART.md"},"demo":"GET /v1/evidence/demo fetches only the fixed example.com input for free. It cannot accept custom URLs or quotes. It uses the production extractor; availability is not guaranteed.","billingAvailability":"Requires the facilitator free allowance to remain available. If settlement cannot be confirmed, return an unresolved response and retain the original receipt. No automatic purchase of infrastructure credits.","failureDiagnosis":{"httpStatus":502,"code":"ALL_SOURCES_UNUSABLE","maxBytes":8192,"attemptHeader":"X-Evidence-Attempt","attemptFormat":"Optional fresh 16-byte hex correlation per signed HTTP attempt. Not an authorization, payment nonce, secret or purchase intent.","fields":["inputHash","attemptId","sourceIndex","status","code","httpStatus","action"],"actions":["retry_same_receipt_later","review_supported_static_source","respect_source_policy","review_source"],"behavior":"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."},"trial":{"endpoint":"/v1/evidence/trial","method":"POST","price":"free","limits":{"sources":1,"quotes":1,"perClientPerDay":2,"globalPerDay":100,"inputBytes":4096},"behavior":"One real caller-supplied supported URL and quote. No payment, stored evidence or paid recovery. Attempts consume quota including failed sources."},"reportAudit":{"endpoint":"/v1/evidence/report-audit","method":"POST","price":"free","schema":"/report-preflight-schema.json","example":"/report-preflight-example.json","limits":{"inputBytes":98304,"outputBytes":98304,"reportCodePoints":24000,"references":20,"quotesPerReference":4,"blocks":120,"markers":240},"behavior":"Free deterministic audit of caller-supplied report text and structured references using [cite:id] markers. Lists unmarked text blocks, unknown/unused refs, duplicate exact source URLs, missing/unsupported URLs and quote presence in the report. Produces validated evidence request batches. No fetch, signing, payment, semantic verification or claim-coverage score."},"billingPolicyOption":{"field":"requireAllSources","type":"boolean","default":false,"behavior":"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."},"workflow":["audit_report_citations: detect citation structure issues and prepare batches without fetching","trial_evidence: try one real supported URL and quote free","prepare_evidence_request: inspect policy/price","Use buyer-local viem CLI or MCP bridge for an explicitly authorized purchase","compare_evidence_snapshots: compare repeated observations"],"paymentsEnabled":true}