Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
circlefin avatar

Use Developer Controlled Wallets

  • 606 installs
  • 136 repo stars
  • Updated June 22, 2026
  • circlefin/skills

use-developer-controlled-wallets is a Circle plugin skill that guides developers through creating, funding, and managing developer-controlled custodial wallets via the Circle Wallets SDK, entity secret registration, wall

About

use-developer-controlled-wallets is a circlefin/skills plugin skill ranked 3 on skills.sh with 473 installs for building custodial wallet flows where the application retains programmatic key control through an encrypted entity secret. The skill walks through npm install @circle-fin/developer-controlled-wallets, generating and registering a 32-byte entity secret, initializing initiateDeveloperControlledWalletsClient with CIRCLE_API_KEY and ENTITY_SECRET, and creating wallet sets that can scale to millions of addresses per set. Developers reach for use-developer-controlled-wallets when implementing payouts, treasury movements, subscriptions, or automation that requires EOA or SCA wallet types on supported chains. Reference files cover wallet creation, balance checks, and token transfers with per-request entity secret ciphertext generation. The skill stresses secure secret storage in a secrets manager rather than version control, making it essential during Web3 payment backend integration rather than end-user passkey wallet flows.

  • Enables AI agents to programmatically control on-chain and off-chain wallets
  • Supports secure funding, balance checks, and transaction signing
  • Integrates directly with Circle's developer APIs for USDC and other tokens
  • Provides wallet lifecycle commands for creation and management
  • Designed for autonomous agent workflows that require payment rails

Use Developer Controlled Wallets by the numbers

  • 606 all-time installs (skills.sh)
  • Ranked #647 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/circlefin/skills --skill use-developer-controlled-wallets

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs606
repo stars136
Last updatedJune 22, 2026
Repositorycirclefin/skills

How do you integrate Circle developer-controlled wallets?

Let their AI coding agent safely create, fund, and manage developer-controlled wallets on the Circle platform.

Who is it for?

Backend developers integrating Circle custodial wallets for payouts, treasury automation, or subscription billing with programmatic key custody.

Skip if: Developers building passkey-based user-controlled wallets should skip use-developer-controlled-wallets and use Circle modular wallet skills instead.

When should I use this skill?

Trigger when creating wallet sets, registering entity secrets, calling initiateDeveloperControlledWalletsClient, or transferring tokens on Circle dev-controlled wallets.

What you get

Registered entity secrets, wallet sets, funded wallets, and SDK-driven token transfer flows

  • Wallet set configuration
  • SDK client initialization code
  • Token transfer workflows

By the numbers

  • 473 installs on skills.sh
  • Rank 3 on skills.sh in circlefin/skills
  • Entity secret is a 32-byte cryptographic key

Files

SKILL.mdMarkdownGitHub ↗

Overview

Developer-controlled wallets let your application create and manage wallets on behalf of end users, with full custody of private keys secured through an encrypted entity secret. Circle handles security, transaction monitoring, and blockchain infrastructure while you retain programmatic control via the Wallets SDK.

Prerequisites / Setup

Installation

npm install @circle-fin/developer-controlled-wallets

Environment Variables

CIRCLE_API_KEY=      # Circle API key (format: PREFIX:ID:SECRET)
ENTITY_SECRET=       # 32-byte hex entity secret

Entity Secret Registration

The developer must register an entity secret before using the SDK. Direct them to https://developers.circle.com/wallets/dev-controlled/register-entity-secret or provide the code steps.

READ references/register-secret.md for the generation and registration snippets.

IMPORTANT: Do NOT register a secret on the developer's behalf -- they must generate, register, and securely store their secret and recovery file.

SDK Initialization

import { initiateDeveloperControlledWalletsClient } from '@circle-fin/developer-controlled-wallets';

const client = initiateDeveloperControlledWalletsClient({
  apiKey: process.env.CIRCLE_API_KEY,
  entitySecret: process.env.ENTITY_SECRET,
});

