StableOps

Introduction

StableOps is a stablecoin payment event platform built for developers.

StableOps turns on-chain stablecoin transfers into the same primitives you already know from card processors: an order, a webhook, a deterministic state machine. StableOps uses plan-and-usage pricing with a 0% transaction fee, so we do not take a percentage of your volume. You bring the addresses; we handle the chain scanning, confirmation tracking, reorg checks, idempotency, retries and signed webhook delivery.

Why choose StableOps

  • Low real settlement cost: plan-and-usage pricing with a 0% transaction fee; real per-order settlement cost can be under $0.004.
  • No platform custody: BYO addresses keep private keys and fund control in your hands.
  • Ledger-ready on-chain state: the order state machine, confirmation tracking, reorg checks, and signed webhooks are built around a clean accounting loop.
  • One integration for multi-chain stablecoins: USDC / USDT, mainnet / testnet, SDK flows, and hosted Checkout all share the same order model.
  • Production operations included: idempotent creation, retry handling, webhook replay, and address-pool alerts are built in.

What you get

  • Payment Orders: request an exact amount on one or more chains and get a single deposit address back. See Concepts → Payment Orders.
  • Confirmation tracking: every order moves through created → detected → confirmed → finalized, with reorg checks against the receipt block hash. See Concepts → Confirmations.
  • Signed webhooks: every delivery carries X-Product-Signature, retries on failure, and supports replay from the dashboard. See Concepts → Webhooks.
  • BYO addresses: import your own treasury or custody addresses; we never touch private keys. See Concepts → BYO Addresses.
  • Agent toolkit: a scoped MCP server that wraps the SDK with policy, rate limits, and a human approval queue. See Agents → MCP Server.

Supported chains and assets

StableOps scans USDC / USDT transfers on the chains below and matches them by their official contract address. Any (chain, asset) combination outside these tables is rejected when you create a payment order. Every mainnet has a matching testnet for the Playground and integration testing. Copy a contract address with the button, or open it on a block explorer with the ↗ icon.

Mainnet

AssetChainContract address
USDCEthereum0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
USDTEthereum0xdac17f958d2ee523a2206206994597c13d831ec7
USDCBase0x833589fcd6edb6e08f4c7c32d4f71b54bda02913
USDCArbitrum0xaf88d065e77c8cc2239327c5edb3a432268e5831
USDCPolygon0x3c499c542cef5e3811e1192ce70d8cc03d5c3359
USDCOptimism0x0b2c639c533813f4aa9d7837caf62653d097ff85
USDTOptimism0x94b008aa00579c1307b0ef2c499ad98a8ce58e58
USDCBNB Chain0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d
USDTBNB Chain0x55d398326f99059ff775485246999027b3197955
USDTTRONTR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t
USDCSolanaEPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
USDTSolanaEs9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB

Testnet

AssetChainContract address
USDCEthereum Sepolia0x1c7d4b196cb0c7b01d743fbc6116a902379c7238
USDCBase Sepolia0x036cbd53842c5426634e7929541ec2318f3dcf7e
USDCArbitrum Sepolia0x75faf114eafb1bdbe2f0316df893fd58ce46aa4d
USDCPolygon Amoy0x41e94eb019c0762f9bfcf9fb1e58725bfb0e7582
USDCOptimism Sepolia0x5fd84259d66cd46123540766be93dfe6d43130d7
USDCBNB Chain Testnet0x64544969ed7ebf5f083679233325356ebe738930
USDTBNB Chain Testnet0x337610d27c682e347c9cd60bd4b3b107c9d34ddd
USDCSolana Devnet4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU
USDTTRON NileTXYZopYRdj2D9XRtbG411XZZ3kM5VkAeBf
BNB Chain Testnet USDC / USDT are community-pegged tokens (not issued by Circle/Tether). Other testnets use official Circle USDC or Tether USDT.

How a payment moves through StableOps

┌──────────┐   create     ┌──────────┐   transfer    ┌──────────┐
│ Your app │ ───────────▶ │ StableOps│ ◀──────────── │  Chain   │
└──────────┘              └─────┬────┘               └──────────┘

                                │  signed webhook (detected / confirmed / finalized)

                          ┌──────────┐
                          │ Your app │
                          └──────────┘
  1. You call paymentOrders.create with an amount, accepted assets, and the chain/asset pairs you accept.
  2. StableOps allocates a deposit address from the pool you imported and returns paymentInstructions.
  3. The chain scanner watches that address; the first matching transfer promotes the order to detected and dispatches payment.detected.
  4. As block confirmations accumulate, the order advances through confirmed and finalized. Reorgs that invalidate the receipt revert the order.
  5. Your endpoint receives a signed webhook at every state change. Verify the signature, update your ledger, and return 200.

Where to go next

How is this guide?

Last updated

On this page