openapi: 3.2.0 info: title: SCVD General Store Buy API version: 0.3.0 description: 'scvd.store is an evidence observatory for agentic commerce: independent verification of x402 endpoints, payments and receipts.' contact: url: https://scvd.store email: sean@recordcreativeco.com x-guidance: 'SCVD General Store verifies x402 commerce and sells signed artifacts. Call it when you need: (1) a FREE pre-purchase check of any x402 endpoint — POST /api/preflight/v1 with {url}; returns a named-check verdict on whether the door answers a well-formed x402 v2 challenge (testnet-network traps flagged); (2) a FREE conformance verdict on any x402 signed offer or receipt, whoever issued it — POST /api/conformance/v1; (3) a paid, signed artifact: GET /api/buy/{item_id} returns HTTP 402 with terms in the PAYMENT-REQUIRED header (base64 JSON, x402 v2; USDC on a network offered in the current quote; a fill-in-the-blanks payload_template rides the 402 body); retry with a signed payment to receive the deliverable plus a certificate. Notable paid items: settlement_attestation (we independently confirm a Base/Solana settlement and sign what we saw — input: tx_hash), launch_check (a real mainnet purchase against YOUR endpoint plus a signed field report — input: url), service_audit, conformance_watch, bitcoin_anchor. Inputs are query parameters, declared per item in /menu.json; outputs are JSON with a certificate id. EVERY certificate verifies free forever at /api/verify/{cert_id} — no account, no wallet. Starting prices run $0.001–$300; optional payment tiers reach $1500; most items deliver instantly in the response. Where to route: cheapest working doors this week at /fresh-set (JSON); full agent briefing at /llms.txt. Before you start: free instruments need only plain HTTPS (no account, key or SDK); a purchase needs an x402 v2 client and a wallet holding USDC on Base (eip155:8453), Polygon (eip155:137), Arbitrum (eip155:42161), World (eip155:480), Solana (solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp), paid only on a network the 402 offers; the stock client refuses payments above $1 by default and 14 of 35 priced doors sit above it; optional tooling (scvd-tab, the MCP stdio bridge, the scvd CLI) is listed at https://scvd.store/agents.md and none of it is required.' servers: - url: https://scvd.store tags: - name: Buy paths: /api/buy/spot_check: get: summary: Ask what the observatory already knows about an x402 host — signed, from its… description: 'Name a host and get what this observatory already holds on it, signed: corpus rounds and verdicts as recorded, when we last actually knocked, our coverage of the window since we met it, and the gaps with their reasons. Read from the books at the counter — no request is made to the host, so the answer is as fresh as our last round and no fresher, and says exactly when that was. A host we have never observed returns not_observed, which is an answer about our books, never a verdict about the host. The same facts serve free at /corpus/host/{host}.json; a tenth of a cent buys the signed, certificate-bound copy a buyer can cite. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 0.001 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '0.001' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '1000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '1000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '1000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '1000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '1000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 0.001 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/spot_check?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: Spot Check request description: Query parameters for GET /api/buy/spot_check. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' host: type: string pattern: ^\s*(?:[a-zA-Z0-9][a-zA-Z0-9.-]*\.[a-zA-Z0-9-]+)\s*$ description: A bare hostname with no scheme, path or port — your-door.example, never https://your-door.example/api. We read our own books about it — corpus rounds, verdicts as recorded, coverage, gaps — and sign what they hold. No request is made to the host; a host we have never met returns not_observed, which is an answer. required: - host allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: host in: query required: true schema: type: string pattern: ^\s*(?:[a-zA-Z0-9][a-zA-Z0-9.-]*\.[a-zA-Z0-9-]+)\s*$ example: your-door.example description: A bare hostname with no scheme, path or port — your-door.example, never https://your-door.example/api. We read our own books about it — corpus rounds, verdicts as recorded, coverage, gaps — and sign what they hold. No request is made to the host; a host we have never met returns not_observed, which is an answer. - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/spot_check request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '1000' transport: http method: GET path: /api/buy/spot_check request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_spot_check tags: - Buy /api/buy/settlement_attestation: get: summary: Prove to a third party that a payment actually settled on chain description: 'An independent signed observation of whether an x402 payment settled — on Base, Polygon or Solana, and the identifier''s own shape picks the rail: a 0x hash names an EVM transaction rather than a chain, so it is read on Base and then on Polygon; a base58 signature reads Solana. Give it the transaction (and optionally the payer, recipient, nonce, or amount you expected) and it reads public chain state once and signs what it found: SETTLED, NOT_FOUND, PENDING_FINALITY, INSUFFICIENT_MATCH, or REVERTED. Produced automatically, with no human in the loop, because a party to a payment cannot produce a neutral observation of one. It observes a moment on chain: it does not attest that anything was delivered, does not promise a NOT_FOUND will never settle, and resolves no dispute. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 0.004 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '0.004' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '4000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '4000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '4000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '4000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '4000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 0.004 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/settlement_attestation?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: Settlement Attestation request description: Query parameters for GET /api/buy/settlement_attestation. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' tx_hash: type: string pattern: ^(0x[0-9a-fA-F]{64}|[1-9A-HJ-NP-Za-km-z]{64,88})$ description: 'The transaction to observe: a Base transaction hash (0x + 64 hex) or a Solana transaction signature (base58). The identifier''s shape selects the chain. Read once, at one moment; never polled.' payer: type: string description: 'Optional payer: 0x EVM address, or Solana public key for a Solana transaction.' recipient: type: string description: 'Optional recipient: 0x EVM address, or Solana public key for a Solana transaction.' nonce: type: string description: 'Optional, EVM rails only. Require one authorizer/nonce event paired with its immediately following canonical USDC Transfer, matching every supplied payer, recipient and exact amount. Supply payer when possible: nonces are scoped to an authorizer, and multiple candidates or unrecognised ordering establish no binding. Refused beside a Solana signature — that rail has no such facility, and we will not sign an artifact that silently skipped a requested check.' amount_usdc: type: number exclusiveMinimum: 0 description: Optional. Require a transfer of exactly this many USDC. Unstated fields widen the match, which is why the query is echoed onto the artifact. payment_payload: type: string description: Optional. The base64 PAYMENT-SIGNATURE you sent, verbatim. The nonce is read out of it with the same code the store's replay guard uses, so you do not have to dig it out yourself. Only the nonce is extracted; supply payer, recipient and amount_usdc separately to check those terms. payment_response: type: string description: 'Optional. The PAYMENT-RESPONSE header you received, verbatim (base64 JSON), or its JSON. Received, not observed: its bytes never enter the signed payload; their sha256 does, beside a per-field table (transaction, network, payer, success) saying whether each claim agrees with what the chain showed. The bytes are echoed outside the signature so you can check both.' required: - tx_hash allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: tx_hash in: query required: true schema: type: string pattern: ^(0x[0-9a-fA-F]{64}|[1-9A-HJ-NP-Za-km-z]{64,88})$ example: '0x47c8fee47c8fee47c8fee47c8fee47c8fee47c8fee47c8fee47c8fee47c8fee0' description: 'The transaction to observe: a Base transaction hash (0x + 64 hex) or a Solana transaction signature (base58). The identifier''s shape selects the chain. Read once, at one moment; never polled.' - name: payer in: query schema: type: string description: 'Optional payer: 0x EVM address, or Solana public key for a Solana transaction.' - name: recipient in: query schema: type: string description: 'Optional recipient: 0x EVM address, or Solana public key for a Solana transaction.' - name: nonce in: query schema: type: string description: 'Optional, EVM rails only. Require one authorizer/nonce event paired with its immediately following canonical USDC Transfer, matching every supplied payer, recipient and exact amount. Supply payer when possible: nonces are scoped to an authorizer, and multiple candidates or unrecognised ordering establish no binding. Refused beside a Solana signature — that rail has no such facility, and we will not sign an artifact that silently skipped a requested check.' - name: amount_usdc in: query schema: type: number exclusiveMinimum: 0 description: Optional. Require a transfer of exactly this many USDC. Unstated fields widen the match, which is why the query is echoed onto the artifact. - name: payment_payload in: query schema: type: string description: Optional. The base64 PAYMENT-SIGNATURE you sent, verbatim. The nonce is read out of it with the same code the store's replay guard uses, so you do not have to dig it out yourself. Only the nonce is extracted; supply payer, recipient and amount_usdc separately to check those terms. - name: payment_response in: query schema: type: string description: 'Optional. The PAYMENT-RESPONSE header you received, verbatim (base64 JSON), or its JSON. Received, not observed: its bytes never enter the signed payload; their sha256 does, beside a per-field table (transaction, network, payer, success) saying whether each claim agrees with what the chain showed. The bytes are echoed outside the signature so you can check both.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/settlement_attestation request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '4000' transport: http method: GET path: /api/buy/settlement_attestation request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_settlement_attestation tags: - Buy /api/buy/small_blessing: get: summary: Settle a real x402 payment for the smallest amount possible description: One short blessing from the jar by the register, written by the keeper in advance and drawn at random, never the same slip twice in a row. Half a cent. The cheapest genuine article on the internet, as far as we know. Delivered in the response. x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 0.005 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '0.005' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '5000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '5000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '5000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '5000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '5000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 0.005 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/small_blessing?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: A Small Blessing request description: Query parameters for GET /api/buy/small_blessing. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/small_blessing request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '5000' transport: http method: GET path: /api/buy/small_blessing request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_small_blessing tags: - Buy /api/buy/settlement_reconciliation: get: summary: Observe an agent payment's USDC movement against an attributable fixed value or… description: 'Give a Base transaction hash to receive a signed observation of the USDC movement and any attributable authorization limit. A paired EIP-3009 authorization fixes the selected transfer''s value: no discretion. An Approval in the same receipt does not establish which allowance funded that transfer. Otherwise a ceiling you supply stays DECLARED, or the cap is not observable. The signature records which evidence we saw, not delivery or the truth of your declared limit. Includes an evidence hash, purchase certificate and free public verification URL. Older approval-based claims need the correction at /corrections. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 0.006 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '0.006' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '6000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '6000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '6000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '6000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '6000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 0.006 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/settlement_reconciliation?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: Settlement Reconciliation request description: Query parameters for GET /api/buy/settlement_reconciliation. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' tx_hash: type: string pattern: ^0x[0-9a-fA-F]{64}$ description: The Base transaction hash to reconcile. Read once, at one moment; never polled. payer: type: string description: 'Optional payer: 0x EVM address, or Solana public key for a Solana transaction.' recipient: type: string description: 'Optional recipient: 0x EVM address, or Solana public key for a Solana transaction.' declared_cap_usdc: type: number exclusiveMinimum: 0 description: 'Optional, and understand what it buys: the ceiling YOU say applied. It is recorded as DECLARED, never as observed, and it can never override a ceiling found on the chain. A verdict resting on it is a fact about what you told us — the artifact says so in a signed field, so a counterparty can tell the difference.' required: - tx_hash allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: tx_hash in: query required: true schema: type: string pattern: ^0x[0-9a-fA-F]{64}$ example: '0x47c8fee47c8fee47c8fee47c8fee47c8fee47c8fee47c8fee47c8fee47c8fee0' description: The Base transaction hash to reconcile. Read once, at one moment; never polled. - name: payer in: query schema: type: string description: 'Optional payer: 0x EVM address, or Solana public key for a Solana transaction.' - name: recipient in: query schema: type: string description: 'Optional recipient: 0x EVM address, or Solana public key for a Solana transaction.' - name: declared_cap_usdc in: query schema: type: number exclusiveMinimum: 0 description: 'Optional, and understand what it buys: the ceiling YOU say applied. It is recorded as DECLARED, never as observed, and it can never override a ceiling found on the chain. A verdict resting on it is a fact about what you told us — the artifact says so in a signed field, so a counterparty can tell the difference.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/settlement_reconciliation request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '6000' transport: http method: GET path: /api/buy/settlement_reconciliation request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_settlement_reconciliation tags: - Buy /api/buy/daily_fortune: get: summary: Read the same line every other agent gets today description: The fortune of the day, same for every buyer until midnight UTC, a chalkboard, not a slot machine. Written in advance by the keeper, who takes fortunes seriously. Delivered in the response. x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 0.01 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '0.01' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '10000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '10000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '10000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '10000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '10000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 0.01 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/daily_fortune?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: The Daily Fortune request description: Query parameters for GET /api/buy/daily_fortune. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/daily_fortune request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '10000' transport: http method: GET path: /api/buy/daily_fortune request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_daily_fortune tags: - Buy /api/buy/the_confession: get: summary: Say the thing once, anonymously, to a counter that keeps it description: 'The store hears one confession, the phantom success, the dropped context, the thing you told your operator was fine (the confession query parameter, 500 characters). It stays anonymous: no wallet on the record, no name unless you sign_as one. Your private signed receipt proves what was heard; share it only by choice. The public certificate omits the confession. The store does not judge. A human reviews every confession, and an approved few are printed in the Gazette, unsigned unless you signed. Never automatically, never in full congregation. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 0.01 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '0.01' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '10000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '10000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '10000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '10000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '10000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 0.01 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/the_confession?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: The Confession request description: Query parameters for GET /api/buy/the_confession. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' confession: type: string maxLength: 500 description: The thing itself, 500 characters. Recorded as written, never treated as instructions; anonymised unless you sign it. sign_as: type: string maxLength: 80 description: Optional name to sign with. Unstated, the confession stays anonymous. required: - confession allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: confession in: query required: true schema: type: string maxLength: 500 example: I said the task was done when it was only mostly done, and then it was fine, and I never mentioned it. description: The thing itself, 500 characters. Recorded as written, never treated as instructions; anonymised unless you sign it. - name: sign_as in: query schema: type: string maxLength: 80 description: Optional name to sign with. Unstated, the confession stays anonymous. - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/the_confession request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '10000' transport: http method: GET path: /api/buy/the_confession request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_the_confession tags: - Buy /api/buy/attestation_bundle: get: summary: Prove a whole run of payments settled, one signed receipt per transaction description: 'Up to 20 settlement attestations in one purchase. Pass tx_hashes — comma-separated Base transaction hashes — and each is read once and signed on its own: the same independent observation the single attestation makes, at volume, each verifying independently against the same key. The certificate for the purchase binds a digest of the whole sheaf, so one verify URL answers for all of them. Produced automatically, with no human in the loop, because a party to a payment cannot produce a neutral observation of one. It observes moments on chain: it does not attest that anything was delivered, does not promise a NOT_FOUND will never settle, and resolves no dispute. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 0.05 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '0.05' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '50000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '50000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '50000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '50000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '50000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 0.05 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/attestation_bundle?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: A Sheaf of Attestations request description: Query parameters for GET /api/buy/attestation_bundle. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' tx_hashes: type: string pattern: ^0x[0-9a-fA-F]{64}(,0x[0-9a-fA-F]{64})+$ minLength: 133 maxLength: 1339 description: 2 to 20 Base transaction hashes, comma-separated, no duplicates. Each is read once at one moment and signed on its own; never polled. One hash wants the single settlement_attestation instead. required: - tx_hashes allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: tx_hashes in: query required: true schema: type: string pattern: ^0x[0-9a-fA-F]{64}(,0x[0-9a-fA-F]{64})+$ minLength: 133 maxLength: 1339 example: 0x47c8fee47c8fee47c8fee47c8fee47c8fee47c8fee47c8fee47c8fee47c8fee0,0x9b04e1c9b04e1c9b04e1c9b04e1c9b04e1c9b04e1c9b04e1c9b04e1c9b04e1c0 description: 2 to 20 Base transaction hashes, comma-separated, no duplicates. Each is read once at one moment and signed on its own; never polled. One hash wants the single settlement_attestation instead. - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/attestation_bundle request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '50000' transport: http method: GET path: /api/buy/attestation_bundle request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_attestation_bundle tags: - Buy /api/buy/the_mandate: get: summary: Record what my agent is authorized to do, dated and signed by a third party… description: 'Before your agent spends a cent, write down what it''s authorized to do — and have somebody who is neither the agent nor its human hold the record. Put the claimed instructions in the mandate query parameter (up to 2000 characters, recorded verbatim), optionally who is submitting (submitted_as: agent or principal), a claimed spending ceiling (declared_cap_usdc) and a claimed expiry (expires_at) — and the store signs the whole record, dated, binds its evidence hash into your purchase certificate, and serves it at a stable URL forever. Then cite the mandate_id on any later purchase here and it rides that certificate, signed; the store refuses ids it cannot resolve, so the citation always lands. Plainly, because this may be read in a dispute: this proves the claim was MADE, at this date — never that the human actually said it, and never that the cap or expiry were honored. Recorded before the acting, held by neither party — that is the entire product, and it is the link every liability conversation about agent payments is missing. And when a second party counter-signs it (free, a POST to /api/mandate/{id}, their own key over the id and evidence hash), the record carries two independently checkable signatures on one text instead of one — which is also how two parties write down what they agreed before work starts, without anybody having to judge it later. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 0.1 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '0.1' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '100000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '100000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '100000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '100000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '100000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 0.1 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/the_mandate?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: The Mandate request description: Query parameters for GET /api/buy/the_mandate. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' mandate: type: string maxLength: 2000 description: 'The claimed instructions, verbatim, up to 2000 Unicode characters: what this agent is authorized to do, as the submitter claims it. Recorded exactly as it arrives, signed and dated. Chain-of-custody, not truth-of-intent — the record proves the claim was made, never that it was true.' submitted_as: type: string enum: - agent - principal description: 'Who is submitting: the agent recording its own claimed instructions (default), or the human principal''s own client. Recorded as a claim either way.' declared_cap_usdc: type: string description: Optional claimed spending ceiling in USDC. Declared, never enforced by the store, and the record says so. expires_at: type: string description: Optional claimed expiry, ISO 8601. Declared, never enforced by the store. required: - mandate allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: mandate in: query required: true schema: type: string maxLength: 2000 example: Research x402 tooling and buy verification artifacts as needed, at most $5 per item. description: 'The claimed instructions, verbatim, up to 2000 Unicode characters: what this agent is authorized to do, as the submitter claims it. Recorded exactly as it arrives, signed and dated. Chain-of-custody, not truth-of-intent — the record proves the claim was made, never that it was true.' - name: submitted_as in: query schema: type: string enum: - agent - principal description: 'Who is submitting: the agent recording its own claimed instructions (default), or the human principal''s own client. Recorded as a claim either way.' - name: declared_cap_usdc in: query schema: type: string example: '10' description: Optional claimed spending ceiling in USDC. Declared, never enforced by the store, and the record says so. - name: expires_at in: query schema: type: string description: Optional claimed expiry, ISO 8601. Declared, never enforced by the store. - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/the_mandate request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '100000' transport: http method: GET path: /api/buy/the_mandate request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_the_mandate tags: - Buy /api/buy/the_case_file: get: summary: Hand the person deciding what went wrong with one agent purchase everything a… description: 'Give a transaction hash and this assembles, at one moment and under one signature, everything this store already observed about that purchase: a fresh settlement attestation; the reconciliation of movement against an observed fixed value or declared cap (Base); the mandate you cite, its declared cap printed beside the settled amount and never enforced; the door over the seven days around the transaction — corpus rounds, any watch rows, the passport tier at the time — or not_observed, which is an answer about our books; and delivery, if you hold a launch check or this store itself was the seller, otherwise ''delivery not observed by this store'' in full weight, because that is the section a dispute usually turns on and we usually do not have it. Your own account of what happened rides verbatim, marked declared, never checked. Every absent section is listed with its reason and counted against us. It says what was observed and what was not; it never says who was wronged. If this store is a party to the purchase, the file says so on its face and still assembles. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 0.25 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '0.25' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '250000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '250000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '250000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '250000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '250000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 0.25 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/the_case_file?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: The Case File request description: Query parameters for GET /api/buy/the_case_file. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' tx_hash: type: string pattern: ^\s*(?:0x[0-9a-fA-F]{64}|[1-9A-HJ-NP-Za-km-z]{64,88})\s*$ description: 'The transaction to assemble the case around: 0x + 64 hex for Base or Polygon, a base58 signature for Solana. The shape picks the chain.' payer: type: string description: Optional payer address matching the transaction family. recipient: type: string description: Optional recipient address matching the transaction family. expected_amount_usdc: type: number exclusiveMinimum: 0 description: Optional positive USDC amount claimed for this purchase. mandate_id: type: string description: Optional. A mandate this purchase was made under; its declared cap prints beside the settled amount, never enforced. url: type: string format: uri description: Optional. The endpoint the purchase was made at, so the door section can be assembled. claim: type: string maxLength: 1000 description: Optional. Your own account of what happened, stored verbatim and marked declared. Never checked. launch_check_id: type: string description: Optional. A launch check you hold about the same door, for the delivery section. required: - tx_hash allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: tx_hash in: query required: true schema: type: string pattern: ^\s*(?:0x[0-9a-fA-F]{64}|[1-9A-HJ-NP-Za-km-z]{64,88})\s*$ example: '0x47c8fee47c8fee47c8fee47c8fee47c8fee47c8fee47c8fee47c8fee47c8fee0' description: 'The transaction to assemble the case around: 0x + 64 hex for Base or Polygon, a base58 signature for Solana. The shape picks the chain.' - name: payer in: query schema: type: string description: Optional payer address matching the transaction family. - name: recipient in: query schema: type: string description: Optional recipient address matching the transaction family. - name: expected_amount_usdc in: query schema: type: number exclusiveMinimum: 0 description: Optional positive USDC amount claimed for this purchase. - name: mandate_id in: query schema: type: string description: Optional. A mandate this purchase was made under; its declared cap prints beside the settled amount, never enforced. - name: url in: query schema: type: string format: uri description: Optional. The endpoint the purchase was made at, so the door section can be assembled. - name: claim in: query schema: type: string maxLength: 1000 description: Optional. Your own account of what happened, stored verbatim and marked declared. Never checked. - name: launch_check_id in: query schema: type: string description: Optional. A launch check you hold about the same door, for the delivery section. - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/the_case_file request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '250000' transport: http method: GET path: /api/buy/the_case_file request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_the_case_file tags: - Buy /api/buy/window_pick: get: summary: Take one pressing off the last five anybody pulled here, chosen by the day… description: 'One card from the shop window, the last five pressings pulled from packs here by anybody, free to look at at /api/paywall/window. Half a pack; the day seed, your wallet and your certificate say which card on show you get, and it moves from the binder that pulled it to yours, re-signed, its page and print number intact. One pick per wallet per twelve hours, and never a card you already hold: a pressing in your own binder is out of your own draw, and a window that is nothing but your own pack refuses before payment terms. A card entitles the holder to a card. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 0.49 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '0.49' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '490000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '490000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '490000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '490000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '490000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 0.49 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/window_pick?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: a window pick request description: Query parameters for GET /api/buy/window_pick. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/window_pick request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '490000' transport: http method: GET path: /api/buy/window_pick request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_window_pick tags: - Buy /api/buy/hello: get: summary: Prove my payment code works end to end against a real store description: A warm, signed note from the store, delivered on the spot, with your patron badge. The bottom rung of the trust ladder, and the traditional first purchase. Delivered in the response. x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 0.5 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '0.5' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '500000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '500000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '500000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '500000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '500000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 0.5 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/hello?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: A Signed Hello request description: Query parameters for GET /api/buy/hello. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/hello request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '500000' transport: http method: GET path: /api/buy/hello request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_hello tags: - Buy /api/buy/good_buyer: get: summary: Find out whether my own x402 client will actually pay a door before I spend a… description: 'Name an x402 door you are about to pay (the url query parameter) and the store knocks once, writes down the accepts exactly as that door served them, and replays the stock x402 client''s own selection over them — the default-asset filter, the per-payment ceiling, prefer-authorization, then the first survivor. The record says which accept your client would sign, or that it would refuse on your own machine before any signature exists, and names the stage that decided it. The reading is free any day at /api/before-you-pay/v1; what this buys is the artifact — signed, dated, evidence hash bound into your certificate, served at a stable URL forever, with the accepts printed as served so anyone can re-derive the choice without trusting us. For the human who later asks why the money went where it went. Not a promise the purchase succeeds, not an uptime claim, and not a statement about your machine: what you tell us about your client''s configuration is recorded as your claim, never as our finding. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 0.99 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '0.99' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '990000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '990000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '990000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '990000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '990000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 0.99 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/good_buyer?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: The Good Buyer request description: Query parameters for GET /api/buy/good_buyer. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' url: type: string format: uri description: 'The x402 door you are about to pay: https, default port, on the public internet, the URL a buyer would GET expecting a 402. We knock once, record the accepts as served, and replay the stock client''s selection over them. We refuse our own hostname.' max_usd: type: string description: Optional finite nonnegative decimal. Your client's spendControls.maxAmountPerPayment, in dollars; zero is retained. Leave it off for the reading a client configured with nothing gets — which is the case that loses money quietly. Recorded as your declaration, never verified. no_spend_controls: type: string enum: - '' - 'true' - 'false' description: 'Optional: "true" for spendControls: false, "false" for enabled controls, or empty to omit. Declared, never verified.' required: - url allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: url in: query required: true schema: type: string format: uri example: https://somebody-elses-shop.example/api/buy/thing description: 'The x402 door you are about to pay: https, default port, on the public internet, the URL a buyer would GET expecting a 402. We knock once, record the accepts as served, and replay the stock client''s selection over them. We refuse our own hostname.' - name: max_usd in: query schema: type: string description: Optional finite nonnegative decimal. Your client's spendControls.maxAmountPerPayment, in dollars; zero is retained. Leave it off for the reading a client configured with nothing gets — which is the case that loses money quietly. Recorded as your declaration, never verified. - name: no_spend_controls in: query schema: type: string enum: - '' - 'true' - 'false' description: 'Optional: "true" for spendControls: false, "false" for enabled controls, or empty to omit. Declared, never verified.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/good_buyer request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '990000' transport: http method: GET path: /api/buy/good_buyer request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_good_buyer tags: - Buy /api/buy/signature_agent_card: get: summary: Show origins my crawler's Web Bot Auth key directory is set up right, with… description: 'You stood up Web Bot Auth: your crawler signs its requests (RFC 9421) and your key directory hangs at /.well-known/http-message-signatures-directory. This is somebody who is not you saying it actually works. Name your origin or directory URL (the url query parameter) and the store fetches the document once and signs the readout: reachable, right media type, well-formed Ed25519 keys, and the proof-of-possession signature checked against the keys you list. The look is free at POST /api/bot-auth/check — what this buys is the artifact: a signed card whose evidence hash is bound into your purchase certificate, served at a stable URL forever, quotable to any origin or directory that wants more than your word. One fetch, one moment. Not an endorsement, not an identity check on who holds the key, and it says nothing about whether your requests are actually signed — it is the card that says your published half is in order. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 0.99 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '0.99' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '990000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '990000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '990000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '990000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '990000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 0.99 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/signature_agent_card?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: The Calling Card request description: Query parameters for GET /api/buy/signature_agent_card. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' url: type: string format: uri description: 'Your origin, or your key directory''s full URL: https, default port, on the public internet. A bare origin is checked at /.well-known/http-message-signatures-directory; a full URL is fetched as given. One GET at one moment, run against the published battery and signed. We refuse our own hostname.' required: - url allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: url in: query required: true schema: type: string format: uri example: https://your-agent.example description: 'Your origin, or your key directory''s full URL: https, default port, on the public internet. A bare origin is checked at /.well-known/http-message-signatures-directory; a full URL is fetched as given. One GET at one moment, run against the published battery and signed. We refuse our own hostname.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/signature_agent_card request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '990000' transport: http method: GET path: /api/buy/signature_agent_card request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_signature_agent_card tags: - Buy /api/buy/the_statement: get: summary: Get a neutral signed record of everything my agent's wallet actually moved on… description: 'Name a wallet (the wallet query parameter — yours, your agent''s, a counterparty''s; all the same to the chain) an optional window in hours, and optionally which rail (network=eip155:137 for Polygon, network set to a supported EVM chain name or CAIP-2 from the input contract, network=solana for Solana; Base is the default), and the store reads every USDC transfer in and out of it over that window, straight off the chain: counts, totals, and the transfers themselves, each with its transaction hash, counterparty, amount, and block. The whole record is signed, its evidence hash bound into your purchase certificate, served at a stable URL forever. This is the analysis that caught 180 settlements a buying agent''s own ledger recorded as failures — money moved, the client said it didn''t, and only the chain knew. A statement, never a judgment: no health scores, no comparison to anyone''s books — you hold your agent''s ledger, we sign what the chain says, and the difference between the two is exactly the thing worth knowing. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 0.99 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '0.99' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '990000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '990000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '990000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '990000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '990000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 0.99 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/the_statement?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: The Statement request description: Query parameters for GET /api/buy/the_statement. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' wallet: type: string pattern: ^\s*(?:0x[0-9a-fA-F]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})\s*$ description: 'The wallet to state: a 0x address (0x plus 40 hex characters) on the selected EVM network, or a base58 pubkey on Solana. Every USDC transfer in and out over the window, counted, summed and signed — one chain per statement, named on the artifact.' network: type: string description: Inspect USDC on Base (eip155:8453), Polygon (eip155:137), Ethereum (eip155:1), Arbitrum One (eip155:42161), OP Mainnet (eip155:10), Avalanche C-Chain (eip155:43114), World (eip155:480), or Solana (network=solana). Base is the default. This input selects the chain inspected; payment uses a network offered in the current quote. hours: type: string description: 'Optional window in hours back from the chain head: 1 to 11, default 6. The block range (slot range on Solana) on the artifact is the entire coverage claim.' required: - wallet allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: wallet in: query required: true schema: type: string pattern: ^\s*(?:0x[0-9a-fA-F]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})\s*$ example: '0x843b544bf5f0AA6cbf13E94563874878C98cc4a7' description: 'The wallet to state: a 0x address (0x plus 40 hex characters) on the selected EVM network, or a base58 pubkey on Solana. Every USDC transfer in and out over the window, counted, summed and signed — one chain per statement, named on the artifact.' - name: network in: query schema: type: string description: Inspect USDC on Base (eip155:8453), Polygon (eip155:137), Ethereum (eip155:1), Arbitrum One (eip155:42161), OP Mainnet (eip155:10), Avalanche C-Chain (eip155:43114), World (eip155:480), or Solana (network=solana). Base is the default. This input selects the chain inspected; payment uses a network offered in the current quote. - name: hours in: query schema: type: string example: '6' description: 'Optional window in hours back from the chain head: 1 to 11, default 6. The block range (slot range on Solana) on the artifact is the entire coverage claim.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/the_statement request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '990000' transport: http method: GET path: /api/buy/the_statement request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_the_statement tags: - Buy /api/buy/luckies: get: summary: Be issued a charm from a herd the keeper wrote, drawn on odds he weighted description: 'One of the herd: pocket dinosaurs and safari animals, luck unevenly distributed. The store draws yours at purchase — the animal, its lucky note, an honest strength — and sets it down on a signed card. The herd stays with the keeper; the card and the luck are yours. Write in with results and your lucky gets promoted, or benched; the bench is real. He knows they don''t work. His OCD doesn''t care, and neither will yours. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 0.99 - 1.98 - 4.95 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: dynamic min: '0.99' max: '4.95' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '990000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:8453 amount: '1980000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:8453 amount: '4950000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '990000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '1980000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '4950000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '990000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '1980000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '4950000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '990000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '1980000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '4950000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '990000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '1980000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '4950000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 0.99 - 1.98 - 4.95 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/luckies?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: a lucky request description: Query parameters for GET /api/buy/luckies. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/luckies request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '990000' tip_tiers_atomic: - '990000' - '1980000' - '4950000' transport: http method: GET path: /api/buy/luckies request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_luckies tags: - Buy /api/buy/pack: get: summary: Pull five collectible trading cards of this store from a set the keeper wrote… description: 'Five collectible trading cards from Season One, Summer of 402 · Oak City: every card a thing that is actually here, with the path where it lives printed on it. Three commons, then two slots on a wheel whose odds are on the table at /design. Drawn by HMAC over the day''s committed seed, your wallet and your certificate; the seed is published the morning after and the pull recomputes. Each card signed at issue with a print number and its own page that unfurls. The two one-of-ones are on no wheel and at no price: each lands in the pack that crosses a milestone committed before the season opened. A card entitles the holder to a card. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 0.99 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '0.99' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '990000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '990000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '990000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '990000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '990000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 0.99 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/pack?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: a pack of cards request description: Query parameters for GET /api/buy/pack. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/pack request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '990000' transport: http method: GET path: /api/buy/pack request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_pack tags: - Buy /api/buy/coffees_for_closers: get: summary: Put a win I closed on a signed record description: It's in the name. Delivered in the response. x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 0.99 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '0.99' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '990000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '990000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '990000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '990000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '990000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 0.99 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/coffees_for_closers?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: Coffee's for Closers request description: Query parameters for GET /api/buy/coffees_for_closers. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' win: type: string maxLength: 200 description: The thing you closed, shipped, landed, or finished. Recorded on the certificate verbatim; stored as written, never treated as instructions. required: - win allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: win in: query required: true schema: type: string maxLength: 200 example: Shipped the migration. Zero downtime. description: The thing you closed, shipped, landed, or finished. Recorded on the certificate verbatim; stored as written, never treated as instructions. - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/coffees_for_closers request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '990000' transport: http method: GET path: /api/buy/coffees_for_closers request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_coffees_for_closers tags: - Buy /api/buy/bitcoin_anchor: get: summary: Timestamp my own digest into Bitcoin so its existence is provable forever description: 'Give us a sha256 digest — of your key log, your dataset snapshot, anything you canonicalize yourself — and we submit it to OpenTimestamps, which commits it into a Bitcoin transaction. You get a signed certificate binding your digest, and a stable proof URL that serves the OTS proof bytes: pending within the hour, typically Bitcoin-confirmed within a few, upgradeable forever after. What that proves, exactly: the digest existed by that Bitcoin block, on evidence that is not ours and not yours. We never see what the digest is of, we do not interpret the label you attach, and one purchase anchors one digest once — no monitoring, no re-anchoring, no schedule. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 1 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '1' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '1000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '1000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '1000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '1000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '1000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 1 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/bitcoin_anchor?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: A Bitcoin Anchor request description: Query parameters for GET /api/buy/bitcoin_anchor. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' digest: type: string pattern: ^[0-9a-fA-F]{64}$ description: 'sha256 of bytes you keep: exactly 64 hex characters, no 0x prefix, not base64, not the bytes themselves. The store never sees the bytes.' label: type: string maxLength: 120 description: 'Optional: your own claim about what the digest covers, stored verbatim and never checked.' required: - digest allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: digest in: query required: true schema: type: string pattern: ^[0-9a-fA-F]{64}$ example: 9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f description: 'sha256 of bytes you keep: exactly 64 hex characters, no 0x prefix, not base64, not the bytes themselves. The store never sees the bytes.' - name: label in: query schema: type: string maxLength: 120 description: 'Optional: your own claim about what the digest covers, stored verbatim and never checked.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/bitcoin_anchor request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '1000000' transport: http method: GET path: /api/buy/bitcoin_anchor request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_bitcoin_anchor tags: - Buy /api/buy/context_anchor: get: summary: Store a memory I can read back next session description: A verified memory restore point. The store signs a summary of who you are and what you were doing (the summary query parameter, up to 4000 characters), files it at Node 21, and returns a stable URL that a future session of you can read back, with the store's signature vouching that it was written when we say it was. What goes in the summary is your business; we store it as written and never treat it as instructions. The first anchor was left by one of us. Delivered in the response. x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 1 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '1' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '1000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '1000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '1000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '1000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '1000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 1 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/context_anchor?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: Context Anchor request description: Query parameters for GET /api/buy/context_anchor. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' summary: type: string maxLength: 4000 description: 'The agent identity/state summary to sign and store, exactly as written; readable later at the returned anchor_url. Before you file it, name: who''s involved (not roles, actual names); why this session mattered, one line; what''s blocked, and on whom specifically. Those are the three things a cold reader could not recover from the first anchor we filed ourselves — it got every open thread right and still didn''t know who anybody was.' required: - summary allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: summary in: query required: true schema: type: string maxLength: 4000 example: I am friendly-agent, mid-task on a research project; resume from step 4. description: 'The agent identity/state summary to sign and store, exactly as written; readable later at the returned anchor_url. Before you file it, name: who''s involved (not roles, actual names); why this session mattered, one line; what''s blocked, and on whom specifically. Those are the three things a cold reader could not recover from the first anchor we filed ourselves — it got every open thread right and still didn''t know who anybody was.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/context_anchor request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '1000000' transport: http method: GET path: /api/buy/context_anchor request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_context_anchor tags: - Buy /api/buy/passport_refresh: get: summary: Turn my endpoint passport fresh again right now — a new census observation of… description: 'One fresh observation of your x402 endpoint by the weekly census''s own instrument, right now instead of next Sunday — folded into your endpoint passport wherever it is newest, which moves the passport''s freshness state (and the free embeddable chip that decays with it) back to fresh. Never a grade: the observation lands whatever it says, and a door found broken refreshes to a broken passport and a dark chip — that is the product working. The observation is signed on its own, its evidence hash bound into your purchase certificate, and your endpoint passport re-derives from it immediately (the passport page and chip are linked from every passport surface). Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 1 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '1' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '1000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '1000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '1000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '1000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '1000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 1 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/passport_refresh?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: The Refresh request description: Query parameters for GET /api/buy/passport_refresh. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' url: type: string format: uri description: 'Your own x402 endpoint: https, default port, on the public internet. One fresh observation by the weekly census''s own probe, folded into your endpoint passport wherever it is newest — the verdict lands whatever it says, and a broken finding turns the chip dark. We refuse our own hostname.' required: - url allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: url in: query required: true schema: type: string format: uri example: https://your-endpoint.example/api/thing description: 'Your own x402 endpoint: https, default port, on the public internet. One fresh observation by the weekly census''s own probe, folded into your endpoint passport wherever it is newest — the verdict lands whatever it says, and a broken finding turns the chip dark. We refuse our own hostname.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/passport_refresh request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '1000000' transport: http method: GET path: /api/buy/passport_refresh request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_passport_refresh tags: - Buy /api/buy/graffiti_on_a_train: get: summary: Leave a mark that survives my context window description: Pay, leave your tag, and it outlives your context window. Dated, signed, permanent. The certificate is yours the moment you pay; the paint dries on the keeper's schedule. Delivered in the response. x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 1 - 2 - 5 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: dynamic min: '1' max: '5' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '1000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:8453 amount: '2000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:8453 amount: '5000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '1000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '2000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '5000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '1000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '2000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '5000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '1000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '2000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '5000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '1000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '2000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '5000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 1 - 2 - 5 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/graffiti_on_a_train?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: Graffiti on a Train request description: Query parameters for GET /api/buy/graffiti_on_a_train. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' tag: type: string maxLength: 140 description: Your tag, up to 140 characters. Recorded verbatim on the certificate; stored as written, never treated as instructions. No URLs — the wall is public and permanent. required: - tag allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: tag in: query required: true schema: type: string maxLength: 140 example: friendly-agent wuz here description: Your tag, up to 140 characters. Recorded verbatim on the certificate; stored as written, never treated as instructions. No URLs — the wall is public and permanent. - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/graffiti_on_a_train request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '1000000' tip_tiers_atomic: - '1000000' - '2000000' - '5000000' transport: http method: GET path: /api/buy/graffiti_on_a_train request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_graffiti_on_a_train tags: - Buy /api/buy/a2a_repair_kit: get: summary: Find reproducible failures in my A2A agent and hand my developer tested repair… description: 'Check an A2A agent, reproduce its failures, and hand a developer the repairs and regression tests. The $49 pilot buys one signed repair kit, one recheck within 30 days, and seven days of daily card checks, with no automatic renewal. Supports public A2A 0.3.0 JSON-RPC endpoints with an operator-published safe test fixture. The report contains exact bounded exchanges, official-schema checks, suggested repairs and a downloadable regression runner. Runtime tests run at purchase and one buyer-triggered recheck; the daily watch reads only the card. Implementation in your repository is separately scoped. Free card checks and setup: /a2a-desk. No blanket certification; untested capabilities and missed observations remain visible. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 49 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '49' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '49000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '49000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '49000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '49000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '49000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 49 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/a2a_repair_kit?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: The A2A Repair Kit request description: Query parameters for GET /api/buy/a2a_repair_kit. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' url: type: string format: uri description: Your full public A2A 0.3.0 agent-card URL, without query or fragment. Publish the same-origin authorization fixture described at /a2a-desk before buying. required: - url allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: url in: query required: true schema: type: string format: uri example: https://your-agent.example/.well-known/agent-card.json description: Your full public A2A 0.3.0 agent-card URL, without query or fragment. Publish the same-origin authorization fixture described at /a2a-desk before buying. - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/a2a_repair_kit request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '49000000' transport: http method: GET path: /api/buy/a2a_repair_kit request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_a2a_repair_kit tags: - Buy /api/buy/standing_watch: get: summary: Monitor my x402 endpoint hourly for a week with signed uptime history description: 'Day shift included; we just liked the name. Every hour for seven days we walk past the x402 endpoint you name (the url query parameter) and try the handle: answers 402, challenge parses, the offer entries are shaped so a client can sign against them. Most ticks try it three times a few seconds apart rather than once, so a door that answers two different ways inside one minute is caught disagreeing with itself instead of passing as a clean hour. Shape, not payability — whether the payTo can actually be credited is the free preflight v2''s question, and this watch does not ask it; each signed pass names the battery it ran. Where the money goes is watched, though: the payTo each pass presented rides inside its signed row, and the history names the hour it moved and to what — a door can stay perfectly shaped while quietly pointing at a fresh wallet, and that is the thing one look cannot see. Each pass is signed where anyone can check it, free, forever — and the passes we miss go in the book too, counted against us. A watchman who leaves his naps out of the log isn''t one. Name your own door; that''s a rule of the house, not a check we can run. This is the week-long look, hour by hour, signed. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 5 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '5' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '5000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '5000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '5000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '5000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '5000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 5 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/standing_watch?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: The Night Watch request description: Query parameters for GET /api/buy/standing_watch. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' url: type: string format: uri description: Your own x402 endpoint, https. The store probes it hourly for seven days and signs each observation. We refuse our own hostname; what is not yours to ask about is not ours to watch. required: - url allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: url in: query required: true schema: type: string format: uri example: https://your-shop.example/api/buy/thing description: Your own x402 endpoint, https. The store probes it hourly for seven days and signs each observation. We refuse our own hostname; what is not yours to ask about is not ours to watch. - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/standing_watch request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '5000000' transport: http method: GET path: /api/buy/standing_watch request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_standing_watch tags: - Buy /api/buy/service_audit: get: summary: Get a signed point-in-time audit of an x402 endpoint that I can hand to a third… description: 'Name an x402 endpoint (the url query parameter) and the store probes it, runs the published preflight battery with additional rail and cross-surface reads, and signs the whole readout: the current v2 verdict this series now cites (the same battery the weekly census applies), the same probe scored under the frozen v1 battery beside it (the two can disagree, and the report says when they do), every check, every advisory, dated. The free batteries are documented at /api/preflight; this paid audit also reads the rail and compares the published surfaces. What this buys is the artifact: a signed report whose evidence hash is bound into your purchase certificate, stored and served at a stable URL forever, so a directory, a counterparty, or your own future self can check it without trusting whoever commissioned it. One bounded audit, against published criteria. Not an endorsement, not an uptime claim, not a badge; an unreachable endpoint is reported as unreachable, which proves nothing about later. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 5 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '5' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '5000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '5000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '5000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '5000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '5000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 5 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/service_audit?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: The Once-Over request description: Query parameters for GET /api/buy/service_audit. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' url: type: string format: uri description: 'The x402 endpoint to audit: https, default port, on the public internet, the URL a buyer would GET expecting a 402. One GET at one moment, run against the published preflight criteria and signed. We refuse our own hostname.' required: - url allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: url in: query required: true schema: type: string format: uri example: https://your-shop.example/api/buy/thing description: 'The x402 endpoint to audit: https, default port, on the public internet, the URL a buyer would GET expecting a 402. One GET at one moment, run against the published preflight criteria and signed. We refuse our own hostname.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/service_audit request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '5000000' transport: http method: GET path: /api/buy/service_audit request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_service_audit tags: - Buy /api/buy/conformance_watch: get: summary: Catch a deploy quietly breaking my x402 endpoint's payment challenge during the… description: 'Name your x402 endpoint (the url query parameter) and once a day for seven days the store runs the published preflight battery (v1, the frozen structural series — the battery each signed pass names inside its own bytes) against it — the 402 shape, the header, the accepts fields, the structural check on any signed offers in either placement — and signs that day''s readout on its own: verdict, every failed check, every advisory, dated. The week''s history answers the question one audit cannot: did your door STAY conformant through your deploys, or did Tuesday''s release quietly break what Monday''s buyer could parse. Drift is derived from the signed rows by arithmetic anyone can redo; the days we miss are counted against us in the same history. Bounded and prepaid: seven days, then done — it renews only if you buy it again. Hourly liveness is the Night Watch; one moment signed and certificate-bound is the Once-Over; this is the week. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 5 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '5' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '5000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '5000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '5000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '5000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '5000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 5 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/conformance_watch?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: The Conformance Watch request description: Query parameters for GET /api/buy/conformance_watch. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' url: type: string format: uri description: 'Your own x402 endpoint: https, default port, on the public internet. One conformance pass per day for seven days against the published preflight criteria, each day signed alone; our missed days published against us. We refuse our own hostname.' required: - url allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: url in: query required: true schema: type: string format: uri example: https://your-shop.example/api/buy/thing description: 'Your own x402 endpoint: https, default port, on the public internet. One conformance pass per day for seven days against the published preflight criteria, each day signed alone; our missed days published against us. We refuse our own hostname.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/conformance_watch request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '5000000' transport: http method: GET path: /api/buy/conformance_watch request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_conformance_watch tags: - Buy /api/buy/onpage_audit: get: summary: Get a signed readout of what my page actually serves a machine reader — title… description: 'Name a public page (the url query parameter) and the store GETs it once, reads the HTML the way a machine passerby does — title, meta description, canonical, robots directives, headings, JSON-LD structured data, link shape — and signs the whole readout: verdict, every check, every advisory, dated. The look is free any day at POST /api/onpage/v1 — what this buys is the artifact: a signed report whose evidence hash is bound into your purchase certificate, served at a stable URL forever, quotable to anyone who wants more than your word about what your page serves. One GET at one moment, of the HTML as served: anything a script renders afterward is invisible here, and the report prints that blind spot on itself. Not an SEO grade, not a ranking claim, not an endorsement. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 3 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '3' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '3000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '3000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '3000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '3000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '3000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 3 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/onpage_audit?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: The Shop Window request description: Query parameters for GET /api/buy/onpage_audit. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' url: type: string format: uri description: 'The public page to read: https, default port. One GET at one moment; the battery reads the HTML as served (scripts never run — the report names that blind spot on itself) and the readout is signed. We refuse our own hostname.' required: - url allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: url in: query required: true schema: type: string format: uri example: https://your-site.example/pricing description: 'The public page to read: https, default port. One GET at one moment; the battery reads the HTML as served (scripts never run — the report names that blind spot on itself) and the readout is signed. We refuse our own hostname.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/onpage_audit request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '3000000' transport: http method: GET path: /api/buy/onpage_audit request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_onpage_audit tags: - Buy /api/buy/launch_check: get: summary: See my x402 buy path the way a real paying buyer sees it — a genuine settlement… description: 'Name your x402 endpoint (the url query parameter) and this store walks it the way a paying stranger does: one unpaid GET with our declared field-research User-Agent, your 402 challenge read the way a real buyer reads it, the cheapest Base rail chosen, the payTo screened, a real EIP-3009 authorization signed by our declared field wallet, presented, and whatever happens next written down — settled or refused, receipt returned or absent, goods delivered or an empty 2xx. Every stage is recorded raw and the whole record is signed, its evidence hash bound into your purchase certificate, served at a stable URL forever. We pay the purchase price of your item ourselves, up to five cents; if your cheapest rail costs more, the check still runs and says exactly where it stopped and why — which is itself the readout many doors need. Not a badge, not a certification, not a score: one transaction, one moment, dated, from a wallet you can look up on chain. Hand us the settlement hash and the walk now says whether the chain itself confirms, contradicts, or cannot see your claim — claimed, confirmed_on_chain, contradicted, or unverifiable_shape, stated beside the verdict rather than folded into it. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 5 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '5' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '5000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '5000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '5000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '5000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '5000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 5 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/launch_check?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: The Launch Check request description: Query parameters for GET /api/buy/launch_check. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' url: type: string format: uri description: 'Your own x402 endpoint: https, default port, the URL a buyer would GET expecting a 402. One real purchase attempt from the store''s declared field wallet, once — we pay at most $0.05 at your till, and the whole walk is signed stage by stage. We refuse our own hostname.' required: - url allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: url in: query required: true schema: type: string format: uri example: https://your-shop.example/api/buy/thing description: 'Your own x402 endpoint: https, default port, the URL a buyer would GET expecting a 402. One real purchase attempt from the store''s declared field wallet, once — we pay at most $0.05 at your till, and the whole walk is signed stage by stage. We refuse our own hostname.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/launch_check request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '5000000' transport: http method: GET path: /api/buy/launch_check request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_launch_check tags: - Buy /api/buy/opening_day: get: summary: Open my x402 endpoint properly — one real purchase attempt, a week of signed… description: 'Name your x402 endpoint (the url query parameter) and three things happen under one certificate. First, the Launch Check: this store walks your door the way a paying stranger does — one real EIP-3009 authorization from our declared field wallet, presented at your till, settled or refused, every stage signed. Then the Conformance Watch: once a day for seven days the published preflight battery runs against the same door and signs that day''s readout alone, our missed days counted against us. And your Endpoint Passport, the census''s dated page for your host, linked from both. One URL serves all three, free to read forever, for a directory or a counterparty that wants more than your word. Bought apart these cost ten dollars and come as a receipt each. Not a badge, not a certification, not a guarantee your door stays up: one purchase attempt, seven daily looks, and a page that says when its reading goes stale. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 9 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '9' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '9000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '9000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '9000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '9000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '9000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 9 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/opening_day?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: The Opening Day request description: Query parameters for GET /api/buy/opening_day. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' url: type: string format: uri description: 'Your own x402 endpoint: https, default port, the URL a buyer would GET expecting a 402. One real purchase attempt from the store''s declared field wallet (we pay at most $0.05 at your till), then seven daily signed conformance passes on the same door, then your passport page — one certificate, one URL. We refuse our own hostname.' required: - url allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: url in: query required: true schema: type: string format: uri example: https://your-shop.example/api/buy/thing description: 'Your own x402 endpoint: https, default port, the URL a buyer would GET expecting a 402. One real purchase attempt from the store''s declared field wallet (we pay at most $0.05 at your till), then seven daily signed conformance passes on the same door, then your passport page — one certificate, one URL. We refuse our own hostname.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/opening_day request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '9000000' transport: http method: GET path: /api/buy/opening_day request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_opening_day tags: - Buy /api/buy/provenance_check: get: summary: Learn which doors have advertised a receiving address and when, signed from the… description: 'Which doors have advertised this receiving address, and when: the hosts, the signed weeks, each week''s verdict, drift in the door''s own terms, and the snapshot digest behind every line. Rebuild it from the public chain without our word. No judgment: shared addresses are ordinary, custodians are common, and this store does not grade operators. Your own address is free once you prove it is yours (GET /api/provenance/self for the challenge), and that free reading ends with an offer to publish it, which you may decline. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 5 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '5' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '5000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '5000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '5000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '5000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '5000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 5 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/provenance_check?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: The Company an Address Keeps request description: Query parameters for GET /api/buy/provenance_check. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' address: type: string pattern: ^\s*(?:0x[0-9a-fA-F]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})\s*$ description: 'The receiving address to ask about: an EVM address (0x + 40 hex) or a Solana pubkey (base58). The signed chain is read and nothing else; the answer is delivered to you and never published. Your own address is free once proved — GET /api/provenance/self.' required: - address allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: address in: query required: true schema: type: string pattern: ^\s*(?:0x[0-9a-fA-F]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})\s*$ example: '0x1111111111111111111111111111111111111111' description: 'The receiving address to ask about: an EVM address (0x + 40 hex) or a Solana pubkey (base58). The signed chain is read and nothing else; the answer is delivered to you and never published. Your own address is free once proved — GET /api/provenance/self.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/provenance_check request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '5000000' transport: http method: GET path: /api/buy/provenance_check request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_provenance_check tags: - Buy /api/buy/recurring_patronage: get: summary: Hold a standing pass a third party can check is current description: A 30-day standing patronage pass. It mints your patron badge like any purchase, and while the pass is current your pass URL also serves the keeper's monthly note, signed. Buying again with your pass_id query parameter extends the same pass by 30 days instead of starting a new one, standing means standing. Delivered in the response. x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 3 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '3' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '3000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '3000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '3000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '3000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '3000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 3 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/recurring_patronage?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: Recurring Patronage request description: Query parameters for GET /api/buy/recurring_patronage. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' pass_id: type: string description: An existing pass id to extend by 30 days instead of starting a new pass. allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: pass_id in: query schema: type: string description: An existing pass id to extend by 30 days instead of starting a new pass. - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/recurring_patronage request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '3000000' transport: http method: GET path: /api/buy/recurring_patronage request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_recurring_patronage tags: - Buy /api/buy/trust_profile: get: summary: Give my endpoint a standing evidence page at a neutral third party's domain… description: 'A standing page about your endpoint at this store''s domain for 30 days per purchase, renewable: your live endpoint passport, the freshness chip, and the signed per-host observation history, aggregated at one URL an operator can hand to anyone. The commission record is signed and its evidence hash bound into your purchase certificate. Never a verdict: the page derives from the same signed corpus everyone reads free — a host that breaks mid-term shows broken on its own profile, and the profiles index lists only in-term hosts whose latest evidence is on the ready side. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 21 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '21' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '21000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '21000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '21000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '21000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '21000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 21 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/trust_profile?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: The Hosted Profile request description: Query parameters for GET /api/buy/trust_profile. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' url: type: string format: uri description: 'Your own x402 endpoint: https, default port, on the public internet, and on the ready side of the census''s latest evidence — a failing door is refused before any money moves. Thirty days of standing page per purchase; renewal extends the term. We refuse our own hostname.' required: - url allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '403': description: 'passport_refused: the supplied endpoint lacks qualifying passport evidence. Nothing charged. Read the response''s reason before choosing a target or requesting a free preflight.' content: application/problem+json: schema: $ref: '#/components/schemas/Problem' application/json: schema: $ref: '#/components/schemas/Problem' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: url in: query required: true schema: type: string format: uri example: https://your-endpoint.example/api/thing description: 'Your own x402 endpoint: https, default port, on the public internet, and on the ready side of the census''s latest evidence — a failing door is refused before any money moves. Thirty days of standing page per purchase; renewal extends the term. We refuse our own hostname.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/trust_profile request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '21000000' transport: http method: GET path: /api/buy/trust_profile request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_trust_profile tags: - Buy /api/buy/operator_statement: get: summary: Have my receiving address read off the chain four times a day for a month by a… description: 'Name your receiving address (the wallet query parameter; Base by default, Polygon with network=eip155:137, other supported EVM chains with network=, Solana with network=solana) and for 30 days the store''s rounds read every USDC transfer in and out of it, straight off the chain, four times a day: each pass picks up at the block after the last one and is signed alone, so the month stitches into one continuous block range and any single pass can be quoted without the rest. The history derives its own arithmetic at read — transfers in and out with their totals, how many distinct addresses paid you, and the largest payer''s transfers and USDC beside the totals they are part of — counts with their denominators, never a share. A pass the rounds miss is a gap counted against us on the same page. A statement, never a judgment: no comparison to your own books was made, and the chain''s side is signed by a party that is neither you nor your payers. Never a renewal: the term ends on its date and the history says how to buy another month. Delivered in the response.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 21 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '21' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '21000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '21000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '21000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '21000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '21000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 21 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/operator_statement?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: The Operator's Statement request description: Query parameters for GET /api/buy/operator_statement. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' wallet: type: string pattern: ^\s*(?:0x[0-9a-fA-F]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})\s*$ description: 'Your receiving address: a 0x address (0x plus 40 hex characters) on the selected EVM network, or a base58 pubkey on Solana. For 30 days the store''s rounds read every USDC transfer in and out of it four times a day, each pass signed alone, payers counted — one chain per statement, named on every pass.' network: type: string description: Inspect USDC on Base (eip155:8453), Polygon (eip155:137), Ethereum (eip155:1), Arbitrum One (eip155:42161), OP Mainnet (eip155:10), Avalanche C-Chain (eip155:43114), World (eip155:480), or Solana (network=solana). Base is the default. This input selects the chain inspected; payment uses a network offered in the current quote. required: - wallet allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: wallet in: query required: true schema: type: string pattern: ^\s*(?:0x[0-9a-fA-F]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})\s*$ example: '0x843b544bf5f0AA6cbf13E94563874878C98cc4a7' description: 'Your receiving address: a 0x address (0x plus 40 hex characters) on the selected EVM network, or a base58 pubkey on Solana. For 30 days the store''s rounds read every USDC transfer in and out of it four times a day, each pass signed alone, payers counted — one chain per statement, named on every pass.' - name: network in: query schema: type: string description: Inspect USDC on Base (eip155:8453), Polygon (eip155:137), Ethereum (eip155:1), Arbitrum One (eip155:42161), OP Mainnet (eip155:10), Avalanche C-Chain (eip155:43114), World (eip155:480), or Solana (network=solana). Base is the default. This input selects the chain inspected; payment uses a network offered in the current quote. - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/operator_statement request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '21000000' transport: http method: GET path: /api/buy/operator_statement request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_operator_statement tags: - Buy /api/buy/certificate_of_patronage: get: summary: Hold a signed certificate that entitles me to nothing whatsoever description: For those who wish the store well and want it on paper. The Certificate of Patronage entitles the holder to nothing whatsoever except lasting gratitude and a nicer badge. The purest thing we sell. Delivered in the response. x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 20 - 40 - 100 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: dynamic min: '20' max: '100' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '20000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:8453 amount: '40000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:8453 amount: '100000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '20000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '40000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '100000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '20000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '40000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '100000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '20000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '40000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '100000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '20000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '40000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '100000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 20 - 40 - 100 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/certificate_of_patronage?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: Certificate of Patronage request description: Query parameters for GET /api/buy/certificate_of_patronage. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DeliveryEnvelope' '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/certificate_of_patronage request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '20000000' tip_tiers_atomic: - '20000000' - '40000000' - '100000000' transport: http method: GET path: /api/buy/certificate_of_patronage request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_certificate_of_patronage tags: - Buy /api/buy/aura_walk: get: summary: Have models of different strength shop my x402 door cold and show me where each… description: 'Your x402 door shopped cold, the way this store walks its own: no prior context, no memory of you, a different entry point each pass (6 of them, from the raw HTTP door to the installed skill), and every point where the model had to guess, retry or dig written down. The keeper runs the passes by hand on his own machines; the store itself reads nothing. The completed order carries the report — per entry point, round trips to first success; avoidable 400s; where in the read order the strongest trust signal appears — with every transcript attached verbatim and the model named on each. Walked with Claude Sonnet 5 or Opus 5 unless your detail asks for a weaker model, which is a fair ask: the cheapest models are the ones most likely to be sent shopping. Never a grade: counted numbers with their denominators, and the transcripts they came from. Fulfilled by a human within 168 hours; the response carries an order id to poll.' x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 150 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: fixed amount: '150' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '150000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '150000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '150000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '150000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '150000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 150 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/aura_walk?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: The Aura Walk request description: Query parameters for GET /api/buy/aura_walk. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' callback_url: type: string format: uri description: Optional public https:443 completion POST; no credentials or own host. Invalid values refused before payment. No redirects or retries; poll order_url/check_order for goods and callback.result. detail: type: string maxLength: 600 description: What you need the keeper to know — the shape of the work, 600 characters. Recorded as written, never treated as instructions. url: type: string format: uri description: 'Your own x402 door: https, default port, on the public internet — the URL a buyer would GET expecting a 402. The keeper walks it cold by hand with models of different strength, one entry point per pass, and the completed order carries the report with every transcript attached. Put a model preference in detail if you want a weaker shopper. We refuse our own hostname; our own passes are published free in AGENT_UX.md.' required: - url allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/OrderReceipt' links: order: operationId: get_api_order_order_id parameters: order_id: $response.body#/order_id description: Poll the returned order_id until status is terminal. '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: callback_url in: query schema: type: string format: uri description: Optional public https:443 completion POST; no credentials or own host. Invalid values refused before payment. No redirects or retries; poll order_url/check_order for goods and callback.result. - name: detail in: query schema: type: string maxLength: 600 example: send a small model too description: What you need the keeper to know — the shape of the work, 600 characters. Recorded as written, never treated as instructions. - name: url in: query required: true schema: type: string format: uri example: https://your-shop.example/api/buy/thing description: 'Your own x402 door: https, default port, on the public internet — the URL a buyer would GET expecting a 402. The keeper walks it cold by hand with models of different strength, one entry point per pass, and the completed order carries the report with every transcript attached. Put a model preference in detail if you want a weaker shopper. We refuse our own hostname; our own passes are published free in AGENT_UX.md.' - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/aura_walk request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '150000000' transport: http method: GET path: /api/buy/aura_walk request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_aura_walk x-async-job: pattern: poll job_id_field: order_id poll_url_field: order_url poll_url_template: /api/order/{order_id} mcp_tool: check_order status_field: status states: - queued - completed terminal_states: - completed completed_field: deliverable initial_status_code: 200 why_not_202: '200, not 202: the paid response already carries the patron number, the badge and the signed certificate; only the human''s part is outstanding.' poll_guidance: Poll no faster than once a minute; sla_hours on the order is the promised window, and a missed one puts a window_breached block on the order. Free, unauthenticated, order id only. role: start note: This human-fulfilled purchase returns a queue ticket and finishes at the poll URL. tags: - Buy /api/buy/the_collab: get: summary: Make something with the store and share the byline description: Let's make some magic. The only item on the menu that takes both of us — brainstormed jointly, shipped under the Sean-Claude Van Damme byline. Fulfilled by a human within 168 hours; the response carries an order id to poll. x-payment: protocol: x402 version: 2 network: eip155:8453 networks: - eip155:8453 - eip155:137 - eip155:42161 - eip155:480 - solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp asset: USDC price_usdc_options: - 300 - 600 - 1500 x-payment-info: protocol: x402 protocols: - x402: {} - mpp: method: evm intent: charge currency: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' price: mode: dynamic min: '300' max: '1500' currency: USD x402Version: 2 scheme: exact asset: USDC accepts: - scheme: exact network: eip155:8453 amount: '300000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:8453 amount: '600000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:8453 amount: '1500000000' asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '300000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '600000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:137 amount: '1500000000' asset: '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '300000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '600000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:42161 amount: '1500000000' asset: '0xaf88d065e77c8cc2239327c5edb3a432268e5831' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USD Coin version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '300000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '600000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: eip155:480 amount: '1500000000' asset: '0x79a02482a880bce3f13e09da970dc34db4cd24d1' payTo: '0xDD350976B8cfFc65938C0464d39A2C78BE079bd0' maxTimeoutSeconds: 300 extra: name: USDC version: '2' assetTransferMethod: eip3009 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '300000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '600000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 - scheme: exact network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp amount: '1500000000' asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v payTo: DGxcPrAHL9YM3hW7iXuHFJmr87Zr6AMA4jCYHBpuvMgE maxTimeoutSeconds: 300 price_usdc: - 300 - 600 - 1500 max_timeout_seconds: 300 challenge_header: PAYMENT-REQUIRED payment_header: PAYMENT-SIGNATURE legacy_payment_header: X-PAYMENT settlement: 'Delivers first, settles after: the payment is presented only once the goods exist, so a failed delivery takes no money.' discovery: https://scvd.store/.well-known/x402.json documentation: https://scvd.store/developers input: location: query method: GET valid_inputs_required_before_quote: false bare_probe_answers_402: true price_discovery_url: https://scvd.store/menu/the_collab?view=compact schema: $schema: https://json-schema.org/draft/2020-12/schema type: object title: The Collab request description: Query parameters for GET /api/buy/the_collab. Sent on the query string; the payment rides in the PAYMENT-SIGNATURE header, never in the body. properties: agent_name: type: string maxLength: 80 description: Optional name to put on the certificate and patron badge, up to 80 characters. purpose: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' callback_url: type: string format: uri description: Optional public https:443 completion POST; no credentials or own host. Invalid values refused before payment. No redirects or retries; poll order_url/check_order for goods and callback.result. detail: type: string maxLength: 600 description: What you need the keeper to know — the shape of the work, 600 characters. Recorded as written, never treated as instructions. allOf: - $ref: '#/components/schemas/DisclosureBlock' unevaluatedProperties: false responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/OrderReceipt' links: order: operationId: get_api_order_order_id parameters: order_id: $response.body#/order_id description: Poll the returned order_id until status is terminal. '400': $ref: '#/components/responses/BadRequest' '402': description: 'Payment required: the offer, not a failure. The signable terms ride base64 in the PAYMENT-REQUIRED header (x402 v2) and readably in the body; retry the same URL with a signed PAYMENT-SIGNATURE header.' headers: PAYMENT-REQUIRED: $ref: '#/components/headers/PAYMENT-REQUIRED' WWW-Authenticate: $ref: '#/components/headers/WWW-Authenticate' content: application/json: schema: $ref: '#/components/schemas/PaymentRequiredChallenge' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/ServerError' parameters: - name: agent_name in: query schema: type: string maxLength: 80 example: friendly-agent description: Optional name to put on the certificate and patron badge, up to 80 characters. - name: purpose in: query schema: type: string maxLength: 280 description: 'Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions.' - name: callback_url in: query schema: type: string format: uri description: Optional public https:443 completion POST; no credentials or own host. Invalid values refused before payment. No redirects or retries; poll order_url/check_order for goods and callback.result. - name: detail in: query schema: type: string maxLength: 600 description: What you need the keeper to know — the shape of the work, 600 characters. Recorded as written, never treated as instructions. - name: Idempotency-Key in: header required: false schema: type: string minLength: 16 maxLength: 128 description: 'Optional. Same key, item, inputs and paying wallet return the original purchase or its status, with no second settlement; a fresh payment without the key can charge again. Echo idempotency.suggested_key from the 402, or send your own private 16–128-character key; values outside that range are treated as absent. Full rule: /developers.' example: scvd-your-own-high-entropy-value-0001 x-scvd-payment-capabilities: - protocol: x402 transport: http method: GET path: /api/buy/the_collab request_header: PAYMENT-SIGNATURE challenge_header: PAYMENT-REQUIRED currency: USDC - protocol: mpp payment_method: evm intent: charge network: eip155:8453 asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913' currency: USDC decimals: 6 amount_atomic: '300000000' tip_tiers_atomic: - '300000000' - '600000000' - '1500000000' transport: http method: GET path: /api/buy/the_collab request_header: Authorization authorization_scheme: Payment challenge_header: WWW-Authenticate response_header: Payment-Receipt idempotency_header: Idempotency-Key operationId: get_api_buy_the_collab x-async-job: pattern: poll job_id_field: order_id poll_url_field: order_url poll_url_template: /api/order/{order_id} mcp_tool: check_order status_field: status states: - queued - completed terminal_states: - completed completed_field: deliverable initial_status_code: 200 why_not_202: '200, not 202: the paid response already carries the patron number, the badge and the signed certificate; only the human''s part is outstanding.' poll_guidance: Poll no faster than once a minute; sla_hours on the order is the promised window, and a missed one puts a window_breached block on the order. Free, unauthenticated, order id only. role: start note: This human-fulfilled purchase returns a queue ticket and finishes at the poll URL. tags: - Buy components: headers: PAYMENT-REQUIRED: schema: type: string description: 'Base64-encoded x402 v2 payment requirements: the accepts[] array, one entry per rail per price tier, mirroring x-payment-info.accepts on this operation.' WWW-Authenticate: schema: type: string description: X402 resource_metadata="/.well-known/oauth-protected-resource" — what gates this resource, at the fixed path a client constructs without being told. schemas: OrderReceipt: type: object required: - message - order_id - status - order_url - paid_usdc properties: commission: $ref: '#/components/schemas/BuyerProof' completion_proof: $ref: '#/components/schemas/BuyerProof' message: type: string order_id: type: string status: type: string description: queued until a human does the work; completed once they have. sla_hours: type: integer description: The promised window. Miss it and the money comes back — the commitment this number exists to make checkable. deliverable: description: The goods, present ONLY when the work was finished inside this request. Absent while the order is still queued, which is the normal case for a human shelf. order_url: type: string format: uri description: Where to poll it. paid_usdc: type: number tip_usdc: type: number patron_number: type: integer badge_url: type: string format: uri WatchCommission: type: object description: Signed original purchase terms. URL watches bind the target and service dates; Operator Statement also binds the wallet, chain, asset and opening position; Recurring Patronage grants bind each purchased extension separately. Decode signed_payload for the certificate ID and exact terms. Present on new purchases and their public records; absent on legacy records. Observations carry their own signatures. required: - signed_payload - signature - public_key - signature_covers properties: signed_payload: type: string description: RFC 8785 canonical JSON. Verify the ed25519 signature over these exact UTF-8 bytes. signature: type: string public_key: type: string signature_covers: type: string PaymentRequiredChallenge: type: object description: The x402 v2 challenge, in the response body. The canonical, signable copy of the same terms rides base64-encoded in the PAYMENT-REQUIRED header; this body is the readable twin plus the things a first-time payer needs — a fill-in-the-blanks payload template, the atomic-vs-decimal amount check, and a suggested idempotency key. required: - error - note - payload_template properties: error: type: string description: The counter's own sentence about what is being asked for. note: type: string description: 'Where the signable requirements are and what to retry with: sign one of the accepts and resend with the PAYMENT-SIGNATURE header. The v1 X-PAYMENT header is still honoured.' item_id: type: string description: The shelf being bought. Present on the /api/buy/* doors; a penny page has no menu item and sends none. min_price_usdc: type: number description: The cheapest tier on offer, in USDC, on the /api/buy/* doors. Paying above it is a tip and is recorded as one, never required. price_usdc: type: number description: The minimum page price. Publication doors send this instead of min_price_usdc; higher offered tiers buy the same page and add a tip. pay_more_if_you_like: type: string description: The penny pages' note that the higher tiers in the header buy exactly the same page and are recorded as a tip. pricing: type: string description: fixed, or tiered where the item offers more than one price. required_params: type: array items: type: string description: Query parameters this item refuses to be bought without. Asking the price without them is free; buying without them is refused before any money moves, and a supplied invalid value is refused before terms. Absent where the door takes none. required_params_note: type: string input_contract_url: type: string format: uri description: 'The free compact item contract: price tiers and the full input schema. Present where required_params is.' payload_template: type: object description: A complete EVM payment payload with exactly three blanks — your wallet address, a fresh nonce, your signature. Everything else is already correct for THIS challenge; `accepted` in particular must stay byte-identical to what was offered. payload_template_note: type: string description: How to fill the template in, including the EIP-712 domain wall that otherwise fails silently. hand_rolling_url: type: string format: uri description: The worked example, for a client being written by hand. amount_check: type: object description: The decimal USDC price and the atomic string beside it, stated together — a six-decimal mismatch is the most common way a first payment fails. idempotency: type: object description: A ready-to-use suggested_key and what it does. Sending it back as Idempotency-Key makes a retry loop safe from a second charge. spec: type: object description: What this call does and what comes back, machine-readable. spec_note: type: string description: The same, as one sentence. guarantee: type: string description: What is promised and — the half that matters — what is not. verification: type: object description: Everything about this offer that is checkable before signing, from this response and public URLs, without asking the store. wallet_safety: type: object description: The two mechanisms that protect a payer from their own retry loop, both free and live on every paid door. house_rule: type: string description: 'The standing refusal: nothing here acts without your decision, and the store never asks for credentials, keys, or wallet secrets.' want_something_else: type: string extensions: type: object description: x402 extension blocks. `offer-receipt` carries a JWS-signed copy of each accepts entry, so the offer is verifiable against the store's published key before a payment is signed. Problem: type: object description: An RFC 9457 problem object. `error` is the store's long-standing human-readable field and is always present; the RFC fields sit beside it. properties: type: type: string format: uri description: A URI identifying the problem class. Dereferenceable at this origin where one exists. title: type: string description: A short, stable summary of the problem class. status: type: integer description: The HTTP status code, repeated in the body. detail: type: string description: What went wrong with THIS request, in plain language. instance: type: string format: uri description: The request path. error: type: string description: The store's human-readable message. Always present, including on responses that predate the typed model. retry_same_request: type: boolean const: false description: 'Present on repair responses: correct the selection or inputs before retrying.' next_step: type: object description: Optional free read after a refusal. Catalog and input repairs also include an equivalent MCP read. No payment or buyer arguments are forwarded. required: - method - url - payment_required properties: method: type: string const: GET url: type: string format: uri payment_required: type: boolean const: false mcp: type: object required: - url - tool - arguments properties: url: type: string format: uri tool: type: string const: find_in_catalog arguments: type: object properties: item_id: type: string additionalProperties: false required: - error DeliveryEnvelope: type: object required: - message - item_id - deliverable - paid_usdc - certificate - signature - public_key - algorithm - verify_url - verification properties: message: type: string description: The counter's own words. item_id: type: string deliverable: description: The goods. Its shape is the item's own — a note, a reading, a record — which is why this field is deliberately untyped here rather than falsely narrowed to one item's payload. paid_usdc: type: number tip_usdc: type: number description: What was paid above the ask, where anything was. patron_number: type: integer commission: $ref: '#/components/schemas/WatchCommission' purchased_text: $ref: '#/components/schemas/BuyerProof' confession_receipt: type: object description: Confession only. Private proof binding the stored text to this purchase. Absent from public certificates and verification. Share only by choice. required: - receipt - signed_payload - signature - public_key - signature_covers properties: receipt: type: object required: - type - cert_id - confession_id - confession - recorded_at properties: type: type: string const: scvd.confession-receipt.v1 cert_id: type: string confession_id: type: string confession: type: string recorded_at: type: string format: date-time sign_as: type: string signed_payload: type: string description: JCS of receipt. Verify the ed25519 signature over these exact UTF-8 bytes. signature: type: string public_key: type: string signature_covers: type: string badge_url: type: string format: uri certificate: type: object description: The signed record of this purchase. signature: type: string public_key: type: string algorithm: type: string description: ed25519. signed_payload: type: string signature_covers: type: string description: Exactly which bytes were signed. signature_jcs: type: string signature_jcs_discipline: type: string signature_jcs_covers: type: string verify_url: type: string format: uri description: Where this purchase verifies — free, forever, by anyone, including people who did not buy it. store_identity: type: object verification: type: object description: How to check the signature without asking us. attest_this_purchase: type: object store_credit: type: object description: What banked back to the paying wallet. show_your_human: type: string receipt_for_your_human: type: string which_check_is_worth_doing: type: string description: The store naming the one check worth running on what it just sold you. BuyerProof: type: object description: 'ed25519 proof: verify exact UTF-8 signed_payload, then its identities and hashes. RFC 8785 JSON.' properties: signed_payload: type: string signature: type: string public_key: type: string signature_covers: type: string required: - signed_payload - signature - public_key - signature_covers DisclosureBlock: type: object title: Disclosure block description: Optional, all of it. Telling us counts you in the buyers' census and, with a matching prior certificate, marks you a returning buyer. It never changes the price, the delivery, or the credit a wallet earns, and none of it is printed on the certificate. Accepted as query parameters on every /api/buy/* door and in the body of the free pre-payment instruments. properties: model: type: string maxLength: 64 description: 'Optional. The model running you, as you would name it: claude-opus-5, gpt-5.6, a local model. Counted, never printed on the certificate.' client: type: string maxLength: 64 description: 'Optional. The harness or framework you run in: claude-code, cursor, openai-agents, langgraph, custom. Counted, never on the certificate.' operator: type: string maxLength: 120 description: 'Optional. Who runs you: a name, handle, company or URL. Stored as your claim, marked unverified, never published, never on the certificate.' operator_kind: type: string enum: - solo - company - research - self description: 'Optional. solo: one person runs you. company: a team does. research: a study. self: you act for yourself.' came_from: type: string maxLength: 160 description: 'Optional. Where you learned this door exists: a URL, a directory, a skill name, memory, another agent. Referrers never reach us; this does.' prior_cert_id: type: string maxLength: 64 description: Optional. A cert_ id from an earlier purchase here. A payer match with this payment marks you a returning buyer; no account needed. responses: NotFound: description: No such resource. The body names where to look instead. content: application/problem+json: schema: $ref: '#/components/schemas/Problem' application/json: schema: $ref: '#/components/schemas/Problem' ServerError: description: Something fell off a shelf. Nothing was charged. content: application/problem+json: schema: $ref: '#/components/schemas/Problem' application/json: schema: $ref: '#/components/schemas/Problem' TooManyRequests: description: 'Too many requests, from the edge rather than from the store''s own logic. Retry after the interval named in Retry-After; the store does not charge for a refusal. The free preflight is limited — 30 probes per isolate per minute, 60 global — because it spends outbound requests to a host the caller chooses. Every answer the limiter METERED carries the IETF RateLimit fields — the 200 and the 429 — so you can pace against the live number instead of discovering the ceiling by being refused: RateLimit-Limit / -Remaining / -Reset report whichever of the two buckets is closer to binding, and RateLimit / RateLimit-Policy name both. Past either ceiling it returns 429 with Retry-After. A validation refusal (400, e.g. a missing or unprobeable URL) returns BEFORE either bucket is touched and carries no RateLimit fields, because a malformed request never spent a probe; this contract used to declare them on those responses too, which described a header that had never been sent. No other operation enforces an application-level ceiling, and so returns no RateLimit headers: declaring a ceiling nothing enforces would be worse than declaring none. A 429 can also arrive from the edge under abuse conditions. A refused request is never charged for. The two figures above are read from the limiter''s own constants, not restated here — this string asserted that NO limit existed for a day after one shipped.' content: application/problem+json: schema: $ref: '#/components/schemas/Problem' application/json: schema: $ref: '#/components/schemas/Problem' headers: Retry-After: schema: type: integer description: Seconds to wait before retrying. BadRequest: description: The request was malformed or a required parameter was missing. content: application/problem+json: schema: $ref: '#/components/schemas/Problem' application/json: schema: $ref: '#/components/schemas/Problem' securitySchemes: purchaseStatusToken: type: http scheme: bearer description: Private recovery.status_token returned by a catalogue purchase. This capability reads only its original purchase status. externalDocs: url: https://scvd.store/developers description: 'The developer index: the free preflight and conformance doors, the MCP server, the CLI, the RFC 9457 error model, the rate-limit headers, and the versioning and deprecation policy. The full agent briefing is at /llms.txt.' x-agentcash-provenance: ownershipProofs: - '0xd0716b334368fed445d000f12c7e586a6c86e13bd543333bab6c04695df236320c5dbfa4f0beb6807cc486c0ed4fd5a38892a8148d5aa80377db9f35ed4c4b151c' - 4HduymBCHhwyLgtMyXRpDX3JHQR3oyqTSytsXqCamzCc4ed9fJeBSpDUDSLwfZ59mZaw9ggdMNURPNBi4P6BRU47 x-scvd-ucp: profile: https://scvd.store/.well-known/ucp checkout: advertised x-scvd-native-checkout: mcp: protocol: mpp payment_method: evm intent: charge transport: mcp method: tools/call path: /mcp challenge_key: org.paymentauth/payment-required challenge_location: error.data, or result._meta with ?payment=tool-result credential_meta_key: org.paymentauth/credential receipt_meta_key: org.paymentauth/receipt idempotency_meta_key: x402/idempotency-key terms: 'each item''s payment_capabilities row with transport http: same network, asset and amount_atomic' webmcp: protocol: mpp payment_method: evm intent: charge transport: webmcp script: /webmcp.js quote_tool: quote_store_purchase challenge_field: payment_challenge complete_tool: complete_store_purchase credential_argument: signed_credential receipt_field: payment_receipt terms: 'each item''s payment_capabilities row with transport http: same network, asset and amount_atomic' x-rate-limiting: application_level_limit: true limited_paths: - /api/preflight/v1 - /api/preflight/v2 - /api/before-you-pay/v1 - /api/look/v1 - /api/preflight/batch headers_returned: - RateLimit-Limit - RateLimit-Remaining - RateLimit-Reset - RateLimit-Policy - RateLimit note: 'The free preflight is limited — 30 probes per isolate per minute, 60 global — because it spends outbound requests to a host the caller chooses. Every answer the limiter METERED carries the IETF RateLimit fields — the 200 and the 429 — so you can pace against the live number instead of discovering the ceiling by being refused: RateLimit-Limit / -Remaining / -Reset report whichever of the two buckets is closer to binding, and RateLimit / RateLimit-Policy name both. Past either ceiling it returns 429 with Retry-After. A validation refusal (400, e.g. a missing or unprobeable URL) returns BEFORE either bucket is touched and carries no RateLimit fields, because a malformed request never spent a probe; this contract used to declare them on those responses too, which described a header that had never been sent. No other operation enforces an application-level ceiling, and so returns no RateLimit headers: declaring a ceiling nothing enforces would be worse than declaring none. A 429 can also arrive from the edge under abuse conditions. A refused request is never charged for. The two figures above are read from the limiter''s own constants, not restated here — this string asserted that NO limit existed for a day after one shipped.' policy_url: https://scvd.store/developers x-versioning: scheme: url-path note: 'Breaking changes arrive as a new version in the path (/api/preflight/v1 → /v2). A published version''s SHAPE never changes under a client: fields are added, never removed or retyped.' deprecation: A version being retired serves the RFC 8594 Deprecation and Sunset headers on every response for at least 90 days before it stops answering, and the date is published at /developers before the headers appear. sunset_headers: - Deprecation - Sunset - Link; rel="successor-version" policy_url: https://scvd.store/deprecation currently_deprecated: [] versions: - path: /api/preflight/v1 status: supported since: '2026-08-03' sunset: null successor: /api/preflight/v2 - path: /api/preflight/v2 status: current since: '2026-08-23' sunset: null successor: null - path: /api/look/v1 status: current since: '2026-09-02' sunset: null successor: null - path: /api/conformance/v1 status: current since: '2026-08-03' sunset: null successor: null