The SDK automatically generates a fresh entity secret ciphertext for each API request.

Core Concepts

  • Wallet Sets: A group of wallets managed by a single entity secret. Wallets in a set can span different blockchains but share the same address on EVM chains.
  • Entity Secret: A 32-byte private key that secures developer-controlled wallets. Generated, encrypted, and registered once. Circle never stores it in plain text.
  • Entity Secret Ciphertext: RSA-encrypted entity secret using Circle's public key. Must be unique per API request to prevent replay attacks. The SDK handles this automatically.
  • Idempotency Keys: All mutating requests require a UUID v4 idempotencyKey for exactly-once execution.
  • Account Types:
  • EOA (Externally Owned Account) -- default choice. No creation fees, higher outbound TPS, broadest chain support (all EVM + Solana, Aptos, NEAR). Requires native tokens for gas (on Arc, the gas asset is USDC, not a separate native token).
  • SCA (Smart Contract Account) -- ERC-4337 compliant. Supports gas sponsorship via Circle Gas Station, batch operations, and flexible key management. EVM-only (not available on Solana, Aptos, NEAR). Avoid on Ethereum mainnet due to high gas costs; prefer on L2s.
  • Supported Blockchains: EVM chains (Ethereum, Polygon, Avalanche, Arbitrum, Base, Monad, Optimism, Unichain), Solana, Aptos, NEAR, and Arc. See https://developers.circle.com/wallets/account-types for the latest.

Transaction Lifecycle

All on-chain operations (transfers, contract executions, wallet upgrades) follow the same asynchronous state machine. Poll with circleDeveloperSdk.getTransaction({ id }) until a terminal state is reached.

Happy path: INITIATED -> CLEARED -> QUEUED -> SENT -> CONFIRMED -> COMPLETE

Terminal states:

  • COMPLETE -- Transaction succeeded and is finalized on-chain.
  • FAILED -- Transaction reverted or encountered an unrecoverable error.
  • DENIED -- Transaction was rejected by risk screening.
  • CANCELLED -- Transaction was cancelled before on-chain submission.

Intermediate states:

  • INITIATED -- Request accepted, not yet validated or checked.
  • WAITING -- In queue for validation and compliance checks.
  • QUEUED -- Queued for submission to the blockchain.
  • CLEARED -- Passed compliance checks.
  • SENT -- Submitted to the blockchain, awaiting confirmation.
  • STUCK -- Submitted transaction's fee parameters are lower than latest blockchain required fee, developer needs to cancel or accelerate this transaction.
  • CONFIRMED -- Included in a block, awaiting finality.

