StableOps

Agent Payments

Let autonomous Agents buy x402 resources through GET, POST, PUT, PATCH, or DELETE requests under explicit wallet, policy, budget, and approval limits.

Agent Payments is StableOps's payment control layer for Agents. An operator registers payment wallets, activates immutable spending policies, sets budgets, and issues a restricted Agent Key. The Agent runtime can purchase paid resources only within those boundaries.

How one payment completes

  1. The Agent SDK sends the intended HTTP method and body to a paid resource and reads its x402 402 payment requirements.
  2. The StableOps control plane validates origin, recipient, network, asset, amount, policy, and both daily budgets.
  3. If a human decision is required, the Intent waits for approval and later resumes with the same Intent.
  4. A customer-hosted signer sidecar validates the short-lived execution grant before signing with a local key or AWS KMS.
  5. The Agent SDK retries the original resource with the payment credential while the control plane reconciles resource and onchain settlement states.

Trust boundaries

  • The Agent runtime holds only a restricted Agent Key and sidecar token. It cannot change wallets, policies, budgets, or approvals.
  • The signer signs only a payment payload or prepared transaction that exactly matches a StableOps execution grant. It exposes no arbitrary signing interface.
  • Wallet private keys and KMS permissions stay in the customer environment.
  • StableOps does not proxy business requests, broadcast payment transactions, or hold customer private keys.
  • Payment state and resource state are tracked separately; receiving a resource does not prove settlement.

Packages

PackageRuns inResponsibility
@stableops/agent-payments-api-sdkOperator serviceManage Agents, wallets, policies, budgets, approvals, and queries
@stableops/agent-payments-sdkAgent runtimeRequest paid resources and coordinate Intents, approvals, and signing
@stableops/agent-payments-signerCustomer signerValidate grants and sign with a local wallet key or AWS KMS

Supported scope

  • Server-side Node.js 20 or later; no browser or edge runtime support.
  • x402 v2 exact over HTTPS with GET, POST, PUT, PATCH, or DELETE. Non-GET request bodies are sent directly by the Agent SDK. StableOps stores only their SHA-256 digest and content type.
  • The asset is limited to the configured USDC below. TRON mainnet and Nile are excluded for now.
  • Sandbox accepts testnets only, while Live accepts mainnets only. Live is disabled by default and is enabled by StableOps after the organization completes its risk and recovery-drill gates.

Sandbox and Live network boundaries are independently enforced when creating policies, registering wallets, creating intents, and issuing authorizations. A caller cannot cross environments by constructing a custom request.

Use Base Sepolia for your first Sandbox payment and Base for your first Live payment. Other x402 services may charge on different networks. Before choosing a network marked Confirm before use, check that the paid service offers the exact network and USDC shown below, then complete a small payment with human approval before enabling automatic payments.

Live networks

Ethereum

Confirm before use
EIP-3009
Network ID
eip155:1
Contract or mint
0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Asset
USDC
Decimals
6

Base

Recommended
EIP-3009
Network ID
eip155:8453
Contract or mint
0x833589fcd6edb6e08f4c7c32d4f71b54bda02913
Asset
USDC
Decimals
6

Arbitrum

Confirm before use
EIP-3009
Network ID
eip155:42161
Contract or mint
0xaf88d065e77c8cc2239327c5edb3a432268e5831
Asset
USDC
Decimals
6

Polygon

Confirm before use
EIP-3009
Network ID
eip155:137
Contract or mint
0x3c499c542cef5e3811e1192ce70d8cc03d5c3359
Asset
USDC
Decimals
6

Optimism

Confirm before use
EIP-3009
Network ID
eip155:10
Contract or mint
0x0b2c639c533813f4aa9d7837caf62653d097ff85
Asset
USDC
Decimals
6

BNB Smart Chain

Confirm before use
Permit2
Network ID
eip155:56
Contract or mint
0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d
Asset
USDC
Decimals
18

Solana

Confirm before use
SVM presigned transaction
Network ID
solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp
Contract or mint
EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
Asset
USDC
Decimals
6

Sandbox networks

Ethereum Sepolia

Confirm before use
EIP-3009
Network ID
eip155:11155111
Contract or mint
0x1c7d4b196cb0c7b01d743fbc6116a902379c7238
Asset
USDC
Decimals
6

