Overview
- Use this guide when you want Circle to host the wallet that signs CPN onchain transactions for USDC transfers.
- CPN does not require Circle-hosted wallets. The steps here are optional; they support teams that want Circle custody for the sender wallet.
- After your wallet holds USDC on the required blockchain, you can continue with Integrate with CPN as an OFI or Create an onchain transaction.
Dev-controlled Programmable Wallets are documented in the Circle
Wallets section. This topic frames those capabilities for CPN
payments only.
Prerequisites
Before you begin:- You have a CPN Console account with the Circle Wallet capability enabled for your organization.
- You have an API key for Programmable Wallets. Create and manage keys in CPN Console → Developer → API Keys.
- You have sandbox or mainnet access enabled for Programmable Wallets.
Mainnet access for Programmable Wallets is typically granted after your CPN
eligibility application is approved, when Circle Wallets was requested as
a capability.
Steps
This guide covers generating and registering your entity secret, creating a wallet set and EOA wallet, configuring notifications, and funding the wallet with USDC.Step 1. Generate and register your entity secret
The entity secret is a 32-byte value that secures your developer-controlled wallets. Circle never stores the secret in plain text: you must protect it. Register your entity secret:- Using the SDK
- Without the SDK
Follow
Register your entity secret
for Node.js and Python: install the SDK, generate the entity secret, and
register the ciphertext with Circle. That guide includes tabs for each language.
Use environment variables or a secrets manager for
apiKey and entitySecret;
never commit real values.Step 2. Create a wallet set and operational wallet
A wallet set groups wallets under one entity secret. Create a wallet set, then create at least one externally owned account (EOA) wallet. Use the API reference for request and response fields:- Create wallet set
(
POST /v1/w3s/developer/walletSets) - Create wallet
(
POST /v1/w3s/developer/wallets)
<your_wallet_set_id> with the walletSetId from the create-wallet-set
response:
ETH-SEPOLIA for typical Transactions V2 sandbox testing. For Transactions
V1 on EVM testnet, use EVM-TESTNET instead. On mainnet, set blockchains to
the production identifier that matches your CPN corridor (for example, ETH for
Ethereum mainnet). See
Supported blockchains.
Step 3. Configure webhook notifications for wallet activity
Subscribe to wallet and transaction events so your system is notified when funds arrive or transfers complete.- Open CPN Console → Developer → Webhooks and add or update your subscriber configuration as offered for your organization.
- For Programmable Wallets subscription details and payload shapes, see
Webhook notifications,
Webhook notification flows, and
Create subscription
(
POST /v2/notifications/subscriptions). Common event types includetransactions.inboundandtransactions.outbound.
Step 4. Fund your wallet with USDC
Your operational wallet must hold USDC before you initiate a CPN payment that draws from that wallet.- Sandbox: Use the Circle faucet to obtain testnet USDC. Enter your wallet address and select the matching testnet blockchain. For Transactions V1 on EVM, ensure you also have testnet native gas tokens (check the faucet for your target blockchain).
- Mainnet: Fund the wallet by moving USDC from your Circle business account balance (for example after an on-ramp). Follow how to Set Up Circle On/Off-Ramps for CPN Payments. You can exercise the Circle APIs flow in sandbox before switching to production endpoints.
GET /v1/w3s/wallets/{id}/balances). When your USDC balance is sufficient for
your test or production payment, you are ready to call CPN transaction APIs.
See also
- Integrate with CPN as an OFI (continue at Part 1: Request a quote).
- Set up Circle on/off-ramps for CPN payments (fund your operational wallet via Circle Mint).
- Set up webhook notifications (CPN payment events)
- Webhook events
- Entity secret management