> ## Documentation Index
> Fetch the complete documentation index at: https://developers.circle.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Before reading these docs, install the relevant Circle Skill to get pre-loaded context — skills are LLM-optimized and cover architecture decisions, correct flows, and common pitfalls. In Claude Code: run /plugin marketplace add circlefin/skills then /plugin install circle-skills@circle. With Vercel Skills CLI: run npx skills add circlefin/skills. Available skills: use-usdc https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-usdc/SKILL.md (balances, transfers, approvals on EVM and Solana); EURC has no skill — see https://developers.circle.com/stablecoins/what-is-eurc.md; bridge-stablecoin https://github.com/circlefin/skills/blob/master/plugins/circle/skills/bridge-stablecoin/SKILL.md (crosschain transfers via CCTP, USDC, EURC, and third-party assets); use-arc https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-arc/SKILL.md (Arc chain config, contract deployment, USDC bridging — Arc docs: https://docs.arc.io/llms.txt); use-circle-wallets https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-circle-wallets/SKILL.md (choose wallet type); use-developer-controlled-wallets https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-developer-controlled-wallets/SKILL.md (custodial wallets for payouts and treasury); use-user-controlled-wallets https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-user-controlled-wallets/SKILL.md (embedded wallets with Web2 login); use-modular-wallets https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-modular-wallets/SKILL.md (smart contract wallets with passkeys and ERC-4337); use-gateway https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-gateway/SKILL.md (unified USDC balance, nanopayments); use-smart-contract-platform https://github.com/circlefin/skills/blob/master/plugins/circle/skills/use-smart-contract-platform/SKILL.md (deploy, interact, monitor contracts). Pair any skill with the Circle MCP server for live SDK signatures, contract addresses, and chain IDs: {"mcpServers":{"circle":{"url":"https://api.circle.com/v1/codegen/mcp"}}}.
> Read the product overview first. Each product has an overview explaining when and why to use it. Read it before quickstarts.
> Pick the right wallet type. Developer-controlled (you hold keys), user-controlled (end user holds keys via PIN/social login), or modular (smart contract wallets with passkeys). See https://developers.circle.com/wallets.md.
> Use CCTP V2 for crosschain transfers. CCTP natively transfers USDC and EURC via burn-and-mint, and supports permissionless wrapping of third-party assets via lock-and-mint. V1 is legacy; always use V2 unless V1 is specified or the chain requires it (Noble, Sui, and Aptos still require V1). Migration guide: https://developers.circle.com/cctp/migration-from-v1-to-v2.md.
> Use Bridge Kit for frontend bridging. Wraps CCTP with a simpler SDK for user-facing apps. Use CCTP directly for backend transfers.
> Gas Station vs Paymaster. Gas Station sponsors gas for Circle Wallet transactions. Paymaster lets users pay gas in USDC. Different use cases — read both overviews.
> Gateway Nanopayments for sub-cent payments. Gasless USDC micropayments down to $0.000001 via x402 and batched settlement. For pay-per-request APIs, AI agent payments, streaming.
> Look up USDC addresses per chain. Never hardcode — use https://developers.circle.com/stablecoins/usdc-contract-addresses.md.
> Prefer SDKs over raw API calls. Node.js and Python SDKs handle auth, retries, and errors.
> API key required. Bearer token in Authorization header. Testnet and mainnet use separate keys and may use different base URLs depending on the product.
> Set up webhooks when available. Most operations are async. Webhooks deliver transaction confirmations and state changes.
> When calling list endpoints, paginate using pageSize and pageAfter until no nextPageAfter cursor is returned—stopping at the first page silently misses records.
> Building an AI agent? Start with the Agent Stack—Circle CLI, agent wallets, and nanopayments built for autonomous use cases: https://developers.circle.com/agent-stack.md.

# User-controlled wallets

> Understand how user-controlled wallets work, when to use them, and how Circle enables user-owned keys with social or email authentication, or PIN validation.

User-controlled wallets allow you to create wallets for your users that give
them full control of their keys with a Web2-like experience. Users onboard with
popular authentication mechanisms (social login, email OTP, or PIN with security
questions), then approve transactions and signatures from their device. For a
comparison of all wallet products, see
[Choose your wallet product and account types](/wallets/account-types).

<Note>
  Every signing operation requires an active, authenticated user session.
  User-controlled wallets are not designed for automated or backend-initiated
  transactions where no user is present. For automated signing, see
  [Developer-controlled wallets](/wallets/dev-controlled).
</Note>

## Key features