Base Sepolia

Recommended
EIP-3009
Network ID
eip155:84532
Contract or mint
0x036cbd53842c5426634e7929541ec2318f3dcf7e
Asset
USDC
Decimals
6

Arbitrum Sepolia

Confirm before use
EIP-3009
Network ID
eip155:421614
Contract or mint
0x75faf114eafb1bdbe2f0316df893fd58ce46aa4d
Asset
USDC
Decimals
6

Polygon Amoy

Confirm before use
EIP-3009
Network ID
eip155:80002
Contract or mint
0x41e94eb019c0762f9bfcf9fb1e58725bfb0e7582
Asset
USDC
Decimals
6

Optimism Sepolia

Confirm before use
EIP-3009
Network ID
eip155:11155420
Contract or mint
0x5fd84259d66cd46123540766be93dfe6d43130d7
Asset
USDC
Decimals
6

BNB Smart Chain Testnet

Confirm before use
Permit2
Network ID
eip155:97
Contract or mint
0x64544969ed7ebf5f083679233325356ebe738930
Asset
USDC
Decimals
18

Solana Devnet

Confirm before use
SVM presigned transaction
Network ID
solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1
Contract or mint
4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU
Asset
USDC
Decimals
6

If a paid service charges on BNB Smart Chain, confirm that it accepts the asset shown below and complete the required Permit2 approval first. The mainnet asset is Binance-Peg USDC and the testnet asset is a community-pegged test token; neither is Circle-issued USDC.

Signers and gas

  • EVM networks use LocalTestSigner in Sandbox and AwsKmsSigner in Live, regardless of whether the payment method is EIP-3009 or Permit2. AwsKmsSigner supports EVM networks only.
  • For EIP-3009, the x402 facilitator submits the payment transaction, so the payer wallet does not need native tokens for each payment.
  • For Permit2, the payer wallet must first approve the canonical Permit2 contract (0x000000000022D473030F116dDEE9F6B43aC78BA3) to spend USDC. Approve only the allowance required by your treasury policy and verify the chain, token, spender, and amount before broadcasting. The wallet needs the network's native token for this approval's gas; the facilitator still submits subsequent x402 payments.
  • Solana uses LocalSvmSigner in both Sandbox and Live. The Solana private key must remain in the customer environment. The facilitator fee payer covers transaction fees, so the payment wallet does not need SOL for x402 payments.

Amount units

Payment quotes, approvals, and receipts use the token decimals shown above. Policies and budgets always use a six-decimal USDC budget unit, where 1000000 means 1 USDC. As an advanced-network example, BNB Smart Chain represents a 1 USDC payment as 1000000000000000000, while the corresponding policy limit remains 1000000.

Move from Sandbox to Live

Sandbox and Live are isolated environments. Do not reuse Sandbox Agents, Agent Keys, wallets, policies, budgets, signer instances, authorization stores, or idempotency keys in Live.

Before the first mainnet payment:

  1. Complete StableOps's organization risk review and recovery drill, then confirm Live is enabled with a healthy recipient-screening path.
  2. Create a Live Agent Payments management API key and new Live Agent. Register and bind a dedicated wallet on the network accepted by the paid service. Start with Base unless the service requires another network and your small test payment has succeeded.
  3. Recreate the policy and budgets using the six-decimal budget unit. Pin the production resource origin, recipient, network, and USDC contract from the tables above.
  4. Configure the signer with environment: 'LIVE' and that mainnet's exact CAIP-2 identifier. Use a separate durable authorization store per signer instance.
  5. For BNB Smart Chain, verify the Permit2 allowance and native-token gas balance. For every network, verify the wallet's USDC balance independently.
  6. Start with a deliberately small canary payment that requires human approval. Confirm the paid resource response, StableOps payment and receipt, signed Webhook, facilitator settlement, and wallet balance before enabling automatic payments.

An ak_sandbox_... Agent Key cannot access Live; issue and securely store a new ak_live_... key. A 403 mainnet-risk response means the organization has not completed activation. A 503 risk-screening response must fail closed and be escalated; do not retry by creating a second Intent.

Where to start

How is this guide?

Last updated

On this page