Skip to content

How to Mint and Redeem USDC with Circle Mint (2026)

Run the Circle Mint USDC mint and redeem cycle: wire banks, VAN/trackingRef, mock or live deposit, allowlisted transfer, and wire payout redeem.

Table of Contents

Treasury teams that already have a Circle Mint account still need a clean loop: wire fiat in, mint USDC, move it onchain, then redeem leftover balance back to the bank.

The named object is the Circle Mint API mint and redeem cycle: link a businessAccount wire bank, pull wire instructions (VAN / trackingRef), deposit to mint, allowlist a recipient address, transfer USDC onchain, then create a wire payout to redeem. That is not account onboarding alone, not a one-shot Circle payout tutorial, and not Ripple Mint RLUSD.

📌
Stablecoin Insider's framing: use this guide for the full sandbox-to-production mint/redeem loop on Circle Mint. Use How to Open a Circle Mint Account for KYC and API-key setup. Use How to Send a Circle Stablecoin Payout when the job is payout orchestration only. Use Ripple Mint when the asset is RLUSD.

Facts below come from Circle's Mint and redeem quickstart, How minting and redemption works, Deposit fiat, and Withdraw fiat docs as of September 23, 2026. Endpoints and field names are copied from those pages. No invented fees, cutoffs, or Institutional API paths as the main flow.

Key Takeaways

  • Sandbox base: https://api-sandbox.circle.com. Production swaps host; mock wire stays sandbox-only.
  • Mint path: POST /v1/businessAccount/banks/wires → GET .../instructions → deposit (mock or real wire) → GET /v1/businessAccount/balances.
  • Onchain path: POST recipient address, then POST /v1/businessAccount/transfers with destination.type verified_blockchain.
  • Redeem path: POST /v1/businessAccount/payouts with destination.type wire and the bank account id.
  • Operator pitfalls: VAN vs trackingRef, allowlisted recipients, mock wire batch lag up to 15 minutes, France/Singapore address approval.
⚠️
Named downside: Circle Mint is an institutional product. Sandbox mocks do not move real funds, production wires reject on mismatched beneficiary details, and recipient allowlisting (plus Mint Console approval in FR/SG) can block transfers even when balances look correct.

Who this is for

Use this path if you are a fintech or ops engineer integrating Circle Mint for USDC treasury rails, you already understand USDC and wire ops, and you have (or can create) a sandbox API key.

Skip it if you still need account opening (see How to Open a Circle Mint Account), you only need a payout send pattern (see How to Send a Circle Stablecoin Payout), you are minting RLUSD (see Ripple Mint RLUSD), or you want a consumer-style on-ramp/off-ramp overview (see USD to USDC on-ramp and USDC ACH/wire off-ramp).

What Circle Mint mint and redeem means

Circle Mint is Circle's institutional product for converting fiat to USDC (or EURC) at 1:1 and converting those stablecoins back to fiat. Minting credits your Mint account balance after a fiat deposit. Redemption creates a payout that debits that balance and sends fiat to a linked bank.

Stablecoin Insider's take: treat the businessAccount banks, balances, recipient addresses, transfers, and payouts endpoints as one operator loop. The Institutional Core API is an advanced option for multi-entity wallets; it is not the default path in this guide.

StageSandbox endpoint (from Circle docs)Operator check
Link bankPOST /v1/businessAccount/banks/wiresSave bank id + trackingRef
Wire instructionsGET /v1/businessAccount/banks/wires/{id}/instructionsSave trackingRef + beneficiaryBank.accountNumber (VAN)
Deposit / mintPOST /v1/mocks/payments/wire (sandbox only)Wait for settle; list balances
Allowlist recipientPOST /v1/businessAccount/wallets/addresses/recipientchain + address + currency USD
Transfer onchainPOST /v1/businessAccount/transfersdestination.type verified_blockchain + addressId
Redeem to fiatPOST /v1/businessAccount/payoutsdestination.type wire + bank id
VerifyGET /v1/businessAccount/balancesavailable vs unsettled

Prerequisites before the loop

Complete Circle's account and API key setup first. Replace ${YOUR_API_KEY} with a sandbox key. All curl examples below use https://api-sandbox.circle.com as documented in the quickstart.

If you do not have Mint access yet, stop and follow How to Open a Circle Mint Account before continuing.

Step 1. Create a wire bank account

Register a bank with POST /v1/businessAccount/banks/wires. In sandbox, Circle's quickstart uses a mock Wells Fargo-style account with an idempotencyKey, accountNumber, routingNumber, billingDetails, and bankAddress.

Save the returned id (example shape: 9d1fa351-b24d-442a-8aa5-e717db1ed636). That id is the destination for later payouts and the key for wire instructions.

Step 2. Get wire instructions (VAN and trackingRef)

Call GET /v1/businessAccount/banks/wires/{id}/instructions. The response includes trackingRef, beneficiary name/address, and beneficiaryBank fields (routingNumber, accountNumber, and related bank metadata).

Circle's deposit-fiat guide is explicit about Virtual Account Numbers. When virtualAccountEnabled is true, beneficiaryBank.accountNumber is a unique VAN for your linked bank, and the tracking reference in the wire memo becomes optional if the sender uses that VAN. When virtualAccountEnabled is false, the sender must put trackingRef in the wire memo so Circle can match the deposit.

⚠️
Operator pitfall: mismatched beneficiary name, account number, or routing number can return wires or delay settlement by several business days. Copy instructions exactly from the API response, not from a stale spreadsheet.

