Skip to main content
Stablecoin payins and payouts let you move USDC and EURC onchain through Circle Mint. A stablecoin payin is when your customer sends USDC or EURC to you onchain and Circle records that transfer. A stablecoin payout is when you send USDC or EURC to a customer, vendor, or supplier onchain.

Payment intents

You create a payment intent when a customer chooses to pay with USDC or EURC on a supported blockchain. The intent carries settlement currency, allowed chains, and the deposit address your customer uses.

Continuous and transient modes

In practice, think of the two payment intent modes like this:
  • Continuous fits repeat deposits. The customer gets a long-lived deposit address they can use more than once (for example top-ups or billing that reuses one address). Each successful inbound transfer is recorded as its own payment.
  • Transient fits a one-time checkout. You declare a fixed amount for one purchase or session (for example one cart or invoice). You still create a payment intent and show a deposit address, but this address cannot be reused for later top-ups or future orders.
The Create payment intent endpoint reflects that split in the request and response. Continuous omits a top-level amount at creation. Transient requires type: "transient" and an amount. The following table compares what you send when you create an intent and how you should use the deposit address in each mode.
ContinuousTransient
Amount at creationOmitted. You set currency and settlement.You set a fixed amount.
Deposit addressSame address can receive multiple transfers.Suited to a single checkout or one-time payment.
How you select itOmit type (default) or set type to continuous.Set type to transient.
When a transfer settles, Circle creates a payment for it. For continuous payment intents, each transfer is represented as its own payment. For transient payment intents, the deposit address is used for a single checkout or one-time payment.

Payin flow

To receive a stablecoin payin, the customer, your customer-facing UI, your server, and Circle follow the same steps whether the intent is continuous or transient. The customer-facing UI is the interface your customer uses to make a payment, such as your website or mobile app. Your server calls Circle Mint APIs and handles webhooks or polling.
1

Create a payment intent

On checkout, the customer chooses to pay with stablecoins in your customer-facing UI. Your server calls the Create a payment intent endpoint with the currency, blockchain, payment intent type, and (for transient only) amount.
2

Get the deposit address

Your server receives the deposit address by using webhooks or by polling the Get a payment intent endpoint until paymentMethods includes an address.
3

Customer sends funds onchain

Your customer-facing UI shows the deposit address (and for transient only, the amount). The customer sends USDC or EURC from their wallet to that address on the correct blockchain.
4

Receive confirmation

Circle detects the transfer. It creates or updates payment data and sends notifications. Your server treats the payin as complete when payment and payment intent state match your policies.
The following diagram illustrates the payin flow at checkout:

Payout flow

To send a stablecoin payout, your server calls the Crypto Payouts API. The recipient receives USDC or EURC at the wallet address you register.
1

Create an address book recipient

Your server creates a recipient by calling the Create address book recipient endpoint with the destination blockchain and address. The recipient status must be active before continuing.
2

Create a payout

Your server calls the Create payout endpoint with the address book recipient ID, sourceWalletId, and amounts. The payout starts in pending.
3

Circle delivers onchain

Circle debits your Mint balance and sends funds to the registered address on the selected blockchain.
4

Receive confirmation

Treat the payout as finalized when the status is complete. Use webhooks for payout events or poll the Get payout endpoint.
The following diagram illustrates the payout flow:

Payment intent expiration

A payment intent can expire. Expiration does not automatically return funds. The intent mainly tells the customer which deposit address to use. If funds still arrive at that address, Circle processes it as a payin on your Mint account.

Refunds

Issue a full or partial refund through the refund APIs or by signing in to your Circle Mint account. What you should know about refunds:
  • Start a refund after at least one payment on the intent has completed and settled. You cannot start a refund while a payment is still pending.
  • Submit refunds within 30 days of creating the payment intent. During that period you can send more than one partial refund, up to the limits of your Mint account.
  • After you start a refund, the payment intent status moves to refunded. The intent stops accepting new payins. Don’t reuse a refunded intent for new checkouts. Funds sent to that address might not match the intent and can require support.
  • If you use your Circle Mint account to refund, the refund cannot be canceled once submitted.