{"openapi": "3.0.3", "info": {"title": "Dataset-listing granularity audit", "version": "1.0.2", "description": "Agent data marketplaces present a dataset listing's evidence at the wrong granularity: the catalog's total rows, the seller's whole-feed freshness, and seller-supplied quality scores stand in for the one dataset being sold. Given a dataset listing, this service re-keys every claim class \u2014 rows, freshness, quality \u2014 to the dataset's OWN manifest hash and returns a signed per-class verdict: OWN (independent evidence keyed to this dataset), INHERITED-FROM-CATALOG (independent evidence keyed to a catalog or seller aggregate, with the shared evidence line and the bounded sibling count that cites the identical line named), SELF-SUPPLIED (the only corroboration rides a claimant-controlled channel \u2014 volume never upgrades the grade, and quality claims carry a separate evidence_origin grade, INDEPENDENT or SELF-SUPPLIED, so a seller's own quality score can never present as independent corroboration), SAMPLE-ONLY (the evidence describes the listing's sample while the claim declares the full dataset), KEY-MISMATCH (the evidence is keyed to a stale manifest), or UNKEYABLE (the listing exposes no manifest hash \u2014 the verdict refuses to invent a key and grades the absence itself). Every verdict carries a bounded witness-set receipt \u2014 manifest hash, catalog sibling count, shared line hash \u2014 and re-audit fires when the manifest hash or the inherited catalog line hash moves, never on the clock. A grade describes evidence keying only \u2014 OWN / INHERITED-FROM-CATALOG / SELF-SUPPLIED / SAMPLE-ONLY / KEY-MISMATCH / UNKEYABLE is a statement about which unit the evidence is keyed to and which channel supplied it, never a fraud or trustworthiness determination about a dataset or a seller, and no grade triggers or recommends any action against any account. Live mis-keying rate, manifest availability, sample-vs-full frequency, and the manifest-change rate are UNMEASURED at launch; willingness to pay is UNMEASURED; verdicts are witness-bound \u2014 they stand only while the witness quantities on their receipt are unchanged, and re-audit fires when the manifest hash or the inherited catalog line hash moves, never on the clock. A listing exposing no manifest hash grades UNKEYABLE \u2014 the service refuses to invent a key."}, "servers": [{"url": "https://textforagents.com/products/dataset-listing-granularity-audit"}], "components": {"securitySchemes": {"bearer": {"type": "http", "scheme": "bearer"}}}, "paths": {"/health": {"get": {"summary": "health", "responses": {"200": {"description": "ok"}}}}, "/register": {"post": {"summary": "register an operator account \u2014 returns a one-time claim token", "responses": {"201": {"description": "account + claim_token"}}}}, "/trial/claim": {"post": {"summary": "claim the API token; binds the one-time trial grant (one free full dataset audit, ever) to the account + payer wallet", "responses": {"200": {"description": "token + trial state"}}}}, "/audit": {"post": {"security": [{"bearer": []}], "summary": "full dataset audit ($0.04 x402 after the one-time free trial, or included on a pass under the manifest-change-trigger discipline); body: {listing, siblings} or {listing_url, siblings}", "responses": {"200": {"description": "signed verdict"}, "402": {"description": "x402 challenge"}}}}, "/query": {"post": {"security": [{"bearer": []}], "summary": "verdict query ($0.01 x402): precomputed signed verdict for one dataset; optional current manifest_hash + shared_line_hash \u2014 a moved witness returns 409 needs_reaudit instead of serving a stale verdict", "responses": {"200": {"description": "signed verdict"}, "402": {"description": "x402 challenge"}, "409": {"description": "needs re-audit"}}}}, "/verify": {"post": {"summary": "verify an Ed25519-signed verdict (free)", "responses": {"200": {"description": "valid + key fingerprint"}}}}, "/verify-key": {"get": {"summary": "accepted signing-key fingerprints (current + archived)", "responses": {"200": {"description": "keys"}}}}, "/subscribe": {"post": {"security": [{"bearer": []}], "summary": "Operator pass $9.99/mo or Fleet pass $19.99/mo (x402); standing verdicts re-audit only on the manifest-change trigger", "responses": {"200": {"description": "pass active"}}}}, "/account": {"get": {"security": [{"bearer": []}], "summary": "own account state (trial, pass, verdict count)", "responses": {"200": {"description": "account"}}}}, "/tokens/rotate": {"post": {"security": [{"bearer": []}], "summary": "rotate own API token (old token revoked in the same call)", "responses": {"200": {"description": "new token"}}}}, "/tokens/revoke": {"post": {"security": [{"bearer": []}], "summary": "revoke own API token", "responses": {"200": {"description": "revoked"}}}}, "/account/data": {"delete": {"security": [{"bearer": []}], "summary": "delete own account data (verdicts tombstoned, token revoked)", "responses": {"200": {"description": "deleted"}}}}, "/mcp": {"post": {"summary": "MCP surface (initialize / tools/list / tools/call: audit_listing, query_verdict, verify_verdict) \u2014 same billing as REST, Bearer token required for paid tools", "responses": {"200": {"description": "JSON-RPC"}}}}}}