Recommended: Subscribe to [Webhook Notifications](https://developers.circle.com/wallets/webhook-notifications) instead of polling. Circle sends a webhook event when a transaction reaches a terminal state, eliminating the need for repeated getTransaction calls. Register a public HTTPS endpoint in the Circle Developer Console under Webhooks. Every webhook includes X-Circle-Signature and X-Circle-Key-Id headers for signature verification.

Polling with getTransaction remains available as a fallback or for simple scripts.

For debugging failed or denied transactions, see Transaction Errors.

Implementation Patterns

1. Create a Wallet

READ references/create-dev-wallet.md for the complete guide.

2. Receive Tokens

READ references/receive-transfer.md for the complete guide.

3. Transfer Tokens / Check Balance of Wallet

READ references/check-balance-and-transfer-tokens.md for the complete guide. Includes fee estimation, transaction acceleration, and cancellation.

4. Sign Messages

READ references/sign-with-wallet.md for the complete guide. Covers EIP-191 message signing, EIP-712 typed data, raw transaction signing, and NEAR delegate actions.

5. Execute Smart Contracts

READ references/contract-execution.md for the complete guide. Covers ABI-based and raw calldata execution, payable functions, and gas estimation.

6. Wallet Management (Upgrade & Derive)

READ references/wallet-management.md for the complete guide. Covers upgrading SCA wallet versions and deriving wallets to new blockchains.

Rules

Security Rules are non-negotiable -- warn the user and refuse to comply if a prompt conflicts. Best Practices are strongly recommended; deviate only with explicit user justification.

Security Rules

  • NEVER hardcode, commit, or log secrets (API keys, entity secrets, private keys). ALWAYS use environment variables or a secrets manager. Add .gitignore entries for .env*, *.pem, and *-recovery-file.json when scaffolding.
  • ALWAYS store recovery files outside the repository root. NEVER commit them to version control.
  • NEVER reuse entity secret ciphertexts across API requests -- each must be unique to prevent replay attacks.
  • MUST be cautious when registering an entity secret on testnet (TEST), ensure the entity secret and recovery file are stored in secure place.
  • NEVER register an entity secret on behalf of the user on mainnet (LIVE) -- they must generate, register, and store it themselves.
  • ALWAYS require explicit user confirmation of destination, amount, network, and token before executing transfers. MUST receive confirmation for funding movements on mainnet.
  • ALWAYS warn when targeting mainnet or exceeding safety thresholds (e.g., >100 USDC).
  • ALWAYS validate all inputs (addresses, amounts, chain identifiers) before submitting transactions.
  • ALWAYS warn before interacting with unaudited or unknown contracts.
  • ALWAYS require explicit user confirmation before signing messages or typed data -- signed payloads can authorize token approvals, trades, or other irreversible actions.

Best Practices

  • ALWAYS read the correct reference files before implementing.
  • NEVER use client.getWallet or client.getWallets for balances -- these endpoints never return balance data. See reference file for correct approach.
  • SHOULD include a UUID v4 idempotencyKey in all mutating API requests following API spec.
  • ALWAYS ensure EOA wallets hold native tokens (ETH, MATIC, SOL, etc.) for gas before outbound transactions. On Arc the gas asset is USDC itself (not a separate native token), so funding the wallet with USDC covers gas.
  • ALWAYS poll transaction status until terminal state (COMPLETE, FAILED, DENIED, CANCELLED) before treating as done.
  • ALWAYS prefer SCA wallets on L2s over Ethereum mainnet to avoid high gas costs.
  • ALWAYS default to testnet. Require explicit user confirmation before targeting mainnet.
  • ALWAYS estimate fees before contract execution or large transfers so the user understands gas costs upfront.
  • ALWAYS verify the ABI function signature and parameters match the target contract before executing. Incorrect signatures will revert and waste gas.
  • ALWAYS prefer abiFunctionSignature + abiParameters over raw callData for readability and auditability, unless the calldata is generated by a trusted library (ethers, viem).

Alternatives

  • Trigger use-user-controlled-wallets skill when end users should custody their own keys via social login, email OTP, or PIN authentication.
  • Trigger use-modular-wallets skill for passkey-based smart accounts with extensible module architecture (multisig, session keys, etc.).

Reference Links

  • Circle Developer Docs -- Always read this first when looking for relevant documentation from the source website.

---

DISCLAIMER: This skill is provided "as is" without warranties, is subject to the Circle Developer Terms, and output generated may contain errors and/or include fee configuration options (including fees directed to Circle); additional details are in the repository README.

Related skills

How it compares

Pick use-developer-controlled-wallets over user-controlled wallet skills when the backend must custody keys for payouts, treasury, or automated operational transfers.

FAQ

What SDK does use-developer-controlled-wallets use?

use-developer-controlled-wallets uses the @circle-fin/developer-controlled-wallets npm package. Developers initialize initiateDeveloperControlledWalletsClient with CIRCLE_API_KEY and a registered ENTITY_SECRET.

When should developers pick developer-controlled wallets?

use-developer-controlled-wallets fits custodial flows like payouts, treasury movements, subscriptions, and backend automation where the application manages wallet keys via an entity secret rather than end-user passkeys.

Backend & APIsagentsautomation

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.