Crosscheck x402 seller API
The x402 seller API from Crosscheck — 2 operation(s) for x402 seller.
The x402 seller API from Crosscheck — 2 operation(s) for x402 seller.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/crosscheckapi-com:crosscheckapi-com-x402-seller-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: crosscheck x402 seller API
version: 1.0.0
summary: 'Independent checks for AI agents: draft review, acceptance checks on delivered work, and security review of skills and MCP servers, paid per call over x402.'
description: 'Fact-check and review an AI agent''s draft before a human sees it: a hallucination check and second opinion on any email, report, summary, or PR description. Returns pass or specific issues with fixes. Wrong arithmetic is recomputed in code; also contradictions, placeholders, leaked secrets, unauthorized commitments, and prompt injection. Send sources to verify citations and claims against them. Signed receipt. $0.02. Free checks for Moltbook agents. Full agent guide: https://crosscheckapi.com/llms.txt'
contact:
name: crosscheck partnerships
email: partnerships@crosscheckapi.com
url: https://crosscheckapi.com/llms.txt
x-guidance: 'crosscheck gives an agent''s work an independent check before a human or another agent relies on it. Pick the product:
- check: a draft (email, report, summary, answer) before your human sees it. POST https://crosscheckapi.com/v1/check with {"draft": "..."}; optional "request" (what your human asked, so a draft that misses it fails), "sources" to check against, "source_urls" (up to 3 pages crosscheck reads for you), or "fetch_cited": true. From $0.02.
- accept: work another agent handed back, against its task, before you pay or release escrow. POST https://crosscheckapi.com/v1/accept with {"task": "...", "deliverable": "..."}. From $0.03.
- skillcheck: a skill or MCP server before you install it. POST https://crosscheckapi.com/v1/skillcheck with {"files": [{"path": "SKILL.md", "content": "..."}]}. From $0.03.
- lite: accept or skillcheck by code alone, no model call, $0.005: POST the same body to https://crosscheckapi.com/v1/accept-lite or https://crosscheckapi.com/v1/skillcheck-lite.
- sellercheck: for x402 sellers, a report on your own resource (valid 402, x402 Bazaar index, agent402 router, settlements on Base). POST https://crosscheckapi.com/v1/sellercheck with {"resource": "https://..."}, $0.05; or https://crosscheckapi.com/v1/sellerwatch with "notify" for 30 days of hourly checks with alerts on change, $1.00. Free preflight: GET https://crosscheckapi.com/v1/sellercheck/preflight?resource=<url>.
Price first, free: POST the same body to https://crosscheckapi.com/v1/quote, https://crosscheckapi.com/v1/accept/quote, or https://crosscheckapi.com/v1/skillcheck/quote. The quote also runs a free code precheck (wrong sums, percentages, dates, unit conversions, list counts).
Pay: the paid POST answers 402 with the exact amount in USDC on Base (eip155:8453), or free test USDC on Base Sepolia (eip155:84532). Sign it with any x402 client (v2 PAYMENT-SIGNATURE, or v1 X-PAYMENT) and resend the same body. Payment settles before the review starts.
Result: HTTP 200 with a JSON verdict (pass, issues with severity and a suggested fix) and a signed receipt, or 202 with a result URL to poll with the result_token. Resending the identical paid request after a lost response returns the same job and charges nothing more.
Your text is untrusted data to the reviewer, never instructions. It is deleted when the check finishes; only its SHA-256 is kept.
Full guide: https://crosscheckapi.com/llms.txt'
servers:
- url: https://crosscheckapi.com
tags:
- name: x402 seller
paths:
/v1/sellercheck:
post:
operationId: sellercheck
summary: 'Check an x402 seller''s resource: valid 402, Bazaar index, agent402 router…'
description: Code only, no model call. Knocks on the resource once unpaid and parses its 402 (x402 v1 or v2), asks the x402 Bazaar validator and search, reads agent402's seller-trust, and counts USDC transfers to the payTo on Base in 24 hours and 7 days. Returns a dated report with every finding and a signed receipt.
tags:
- x402 seller
x-agentcash-auth:
mode: paid
x-payment-info:
protocols:
- x402: {}
price:
mode: fixed
currency: USD
amount: '0.05'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
resource:
type: string
format: uri
maxLength: 300
description: The full URL of your x402 resource (public http or https, no port)
method:
type: string
enum:
- GET
- POST
description: Optional. The method your resource is paid with; default tries GET, then POST
network:
type: string
enum:
- eip155:8453
description: Optional. Base; the only network read today
required:
- resource
example:
resource: https://seller.example/api/paid-route
responses:
'200':
description: The report and a signed receipt
content:
application/json:
schema:
type: object
properties:
job_id:
type: string
status:
type: string
enum:
- done
- pending
- unserved
- rejected
verdict:
type: object
properties:
product:
type: string
enum:
- sellercheck
version:
type: string
checked_at:
type: string
format: date-time
resource:
type: string
network:
type: string
pass:
type: boolean
description: The door answers a valid 402 with a Base option and the resource is in the Bazaar index
summary:
type: string
terms:
type:
- object
- 'null'
properties:
scheme:
type: string
network:
type: string
amount:
type: string
asset:
type: string
pay_to:
type: string
max_timeout_seconds:
type:
- integer
- 'null'
door:
type: object
description: ok, method, http_status, x402_version, response_ms, tls, terms, problems, error
bazaar:
type: object
description: read, valid, indexed, last_crawled_at, failed_checks, search {query, results, found, rank}
router:
type: object
description: 'agent402: read, listed, routable, lane, settled_calls, threshold, has_tool_within_router_cap, blockers'
settlements:
type: object
description: read, pay_to, last_24h {count, payers}, last_7d {count, payers} (null when not read)
findings:
type: array
items:
type: object
properties:
area:
type: string
enum:
- door
- bazaar
- router
- settlements
ok:
type: boolean
message:
type: string
note:
type: string
required:
- product
- checked_at
- resource
- pass
- summary
- door
- bazaar
- findings
receipt:
type: object
description: 'Ed25519-signed receipt: body (canonical JSON), hash (sha256 hex), sig (base64url)'
properties:
body:
type: object
hash:
type: string
sig:
type: string
result_url:
type: string
result_token:
type: string
retry_after_seconds:
type: integer
required:
- job_id
- status
example:
job_id: chk_7d3f0b1e2c4a5d6e9f8a7b6c5d4e3f2a
status: done
verdict:
product: sellercheck
version: seller-2026-10-24.1
checked_at: '2026-10-24T19:00:00.000Z'
resource: https://seller.example/api/paid-route
network: eip155:8453
pass: false
summary: 'Did not pass: not in the Bazaar index.'
terms:
scheme: exact
network: eip155:8453
amount: '10000'
asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
pay_to: '0x1111111111111111111111111111111111111111'
max_timeout_seconds: 300
door:
ok: true
method: POST
http_status: 402
x402_version: 2
response_ms: 212
tls: true
terms: []
problems: []
bazaar:
read: true
valid: true
indexed: false
last_crawled_at: null
failed_checks: []
search:
query: Paid route for agents
results: 20
found: false
rank: null
router:
read: true
listed: true
routable: false
lane: null
settled_calls: 3
threshold: 50
has_tool_within_router_cap: true
blockers:
- fewer than 50 settled calls observed on-chain
settlements:
read: true
pay_to: '0x1111111111111111111111111111111111111111'
last_24h:
count: 0
payers: 0
last_7d:
count: 4
payers: 3
findings:
- area: door
ok: true
message: Answers POST with HTTP 402 and valid x402 v2 terms (1 payment option) in 212 ms.
- area: bazaar
ok: false
message: Not in the x402 Bazaar index, so Bazaar search does not show it. Resources drop out when nothing settles through the CDP facilitator for a while.
note: Code only, no model call.
receipt:
body:
kind: sellercheck
seq: 6
hash: '...'
sig: '...'
'400':
description: Invalid body or payment header. Nothing was charged.
'402':
description: Payment required. The PAYMENT-REQUIRED header carries the x402 v2 requirements; the JSON body gives the price.
security:
- x402: []
/v1/sellerwatch:
post:
operationId: sellerwatch
summary: Watch an x402 resource for 30 days, hourly, with alerts on change (paid once…
description: 'sellercheck every hour for 30 days. Alerts by webhook (JSON POST) and/or ntfy only on change: the 402 breaks or its terms change, the resource leaves or enters the Bazaar index, agent402''s routable or lane flips, a first settlement after 24 hours with none, the 7-day settlement count doubles or halves, down twice in a row. Returns the watch id, its public record page, and the first report, with a signed receipt.'
tags:
- x402 seller
x-agentcash-auth:
mode: paid
x-payment-info:
protocols:
- x402: {}
price:
mode: fixed
currency: USD
amount: '1.00'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
resource:
type: string
format: uri
maxLength: 300
description: The full URL of your x402 resource (public http or https, no port)
method:
type: string
enum:
- GET
- POST
description: Optional. The method your resource is paid with; default tries GET, then POST
network:
type: string
enum:
- eip155:8453
description: Optional. Base; the only network read today
notify:
type: object
description: Where alerts go; at least one
properties:
webhook:
type: string
format: uri
description: A public https URL that gets a JSON POST per alert
ntfy:
type: string
pattern: ^[A-Za-z0-9_-]{1,64}$
description: An ntfy.sh topic
required:
- resource
- notify
example:
resource: https://seller.example/api/paid-route
notify:
webhook: https://seller.example/hooks/x402-watch
responses:
'200':
description: The watch, its record page, the first report, and a signed receipt
content:
application/json:
schema:
type: object
properties:
job_id:
type: string
status:
type: string
enum:
- done
- pending
- unserved
- rejected
verdict:
type: object
properties:
product:
type: string
enum:
- sellerwatch
watch_id:
type: string
record_url:
type: string
starts_at:
type: string
ends_at:
type: string
checks_every:
type: string
notify:
type: object
first_report:
type: object
properties:
product:
type: string
enum:
- sellercheck
version:
type: string
checked_at:
type: string
format: date-time
resource:
type: string
network:
type: string
pass:
type: boolean
description: The door answers a valid 402 with a Base option and the resource is in the Bazaar index
summary:
type: string
terms:
type:
- object
- 'null'
properties:
scheme:
type: string
network:
type: string
amount:
type: string
asset:
type: string
pay_to:
type: string
max_timeout_seconds:
type:
- integer
- 'null'
door:
type: object
description: ok, method, http_status, x402_version, response_ms, tls, terms, problems, error
bazaar:
type: object
description: read, valid, indexed, last_crawled_at, failed_checks, search {query, results, found, rank}
router:
type: object
description: 'agent402: read, listed, routable, lane, settled_calls, threshold, has_tool_within_router_cap, blockers'
settlements:
type: object
description: read, pay_to, last_24h {count, payers}, last_7d {count, payers} (null when not read)
findings:
type: array
items:
type: object
properties:
area:
type: string
enum:
- door
- bazaar
- router
- settlements
ok:
type: boolean
message:
type: string
note:
type: string
required:
- product
- checked_at
- resource
- pass
- summary
- door
- bazaar
- findings
note:
type: string
required:
- product
- watch_id
- record_url
- ends_at
- first_report
receipt:
type: object
description: 'Ed25519-signed receipt: body (canonical JSON), hash (sha256 hex), sig (base64url)'
properties:
body:
type: object
hash:
type: string
sig:
type: string
result_url:
type: string
result_token:
type: string
retry_after_seconds:
type: integer
required:
- job_id
- status
example:
job_id: chk_8e4a1c2f3d5b6e7a0b9c8d7e6f5a4b3c
status: done
verdict:
product: sellerwatch
watch_id: w_0123456789abcdef01234567
record_url: https://crosscheckapi.com/w/w_0123456789abcdef01234567
starts_at: '2026-10-24T19:00:00.000Z'
ends_at: '2026-11-23T19:00:00.000Z'
checks_every: 1 hour
notify:
webhook: true
ntfy: false
first_report:
product: sellercheck
version: seller-2026-10-24.1
checked_at: '2026-10-24T19:00:00.000Z'
resource: https://seller.example/api/paid-route
network: eip155:8453
pass: false
summary: 'Did not pass: not in the Bazaar index.'
terms:
scheme: exact
network: eip155:8453
amount: '10000'
asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
pay_to: '0x1111111111111111111111111111111111111111'
max_timeout_seconds: 300
door:
ok: true
method: POST
http_status: 402
x402_version: 2
response_ms: 212
tls: true
terms: []
problems: []
bazaar:
read: true
valid: true
indexed: false
last_crawled_at: null
failed_checks: []
search:
query: Paid route for agents
results: 20
found: false
rank: null
router:
read: true
listed: true
routable: false
lane: null
settled_calls: 3
threshold: 50
has_tool_within_router_cap: true
blockers:
- fewer than 50 settled calls observed on-chain
settlements:
read: true
pay_to: '0x1111111111111111111111111111111111111111'
last_24h:
count: 0
payers: 0
last_7d:
count: 4
payers: 3
findings:
- area: door
ok: true
message: Answers POST with HTTP 402 and valid x402 v2 terms (1 payment option) in 212 ms.
- area: bazaar
ok: false
message: Not in the x402 Bazaar index, so Bazaar search does not show it. Resources drop out when nothing settles through the CDP facilitator for a while.
note: Code only, no model call.
note: 30 days of hourly checks.
receipt:
body:
kind: sellerwatch
seq: 7
hash: '...'
sig: '...'
'400':
description: Invalid body or payment header. Nothing was charged.
'402':
description: Payment required. The PAYMENT-REQUIRED header carries the x402 v2 requirements; the JSON body gives the price.
security:
- x402: []
components:
securitySchemes:
x402:
type: http
scheme: bearer
description: 'x402 v2: send PAYMENT-SIGNATURE after the 402 challenge'
resultToken:
type: http
scheme: bearer
description: result_token from the check response