Table of Contents
Institutional FX still stalls on banking hours, bilateral credit lines, and principal risk when one leg settles and the other does not. Stablecoin pairs should not inherit that clock.
The named object is Circle StableFX: a permissioned institutional RFQ FX engine on Arc that combines offchain quote execution with onchain FxEscrow settlement for USDC and EURC. Takers request tradable quotes, sign Permit2 EIP-712 typed data, create a trade, then fund escrow. Makers fulfill confirmed trades and fund the other leg. Settlement is payment-versus-payment: both legs settle or neither does.
Facts below come from Circle's StableFX overview, StableFX technical guide, taker quickstart, and maker quickstart as of September 27, 2026. Launch timing for Arc mainnet StableFX is corroborated by TokenPost coverage dated Sep 24, 2026 (Circle launch noted Sep 22). Endpoint names, status values, and tenor windows are copied from those docs. No invented fee schedules, volumes, or undocumented pairs.
Key Takeaways
- StableFX is permissioned RFQ FX on Arc for vetted institutions; USDC and EURC first, with more local pairs planned.
- Taker path: POST /v1/exchange/stablefx/quotes (type=tradable) → sign Permit2 EIP-712 → POST /trades → fund via FxEscrow.
- Maker path: list confirmed trades → GET signatures/presign → POST /signatures → fund as type=maker.
- Tenors: instant (30 min), hourly (1 hour), daily (1 day) from trade creation; quote RFQ response target under 500 ms.
- Circle Technology Services provides APIs and contracts but does not accept or transmit assets for users; sales@circle.com for API access.
Who this is for
Use this path if you are a payment service provider, fintech, crypto OTC desk, prime broker, or corporate treasury that already holds USDC/EURC on Arc (or can), and you need programmable FX settlement that stays available outside banking hours.
Skip it if you only need a Circle Mint third-party payout (see How to Send a Circle Stablecoin Payout), Circle-held Managed Payments (see How to Enable Circle CPN Managed Payments), cart acceptance patterns (see How to Accept USDC Payments), or bank-native USDC/USDT on a U.S. core (see How to Enable Column N.A. Stablecoin Rails). For Arc network basics (chain ID, gas, validators), see Arc Mainnet Is Live.
What Circle StableFX is
StableFX is Circle's institutional-grade stablecoin FX engine built on Arc. It aggregates quotes from approved liquidity providers through a single API, executes the RFQ offchain, then settles onchain through the FxEscrow smart contract so both sides deliver or the trade does not complete.
Circle positions it for cross-border payment flows, institutional treasury rebalancing, embedded FX liquidity, and remittance designs that want to avoid T+2 principal risk. The product supports USDC and EURC today and is described as expanding to a broader set of local stablecoin pairs.
Architecture splits into an offchain execution engine (RFQ distribution, quote ranking, signature collection) and the onchain settlement contract. You can drive settlement through the StableFX API without broadcasting transactions yourself, or integrate the contract directly. Sandbox uses https://api-sandbox.circle.com/ with a TEST key against Arc testnet; production uses https://api.circle.com/ with a LIVE key against Arc mainnet.
Secondary coverage (TokenPost, Sep 24, 2026) places the Arc mainnet StableFX launch around Sep 22, 2026, after a public testnet phase that began in November 2025. Treat press dates as corroboration only; operator steps below follow Circle's developer docs.
Settlement model operators must know
StableFX settlement is characterized by explicit taker funding and maker-triggered settlement. After both sides fund, FxEscrow delivers:
- To the taker: the buy currency minus the taker fee
- To the maker: the sell currency minus the maker fee
- To the StableFX fee wallet: the taker fee (buy currency) and maker fee (sell currency)
The tenor on the quote request sets the settlement window from trade creation: instant = 30 minutes, hourly = 1 hour, daily = 1 day. After quote acceptance there is a 10-minute window for maker and taker to submit trade signatures or the trade expires. Quote responses target under 500 ms from RFQ submission.
| Role | Primary job | Key statuses / endpoints |
|---|---|---|
| Taker | Request quote, lock rate, fund sell currency | pending_settlement → taker_funded; POST /quotes, /trades, /fund |
| Maker | Fulfill confirmed trade, fund buy currency | confirmed → maker_funded; GET /trades, /signatures/presign, POST /signatures, /fund |
| FxEscrow | Hold Permit2 pulls; PvP settle or breach | API fund or direct contract; Permit2 + EIP-712 |
Step 1: Get access, Arc wallet, and Permit2 allowance
StableFX is not self-serve for arbitrary wallets. Reach out to your Circle representative or sales@circle.com for an API key. Circle also documents a StableFX Console for browser-based trading and settlement when you prefer not to code.
Operator prerequisites from the taker and maker quickstarts:
- A StableFX API key (TEST for sandbox, LIVE for mainnet)
- A web3 provider or wallet that supports EIP-712 signatures and Permit2
- Token allowance granted to the Permit2 contract for the funding currency
- Individually owned Arc wallets (omnibus wallets are not supported); same wallet for the full life of one trade
Circle Technology Services provides the APIs and smart contracts. Circle's public positioning (and TokenPost's summary of it) is that CTS does not accept or transmit digital assets for users. Your firm remains responsible for licensing and compliance.
Step 2: Request a tradable quote (taker)
Call POST /v1/exchange/stablefx/quotes with Bearer auth. Provide an amount on either from or to, not both. Set type to "tradable" so the response includes EIP-712 typedData for signing. Include recipientAddress for the wallet that receives the destination currency after settlement.
curl -X POST \
https://api-sandbox.circle.com/v1/exchange/stablefx/quotes \
-H 'Accept: application/json' \
-H 'Authorization: Bearer ${YOUR_API_KEY}' \
-H 'Content-Type: application/json' \
-d '{
"from": { "currency": "USDC", "amount": "1000.00" },
"to": { "currency": "EURC" },
"tenor": "instant",
"type": "tradable",
"recipientAddress": "0xYOUR_WALLET_ADDRESS"
}'
The response includes rate, from/to amounts, fee summary, expiry, and typedData (Permit2 domain, Consideration, TraderDetails, PermitWitnessTransferFrom). Common quote failures called out in docs: invalid currency pair, or amount below the minimum trade amount (under 10 USDC).
Fee presentation depends on which side you size. If you size the buy currency, StableFX adjusts the maker request so the fee is transparent on the taker response. If you size the sell currency, StableFX returns from/to amounts and adds the taker fee in the sell currency separately. Maker fees are not shown to the taker.
Step 3: Sign Permit2 typed data and create the trade
Sign the quote's typedData with a Permit2-compliant EIP-712 wallet. Then accept the quote with POST /v1/exchange/stablefx/trades, passing quoteId, your address, the typedData message, the hex signature, and a random UUIDv4 idempotencyKey. Rate lock lasts until the trade expires, settles, or is breached.
curl -X POST \
https://api-sandbox.circle.com/v1/exchange/stablefx/trades \
-H 'Authorization: Bearer ${YOUR_API_KEY}' \
-H 'Content-Type: application/json' \
-d '{
"idempotencyKey": "${randomUUID}",
"quoteId": "c4d1da72-111e-4d52-bdbf-2e74a2d803d5",
"address": "0xYOUR_WALLET_ADDRESS",
"message": { /* typedData.message from quote */ },
"signature": "0xsignature"
}'
Confirm the create response shows "status": "pending_settlement" and capture contractTradeId. That contract id is required for funding presign.
Step 4: Fund as taker through FxEscrow
Generate funding typed data with POST /v1/exchange/stablefx/signatures/funding/presign using type: "taker" and the contractTradeIds array. Sign that Permit2 payload, then submit POST /v1/exchange/stablefx/fund with type=taker, signature, and permit2 object. A blank 200 means the signed data was accepted. You may also fund by calling FxEscrow directly from your own web3 stack.
Poll GET /v1/exchange/stablefx/trades/{id} until status is taker_funded. Escrow holds the taker tokens until the trade settles or breaches.
Step 5: Fulfill as maker (liquidity path)
Makers list ready inventory with GET /v1/exchange/stablefx/trades?type=maker&status=confirmed. For a chosen trade: GET /v1/exchange/stablefx/signatures/presign/{tradeId}, EIP-712 sign, then POST /v1/exchange/stablefx/signatures with tradeId, address, details, and signature.
Funding mirrors the taker path with type: "maker" on funding presign and POST /fund. The funding response surfaces deliverables (what you must deliver) and receivables (what you receive). Confirm settlement progress toward maker_funded via GET trade by id.
Makers can net fund accumulated trades with a given taker: if opposing USDC/EURC legs cancel, net position can be zero and no additional escrow funding is required for that pair of opens. Docs describe this as calculating the net position and submitting only what covers it.
Who it is not for
On the flip side, skip StableFX when:
- You need a retail self-custody swap UI rather than a vetted institutional RFQ.
- You cannot pass Circle's permissioning or your counsel cannot clear the licensing path.
- You need Circle to hold assets end-to-end (use CPN Managed Payments instead).
- Your wallets are omnibus or cannot sign Permit2 EIP-712 without broadcasting.
- You only need Arc deployment context, not FX settlement (read Arc Mainnet Is Live).
Building a StableFX taker or maker flow? Map sandbox quotes, Permit2 signing, and FxEscrow fund status before any LIVE key volume.
FAQ
What is Circle StableFX?
A permissioned institutional RFQ FX engine on Arc that executes quotes offchain and settles USDC/EURC onchain through FxEscrow with payment-versus-payment semantics.
Which currencies does StableFX support?
Circle docs state USDC and EURC today, with plans to expand to a broader range of local stablecoin pairs. Do not assume undocumented pairs are live.
What are the StableFX settlement tenors?
instant (30 minutes from trade creation), hourly (1 hour), and daily (1 day). There is also a 10-minute window after quote acceptance for both sides to submit trade signatures.
How does a taker settle a trade?
Request a tradable quote, sign Permit2 EIP-712 typedData, POST /trades, then fund with POST /signatures/funding/presign and POST /fund as type=taker until status is taker_funded.
How does a maker fulfill a trade?
List trades with status=confirmed, generate and submit trade signatures, then fund as type=maker. Confirm toward maker_funded via GET trade by id.
Does Circle hold my assets on StableFX?
Circle Technology Services provides APIs and contracts. Public positioning is that CTS does not accept or transmit digital assets for users; participants fund their own wallets into FxEscrow.
How do I get a StableFX API key?
Contact your Circle representative or sales@circle.com. Use TEST keys with api-sandbox.circle.com and LIVE keys with api.circle.com. A StableFX Console is also available for non-code trading.
How is StableFX different from Circle Payouts or CPN Managed Payments?
StableFX is RFQ FX settlement between USDC and EURC on Arc. Stablecoin Payouts are third-party onchain sends from Mint. CPN Managed Payments keep the partner fiat-at-edge while Circle holds assets.
This content is provided for informational and educational purposes only and does not constitute financial, investment, legal, or tax advice; no material herein should be interpreted as a recommendation, endorsement, or solicitation to buy or sell any financial instrument, and readers should conduct their own independent research or consult a qualified professional.