<CardGroup cols={3}>
  <Card title="User retains custody" icon="key">
    Users have full control of their private keys secured with
    <Tooltip tip="Multi-party computation (MPC) splits key material so no single party holds it. In a 2-of-2 setup, both parties must participate to sign; neither can sign alone.">2-of-2 MPC</Tooltip>
    . Your app or backend never holds user keys. See [Key
    management](/wallets/key-management) for more details.
  </Card>

  <Card title="Seamless onboarding" icon="fingerprint">
    Choose from social login (Google, Apple, Facebook), email OTP, or PIN with
    security questions to authenticate your users. Optional biometrics with PIN.
  </Card>

  <Card title="Customizable UIs" icon="display">
    For social login and email OTP, Circle provides confirmation UIs for
    transfers and signing that you can customize or turn off to build and match
    your own branding.
  </Card>
</CardGroup>

## What you can build

<CardGroup cols={2}>
  <AccordionGroup>
    <Accordion title="Payments and P2P apps" icon="arrow-right-arrow-left">
      Build payment or remittance apps with USDC, with faster settlement and low
      fees versus traditional rails, no custody or key management for you. Users
      approve transfers in your app; you execute using Circle APIs.
    </Accordion>

    <Accordion title="Commerce and checkout" icon="cart-shopping">
      Build marketplaces and subscriptions with in-app crypto checkout. One-tap
      approval, higher conversion, no external wallets or seed phrases. Users
      approve; you run checkout and complete the transfer using Circle APIs.
    </Accordion>

    <Accordion title="DeFi and onchain apps" icon="cube">
      Build lending, swapping, yield/earn, or other DeFi flows with user
      custody. Users sign (for example,
      <Tooltip tip="Standard for signed messages (with personal_sign). See Ethereum Improvement Proposal 191.">EIP-191</Tooltip>
      ,
      <Tooltip tip="Structured typed data signing. See Ethereum Improvement Proposal 712.">EIP-712</Tooltip>
      ) from your app, with no key export or separate wallet; optional gas
      sponsorship hides gas complexity. You orchestrate the flow and never hold
      keys.
    </Accordion>
  </AccordionGroup>

  <AccordionGroup>
    <Accordion title="Social and creator apps" icon="users">
      Enable tipping, creator payouts, and in-app rewards in USDC. You provide
      the social or content layer; users hold the wallet. SDK creates wallets
      and runs transfers with user approval.
    </Accordion>

    <Accordion title="Gaming and rewards" icon="gamepad">
      Build games or loyalty apps where users earn, hold, or spend USDC or
      in-game assets. Keep engagement in-app, with no external wallets or seed
      phrases. Users approve (rewards, purchases); you create wallets and run
      transfers using the SDK and APIs.
    </Accordion>

    <Accordion title="Fintech and embedded finance" icon="building-columns">
      Embed USDC into savings, payroll, B2B payments, or remittance. Users keep
      custody; you avoid holding assets. Social, email, or PIN for familiar
      onboarding. Users approve from your UI; you execute using Circle APIs.
    </Accordion>
  </AccordionGroup>
</CardGroup>

## Account types

On EVM chains, a user-controlled wallet is created as either an externally owned
account (EOA) or a smart contract account (SCA). Pick one based on your needs.
For non-EVM chains such as Aptos or Solana, see
[Choose your wallet product and account types](/wallets/account-types) for a
full breakdown by blockchain.

<CardGroup cols={2}>
  <Card title="EOA (Externally Owned Account)" icon="wallet">
    Select when the source wallet can hold native token for gas, you want simple
    key-controlled accounts, and you don't need multiple operations in one
    transaction (batch execution).
  </Card>

  <Card title="SCA (Smart Contract Account)" icon="cube">
    Select when you need gas paid by a relayer or platform (gas sponsorship),
    batch execution, or other programmable behavior. For details on gas
    sponsorship, see [Gas Station](/wallets/gas-station).
  </Card>
</CardGroup>

## Get started

Choose how users authenticate, then follow a quickstart to create wallets and
see the full flow:

<Card title="Authentication methods" icon="fingerprint" href="/wallets/user-controlled/authentication-methods">
  Compare social logins, email OTP, and PIN: onboarding UX and signing UX so you
  can pick the right method for your app.
</Card>

<CardGroup cols={3}>
  <Card title="Build a wallet app with social login" icon="wallet" href="/wallets/user-controlled/build-a-wallet-app#social-login">
    Build a web app that allows users to sign in with Google and get a
    user-controlled wallet with USDC balance.
  </Card>

  <Card title="Build a wallet app with email OTP" icon="envelope" href="/wallets/user-controlled/build-a-wallet-app#email-otp">
    Authenticate users with an OTP sent by email and create a user-owned wallet
    linked to your app.
  </Card>

  <Card title="Build a wallet app with PIN" icon="key" href="/wallets/user-controlled/build-a-wallet-app#pin">
    Allow users to set a PIN (and optional biometrics) to create and authorize a
    user-controlled wallet from your app.
  </Card>
</CardGroup>
