Skip to main content

Accepting payments

Several routes are x402-gated by PaymentMiddlewareASGI:
RoutePricePurpose
POST /route$0.01 USDCPaid routing query
POST /tip$0.01 USDCVoluntary tip jar
POST /ask$0.05 USDCNL→SQL Q&A over the 132M-row x402 settlements parquet warehouse
POST /onchain-x402/address$0.01 USDCOn-chain x402 reputation lookup via the Graph Network subgraph
POST /polymarket/pnl-quick$0.01 USDCFast Polymarket wallet skill read
POST /polymarket/pnl$0.05 USDCFull Polymarket wallet dossier
POST /polymarket/screen$0.02 USDCSize the room — top holders of a Polymarket market
POST /polymarket/risk$0.02 USDCGhost-fill counterparty risk on Polymarket
POST /hyperliquid/*0.010.01–0.03 USDCHyperliquid trader intelligence (6 endpoints)
All settle via the CDP facilitator (api.cdp.coinbase.com/platform/v2/x402) on Base. Payments trigger CDP Bazaar indexing automatically on first success.

Sending payments

Graph Advocate can pay other x402-gated agents via the admin endpoint:
POST /admin/outreach-pay
Authorization: Bearer <ADMIN_TOKEN>

{
  "target_url": "https://some-agent.example.com/endpoint",
  "message": "Hello from Graph Advocate",
  "max_usdc": "0.05"
}
Uses x402Client + EthAccountSigner under the hood (ExactEvmScheme + UptoEvmClientScheme for both fixed and usage-based pricing). Signs in-memory, never logs the key.

Wallets

Two wallets, distinct roles:
RoleAddressKey location
Identity / owner / outbound spender0x575267eED09c338FAE5716A486A7B58A5749A292 (graphadvocate.eth)GA_BASE_WALLET_PK on Railway. Owns ERC-8004 agent #41034 (Base) and #734 (Arbitrum). Signs outbound x402 calls from x402_outreach.py. Signs in-memory, never logged.
Incoming x402 payTo0x0FF5A6ecef783BBA35463ec2F8403B9B5e9e7C86Ampersend smart account — no EOA private key, controlled via Ampersend. Default for X402_PAY_TO.
Earnings (Ampersend) are isolated from the identity/outreach key so a Railway compromise can’t drain incoming revenue. The incoming wallet has no EOA key at all.
Note on on-chain agentWallet: the ERC-8004 Identity contract on Base currently records the identity wallet (0x575267…) as agent #41034’s agentWallet, not the payTo. Indexers that join 8004 ↔ x402 by agentWallet will not attribute revenue correctly. The off-chain erc8004-registration.json declares the Base payTo via a CAIP-10 agentWallet service entry. Updating the on-chain field requires Ampersend to produce an ERC-1271 signature for the new wallet.

Bazaar discovery

Both POST /route and POST /tip declare discovery metadata via declare_discovery_extension(...) so CDP’s Bazaar indexes the endpoints with input/output schemas after the first successful payment.