4.24.2026
Release Notes — Stablecoin On-Ramp & Off-Ramp
Stablecoins are now a first-class payment type
Modern Treasury now fully supports stablecoin money movement as a native payment type alongside ACH, Wire, RTP, and Book Transfers — no separate crypto stack, no separate mental model. You use the same primitives you already know (Internal Accounts, Counterparties, Payment Orders, Incoming Payment Details, Transactions) to send, receive, and reconcile stablecoin flows.
What's new:
Getting started
-
New to stablecoins on Modern Treasury? Start with the Stablecoin overview, then pick On-Ramp or Off-Ramp depending on your flow.
-
Already a live PSP customer? Create a stablecoin-enabled Internal Account, add a stablecoin External Account to your existing Counterparty, and reuse your existing Payment Order integration.
-
Questions or access requests? Reach out to your Modern Treasury contact — we'll get you provisioned in sandbox and production.
-
Stablecoin Internal Accounts. Create a stablecoin-denominated Internal Account (e.g. currency: "USDC") the same way you create a USD account. Balances, transactions, and reconciliation all work end-to-end.
-
Stablecoin Counterparties & External Accounts. Attach on-chain addresses to a Counterparty's External Account to send or receive stablecoin payments.
-
Send a stablecoin Payment Order. Originate stablecoin payments using the existing Payment Order API.
-
Receive stablecoin payments. Inbound on-chain transfers are surfaced as Incoming Payment Details (IPDs) with type: "stablecoin" and a subtype identifying the network (e.g. ethereum, solana, base, polygon). You can filter IPD lists by subtype to segment by network.
Supported stablecoins & networks:
| Stablecoin | Ethereum | Solana | Base | Polygon PoS | Arbitrum One | Stellar |
|---|---|---|---|---|---|---|
| USD Coin (USDC) | Yes | Yes | Yes | Yes | — | — |
| PayPal USD (PYUSD) | Yes | Yes | — | — | Yes | Yes |
| Global Dollar (USDG) | Yes | Yes | — | — | — | — |
| Pax Dollar (USDP) | Yes | Yes | — | — | — | — |
| Tether (USDT) | Coming soon |
New: Stablecoin Orchestration
In addition to sending and receiving stablecoins directly, you can now orchestrate conversions between fiat USD and stablecoins through Modern Treasury:
- On-Ramp — convert incoming USD (ACH, Wire, RTP) into stablecoin in a stablecoin Internal Account, then optionally forward it on-chain to a counterparty.
- Off-Ramp — convert incoming stablecoin into USD in a fiat Internal Account, then optionally forward it via ACH, Wire, or RTP to a counterparty.
Both flows are built on the existing Book Transfer and Payment Order primitives, so reconciliation, webhooks, ledgering, and audit trails behave exactly like any other orchestrated payment.
Highlights:
- Unified orchestration — one workflow spans the fiat leg, the conversion, and the on-chain leg.
- End-to-end visibility across IPDs, Book Transfers, and Payment Orders via Transactions and webhooks.
- Works with your existing counterparty model — no parallel schema for "crypto vs. fiat" parties.
See the new Stablecoin On-Ramp and Stablecoin Off-Ramp guides under Orchestration in the API docs (replacing the interim PDF quickstarts previously shared with early-access customers).
Updated API documentation
The API reference and guides have been restructured so stablecoin is discoverable in the same place you look for any other rail:
- Originating payments → ACH, RTP, Wires, Book Transfers, Stablecoin
- Receiving payments → ACH, RTP, Wires, Stablecoin
- Orchestration → Stablecoin On-Ramp, Stablecoin Off-Ramp, Fee Orchestration
The prior standalone "Original Stablecoins" section has been retired in favor of this integrated structure.
SDK support across every official SDK
The Modern Treasury backend has supported creating stablecoin Internal Accounts (USDC, USDG, PYUSD, etc.) on Paxos and MT Flow for some time, but the OpenAPI spec hardcoded internal_account_create_request.currency to USD/CAD. Because our SDKs are generated from that spec via Stainless, none of them exposed stablecoin currencies — customers had to hand-roll raw HTTP calls to create a stablecoin Internal Account from an SDK-based integration.
That gap is now closed. The OpenAPI spec now accepts the full stablecoin currency set on Internal Account creation, and the fix has propagated to all official SDKs:
- Go — modern-treasury-go v2.51.0
- Python — modern-treasury-python
- Node / TypeScript — modern-treasury-node
- Ruby — modern-treasury-ruby
- Java — modern-treasury-java
- Kotlin — modern-treasury-kotlin
Across all SDKs, the same generation cycle also surfaces:
- The new stablecoin value on the Incoming Payment Detail type enum (plus matching list-filter and async-create params).
- The new subtype field on Incoming Payment Details — an additional classification layer; for a type of stablecoin, the subtype identifies the network (e.g. ethereum, solana, base, polygon).
- Related stablecoin-aware updates to PaymentOrder, PaymentReference, Return, InternalAccount, and Invoice types.
If you're on an older SDK version, upgrade to the latest release of your language's SDK to get stablecoin support out of the box.