Your USDC sits on one network and the payout needs another. How cross-chain USDC transfers work, which routes exist, the cost, and how long they take.
To move USDC to another chain before a payout, create a transfer quote from a managed wallet with the destination network, execute the transfer, and wait for the mint. BlindPay routes cross-chain USDC through Circle's CCTP v2 across Ethereum, Polygon, Base, Arbitrum, and Arc, typically in 8 to 20 seconds, with no BlindPay fee.
Treasury balances drift. Customers pay you on Base, a partner sends on Polygon, and your payout float ends up split across three networks. This guide covers when rebalancing is worth it, how the transfer works, and the one fee that doesn't show up in the quote.
Key takeaways
receiver_amount equals request_amount.Because every inflow picks its own network. A customer on-ramps to Base, a client pays you on Ethereum, and your payout script was written for Polygon. None of this is wrong. It just fragments the float.
Most of the time you don't need to move anything. A payout quote is priced for the network you send from, and BlindPay's supported chains let payouts draw USDC from Ethereum, Polygon, Base, Arbitrum, Tempo, Arc, Stellar, and Solana. Does the network change your off-ramp quote? covers what moves in the quote when you switch.
Rebalancing pays off in three cases:
It burns USDC on one chain and mints it on another. Circle describes CCTP as natively transferring USDC across blockchains using burn-and-mint (Circle). No wrapped token, no liquidity pool, no bridge IOU. The USDC on the destination chain is native USDC, issued by Circle, which publishes its contract address on each network (Circle).
On BlindPay, you don't call CCTP yourself. You create a transfer quote with a customer_network that differs from the source wallet's network, and BlindPay handles the burn, the attestation, and the mint (transfer quotes). The transfer object tracks both legs:
| Tracking object | What it tracks on a cross-chain move |
|---|---|
tracking_transaction_monitoring | BlindPay's compliance screening of the transfer |
tracking_bridge_swap | The burn on the source chain |
tracking_complete | The mint on the destination chain |
tracking_paymaster | Reserved, stays on_hold today |
The transfer status moves from processing to completed, or to failed or refunded if the send doesn't go through (transfers).
USDC only, between the networks on the CCTP v2 route set. On production that's Ethereum, Polygon, Base, Arbitrum, and Arc. Development instances use the matching testnets with real testnet USDC, not USDB, because CCTP can only move native USDC.
| Move | How it works |
|---|---|
| USDC, Base to Polygon | Cross-chain transfer through CCTP v2 |
| USDC, Arbitrum to Arc | Cross-chain transfer through CCTP v2 |
| USDC, same network | Same-network transfer, 1:1, no BlindPay fee |
| USDT | Same-network transfer only: customer_network must match the source wallet |
Two errors tell you a route won't work. cross_chain_transfers_only_support_usdc means you asked to move a non-USDC token across networks. cctp_route_not_supported means the network pair isn't on the route set. Both come back at quote time, before anything moves.
Transfers have to be enabled on your instance, and the caller needs the transaction-create permission: owner, admin, finance, checker, or operations.
Nothing from BlindPay. The transfer quote is 1:1: sender_amount and receiver_amount both equal request_amount, and flat_fee is 0. Fun detail: commercial_quotation reads 100 on transfers, a fixed placeholder, because there's no FX conversion.
Circle charges separately. Its CCTP fee page says standard transfers are free, fast transfers cost 0 to 13 basis points depending on the source chain, and the fee is deducted from the transferred amount when USDC is minted on the destination blockchain (Circle). BlindPay's docs describe the deduction as small, typically a fraction of a cent up to a few cents, and note it does not appear in receiver_amount or any other quote field.
That last part is the trap. Your quote says 10,000.00 USDC. The wallet receives a hair less.
You hold 40,000 USDC on Base and need 10,000 on Polygon for a payout run. Assume an illustrative Circle fee of 1 basis point on this route.
| Line | Value |
|---|---|
request_amount | 1000000 (10,000.00 USDC in minor units) |
receiver_amount on the quote | 10,000.00 USDC |
| BlindPay fee | 0.00 USDC |
| Illustrative Circle fee (10,000 x 0.0001) | 1.00 USDC |
| USDC minted on Polygon (10,000.00 - 1.00) | 9,999.00 USDC |
| Base balance after (40,000.00 - 10,000.00) | 30,000.00 USDC |
If your payout batch needs exactly 10,000.00 USDC on Polygon, move a little extra, or read the destination balance after the mint and size the payout quotes from that. Don't size them from the transfer quote.
BlindPay's docs say cross-chain transfers typically settle in 8 to 20 seconds, and transfers sourced from Polygon in around 8 seconds either way. Fast, but sequence it right:
completed.Transfer quotes also expire in 5 minutes, fixed. Execute right after creating one, and send an Idempotency-Key header (up to 255 characters, kept for 24 hours) so a network retry returns the original transfer instead of starting a second one. If you're new to reading quote fields, how to read an FX quote explains commercial_quotation and blindpay_quotation.
One more constraint worth knowing: the source of any transfer is a BlindPay managed wallet (bl_...). Managed wallets are in beta and custodial. The destination can be any address on the target network, including an external wallet you control.
On a development instance, create a managed wallet on Base Sepolia, fund it with testnet USDC, and request one transfer quote with customer_network set to Polygon Amoy. Check receiver_amount, then compare it with what actually lands. The transfer quotes docs have the request body.
Seven places blockchain payments beat bank rails: contractor payroll, remittances, B2B suppliers, marketplaces, 24/7 treasury, bill pay, and PSP payouts.
Push means the payer sends an ACH transfer. Pull means you debit a connected account. How each funds a USD to USDC on-ramp, the fees, and the return risk.
AP2, ACP, and x402 each verify that an AI agent had permission to spend. Here is what every protocol covers, who backs it, and the reconciliation gap none of them close.