Step 3. Deposit fiat to mint USDC

In sandbox, simulate the wire with POST /v1/mocks/payments/wire. Body fields from the quickstart: amount { amount, currency USD }, trackingRef, and beneficiaryBank.accountNumber. Circle documents that mock deposits process in batches and may take up to 15 minutes.

In production, send a real wire from your bank using the Step 2 instructions. The mock endpoint is sandbox-only. Domestic wires received before Circle's daily cutoff typically settle the same business day; international wires can take 1-3 business days per Circle's how-minting-works page.

After settlement, verify with GET /v1/businessAccount/balances. available should show the minted USD/USDC balance; unsettled holds funds still in transit.

Step 4. Allowlist a recipient and transfer USDC onchain

Outbound onchain sends require an allowlisted recipient. Create one with POST /v1/businessAccount/wallets/addresses/recipient (idempotencyKey, address, chain such as ETH, currency USD, description). Save the returned address id.

Then create the transfer with POST /v1/businessAccount/transfers. Destination uses type verified_blockchain and addressId. Amount uses currency USD and a decimal string amount. Status moves pending → running → complete as confirmations land.

Circle covers gas for outbound Mint transfers in most cases, so you do not need native gas tokens on each chain for standard USDC sends from Mint. Transfers of $3,000 or more may trigger Travel Rule handling; business-account transfers use your company identity on file.

France and Singapore customers face an extra Mint Console recipient verification step before outbound transfers proceed.

Step 5. Redeem USDC to fiat via payout

Convert remaining balance with POST /v1/businessAccount/payouts. Destination type is wire and id is the bank account id from Step 1. Amount is currency USD plus decimal amount.

Payout status moves pending → complete (or failed). Circle's withdraw-fiat guide notes payouts typically settle next business day, and bank-side rejects return funds to your Mint balance. Subscribe to payouts webhooks or poll get-a-payout instead of guessing.

For payout-centric patterns beyond this round trip, see How to Send a Circle Stablecoin Payout.

Step 6. Verify the round trip

Circle's quickstart example mints 100 USDC via a $100 wire, transfers 25 USDC onchain, redeems 75 USDC, then shows available 0.00 on balances. Re-run GET /v1/businessAccount/balances until available and unsettled match your ledger.

Sandbox to production pitfalls

  • Mock wire is sandbox-only. Production must originate wires from your bank UI or treasury system using live instructions.
  • Keep idempotencyKey unique per create call so retries do not double-create banks, recipients, transfers, or payouts.
  • Do not transfer to an address that was never allowlisted; create the recipient first.
  • If virtualAccountEnabled is false, missing trackingRef in the memo is a common failed-match cause.
  • Returned payouts credit Mint again; treat failed or returned payouts as ops incidents, not lost funds until confirmed.

Institutional API note (optional advanced path)

Circle's wire-instructions reference mentions an optional walletId for external entities created through the Core API for Institutions. That path is for multi-entity institutional setups. This guide keeps the default businessAccount Mint loop as the main line. Only branch to Institutional APIs if your Circle onboarding explicitly put you on that model.

Stablecoin Insider's take

💡
Stablecoin Insider's take: the teams that win on Circle Mint treat VAN/trackingRef hygiene and recipient allowlisting as first-class controls, not afterthoughts. The API is straightforward once those two matching problems are solved. The downside is operational: sandbox confidence does not transfer to production wires until your bank template matches Circle's instructions byte-for-byte.
How to Open a Circle Mint Account
Account opening and API-key setup before you run the mint and redeem loop.

FAQ

What is the Circle Mint mint and redeem cycle?

It is the loop of linking a wire bank, depositing fiat to mint USDC into your Mint balance, optionally transferring USDC onchain to an allowlisted address, then redeeming remaining USDC to fiat via a wire payout.

Is POST /v1/mocks/payments/wire available in production?

No. Circle documents the mock wire endpoint as sandbox-only. In production you send a real wire using the instructions from GET .../banks/wires/{id}/instructions.

When do I need trackingRef versus a VAN?

If virtualAccountEnabled is true and the sender uses the VAN as the beneficiary account number, the tracking reference in the memo is optional. If virtualAccountEnabled is false, include trackingRef in the wire memo so Circle can match the deposit.

Why did my onchain transfer fail even though balances look fine?

Outbound transfers require a previously created recipient address (allowlist). In France and Singapore, recipient addresses also need Mint Console verification before transfers proceed.

How long do sandbox mock wires take?

Circle says mock wire deposits process in batches and may take up to 15 minutes. Poll balances or deposits until available updates.

How is this different from opening a Circle Mint account?

Opening an account covers access and keys. This guide assumes you already have API access and walks the mint, transfer, and redeem API loop with concrete endpoints.

How is this different from Ripple Mint RLUSD?

Ripple Mint issues and redeems RLUSD. Circle Mint mints and redeems Circle stablecoins such as USDC. Different issuers, endpoints, and bank rails.

Should I use the Institutional Core API instead?

Only if Circle onboarded you for multi-entity institutional wallets. The default path in Circle's mint-and-redeem quickstart is the businessAccount banks, balances, transfers, and payouts API used here.


Building USDC treasury rails? Start with Circle's documented mint/redeem loop, then harden VAN matching and recipient allowlists before you flip the production host.

Open Circle Mint docs

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.

Latest