Explain and preflight an unsigned Base transaction, EIP-712 typed data, or an EIP-3009…
Explain and preflight an unsigned Base transaction, EIP-712 typed data, or an EIP-3009 x402 payment authorization before you sign it. Decodes intent against verified ABIs, resolves proxies, classifies approvals, and checks a payment authorization against the…
by txguard.schemasure.com · discovered, not yet claimed by its owner · updated 2026-10-12
Mirrored from Coinbase's public x402 Bazaar. The description is the provider's own text and has not been reviewed here; the payment requirements are copied as published.
What it does
Explain and preflight an unsigned Base transaction, EIP-712 typed data, or an EIP-3009 x402 payment authorization before you sign it. Decodes intent against verified ABIs, resolves proxies, classifies approvals, and checks a payment authorization against the quote it claims to pay: recipient, amount, asset, chain, freshness, and nonce replay. Returns unknown rather than guessing when a selector is ambiguous. Not a guarantee that a transaction is safe or profitable.
Tags: base · transaction · preflight · x402 · eip3009 · bazaar
Call contract
- Method
- POST
- Input
- json
- Output
- json
- Last paid call
- 2026-10-12
{
"expected_quote": {
"amount": "10000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"maxTimeoutSeconds": 60,
"network": "eip155:8453",
"payTo": "0x1a2B3c4D5E6F7a8B9c0D1e2F3A4b5C6d7E8F9a0b",
"scheme": "exact"
},
"unsigned_tx": {
"data": "0xa9059cbb0000000000000000000000005d3e1a9b7c2f4e8a0b6d3c5f9e1a7b4d2c8f0a6e0000000000000000000000000000000000000000000000000000000000002710",
"from": "0x9F2C5E4A8db1C3a7E6B0d4f8C1E2a5b7D9C0e3F4",
"to": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"value": "0"
}
}{
"confidence": 1,
"data_versions": {
"abi_packs": "2026-08-03.1",
"chain": "eip155:8453",
"denylist": "2026-08-03.1",
"policy": "2026-08-03",
"signature_index": "2026-08-03.1"
},
"evidence": [
{
"code": "RECIPIENT_MISMATCH",
"data": {
"actual": "0x5D3e1a9b7c2f4E8A0b6d3c5F9E1A7b4D2C8f0a6E",
"expected": "0x1a2B3c4D5E6F7a8B9c0D1e2F3A4b5C6d7E8F9a0b",
"field": "payTo"
},
"detail": "Pays 0x5D3e1a9b7c2f4E8A0b6d3c5F9E1A7b4D2C8f0a6E, but the quote names 0x1a2B3c4D5E6F7a8B9c0D1e2F3A4b5C6d7E8F9a0b. Signing this pays someone other than the party you are buying from.",
"severity": "critical",
"source": "quote-comparison"
},
{
"code": "RPC_UNAVAILABLE",
"detail": "No Base RPC endpoint is configured, so chain-dependent fields are unknown rather than assumed. See result.unresolved.",
"severity": "medium",
"source": "rpc"
}
],
"ok": true,
"policy_version": "2026-08-03",
"request_hash": "sha256:6d5c717eb5eede165dada2645ad0944430ff492739cf58d0c2dad2b812f0ddb4",
"result": {
"approvals": [],
"authorization_checks": [],
"candidate_signatures": [],
"chain": "eip155:8453",
"denylist_hits": [],
"expected_transfers": [
{
"amount": "10000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"asset_kind": "erc20",
"from": "0x9f2C5E4a8DB1C3A7e6b0d4f8C1e2A5b7d9c0E3f4",
"source": "decode",
"to": "0x5D3e1a9b7c2f4E8A0b6d3c5F9E1A7b4D2C8f0a6E",
"token_id": null
}
],
"input_shape": "unsigned_tx",
"intent": {
"args": [
{
"name": "to",
"type": "address",
"value": "0x5D3e1a9b7c2f4E8A0b6d3c5F9E1A7b4D2C8f0a6E"
},
{
"name": "amount",
"type": "uint256",
"value": "10000"
}
],
"calls": [],
"decode_source": "bundled-abi",
"depth": 0,
"function_name": "transfer",
"kind": "erc20_transfer",
"selector": "0xa9059cbb",
"signature": "transfer(address,uint256)",
"standard": "erc20",
"summary": "Transfer 10000 base units of token 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 to 0x5D3e1a9b7c2f4E8A0b6d3c5F9E1A7b4D2C8f0a6E.",
"target": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"truncated": false,
"value_wei": "0"
},
"permit_scope": null,
"proxy": {
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"admin": null,
"beacon": null,
"detail": "no RPC endpoint is configured, so no slot could be read",
"implementation": null,
"kind": "unknown",
"slots_probed": [],
"upgradeable": null
},
"quote_comparison": {
"detail": "2 of 3 comparable fields match",
"fields": [
{
"actual": "0x5D3e1a9b7c2f4E8A0b6d3c5F9E1A7b4D2C8f0a6E",
"expected": "0x1a2B3c4D5E6F7a8B9c0D1e2F3A4b5C6d7E8F9a0b",
"field": "payTo",
"matches": false
},
{
"actual": "10000",
"expected": "10000",
"field": "amount",
"matches": true
},
{
"actual": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"expected": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"field": "asset",
"matches": true
},
{
"actual": null,
"expected": "8453",
"field": "chainId",
"matches": null
},
{
"actual": null,
"expected": "USD Coin",
"field": "extra.name",
"matches": null
},
{
"actual": null,
"expected": "2",
"field": "extra.version",
"matches": null
}
],
"matches": false,
"present": true
},
"rpc": {
"configured": false,
"endpoints": [],
"reachable": null
},
"simulation": {
"asset_changes": [],
"block_number": null,
"detail": "simulation was not requested; send simulate: true to run one",
"gas_used": null,
"requested": false,
"status": "not_requested"
},
"spender": {
"address": null,
"detail": "this transaction grants no allowance, so it has no spender",
"is_contract": null
},
"unresolved": [
"proxy status of 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 is unknown: no RPC endpoint is configured, so no slot could be read"
]
},
"risk_codes": [
"RECIPIENT_MISMATCH",
"RPC_UNAVAILABLE"
],
"verdict": "block",
"warnings": []
}Use with an agent
- Discover. Agents find this listing with
GET https://bazaar.saylorinnovations.com/discovery/search?query=…, the MCP toolsearch_resources, or/discovery/resources. - Inspect. Fetch
/resources/26948.jsonfor the price and payment options. - Pay. Call
GET https://txguard.schemasure.com/v1/tx/preflight. The provider answers402with its payment requirements. An x402 client signs one of the options below and retries withPAYMENT-SIGNATURE. - Execute. The provider returns
200with the data. Agent Bazaar is not in the request path and never sees your payment.
For humans
You don't need an account or an API key; you need a wallet holding a small amount of USDC on Base, and an x402-capable client (see the examples below). Call the endpoint unpaid first to see exactly what it asks for.
Pricing & payment
- Price
- $0.02 / request
- Protocol
- x402 v2
- Auth
- No account or API key. Pay per request.
- Networks
- Base
- Demand
- 37 calls · 6 unique payers in 30d (public x402 Bazaar data)
x402 payment requirements
| Scheme | Network | Asset | Amount | Pay to | Timeout |
|---|---|---|---|---|---|
| exact | Base eip155:8453 | USDC | $0.02 | 0x9876af0F6D8Ed5155Cd02d1ca56D128601612690 | 60s |
accepts[] (raw JSON)
[
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0x9876af0F6D8Ed5155Cd02d1ca56D128601612690",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "20000",
"amountUsd": 0.02,
"maxTimeoutSeconds": 60
}
]Schemas
Output schema (JSON Schema)
{
"properties": {
"example": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"confidence": {
"maximum": 1,
"minimum": 0,
"type": "number"
},
"data_versions": {
"required": [
"denylist",
"abi_packs",
"signature_index",
"policy",
"chain"
],
"type": "object"
},
"evidence": {
"items": {
"type": "object"
},
"type": "array"
},
"ok": {
"type": "boolean"
},
"policy_version": {
"type": "string"
},
"request_hash": {
"pattern": "^sha256:[0-9a-f]{64}$",
"type": "string"
},
"result": {
"properties": {
"approvals": {
"items": {
"properties": {
"scope": {
"enum": [
"infinite",
"effectively_infinite",
"bounded"
],
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"intent": {
"properties": {
"decode_source": {
"enum": [
"verified-abi",
"bundled-abi",
"offline-index",
"live-lookup",
"unresolved"
],
"type": "string"
}
},
"required": [
"kind",
"summary",
"decode_source",
"calls",
"truncated"
],
"type": "object"
},
"proxy": {
"properties": {
"kind": {
"enum": [
"none",
"eip1167",
"eip1967",
"eip1967-beacon",
"eip1822",
"zeppelinos",
"diamond",
"unknown"
],
"type": "string"
}
},
"type": "object"
}
},
"required": [
"input_shape",
"chain",
"intent",
"expected_transfers",
"approvals",
"permit_scope",
"spender",
"proxy",
"authorization_checks",
"quote_comparison",
"simulation",
"candidate_signatures",
"denylist_hits",
"unresolved",
"rpc"
],
"type": "object"
},
"risk_codes": {
"items": {
"type": "string"
},
"type": "array"
},
"verdict": {
"description": "Precedence: block, then unknown, then warn, then allow.",
"enum": [
"allow",
"warn",
"block",
"unknown"
],
"type": "string"
},
"warnings": {
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"ok",
"verdict",
"confidence",
"risk_codes",
"evidence",
"result",
"policy_version",
"request_hash",
"data_versions",
"warnings"
],
"title": "TxPreflightEnvelope",
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}Example shape — generated from the schema, not a captured live response
{
"example": {
"confidence": 0,
"data_versions": {},
"evidence": [
{}
],
"ok": true,
"policy_version": "string",
"request_hash": "string",
"result": {
"approvals": [
{
"scope": "infinite"
}
],
"intent": {
"decode_source": "verified-abi"
},
"proxy": {
"kind": "none"
}
},
"risk_codes": [
"string"
],
"verdict": "allow",
"warnings": [
"string"
]
},
"type": "string"
}Examples
curl "https://txguard.schemasure.com/v1/tx/preflight"
# -> 402 Payment Required, accepts[] lists how to pay
# retry with a PAYMENT-SIGNATURE (or PAYMENT header) once paidconst res = await fetch("https://txguard.schemasure.com/v1/tx/preflight");
if (res.status === 402) {
const { accepts } = await res.json();
// pay one of accepts[] via an x402 client, then retry with the payment header
}import httpx
res = httpx.get("https://txguard.schemasure.com/v1/tx/preflight")
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerDetails
- Provider
- txguard.schemasure.com
- Endpoint
- https://txguard.schemasure.com/v1/tx/preflight
- Machine-readable
/resources/26948.json