Accepting payments
Several routes are x402-gated byPaymentMiddlewareASGI:
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: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:
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-chainagentWallet: the ERC-8004 Identity contract on Base currently records the identity wallet (0x575267…) as agent #41034’sagentWallet, not the payTo. Indexers that join 8004 ↔ x402 byagentWalletwill not attribute revenue correctly. The off-chain erc8004-registration.json declares the Base payTo via a CAIP-10agentWalletservice entry. Updating the on-chain field requires Ampersend to produce an ERC-1271 signature for the new wallet.
Bazaar discovery
BothPOST /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.