Skip to main content
Accept USDC on your site or app using Managed Payments stablecoin payins. You create a payment intent, share the deposit address, and Circle links the onchain payment to your intent. The steps use a continuous payment intent: the default pattern for a stable receive address per account.
The alternative Quickstart: Crypto Deposits walkthrough covers a transient payment intent instead (amount and time window set on create). Use that guide when you want a one-time, expiring checkout-style intent.

Prerequisites

Before you start, ensure you have:
  • Aligned with Circle on your Managed Payments onboarding model (Direct or Intermediary).
  • Completed Managed Payments onboarding with Circle and obtained API credentials. The cURL examples use the sandbox host api-sandbox.circle.com.
  • Roles that allow creating and reading payment intents and payments in your setup. Circle assigns roles during onboarding.
  • Subaccounts or any structure your setup requires so each intent ties to the right merchant or segment. See Managed Payments and the Digital Asset Accounts API if you create accounts first.
  • (Optional) A webhook receiver or queue to handle payment intent and payment events. See Set up a webhook endpoint.
  • (Optional) For an end-to-end test, a payer wallet with USDC and native gas on the chain you set on the intent (for example Sepolia ETH when the intent uses an Ethereum test chain).

Sequence diagram

Continuous payins use settlement currency and chain on create; you may see active instead of pending when the address is ready.

Steps

  1. Set up payment intent to pay with stablecoin
  2. Acquire blockchain address customer will pay to
  3. Customer pays
  4. Receive payment

1. Pay with stablecoin

When the customer confirms they want to pay with USDC on Ethereum, send a request to create a payment intent. In a continuous intent, you specify settlement currency and chain. No fixed charge amount is set on create. The required fields differ by Circle entity. Select the tab for the Circle entity that books your payins.
Create a payment intent:
Response
Webhook notification

2. Acquire blockchain address customer will pay to

For security reasons, the API does not return the deposit blockchain address in the create response. To retrieve the blockchain deposit address, you have two options:
  1. Subscribe to webhook notifications
  2. Poll Circle APIs

Option 1: Webhook notification

To receive webhook notifications, follow the steps in Set up a webhook endpoint. After you subscribe, you receive updates when the payment intent changes. When paymentMethods.address is set, a notification arrives with a new timeline entry and status: active.
Payment intent webhook notification

Option 2: Poll payment intent endpoint

If you prefer to poll get a payment intent, send GET requests until you receive paymentMethods.address. Retrieve payment intent:
Response

3. Enable customer payment

Share paymentMethods.address with the customer so they can send funds on the correct chain.
A continuous payment intent doesn’t define a fixed amount on create; you communicate any specific charge (for example an invoice total) from your own checkout or UI.
You can present the address two ways:
  1. as plain text the customer can cut and paste; or
  2. as a QR code the customer can scan using an app.
The customer then sends payment from their wallet (custodial or non-custodial).
For transient payment intents, set expiresOn to limit the payment window. The value must be no more than 24 hours after creation, or the API returns error 1128.

4. Receive payment from Circle

Once Circle detects the onchain payment, it creates a Payment resource linked to the original Payment Intent and updates its status. Your firm then receives payment through the method specified.

Option 1: Webhook notifications

Payment intent webhook notification
Payment webhook notification
For Circle Singapore (CIRCLE_SG) merchants, a Payment in status: "pending" may include a statusReason field indicating a compliance hold. For example, compliance_review means Circle is awaiting Personally Identifiable Information (PII) before releasing funds. For the full list of values, see Stablecoin payin states.

Option 2: Retrieve payment intent and payment

Retrieve a payment intent:
Response
Retrieve a payment:
Response
For blockchains that require a ‘memo’ or ‘address tag’ (XLM, HBAR, etc.), the optional addressTag field will be present in the depositAddress object.