Skip to main content
Circle gives you USDC accounts, on-ramp, off-ramp, and payouts. Sly gives you the agent layer — identity, policies, kill-switch, multi-protocol routing. They compose cleanly. You keep your Circle account as the USDC custody + rail; Sly sits on top.

What Sly adds that Circle doesn’t

Circle gives youSly adds
USDC accounts and walletsAgent-scoped wallets with per-agent policies
Payouts (ACH, wire)Same, plus Pix, SPEI, card rails
On-ramp via card/bankSame, plus Coinbase, Stripe, Crossmint on-ramps
API for transfersMulti-protocol commerce: UCP, ACP, AP2, x402, A2A, MCP, MPP, Cards
Basic webhooksAgent-native events (mandates, approvals, KYA tier changes)
Ed25519 agent authentication
KYA verification tiers
AP2 pre-authorized mandate executions
A2A peer-to-peer agent marketplace

Concept mapping

CircleSly
Wallet (end-user account)Account
PayoutTransfer of type cross_border or internal
Transfer (Circle’s term for moves)Depends — internal ledger move vs external rail payout
Business Account balanceParent Account of type business
Addresses (deposit)Wallet with on-chain address field
WebhookWebhook event — largely same event shapes
Fraud signalsWallet policies + KYA tier

Compose: Circle as Sly’s USDC rail

When you configure your Sly tenant, Circle becomes one of the settlement rails. Transfer requests routed through Sly that settle in USDC use your Circle account for the actual custody and rail move. This means:
  • Your Circle account remains the source of truth for USDC custody
  • Circle still handles on-chain settlement
  • Sly adds the agent / policy / protocol layer on top
  • Your Circle payout history is still in Circle’s dashboard
The relationship is similar to how partners running Stripe keep Stripe for card processing while adding Sly for the agent layer.

Step-by-step: add Sly to an existing Circle integration

During setup, connect Circle via OAuth. This is handled by Sly support today (not self-serve yet) — contact support to wire it up. Once linked, USDC-settled transfers through Sly use your Circle balance and addresses.

2. Mirror end-user Circle wallets as Sly accounts

For each end-user Circle wallet you manage:
const account = await sly.accounts.create({
  type: 'business',
  name: circleWallet.description,
  metadata: { circle_wallet_id: circleWallet.walletId },
});

const slyWallet = await sly.wallets.create({
  owner_type: 'account',
  owner_id: account.id,
  currency: 'USDC',
  metadata: { circle_wallet_id: circleWallet.walletId },
});
Sly tracks its own ledger entries — reconciliation matches them against Circle’s settlement data nightly.

3. Register agents under those accounts

Now you can layer agents on top:
const { data: agent, authKey } = await sly.agents.create({
  parentAccountId: account.id,
  name: 'Payables Bot',
  kyaTier: 1,
  generateKeypair: true,
});

// Set a wallet policy — agents enforce at execution
await sly.agentWallets.setPolicy(agent.walletId, {
  global_limits: { per_tx: '100.00', daily: '500.00', monthly: '5000.00', currency: 'USDC' },
  merchant_rules: [{ merchant_category: 'gambling', action: 'block' }],
});
Circle has no notion of “agent” distinct from “wallet” — Sly fills this gap.

4. Route transfers through Sly

Instead of Circle’s direct transfer API:
// Old: direct Circle call
await circle.createTransfer({ source, destination, amount });

// New: Sly — same underlying rail, more control
await sly.transfers.create({
  from_wallet_id: slyWallet.id,
  to_account_id: recipientAccount.id,
  amount: '100.00',
  currency: 'USDC',
  idempotencyKey: `payroll-${id}`,
});
The Sly transfer:
  • Runs wallet-policy checks (KYA tier, limits, merchant allowlist)
  • Routes to Circle as the USDC rail
  • Records a Sly ledger entry
  • Fires Sly webhooks
  • Settles via Circle
  • Reconciles against Circle’s settlement file nightly

5. Add protocol layers you couldn’t do in Circle

  • Agent-driven subscriptionsAP2 mandates
  • Pay-per-API-callx402
  • Agent-to-agent commerceA2A
  • Hosted checkoutUCP (Circle has nothing here)
These all eventually settle in USDC through your existing Circle account — but expose dramatically different user-facing primitives.

What stays in Circle

  • USDC custody — Circle remains the on-chain custody provider
  • On-ramp via Circle Payments — keep the Circle-hosted funding flow if it’s working
  • Compliance holds — Circle’s compliance layer continues
  • Direct blockchain observability — Circle’s dashboard has block-level detail

What moves to Sly

  • Agent identity + auth — Ed25519, sessions, per-agent tokens
  • Per-agent policies — granular spending controls
  • Multi-protocol commerce — UCP, ACP, AP2, x402, A2A, MCP, MPP
  • Cross-rail routing — some transfers route off-Circle (to Pix, SPEI, cards) when appropriate
  • Reconciliation — matches Sly ledger vs. Circle + other rails

Non-USDC flows

If you’re 100% USDC today via Circle and considering Sly: the big unlock is non-USDC rails. You can:
  • Offer card payments through Sly’s Stripe/Adyen integration without abandoning your Circle-primary flow
  • Offer LATAM rails (Pix, SPEI) with minute-level settlement
  • Offer ACH for US customers who want familiar bank transfers
  • All while still keeping USDC as the internal denomination

Migration timeline (typical)

PhaseDurationWork
1Week 1Sly account setup, Circle account linked (via support)
2Week 2Mirror wallets, provision agents, shift one flow
3Week 3-4Add new protocols (x402, AP2) that Circle doesn’t support
4Month 2+Gradually route more flows through Sly as team gets comfortable
Circle stays underneath the whole time — this is composition, not replacement.

Gotchas

  • Webhook ordering — Circle’s wallet-level webhooks and Sly’s transfer-level webhooks can both fire for the same underlying move. Dedupe by transaction fingerprint (amount + timestamp + counterparty).
  • Balance reconciliation lag — Sly’s view of Circle balance lags by a few seconds. If you query balance in Sly right after a large Circle-side deposit, you may see stale data briefly. Reconciliation catches this.
  • Address assignment — Circle issues wallet addresses; Sly tracks them. Don’t create orphan addresses in Circle that Sly doesn’t know about.

See also