Overview
- Use this guide when you want Circle to supply USDC liquidity (fiat in, USDC to your operational wallet) or to offramp USDC to fiat.
- CPN does not require Circle on/off-ramps. You can source USDC from any compliant channel that meets your compliance and settlement needs.
- Circle on/off-ramp behavior is provided by Circle APIs (Circle Mint and related account APIs). Start with Getting started with the Circle APIs for authentication and environments.
Each step links to the Circle Mint API reference page for that operation,
where request and response fields are fully defined. The steps map those
Circle APIs to CPN scenarios.
Prerequisites
Before you begin, ensure you have:- A CPN Console account with the Circle On/Off-Ramps capability enabled for your organization (after your CPN eligibility application is approved).
- An API key with Circle On/Off-Ramps (Circle APIs) permissions. Create and manage keys in CPN Console → Developer → API Keys.
- Sandbox or mainnet access enabled for Circle On/Off-Ramps.
- An operational wallet address for USDC. To use a Circle wallet, see Set up a Circle Wallet for CPN payments; otherwise use your own wallet infrastructure.
Mainnet access for Circle On/Off-Ramps is typically granted after your CPN
eligibility application is approved and you request that capability. Sandbox
uses the same request and response structure as production.This guide uses Circle Mint account APIs. For Mint, use the sandbox and
production API hosts
and the API key for each environment. CPN Platform payment APIs use one base
URL: the API key determines whether requests run in sandbox or production.
Onramp: Deposit fiat and transfer USDC to your operational wallet
As an Originating Financial Institution (OFI), you convert fiat to USDC and move USDC to the wallet that signs CPN onchain transfers.Step 1: Link your bank account
Register the bank account you use to send fiat deposits. Use Create wire bank account (POST /v1/businessAccount/banks/wires). For a guided walkthrough, see
Quickstart: Deposit via funds transfer.
Step 2: Retrieve wire instructions and send funds
Retrieve instructions with Get wire transfer instructions (GET /v1/businessAccount/banks/wires/{id}/instructions). Send the wire from
your bank. Include the tracking reference (or equivalent memo) Circle provides
so the deposit can be matched to your account.
In sandbox, simulate a deposit with
Create mock wire payment
(POST /v1/mocks/payments/wire). Mock wires can take up to 15 minutes to
process.
Step 3: Confirm your Circle business account balance
After the deposit is credited, confirm USDC with List balances (GET /v1/businessAccount/balances).
Step 4: Configure notifications for deposit status (optional)
Optionally subscribe to status notifications so your backend learns when a deposit completes. Use Create subscription (POST /v1/notifications/subscriptions). The request body requires a public
HTTPS endpoint that can complete the AWS SNS subscription handshake (see the API
reference and
Notifications quickstart):
notificationType field. For flows in this guide,
common values include transfers (onchain transfers) and payouts (bank
payouts); see
Notifications data models for payload
shapes.
You can also manage subscriber endpoints in
CPN Console → Developer → Webhooks when your
organization exposes that UI for your Circle APIs integration.
Step 5: Transfer USDC to your operational wallet
Allowlist your operational wallet address with Create recipient address (POST /v1/businessAccount/wallets/addresses/recipient), then send USDC onchain
with
Create transfer
(POST /v1/businessAccount/transfers). Track completion with
Get transfer
(GET /v1/businessAccount/transfers/{id}).
Example body for create recipient (see the API reference for all fields and
valid chain values; description is required):
blockchain:
status of pending and a
transfer id. Poll
Get transfer
(GET /v1/businessAccount/transfers/{id}) until the status reaches complete.
If the status is failed, check the errorCode field: common values include
transfer_failed, transfer_denied, and insufficient_funds. Do not reuse the
same idempotencyKey for a new request with different parameters; retrying with
identical parameters returns the original response. See
API errors and
Idempotent requests.
Offramp: Receive USDC and pay out to your bank account
As an OFI, you may need to offramp USDC to fiat: for example, when converting received USDC to local currency, handling payment failures, or processing returns. The steps below reverse the onramp flow: deposit USDC into your Circle business account and initiate a bank payout.Step 1: Link your bank account
Use Create wire bank account (POST /v1/businessAccount/banks/wires) for the account that will receive fiat
payouts.
Step 2: Create a deposit address for your Circle business account
Generate an onchain deposit address with Create deposit address (POST /v1/businessAccount/wallets/addresses/deposit). USDC sent to that
address credits your Circle business account balance.
Example body (see the API reference for required fields and valid chain
values):
Step 3: Configure notifications for inbound activity
Subscribe with Create subscription (POST /v1/notifications/subscriptions) using an HTTPS endpoint as in the
onramp step. Your handler receives payloads whose notificationType values are
documented in
Notifications data models. For
example, transfers notifications reflect onchain transfer status changes.
Where available, you can configure endpoints in
CPN Console → Developer → Webhooks, in addition
to using the API.
CPN payment lifecycle events still use CPN subscriptions (see
Webhook events).
Step 4: Offramp USDC to your bank account
Verify your balance with List balances (GET /v1/businessAccount/balances), then create a payout with
Create payout
(POST /v1/businessAccount/payouts).
Example body (see the API reference for all required fields):
status of pending and a payout id. Track
completion with
Get payout
(GET /v1/businessAccount/payouts/{id}). The payout moves through pending to
complete or failed. If the status is failed, check the errorCode field —
common values include insufficient_funds, transaction_denied, and
bank_transaction_error. See
API errors and
Idempotent requests.
See also
- With your operational wallet funded, return to Integrate with CPN as an OFI at Part 1: Request a quote.
- Set up a Circle Wallet for CPN payments for operational wallet setup with Circle dev-controlled wallets.