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, depending on your preferred model, with
Circle and have API credentials for the environment you target. 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.
- Sub-accounts or any other structure your setup requires so each continuous 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 seeactive instead of pending when the address is ready.
Steps
- Set up payment intent to pay with stablecoin
- Acquire blockchain address customer will pay to
- Customer pays
- Receive payment
1. Pay with stablecoin
Once the customer reaches checkout and confirms they would like to pay with USDC on Ethereum, your system sends Circle a request to create a payment intent. In this continuous payment intent you specify the settlement currency and chain (no fixed charge amount on create).Set both
currency and settlementCurrency. Circle LLC (United States) and
Circle Singapore (CIRCLE_SG) also require purposeOfTransfer. Use a
payment reason code other than
PMT006.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:- Subscribe to webhook notifications
- Poll Circle APIs
Option 1: Webhook notification
To receive webhook notifications, follow the steps in Set up a webhook endpoint. After you subscribe to notifications, you receive updates for the payment intent whenever the resource is updated. In this case, when thepaymentMethods.address is set, a notification is sent with a new timeline
object with a status of active.
Payment intent webhook notification
Option 2: Poll payment intent endpoint
If you prefer to poll get a payment intent, sendGET requests until you receive paymentMethods.address.
Retrieve payment intent:
Response
3. Enable customer payment
Once you receive the deposit address viapaymentMethods.address, share it 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.
- as plain text the customer can cut and paste; or
- as a QR code the customer can scan via an app.
4. Receive payment from Circle
Once Circle obtains payment onchain, Circle creates a Payment resource linked to the Payment Intent created earlier and updates the status of that Payment Intent. Your firm will then receive payment via the method specified.Option 1: Webhook notifications
Payment intent webhook notification
Payment webhook notification
Option 2: Retrieve payment intent and payment
Retrieve a payment intent:Response
Response
For blockchains that require a ‘memo’ or ‘address tag’ (XLM, HBAR, etc.), the
optional
addressTag field will be present in the depositAddress object.