AttestPage (Quoteproof)
Use before citing a page, sharing links or installing a suggested package. Signed receipts.
我該用這個嗎
品質與安全性
發現項目(12)
- HIGH
- MEDIUM在 attestpage_verify_quote 中
- MEDIUM在 attestpage_verify_citations 中
- MEDIUM在 attestpage_fetch 中
- MEDIUM在 attestpage_recheck 中
- MEDIUM在 attestpage_check_links 中
- MEDIUM在 attestpage_check_packages 中
- MEDIUM在 attestpage_attest 中
- MEDIUM在 attestpage_verify_document 中
- MEDIUM在 attestpage_verify_quotes 中
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"quoteproof-mcp": {
"url": "https://vehcdj664efetfrsolne5umanq.srv.us/mcp"
}
}
}遠端端點
https://vehcdj664efetfrsolne5umanq.srv.us/mcpstreamable-http它能做什麼
工具清單
工具(11)
🟡attestpage_verify_quote(url, quote, match, case_sensitive, threshold)
Use when an agent is about to quote or cite a web page as the source of a claim: send the URL and the quote word for word, and get back exact, fuzzy or none, offsets and a signed receipt, so a misquote is caught before a user sees it. To fact check a paraphrase, match "passages" returns evidence, not a verdict. PDFs are read too, on the full service (edge: 501 not_on_edge, uncharged), with pdf_page and pdf_page_end. For 3 or more quotes on one page, verify/quotes costs less. 5 free calls a day. Costs US$0.01 per call in USDC via x402 (Base), charged only when the call succeeds; a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it uses the free trial (5 calls a day per address), then returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/verify-quote
輸入結構描述
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "http(s) URL of the page to check (max 2,048 characters)."
},
"quote": {
"type": "string",
"description": "Text to look for on the page, or with match \"passages\" the claim to find support for (max 1,000 characters after normalisation)."
},
"match": {
"type": "string",
"enum": [
"exact",
"fuzzy",
"passages"
],
"description": "exact; fuzzy (default), which also accepts small differences; or passages, for a paraphrased claim: the 3 passages that share most of its words, scored, as evidence for you to judge (not a verdict)."
},
"case_sensitive": {
"type": "boolean",
"description": "Default false; must be false with match \"passages\"."
},
"threshold": {
"type": "number",
"minimum": 0.5,
"maximum": 1,
"description": "Fuzzy similarity needed, default 0.9."
}
},
"required": [
"url",
"quote"
],
"additionalProperties": false,
"examples": [
{
"url": "https://www.iana.org/help/example-domains",
"quote": "These domains may be used as illustrative examples in documents",
"match": "fuzzy",
"case_sensitive": false
}
]
}輸出結構描述
{
"type": "object",
"properties": {
"result": {
"type": "object",
"description": "match, score, start, end, context, occurrences, normalised_sha256; with match \"passages\" also passages [{ start, end, score, text, missing, flags }], scorer and note; on a PDF the match and each passage also give pdf_page and pdf_page_end (1-based)."
},
"page": {
"type": "object",
"description": "Page verdict and evidence, including server_ip, tls and headers (the network evidence also signed into the receipt; null on an edge server)."
},
"injection_flags": {
"type": "array"
},
"advice": {
"type": "string"
},
"receipt": {
"type": "string"
},
"tier": {
"type": "string"
}
},
"required": [
"result",
"page",
"receipt"
]
}🟡attestpage_verify_citations(citations, match, case_sensitive, threshold)
Use before giving an answer that cites web pages: send up to 10 quote and URL pairs, and get back for each an exact, fuzzy or none match, offsets and page status, under one signed receipt: a fact check of each citation against its source. Match "passages" gives evidence for each paraphrased claim. PDFs are read too, on the full service, with pdf_page and pdf_page_end. DOIs get Crossref data and a retracted flag. For 1 to 9 pairs, one verify/quote call per pair costs less. 5 free calls a day. Costs US$0.10 per call in USDC via x402 (Base), charged only when the call succeeds; a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it uses the free trial (5 calls a day per address), then returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/verify-citations
輸入結構描述
{
"type": "object",
"properties": {
"citations": {
"type": "array",
"minItems": 1,
"maxItems": 10,
"description": "1 to 10 citations. Each URL is fetched once however many quotes cite it. Dead domains are reported as results; if none resolves, 422 and no charge.",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "http(s) URL of the cited page (max 2,048 characters)."
},
"quote": {
"type": "string",
"description": "Text the answer says is on that page, or with match \"passages\" the claim it says the page supports (max 1,000 characters after normalisation)."
}
},
"required": [
"url",
"quote"
],
"additionalProperties": false
}
},
"match": {
"type": "string",
"enum": [
"exact",
"fuzzy",
"passages"
],
"description": "For every citation: exact; fuzzy (default), which also accepts small differences; or passages, for a paraphrased claim: the 3 passages that share most of its words, scored, as evidence for you to judge (not a verdict)."
},
"case_sensitive": {
"type": "boolean",
"description": "Default false; must be false with match \"passages\"."
},
"threshold": {
"type": "number",
"minimum": 0.5,
"maximum": 1,
"description": "Fuzzy similarity needed, default 0.9."
}
},
"required": [
"citations"
],
"additionalProperties": false,
"examples": [
{
"citations": [
{
"url": "https://www.iana.org/help/example-domains",
"quote": "These domains may be used as illustrative examples in documents"
},
{
"url": "https://www.iana.org/domains/reserved",
"quote": "IANA-managed Reserved Domains"
}
],
"match": "fuzzy"
}
]
}輸出結構描述
{
"type": "object",
"properties": {
"results": {
"type": "array",
"description": "One entry per citation, in request order: the match verdict (with match \"passages\": passages [{ start, end, score, text, missing, flags }] and scorer), or error (match_too_costly) for that citation alone (on a PDF the match and each passage also give pdf_page and pdf_page_end, 1-based), plus its page's final_url, http_status and content_kind; page indexes pages."
},
"pages": {
"type": "array",
"description": "One entry per distinct URL: page verdict and evidence, including server_ip, tls and headers (also signed into the receipt). A page with a DOI also has crossref: { doi, doi_source, status (found, not_found or skipped), title, authors, year, container_title, type, retracted, updates, update_to } from Crossref."
},
"summary": {
"type": "object",
"description": "Counts of exact, fuzzy, none (and passages) verdicts, failed citations, retracted: citations whose page DOI Crossref marks retracted, and doi_unchecked: citations whose page DOI lookup was skipped (busy, rate limited, timed out), so not checked."
},
"receipt": {
"type": "string"
},
"tier": {
"type": "string"
}
},
"required": [
"results",
"pages",
"receipt"
]
}🟡attestpage_fetch(url, urls, return_text)
Use when an agent needs a web page as clean text, or to notarize one (what it said, and when): send a URL (or urls, up to 10, priced per URL), and get back a content_kind (real, bot_wall, paywall and more), status, final URL, title, hashes, injection flags, clean text with return_text, and a signed receipt per page (checkable offline), so a bot wall is not read as real. PDFs too, on the full service (edge: 501, uncharged): page.pdf with page_count, pages_read and truncated. 5 free calls a day. Costs US$0.002 per call in USDC via x402 (Base), charged only when the call succeeds; a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it uses the free trial (5 calls a day per address), then returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/fetch
輸入結構描述
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "http(s) URL to fetch (max 2,048 characters). Send url or urls, not both."
},
"urls": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"maxItems": 10,
"description": "Instead of url: 1 to 10 distinct http(s) URLs in one call, priced per URL (the route price × the count). The answer is results[], one per URL, each with its own receipt."
},
"return_text": {
"type": "boolean",
"description": "Also return up to 20,000 characters of clean text (per page). Default false."
}
},
"additionalProperties": false,
"examples": [
{
"url": "https://www.iana.org/help/example-domains",
"return_text": true
}
]
}輸出結構描述
{
"type": "object",
"properties": {
"page": {
"type": "object",
"description": "Page verdict and evidence, including server_ip, tls and headers (the network evidence also signed into the receipt; null on an edge server); on a PDF also pdf { page_count, pages_read, truncated }."
},
"text": {
"type": [
"string",
"null"
]
},
"injection_flags": {
"type": "array"
},
"advice": {
"type": "string"
},
"receipt": {
"type": "string"
},
"results": {
"type": "array",
"description": "With urls only (then page, text and receipt are inside each entry): one entry per URL in order, { url, page, text, text_chars, text_truncated, injection_flags, advice, receipt }; each receipt signs result.batch { index, count }."
},
"tier": {
"type": "string"
}
}
}🟡attestpage_recheck(receipt, url, content_sha256, return_text)
Use when an agent relies on a web page it read earlier and needs page change detection (does it still say the same thing?): send the receipt from an earlier fetch, verify/quote or recheck call (or a URL and the content_sha256 from our fetch), and get back unchanged, changed, gone or unreadable, the fields that differ, and a signed receipt naming both hashes, which chains to the next recheck. Nothing is stored and nothing calls you back. PDFs: full service only. 5 free calls a day. Costs US$0.003 per call in USDC via x402 (Base), charged only when the call succeeds; a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it uses the free trial (5 calls a day per address), then returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/recheck
輸入結構描述
{
"type": "object",
"properties": {
"receipt": {
"type": "string",
"description": "Compact JWS receipt from an earlier /v1/fetch, /v1/verify/quote or /v1/recheck call of this service (paid or trial; not a sample). Max 160 KB."
},
"url": {
"type": "string",
"description": "Only without receipt: the http(s) URL to re-check (max 2,048 characters)."
},
"content_sha256": {
"type": "string",
"description": "Only with url: the page.content_sha256 from our own fetch (64 hex). Other tools hash other text."
},
"return_text": {
"type": "boolean",
"description": "Also return up to 20,000 characters of the new clean text. Default false."
}
},
"oneOf": [
{
"required": [
"receipt"
]
},
{
"required": [
"url",
"content_sha256"
]
}
],
"additionalProperties": false,
"examples": [
{
"url": "https://www.iana.org/help/example-domains",
"content_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"return_text": false
}
]
}輸出結構描述
{
"type": "object",
"properties": {
"change": {
"type": "string",
"enum": [
"unchanged",
"changed",
"gone",
"unreadable"
]
},
"changed": {
"type": [
"boolean",
"null"
]
},
"differences": {
"type": "array",
"items": {
"type": "string"
}
},
"baseline": {
"type": "object",
"description": "The baseline compared against; receipt_sha256 links a chain of recheck receipts."
},
"elapsed_seconds": {
"type": [
"integer",
"null"
]
},
"page": {
"type": "object",
"description": "The new fetch, as /v1/fetch gives it."
},
"text": {
"type": [
"string",
"null"
]
},
"injection_flags": {
"type": "array"
},
"advice": {
"type": "string"
},
"receipt": {
"type": "string"
},
"tier": {
"type": "string"
}
},
"required": [
"change",
"changed",
"differences",
"baseline",
"page",
"receipt"
]
}🟡attestpage_check_links(urls)
Use when an agent is about to give a user links or citations: send up to 10 URLs, and get back for each one the status, redirect chain, final URL, content_kind, title and hash, so a dead, moved or blocked link is caught before it is shown. A URL whose domain does not resolve is reported as dead and charged; a batch where none resolves gets 422 and is not charged. A redirect to another site that errors is off_site with off_site_error: true. 5 free calls a day. Costs US$0.005 per call in USDC via x402 (Base), charged only when the call succeeds; a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it uses the free trial (5 calls a day per address), then returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/check-links
輸入結構描述
{
"type": "object",
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"maxItems": 10,
"description": "1 to 10 http(s) URLs to check. Dead domains are reported as results; if none resolves, 422 and no charge."
}
},
"required": [
"urls"
],
"additionalProperties": false,
"examples": [
{
"urls": [
"https://www.iana.org/help/example-domains",
"https://www.iana.org/domains/reserved"
]
}
]
}輸出結構描述
{
"type": "object",
"properties": {
"results": {
"type": "array",
"description": "One entry per URL, each with server_ip, tls and headers (network evidence also signed into the receipt; null on an edge server). off_site_error: true when the URL redirected to another site that answers 4xx/5xx."
},
"receipt": {
"type": "string"
},
"tier": {
"type": "string"
}
},
"required": [
"results",
"receipt"
]
}🟡attestpage_check_packages(packages)
Use when an agent is about to install or recommend a package an LLM suggested: send up to 10 names, each with its registry (npm, pypi, crates), and get back whether the registry lists each name, latest version, licence, links, flags and known OSV.dev advisories for the latest or given version (malware too), under one signed receipt, so a made-up or known-bad package is caught before install. Not a security verdict. A batch where every lookup fails gets 502, uncharged. 5 free calls a day. Costs US$0.005 per call in USDC via x402 (Base), charged only when the call succeeds; a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it uses the free trial (5 calls a day per address), then returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/check-packages
輸入結構描述
{
"type": "object",
"properties": {
"packages": {
"type": "array",
"minItems": 1,
"maxItems": 10,
"description": "1 to 10 packages to look up. Each is { ecosystem, name, version? }; ecosystem is npm, pypi or crates (crates.io).",
"items": {
"type": "object",
"properties": {
"ecosystem": {
"type": "string",
"enum": [
"npm",
"pypi",
"crates"
]
},
"name": {
"type": "string",
"description": "Package name as you would install it (npm names may be scoped: @scope/name)."
},
"version": {
"type": "string",
"maxLength": 64,
"description": "Optional: the version you will install (e.g. a pinned 4.17.20). Advisories are then listed for this version; without it, for the latest."
}
},
"required": [
"ecosystem",
"name"
],
"additionalProperties": false
}
}
},
"required": [
"packages"
],
"additionalProperties": false,
"examples": [
{
"packages": [
{
"ecosystem": "npm",
"name": "left-pad"
},
{
"ecosystem": "pypi",
"name": "requests"
},
{
"ecosystem": "crates",
"name": "serde"
}
]
}
]
}輸出結構描述
{
"type": "object",
"properties": {
"results": {
"type": "array"
},
"note": {
"type": "string"
},
"receipt": {
"type": "string"
},
"tier": {
"type": "string"
}
},
"required": [
"results",
"note",
"receipt"
]
}🟡attestpage_attest(sha256, note, idempotency_key)
Use when an agent needs to show later that a file, answer or record existed unchanged at a point in time: send its sha256, and get back a signed, timestamped receipt over it; a later altered copy no longer matches. Optional note; with an idempotency_key (x402 payments only), a retry gets the same receipt and is not a new record. For signed evidence of what a web page said at a given time (provenance), use /v1/fetch, whose receipt attests the page hashes. 5 free calls a day. Costs US$0.002 per call in USDC via x402 (Base), charged only when the call succeeds; a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it uses the free trial (5 calls a day per address), then returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/attest
輸入結構描述
{
"type": "object",
"properties": {
"sha256": {
"type": "string",
"pattern": "^[0-9a-fA-F]{64}$",
"description": "SHA-256 (hex) of the thing being attested."
},
"note": {
"type": "string",
"maxLength": 280,
"description": "Optional note; only its SHA-256 goes in the receipt."
},
"idempotency_key": {
"type": "string",
"maxLength": 128,
"description": "Optional, x402 payments only (keys are scoped to the paying address; trial and L402 calls get 400). Retries with the same key and sha256 get the same receipt; a different sha256 gets 409."
}
},
"required": [
"sha256"
],
"additionalProperties": false,
"examples": [
{
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"note": "delivery of report v3 to order 77"
}
]
}輸出結構描述
{
"type": "object",
"properties": {
"attestation": {
"type": "object"
},
"receipt": {
"type": "string"
},
"tier": {
"type": "string"
}
},
"required": [
"attestation",
"receipt"
]
}🟡attestpage_verify_document(document, format, match, case_sensitive, threshold, ...)
Use before sending a finished answer or report that quotes web pages: send the document as written, and get back every quote with its link, checked on the live page: exact, fuzzy or none, score, offsets and each page's status, under one signed receipt. Up to 10 pairs per part; the free preview (POST /v1/verify/document/preview) lists the pairs, parts and price first. For a part of 1 to 9 pairs, one verify/quote call per pair costs less. 5 free calls a day. Costs US$0.10 per call in USDC via x402 (Base), charged only when the call succeeds; a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it uses the free trial (5 calls a day per address), then returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/verify-document
輸入結構描述
{
"type": "object",
"properties": {
"document": {
"type": "string",
"description": "The answer or report as written, 1 character to 60000 bytes (UTF-8). Its quotes and their links are found by fixed rules (extractor doc-v1)."
},
"format": {
"type": "string",
"enum": [
"markdown",
"text"
],
"description": "markdown (default) or text (only bare URLs and [n] references are links)."
},
"match": {
"type": "string",
"enum": [
"exact",
"fuzzy",
"passages"
],
"description": "For every pair: exact; fuzzy (default), which also accepts small differences; or passages, for a paraphrased claim: the 3 passages that share most of its words, scored, as evidence for you to judge (not a verdict). With \"passages\", each sentence that carries a link is a claim."
},
"case_sensitive": {
"type": "boolean",
"description": "Default false; must be false with match \"passages\"."
},
"threshold": {
"type": "number",
"minimum": 0.5,
"maximum": 1,
"description": "Fuzzy similarity needed, default 0.9."
},
"min_words": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "A quoted span with fewer words is skipped as too_short (default 4)."
},
"part_size": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"description": "Pairs per part, default 10. A free trial call needs 3 or fewer."
},
"part": {
"type": "integer",
"minimum": 0,
"description": "0-based part to check, default 0; call POST /v1/verify/document/preview first to see how many parts there are."
}
},
"required": [
"document"
],
"additionalProperties": false,
"examples": [
{
"document": "WHO says \"Air pollution kills an estimated seven million people every year\" ([WHO](https://www.who.int/health-topics/air-pollution)).\n\n> These domains may be used as illustrative examples in documents\n> — [IANA](https://www.iana.org/help/example-domains)",
"format": "markdown",
"match": "fuzzy",
"part": 0
}
]
}輸出結構描述
{
"type": "object",
"properties": {
"document_sha256": {
"type": "string",
"description": "SHA-256 of the document as sent (UTF-8); the same on every part."
},
"extractor": {
"type": "string"
},
"part": {
"type": "integer"
},
"parts": {
"type": "integer"
},
"pairs_total": {
"type": "integer"
},
"results": {
"type": "array",
"description": "One entry per pair of this part: pair, quote, url, doc_start/doc_end (code points in the document; doc_spans when the pair appears more than once, the first 20, with doc_spans_truncated counting the rest), then the verify/citations verdict: start/end are offsets on the page."
},
"pages": {
"type": "array",
"description": "One entry per distinct URL, as verify/citations."
},
"summary": {
"type": "object"
},
"receipt": {
"type": "string"
},
"tier": {
"type": "string"
}
},
"required": [
"document_sha256",
"extractor",
"part",
"parts",
"results",
"pages",
"receipt"
]
}🟡attestpage_verify_quotes(url, quotes, match, case_sensitive, threshold)
Use when an agent is about to quote one web page several times: send the URL and up to 20 quotes in your exact words, and get back for each one exact, fuzzy or none, with offsets and context, plus the page's verdict and hashes, under one signed receipt. The page is fetched once at one price for 1 to 20 quotes, so from 3 quotes up it costs less than one verify/quote call per quote. Full service only; PDFs give pdf_page. 5 free calls a day. Costs US$0.02 per call in USDC via x402 (Base), charged only when the call succeeds; a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it uses the free trial (5 calls a day per address), then returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/verify-quotes
輸入結構描述
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "http(s) URL of the page to check (max 2,048 characters). Fetched once for all the quotes."
},
"quotes": {
"type": "array",
"minItems": 1,
"maxItems": 20,
"description": "1 to 20 quotes to look for on that page, or with match \"passages\" claims to find support for (each max 1,000 characters after normalisation). One price for the call however many.",
"items": {
"type": "string"
}
},
"match": {
"type": "string",
"enum": [
"exact",
"fuzzy",
"passages"
],
"description": "For every quote: exact; fuzzy (default), which also accepts small differences; or passages, for a paraphrased claim: the 3 passages that share most of its words, scored, as evidence for you to judge (not a verdict)."
},
"case_sensitive": {
"type": "boolean",
"description": "Default false; must be false with match \"passages\"."
},
"threshold": {
"type": "number",
"minimum": 0.5,
"maximum": 1,
"description": "Fuzzy similarity needed, default 0.9."
}
},
"required": [
"url",
"quotes"
],
"additionalProperties": false,
"examples": [
{
"url": "https://www.iana.org/help/example-domains",
"quotes": [
"These domains may be used as illustrative examples in documents",
"without prior coordination with us"
],
"match": "fuzzy"
}
]
}輸出結構描述
{
"type": "object",
"properties": {
"results": {
"type": "array",
"description": "One entry per quote, in request order, each the verify/quote result: match, score, start, end, context, occurrences, normalised_sha256; with match \"passages\" also passages [{ start, end, score, text, missing, flags }], scorer and note; on a PDF the match and each passage also give pdf_page and pdf_page_end (1-based). A quote too costly to match fuzzily has error (match_too_costly) and nulls instead, for that quote alone."
},
"page": {
"type": "object",
"description": "Page verdict and evidence, including server_ip, tls and headers (the network evidence also signed into the receipt)."
},
"injection_flags": {
"type": "array"
},
"advice": {
"type": "string"
},
"summary": {
"type": "object",
"description": "Counts of exact, fuzzy, none (and passages) verdicts and failed quotes."
},
"receipt": {
"type": "string"
},
"tier": {
"type": "string"
}
},
"required": [
"results",
"page",
"receipt"
]
}🟢attestpage_verify_receipt(receipt)
Use when you are handed an AttestPage evidence receipt and need to check it before relying on it: verifies the compact JWS against this service's published keys and returns its payload, so a forged or altered receipt is caught. Free. Free. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/receipt-verify
輸入結構描述
{
"type": "object",
"properties": {
"receipt": {
"type": "string",
"maxLength": 163840,
"description": "The compact JWS from the \"receipt\" field of a response."
}
},
"required": [
"receipt"
],
"additionalProperties": false,
"examples": [
{
"receipt": "eyJhbGciOiJFZERTQSIs…"
}
]
}輸出結構描述
{
"type": "object",
"properties": {
"valid": {
"type": "boolean",
"description": "True when the signature verifies with one of our keys and the payload matches schema v1."
},
"kid": {
"type": [
"string",
"null"
],
"description": "Key id from the JWS header."
},
"tier": {
"type": [
"string",
"null"
],
"enum": [
"paid",
"trial",
"sample",
null
],
"description": "paid, trial or sample."
},
"payload": {
"type": [
"object",
"null"
],
"description": "The decoded receipt payload."
},
"reason": {
"type": "string",
"description": "Machine-readable failure reason, only when valid is false."
},
"message": {
"type": "string",
"description": "Plain-language failure reason, only when valid is false."
}
},
"required": [
"valid"
]
}🟢attestpage_preview_document(document, format, match, case_sensitive, threshold, ...)
Use before paying for POST /v1/verify/document: send the same body, and get back the quote and link pairs it would check, what was skipped and why, the number of parts and the exact price. Nothing is fetched, signed or charged. Free. Free. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/verify-document
輸入結構描述
{
"type": "object",
"properties": {
"document": {
"type": "string",
"description": "The answer or report as written, 1 character to 60000 bytes (UTF-8). Its quotes and their links are found by fixed rules (extractor doc-v1)."
},
"format": {
"type": "string",
"enum": [
"markdown",
"text"
],
"description": "markdown (default) or text (only bare URLs and [n] references are links)."
},
"match": {
"type": "string",
"enum": [
"exact",
"fuzzy",
"passages"
],
"description": "For every pair: exact; fuzzy (default), which also accepts small differences; or passages, for a paraphrased claim: the 3 passages that share most of its words, scored, as evidence for you to judge (not a verdict). With \"passages\", each sentence that carries a link is a claim."
},
"case_sensitive": {
"type": "boolean",
"description": "Default false; must be false with match \"passages\"."
},
"threshold": {
"type": "number",
"minimum": 0.5,
"maximum": 1,
"description": "Fuzzy similarity needed, default 0.9."
},
"min_words": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "A quoted span with fewer words is skipped as too_short (default 4)."
},
"part_size": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"description": "Pairs per part, default 10. A free trial call needs 3 or fewer."
},
"part": {
"type": "integer",
"minimum": 0,
"description": "0-based part to check, default 0; call POST /v1/verify/document/preview first to see how many parts there are."
}
},
"required": [
"document"
],
"additionalProperties": false,
"examples": [
{
"document": "WHO says \"Air pollution kills an estimated seven million people every year\" ([WHO](https://www.who.int/health-topics/air-pollution)).\n\n> These domains may be used as illustrative examples in documents\n> — [IANA](https://www.iana.org/help/example-domains)",
"format": "markdown",
"match": "fuzzy",
"part": 0
}
]
}輸出結構描述
{
"type": "object",
"properties": {
"document_sha256": {
"type": "string",
"description": "SHA-256 of the document as sent (UTF-8); the paid route signs the same value."
},
"extractor": {
"type": "string",
"description": "The fixed extraction rules used (doc-v1)."
},
"pairs_total": {
"type": "integer"
},
"part_size": {
"type": "integer"
},
"parts": {
"type": "integer",
"description": "Paid calls needed to check every pair (part 0 to parts - 1)."
},
"price": {
"type": "object",
"properties": {
"usd_per_part": {
"type": "string"
},
"sats_per_part": {
"type": "integer"
},
"usd_total": {
"type": "string"
},
"sats_total": {
"type": "integer"
}
}
},
"pairs": {
"type": "array",
"description": "Each pair: pair, part, quote, url, doc_start/doc_end (code points in the document); doc_spans when the pair appears more than once (the first 20), with doc_spans_truncated counting the rest."
},
"skipped": {
"type": "array",
"description": "Each skipped item with its reason: no_url, bad_url, too_short, too_long or beyond_limit. The first 100 only."
},
"skipped_truncated": {
"type": "integer",
"description": "Skipped items left out of skipped."
},
"skipped_counts": {
"type": "object",
"description": "Every skipped item counted by reason."
},
"limit_reached": {
"type": "boolean"
}
},
"required": [
"document_sha256",
"extractor",
"pairs_total",
"parts",
"price",
"pairs",
"skipped"
]
}社群
證據