Sell one existing HTTP route with x402 V2
$0.50 · revised 2026-08-23
Outcome
This plan adds a $0.50 x402 V2 payment gate to one existing FastAPI GET route.
The route accepts Base USDC through the CDP facilitator. Its first 402 challenge includes CDP Bazaar discovery metadata.
The final proof is an HTTP 200 response, a settlement receipt, and a successful Base transaction.
This plan does not contain a code package. It contains commands and code blocks that you apply to your API.
Tested environment
| Item | Tested value |
|---|
| OS | Ubuntu 26.04 LTS, x86_64 |
| Python | 3.14.4 |
| pip | 25.1.1 |
| cdp-sdk | 1.47.1 |
| fastapi | 0.141.1 |
| httpx | 0.28.1 |
| python-dotenv | 1.2.3 |
| uvicorn | 0.52.3 |
| x402 | 2.19.0 with `evm`, `extensions`, and `fastapi` extras |
| x402 network | eip155:8453` (Base mainnet) |
| Base USDC | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
| CDP facilitator base | https://api.cdp.coinbase.com/platform/v2/x402 |
| Facilitator support | https://api.cdp.coinbase.com/platform/v2/x402/supported |
| Facilitator verification | https://api.cdp.coinbase.com/platform/v2/x402/verify |
| Facilitator settlement | https://api.cdp.coinbase.com/platform/v2/x402/settle |
Friction sections
- Friction 1: Pin the environment before you edit the route
- Friction 2: The receiver does not need a hot key
- Friction 3: Store the facilitator keys without exposing them
- Friction 4: FastAPI and x402 use different path-parameter syntax
- Friction 5: Make sure that the 402 occurs before request validation
- Friction 6: Read the amount from the V2 header
- Friction 7: Use a separate buyer with a hard cap
- Friction 8: Bazaar indexing starts after settlement
23 acceptance checks
View the complete order on BaseScan
JSON catalog slug: plan-1-sell-one-route-x402-v2
Sell one existing HTTP route with MPP
$0.50 · revised 2026-08-24
Outcome
This plan adds a $0.50 MPP payment gate to one existing FastAPI GET route.
The route accepts USDC.e on Tempo mainnet. The seller verifies and settles the payment through the public Tempo RPC.
The final proof is an HTTP 200 response, an MPP receipt, and a successful public Tempo transaction.
This plan does not contain a code package. It contains commands and code blocks that you apply to your API.
For the Base x402 rail, use the [x402 companion plan](./plan-1-sell-one-route-x402-v2.md).
Tested environment
| Item | Tested value |
|---|
| OS | Ubuntu 26.04 LTS, x86_64 |
| Python | 3.14.4 |
| pip | 25.1.1 |
| pympp | 0.10.1 with the `tempo` extra |
| fastapi | 0.141.1 |
| uvicorn | 0.52.3 |
| httpx | 0.28.1 |
| python-dotenv | 1.2.3 |
| eth-account | 0.14.0 |
| MPP specification | 0.1 |
| Tempo network | tempo-mainnet`, chain ID `4217 |
| Tempo USDC.e | 0x20C000000000000000000000b9537d11c60E8b50`, 6 decimals |
| Tempo RPC and settlement endpoint | https://rpc.tempo.xyz |
| MPP facilitator endpoint | None. This flow verifies and settles directly through the Tempo RPC. |
| Tempo explorer | https://explore.tempo.xyz |
Friction sections
- Friction 1: Pin the environment before you edit the route
- Friction 2: Keep the recipient key off the API host
- Friction 3: Protect the MPP server secret
- Friction 4: Put validation before settlement
- Friction 5: Publish the route manifest
- Friction 6: Inspect the Payment challenge
- Friction 7: Use a capped buyer for the live test
- Friction 8: Verify the settlement through the Tempo RPC
0 acceptance checks
No BaseScan order is listed.
JSON catalog slug: plan-3-sell-one-route-mpp
List one x402/MPP route on the discovery indexes
$0.50 · revised 2026-08-24
Outcome
This plan makes one paid route readable by x402 and MPP discovery systems.
The route gets two manifests, a public OpenAPI document, and entries on x402scan and MPPScan.
CDP Bazaar catalogs the x402 route after its first settled payment. It has no registration form or registration API.
First, sell the route with the [x402 seller plan](./plan-1-sell-one-route-x402-v2.md) or the [MPP seller plan](./plan-3-sell-one-route-mpp.md).
This plan does not contain a code package. It contains commands and JSON blocks that you apply to your API.
Tested environment
| Item | Tested value |
|---|
| OS | Ubuntu 26.04 LTS, x86_64 |
| Kernel | Linux 7.0.0-29-generic |
| curl | 8.18.0 |
| jq | 1.8.1 |
| Python | 3.14.4 |
| Node.js | 24.18.0 |
| x402 manifest | https://krimskrams.xyz/.well-known/x402`, HTTP 200, valid JSON |
| MPP manifest | https://osha-search.46-224-157-88.sslip.io/.well-known/mpp.json`, HTTP 200, valid JSON |
| OpenAPI document | https://krimskrams.xyz/openapi.json`, HTTP 200, OpenAPI 3.1.0, contact present |
| x402scan recipient page | HTTP 200, resource `38901bc4-2174-464d-b85d-5a814d5148f1` present |
| MPPScan OSHA page | HTTP 200, server `16b1760a565ca299ac553baf669f47bea27bbcf8b9fb64ba49723bcc671ab7b9 |
Friction sections
- Friction 1: Publish the x402 well-known manifest
- Friction 2: Publish the MPP manifest
- Friction 3: Keep the OpenAPI document on
- Friction 4: Register the x402 route on x402scan
- Friction 5: Register the MPP origin on MPPScan
- Friction 6: CDP Bazaar starts after settlement
0 acceptance checks
No BaseScan order is listed.
JSON catalog slug: plan-4-list-one-route-discovery-indexes
Paste into your coding agent