Learn how the entity secret secures developer-controlled wallets and how it is used in API requests.
Developer-controlled wallets depend on a single developer-held cryptographic
key: the entity secret. Because Circle never stores it, you retain exclusive
control over your wallets and bear sole responsibility for its security.
The entity secret is a randomly generated 32-byte private key that authorizes
sensitive wallet operations under your Circle account.What to know:
Scoped to your Circle account, not to individual API keys. API keys
authenticate requests; the entity secret authorizes the wallet operations
those requests perform.
Circle never stores a copy. Only you can authorize operations on your
developer-controlled wallets.
Losing it without a recovery file means permanent loss of access to your
wallets and funds.
The entity secret ciphertext is the encrypted form of the entity secret, passed
as entitySecretCiphertext in API request bodies.What to know:
Produced by encrypting the entity secret with Circle’s public RSA key before
each request. Circle decrypts it server-side to verify authenticity and
authorize the operation. For the encryption implementation, see the
entity secret sample code
on GitHub.
Each ciphertext is single-use. Reusing one causes the request to be rejected,
which prevents replay attacks.
When you use the
Circle Node.js SDK or
Python SDK, re-encryption
happens automatically before every call. If you make direct API calls without
an SDK, you are responsible for re-encrypting for each request.
A wallet set is a hierarchical deterministic (HD) wallet. Every wallet in the
set is derived from the same cryptographic root, the entity secret.What to know:
One entity secret backs every wallet set in your Circle account. Each wallet
set backs the wallets you create inside it.
You can create up to 1,000 wallet sets per account, with up to 10 million
wallets in each set. For most use cases, one wallet set is enough.
Multiple wallet sets are useful for scaling (for example, one set per tenant
or product line), but they aren’t a security boundary. The same entity secret
authorizes operations on every set.
On EVM blockchains, wallets in the same set can share the same address across
blockchains. See
Unified wallet addressing on EVM blockchains
for how to create and derive wallets that share an address.
When you register your entity secret, Circle generates a recovery file tied to
that secret. The recovery file is the only mechanism for resetting your entity
secret through Circle Console if it is ever lost.What to know:
Without the recovery file, there is no path to recover access to your
developer-controlled wallets or the funds they hold.
The recovery file itself is the credential. There is no separate password or
passphrase protecting it.
A recovery file covers every wallet backed by its entity secret, including
wallets you create after the file was issued.
A successful entity secret rotation or reset invalidates the current recovery
file and issues a new one.
Store the entity secret securely. Use a secrets manager, hardware security
module (HSM), or encrypted password manager. Never commit the entity secret to
version control, include it in application configuration files, or allow it to
appear in logs.
Save the recovery file immediately after registration. The recovery file
can only be downloaded once, during the registration flow. If you skip this
step, you must rotate your entity secret to generate a new one. Store it in a
separate, secure location from the entity secret itself.
Rotate periodically. Rotating the entity secret limits exposure if it is
ever silently compromised. Rotate on a regular schedule, such as every 180
days. Rotation takes effect immediately. Any in-flight API requests using the
old entity secret will fail. Plan rotations during low-traffic periods and
reinitialize pending requests afterward. Rotate in
Circle Console.
Reset if compromised or lost. If your entity secret is lost or you suspect
it has been compromised, use your recovery file to reset it in
Circle Console. After a reset, the old entity
secret is invalidated immediately and a new recovery file is generated.
Overwrite your stored recovery file after any rotation or reset. Circle
issues a new recovery file each time, and your old one becomes invalid.
Group wallets into shared wallet sets, not one per user. Wallet sets are
organizational boundaries for scaling (for example, one set per tenant or
product line), not per-user containers. Creating one wallet set per user will
exhaust the 1,000-set account limit. Group users into shared sets and identify
each user with a refId on the wallet.
If both the entity secret and the recovery file are lost, you cannot create
new developer-controlled wallets or initiate transactions from existing
wallets. There is no recovery path. Store both in separate, secure locations.
Was this page helpful?
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Circle Docs","description":"Developer documentation for Circle's developer tools","colors":{"primary":"#0073C3","light":"#90D2FF","dark":"#0073C3"},"logo":{"light":"https://mintcdn.com/circle-167b8d39/K2XWSLhaeRomzNa1/logo/light.svg?fit=max\u0026auto=format\u0026n=K2XWSLhaeRomzNa1\u0026q=85\u0026s=decfb42837e0eb7c32dd425866902e78","dark":"https://mintcdn.com/circle-167b8d39/K2XWSLhaeRomzNa1/logo/dark.svg?fit=max\u0026auto=format\u0026n=K2XWSLhaeRomzNa1\u0026q=85\u0026s=8b863d97bf31467e8adedf4cb3263012"},"favicon":"https://mintcdn.com/circle-167b8d39/w3bpYw2hUr9sWZTM/favicon.ico?fit=max\u0026auto=format\u0026n=w3bpYw2hUr9sWZTM\u0026q=85\u0026s=bb633116ed9cf1247d65b0c1fa0e5725","background":{"color":{"light":"#FFFFFF","dark":"#111827"}},"navbar":{"links":[{"href":"https://console.circle.com/signin","label":"Sign in to console"},{"href":"https://faucet.circle.com","label":"Faucet"}]},"footer":{"socials":{"x":"https://twitter.com/circle","linkedin":"https://www.linkedin.com/company/circle-internet-financial","instagram":"https://www.instagram.com/teamcircle?hl=en","youtube":"https://www.youtube.com/c/Circlecryptofinance","discord":"https://discord.com/invite/buildoncircle"},"links":[{"header":"Legal","items":[{"label":"Developer Terms","href":"https://console.circle.com/legal/developer-terms"},{"label":"Service Terms","href":"https://console.circle.com/legal/service-terms"},{"label":"Acceptable Use","href":"https://console.circle.com/legal/acceptable-use-policy"}]},{"header":"Privacy","items":[{"label":"Privacy Policy","href":"https://www.circle.com/en/legal/privacy-policy"},{"label":"Cookie Policy","href":"https://www.circle.com/en/legal/cookie-policy"}]},{"header":"Support","items":[{"label":"Help","href":"https://help.circle.com/s/submit-ticket?language=en_US"}]}]},"fonts":{"heading":{"family":"Circularxx","source":"https://cdn.prod.website-files.com/67116d0daddc92483c812e88/6716bb4e120ecb0042f2f4ed_CircularXX-Regular.woff2","format":"woff2"},"body":{"family":"Circularxx","source":"https://cdn.prod.website-files.com/67116d0daddc92483c812e88/6716bb4e120ecb0042f2f4ed_CircularXX-Regular.woff2","format":"woff2"}},"styling":{"eyebrows":"breadcrumbs","latex":true},"integrations":{"segment":{"key":"wz74ASLGjAYPu8mQiIzBBHTLaHbNHM14"}},"contextual":{"options":["copy","chatgpt","claude","view"],"display":"header"},"interaction":{"drilldown":false},"markdown":{"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."]},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"circle-167b8d39","hasAudioNarration":false,"actualSubdomain":"circle-167b8d39","customDomains":["developers.circle.com"],"gitSource":{"type":"github","owner":"crcl-main","repo":"circle-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae25e803389ac4463a55933","collectionId":"1aa6e174-a322-43ab-95d5-a68752c5a50c","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae25e803389ac4463a55933"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae25e803389ac4463a55933","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"API reference","count":587},{"language":"default","tag":"Wallets","count":159},{"language":"default","tag":"Circle Payments Network","count":156},{"language":"default","tag":"Mint and Custody","count":124},{"language":"default","tag":"StableFX","count":108},{"language":"default","tag":"Digital Asset Accounts","count":104},{"language":"default","tag":"Liquidity services","count":104},{"language":"default","tag":"Crosschain transfers","count":100},{"language":"default","tag":"Payments","count":91},{"language":"default","tag":"Managed Payments","count":75}]},"assistantConfig":{"enableAskAiButton":false,"enableAskAiSearchBar":false},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instinct-self-updating-docs","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"snippets/SDKCard.css","content":".cb-card{border:1px solid #e5e7eb;border-radius:12px;background:#fff;box-shadow:0 1px 3px 0 rgba(0,0,0,.1)}.cb-icon-circle{display:flex;align-items:center;justify-content:center;border-radius:50%;flex-shrink:0}.accent-orange{background-color:#fff7ed;color:#ea580c}.accent-blue{background-color:#eff6ff;color:#2563eb}.accent-green{background-color:#f0fdf4;color:#16a34a}.accent-purple{background-color:#faf5ff;color:#9333ea}.accent-violet{background-color:#f5f3ff;color:#7c3aed}.type-header-xs{font-size:18px;font-weight:600;line-height:1.4;color:#111827}.type-body-base{font-size:14px;line-height:1.5;color:#6b7280}.type-body-xs-bold{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:#6b7280}.type-body-sm{font-size:14px;line-height:1.5;color:#374151}.type-body-sm-bold{font-size:14px;font-weight:600;line-height:1.5}.text-icon-neutral,.text-neutral-subtle{color:#6b7280}.cb-button{display:inline-flex;align-items:center;padding:8px 16px;border-radius:8px;font-size:14px;font-weight:500;text-decoration:none;transition:all .2s;border:1px solid #e5e7eb;background:#fff;color:#374151}.cb-button:hover{background:#f9fafb;border-color:#d1d5db}"},{"filePath":"style.css","content":":root{--background-dark:17 24 39!important}html.dark .accordion,html.dark .card{background-color:#111827!important}#navbar .navbar-link a,#navbar [data-component-name=theme-toggle],#navbar a[href*=\"console.circle.com\"],#navbar a[href*=\"faucet.circle.com\"]{background-color:rgba(17,24,39,.03)!important}#navbar .navbar-link a:hover,#navbar [data-component-name=theme-toggle]:hover,#navbar a[href*=\"console.circle.com\"]:hover,#navbar a[href*=\"faucet.circle.com\"]:hover{background-color:rgba(17,24,39,.07)!important}@media (prefers-color-scheme:dark){#navbar .navbar-link a,#navbar [data-component-name=theme-toggle],#navbar a[href*=\"console.circle.com\"],#navbar a[href*=\"faucet.circle.com\"]{background-color:rgba(255,255,255,.05)!important}#navbar .navbar-link a:hover,#navbar [data-component-name=theme-toggle]:hover,#navbar a[href*=\"console.circle.com\"]:hover,#navbar a[href*=\"faucet.circle.com\"]:hover{background-color:rgba(255,255,255,.1)!important}}html.dark #navbar .navbar-link a,html.dark #navbar [data-component-name=theme-toggle],html.dark #navbar a[href*=\"console.circle.com\"],html.dark #navbar a[href*=\"faucet.circle.com\"]{background-color:rgba(255,255,255,.05)!important}html.dark #navbar .navbar-link a:hover,html.dark #navbar [data-component-name=theme-toggle]:hover,html.dark #navbar a[href*=\"console.circle.com\"]:hover,html.dark #navbar a[href*=\"faucet.circle.com\"]:hover{background-color:rgba(255,255,255,.1)!important}html.dark #feedback-form-submit,html.dark #topbar-cta-button,html.dark #topbar-cta-button a,html.dark a[class*=\"bg-[#0073C3]\"],html.dark a[class*=\"bg-[#0073C3]\"] svg,html.dark a[class*=\"bg-[#1AA3FF]\"],html.dark a[class*=\"bg-[#1AA3FF]\"] svg,html.dark a[class*=\"bg-[#5FBFFF]\"],html.dark a[class*=\"bg-[#5FBFFF]\"] svg,html.dark a[class*=\"bg-[#90D2FF]\"],html.dark a[class*=\"bg-[#90D2FF]\"] svg,html.dark chat-assistant-send-button,html.dark code-snippet-feedback-form-submit-button,html.dark contextual-feedback-form-submit-button,html.dark tryit-button{color:#000!important}.mcp-setup-container{display:flex;flex-wrap:wrap;gap:24px;margin:20px 0 28px}.mcp-setup-section{display:flex;flex-direction:column;gap:8px}.mcp-setup-label{font-size:.75rem;font-weight:500;text-transform:uppercase;letter-spacing:.05em;color:#64748b}.dark .mcp-cta-cli:hover .mcp-cli-icon-wrap svg,.dark .mcp-setup-label{color:#94a3b8}.mcp-cta-group{display:flex;flex-wrap:wrap;gap:10px}.mcp-cta{height:40px;border-radius:12px;font-weight:600;font-size:.875rem;padding:0 16px;text-decoration:none!important;display:inline-flex;align-items:center;gap:8px;border:1px solid rgba(15,23,42,.15);background-color:#f8fafc;color:#0b0f19;transition:background-color .15s ease,border-color .15s ease;cursor:pointer}.mcp-cta:hover{background-color:#f1f5f9;border-color:rgba(15,23,42,.25)}.mcp-cta img{width:20px;height:20px;object-fit:contain;border-radius:6px;flex-shrink:0}.mcp-cta span{white-space:nowrap}.dark .mcp-cta{border-color:rgba(255,255,255,.2);background-color:rgba(255,255,255,.08);color:#f8fafc}.dark .mcp-cta:hover{background-color:rgba(255,255,255,.12);border-color:rgba(255,255,255,.3)}.mcp-cta-cli{background-color:#f1f5f9;border-color:#e2e8f0}.mcp-cta-cli:hover{background-color:#e2e8f0;border-color:#cbd5e1}.dark .mcp-cta-cli{background-color:rgba(255,255,255,.06);border-color:rgba(255,255,255,.15)}.dark .mcp-cta-cli:hover{background-color:rgba(255,255,255,.1);border-color:rgba(255,255,255,.25)}.mcp-cli-label{font-weight:600;color:#0f172a}.dark .mcp-cli-label{color:#f1f5f9}.mcp-cli-cmd{font-size:.75rem;font-family:ui-monospace,SFMono-Regular,\"SF Mono\",Menlo,Consolas,monospace;color:#64748b;background:0 0!important;padding:0;white-space:nowrap;border:0}.dark .mcp-cli-cmd{color:#94a3b8;background:0 0!important}.mcp-cli-icon-wrap{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:14px;height:14px;position:relative}.mcp-cli-icon-wrap svg{color:#94a3b8;transition:opacity .15s ease}.dark .mcp-cli-icon-wrap svg,.mcp-cta-cli:hover .mcp-cli-icon-wrap svg{color:#64748b}.mcp-icon-check{position:absolute;opacity:0;color:#22c55e!important}.mcp-cta-cli.copied .mcp-icon-copy{opacity:0}.mcp-cta-cli.copied .mcp-icon-check{opacity:1}.dark .mcp-cli-openai-logo{filter:invert(1)}table thead{text-align:left;background-color:#f5f5f8}.dark table thead{text-align:left;background-color:#29233b}table td,table thead th{padding:8px!important}.accordion:has([data-component-part=accordion-icon] svg[style*=\"circle-info.svg\"]){background-color:#e1f2ff!important;border-color:#c9e1f5!important}.accordion:has([data-component-part=accordion-icon] svg[style*=\"circle-info.svg\"]) summary:hover{background-color:#c9e1f5!important}.dark .accordion:has([data-component-part=accordion-icon] svg[style*=\"circle-info.svg\"]){background-color:#1f1a30!important;border-color:#29233b!important}.accordion:has([data-component-part=accordion-icon] svg[style*=\"circle-info.svg\"]) summary,.dark .accordion:has([data-component-part=accordion-icon] svg[style*=\"circle-info.svg\"]) summary{transition:background-color .3s ease!important}.dark .accordion:has([data-component-part=accordion-icon] svg[style*=\"circle-info.svg\"]) summary:hover{background-color:#29233b!important}.dark .accordion:has([data-component-part=accordion-icon] svg[style*=\"circle-info.svg\"]) [data-component-part=accordion-title]{color:#fff!important}.dark .accordion:has([data-component-part=accordion-icon] svg[style*=\"circle-info.svg\"]) [data-component-part=accordion-content]{color:#e5e7eb!important}.dark .accordion:has([data-component-part=accordion-icon] svg[style*=\"circle-info.svg\"]) [data-component-part=accordion-content] a{color:#1aa3ff!important}.dark .accordion:has([data-component-part=accordion-icon] svg[style*=\"circle-info.svg\"]) [data-component-part=accordion-content] a:hover{color:#1894e8!important}.dark .accordion:has([data-component-part=accordion-icon] svg[style*=\"circle-info.svg\"]) [data-component-part=accordion-content] code{color:#fbbf24!important;background-color:#374151!important}.TryItOutComponent code,.TryItOutComponent pre{background-color:transparent!important}.TryItOutComponent .code-container{background-color:#fff!important}.dark .TryItOutComponent .code-container{background-color:#29233b!important}.home_code_container .code-block{margin:0!important;height:100%}.home_code_container .code-block .code-block-background{height:100%!important}.home_mint_cards a.card>div{padding:20px!important}.home_mint_cards h2{color:#29233b!important}.home_mint_cards div.prose span{color:#6b6580!important}.dark .home_mint_cards h2{color:#fff!important}.dark .home_mint_cards div.prose span{color:#9ca3af!important}#footer svg[style*=mask-image],.home_mint_cards a.card svg{background-color:#6b6580!important}.home_mint_cards a.card:hover svg{background:linear-gradient(135deg,#5fbfff 0,#b090f5 100%)!important}.home_tryitout{background:linear-gradient(89deg,var(--background-gradient-bg-accent-purple-gradient-bottom-left,\n rgba(241, 235, 255, 0.5)\n ) 0%,var(--background-gradient-bg-accent-purple-gradient-top-right,\n rgba(225, 242, 255, 0.5)\n ) 94.58%)}.dark .home_tryitout{background:linear-gradient(89deg,var(--background-gradient-bg-accent-purple-gradient-bottom-left,\n rgba(44, 44, 44, 0.5)\n ) 0%,var(--background-gradient-bg-accent-purple-gradient-top-right,\n rgba(75, 82, 86, 0.5)\n ) 94.58%)}.quickstart-cards-aligned [data-component-part=card-group]{gap:16px!important}.asset-card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1.5rem;margin:1.5rem 0;align-items:stretch}.asset-card{border:1px solid #e5e7eb;border-radius:1rem;background:0 0;padding:1rem 1.25rem 1.5rem;text-decoration:none;color:inherit;display:flex;flex-direction:column;justify-content:space-between;gap:.45rem;transition:border-color .2s ease,box-shadow .2s ease,transform .2s ease;height:100%}.asset-card:hover{border-color:#cfd3dc;box-shadow:0 12px 24px rgba(15,23,42,.08);transform:translateY(-2px)}.dark .asset-card{border-color:rgba(148,163,184,.14);background:0 0;box-shadow:none}.asset-card h3{font-size:1.125rem;font-weight:600;margin:0;color:#0f172a}.dark .asset-card h3{color:#f8fafc}.asset-card p{margin:0;font-weight:300;color:#475569}.dark .asset-card p{color:#b8b8b8}.asset-card-image-wrapper,.asset-card-inline-icon{width:56px;height:56px;border-radius:9999px;margin-bottom:.6rem;flex-shrink:0}.asset-card-image-wrapper{overflow:hidden;display:flex;align-items:center;justify-content:center;background:rgba(15,23,42,.05)}.dark .asset-card-image-wrapper{background:rgba(248,250,252,.08)}.asset-card-image{width:100%;height:100%;object-fit:cover;display:block}.asset-card-inline-icon{padding:10px;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,rgba(0,96,255,.18),rgba(0,164,255,.05));color:#0d5be1}.dark .asset-card-inline-icon{background:rgba(255,255,255,.08);color:#82b7ff}.asset-card-inline-icon svg{width:26px;height:26px}.asset-card.secondary{justify-content:flex-start}.quickstart-cards-aligned [data-component-part=card],.quickstart-cards-aligned [data-component-part=card]>div,.quickstart-cards-aligned a.card,.quickstart-cards-aligned a.card>div{display:flex!important;flex-direction:column!important;height:100%!important}.quickstart-cards-aligned [data-component-part=card]>div>.prose,.quickstart-cards-aligned a.card>div>.prose{flex-grow:1!important;display:flex!important;flex-direction:column!important}.quickstart-cards-aligned [data-component-part=card]>div>div:last-child,.quickstart-cards-aligned a.card>div>div:last-child{margin-top:auto!important}@media (max-width:1024px){.quickstart-cards-aligned,div.quickstart-cards-aligned{display:flex!important;flex-direction:column!important;gap:4px!important}.quickstart-cards-aligned [data-component-part=card-group],.quickstart-cards-aligned>div,div.quickstart-cards-aligned [data-component-part=card-group],div.quickstart-cards-aligned>div{display:flex!important;flex-direction:column!important;gap:4px!important;row-gap:4px!important;grid-row-gap:4px!important;width:100%!important}.quickstart-cards-aligned [data-component-part=card],.quickstart-cards-aligned a.card,div.quickstart-cards-aligned a.card{margin-bottom:4px!important;width:100%!important}.quickstart-cards-aligned [data-component-part=card]:last-child,.quickstart-cards-aligned a.card:last-child,div.quickstart-cards-aligned a.card:last-child{margin-bottom:0!important}}footer,footer [data-component-part=footer-section],footer [data-component-part=footer],footer>div{overflow-x:hidden!important;max-width:100%!important;padding-top:1.75rem!important}#your-privacy-choices-button,footer .footer-link,footer [data-component-part=footer-link],footer a{overflow-wrap:normal!important;word-wrap:normal!important;word-break:keep-all!important;hyphens:none!important;font-size:.75rem!important;white-space:normal!important;max-width:100%!important;line-height:1.4!important;min-width:0!important}#footer a,#your-privacy-choices-button{color:#6b6580!important}html.dark #footer a,html.dark #your-privacy-choices-button{color:#8a849c!important}#footer a:hover,#footer a[href*=mintlify]:hover,#footer a[href*=mintlify]:hover span,#footer a[href*=mintlify]:hover svg,#your-privacy-choices-button:hover{color:#4e4763!important}html.dark #footer a:hover,html.dark #footer a[href*=mintlify]:hover,html.dark #footer a[href*=mintlify]:hover span,html.dark #footer a[href*=mintlify]:hover svg,html.dark #your-privacy-choices-button:hover{color:#a7a3b5!important}#your-privacy-choices-button{position:relative;align-self:start}footer .md\\:items-center>div:has(>#your-privacy-choices-button){align-self:flex-start!important}#your-privacy-choices-button::after{content:url(https://6778953.fs1.hubspotusercontent-na1.net/hubfs/6778953/legal/opt-out-30x14.svg);right:-34px;position:absolute}#footer>div{gap:12px;padding-bottom:20px}#footer a[href*=mintlify],#footer a[href*=mintlify] span,#footer a[href*=mintlify] svg{color:#6b6580!important;fill:currentColor!important}html.dark #footer a[href*=mintlify],html.dark #footer a[href*=mintlify] span,html.dark #footer a[href*=mintlify] svg{color:#8a849c!important}#footer .gap-4.min-w-\\[140px\\].max-w-\\[492px\\].flex-wrap.hidden.md\\:flex:has([data-powered-by-relocated]){flex:0 0 auto!important;width:auto!important;max-width:200px!important}#footer [data-powered-by-relocated]{flex:0 0 100%!important;display:flex!important;justify-content:flex-end!important;margin-top:.25rem!important}#footer [data-powered-by-relocated] a[href*=mintlify]{font-size:.75rem!important}#footer [data-powered-by-relocated] a[href*=mintlify] svg{height:.75rem!important;width:auto!important}#footer [data-powered-by-relocated]>:not(:has(a[href*=mintlify])){display:none!important}@media (max-width:767px){#footer .gap-4.min-w-\\[140px\\].max-w-\\[492px\\].flex-wrap.hidden.md\\:flex{display:flex!important;justify-content:flex-end!important}#footer .gap-4.min-w-\\[140px\\].max-w-\\[492px\\].flex-wrap.hidden.md\\:flex>a{display:none!important}}html.dark #footer svg[style*=mask-image]{background-color:#8a849c!important}#footer a:hover svg[style*=mask-image]{background-color:#4e4763!important}html.dark #footer a:hover svg[style*=mask-image]{background-color:#a7a3b5!important}"}],"page":{"pagePath":"wallets/dev-controlled/entity-secret-management","slug":"/wallets/dev-controlled/entity-secret-management","pageMetadata":{"title":"How the entity secret works","description":"Learn how the entity secret secures developer-controlled wallets and how it is used in API requests.","href":"/wallets/dev-controlled/entity-secret-management"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Learn how the entity secret secures developer-controlled wallets and how it is used in API requests.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Developer-controlled wallets depend on a single developer-held cryptographic\nkey: the entity secret. Because Circle never stores it, you retain exclusive\ncontrol over your wallets and bear sole responsibility for its security.`}),`\n`,_jsx(Heading,{level:`2`,id:`the-entity-secret-and-ciphertext`,children:`The entity secret and ciphertext`}),`\n`,_jsx(_components.p,{children:`These two terms are distinct but inseparable: the entity secret is the key\nitself, and the ciphertext is the encrypted form you send in API requests.`}),`\n`,_jsx(Heading,{level:`3`,id:`entity-secret`,children:`Entity secret`}),`\n`,_jsx(_components.p,{children:`The entity secret is a randomly generated 32-byte private key that authorizes\nsensitive wallet operations under your Circle account.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`What to know:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Scoped to your Circle account, not to individual API keys. API keys\nauthenticate requests; the entity secret authorizes the wallet operations\nthose requests perform.`}),`\n`,_jsx(_components.li,{children:`Circle never stores a copy. Only you can authorize operations on your\ndeveloper-controlled wallets.`}),`\n`,_jsx(_components.li,{children:`Losing it without a recovery file means permanent loss of access to your\nwallets and funds.`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`entity-secret-ciphertext`,children:`Entity secret ciphertext`}),`\n`,_jsxs(_components.p,{children:[`The entity secret ciphertext is the encrypted form of the entity secret, passed\nas `,_jsx(_components.code,{children:`entitySecretCiphertext`}),` in API request bodies.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`What to know:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Produced by encrypting the entity secret with Circle’s public RSA key before\neach request. Circle decrypts it server-side to verify authenticity and\nauthorize the operation. For the encryption implementation, see the\n`,_jsx(_components.a,{href:`https://github.com/circlefin/w3s-entity-secret-sample-code`,children:`entity secret sample code`}),`\non GitHub.`]}),`\n`,_jsx(_components.li,{children:`Each ciphertext is single-use. Reusing one causes the request to be rejected,\nwhich prevents replay attacks.`}),`\n`,_jsxs(_components.li,{children:[`When you use the\n`,_jsx(_components.a,{href:`/sdks/developer-controlled-wallets-nodejs-sdk`,children:`Circle Node.js SDK`}),` or\n`,_jsx(_components.a,{href:`/sdks/developer-controlled-wallets-python-sdk`,children:`Python SDK`}),`, re-encryption\nhappens automatically before every call. If you make direct API calls without\nan SDK, you are responsible for re-encrypting for each request.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`wallet-set`,children:`Wallet set`}),`\n`,_jsx(_components.p,{children:`A wallet set is a hierarchical deterministic (HD) wallet. Every wallet in the\nset is derived from the same cryptographic root, the entity secret.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`What to know:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`One entity secret backs every wallet set in your Circle account. Each wallet\nset backs the wallets you create inside it.`}),`\n`,_jsx(_components.li,{children:`You can create up to 1,000 wallet sets per account, with up to 10 million\nwallets in each set. For most use cases, one wallet set is enough.`}),`\n`,_jsx(_components.li,{children:`Multiple wallet sets are useful for scaling (for example, one set per tenant\nor product line), but they aren’t a security boundary. The same entity secret\nauthorizes operations on every set.`}),`\n`,_jsxs(_components.li,{children:[`On EVM blockchains, wallets in the same set can share the same address across\nblockchains. See\n`,_jsx(_components.a,{href:`/wallets/unified-wallet-addressing-evm`,children:`Unified wallet addressing on EVM blockchains`}),`\nfor how to create and derive wallets that share an address.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`the-recovery-file`,children:`The recovery file`}),`\n`,_jsxs(_components.p,{children:[`When you register your entity secret, Circle generates a recovery file tied to\nthat secret. The recovery file is the only mechanism for resetting your entity\nsecret through `,_jsx(_components.a,{href:`https://console.circle.com/`,children:`Circle Console`}),` if it is ever lost.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`What to know:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Without the recovery file, there is no path to recover access to your\ndeveloper-controlled wallets or the funds they hold.`}),`\n`,_jsx(_components.li,{children:`The recovery file itself is the credential. There is no separate password or\npassphrase protecting it.`}),`\n`,_jsx(_components.li,{children:`A recovery file covers every wallet backed by its entity secret, including\nwallets you create after the file was issued.`}),`\n`,_jsx(_components.li,{children:`A successful entity secret rotation or reset invalidates the current recovery\nfile and issues a new one.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`best-practices`,children:`Best practices`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Store the entity secret securely.`}),` Use a secrets manager, hardware security\nmodule (HSM), or encrypted password manager. Never commit the entity secret to\nversion control, include it in application configuration files, or allow it to\nappear in logs.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Save the recovery file immediately after registration.`}),` The recovery file\ncan only be downloaded once, during the registration flow. If you skip this\nstep, you must rotate your entity secret to generate a new one. Store it in a\nseparate, secure location from the entity secret itself.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Rotate periodically.`}),` Rotating the entity secret limits exposure if it is\never silently compromised. Rotate on a regular schedule, such as every 180\ndays. Rotation takes effect immediately. Any in-flight API requests using the\nold entity secret will fail. Plan rotations during low-traffic periods and\nreinitialize pending requests afterward. Rotate in\n`,_jsx(_components.a,{href:`https://console.circle.com/`,children:`Circle Console`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Reset if compromised or lost.`}),` If your entity secret is lost or you suspect\nit has been compromised, use your recovery file to reset it in\n`,_jsx(_components.a,{href:`https://console.circle.com/`,children:`Circle Console`}),`. After a reset, the old entity\nsecret is invalidated immediately and a new recovery file is generated.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Overwrite your stored recovery file after any rotation or reset.`}),` Circle\nissues a new recovery file each time, and your old one becomes invalid.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Group wallets into shared wallet sets, not one per user.`}),` Wallet sets are\norganizational boundaries for scaling (for example, one set per tenant or\nproduct line), not per-user containers. Creating one wallet set per user will\nexhaust the 1,000-set account limit. Group users into shared sets and identify\neach user with a `,_jsx(_components.code,{children:`refId`}),` on the wallet.`]}),`\n`]}),`\n`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`If both the entity secret and the recovery file are lost, you cannot create\nnew developer-controlled wallets or initiate transactions from existing\nwallets. There is no recovery path. Store both in separate, secure locations.`})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"How the entity secret works","description":"Learn how the entity secret secures developer-controlled wallets and how it is used in API requests.","href":"/wallets/dev-controlled/entity-secret-management"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"The entity secret and ciphertext","slug":"the-entity-secret-and-ciphertext","depth":2,"children":[{"title":"Entity secret","slug":"entity-secret","depth":3,"children":[]},{"title":"Entity secret ciphertext","slug":"entity-secret-ciphertext","depth":3,"children":[]}]},{"title":"Wallet set","slug":"wallet-set","depth":2,"children":[]},{"title":"The recovery file","slug":"the-recovery-file","depth":2,"children":[]},{"title":"Best practices","slug":"best-practices","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/circle-167b8d39/d67aae5e94f8afee/content/gtm.js","/_mintlify/custom/circle-167b8d39/df50992471c6ad37/content/footer-powered-by.js"],"subdomain":"circle-167b8d39","siteName":"Circle Docs","title":"How the entity secret works - Circle Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-04T20:52:15.751Z","originalFileLocation":"wallets/dev-controlled/entity-secret-management.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Learn how the entity secret secures developer-controlled wallets and how it is used in API requests.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Circle Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/circle-167b8d39/NmgH-UQQhRa2ts0q/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/circle-167b8d39/NmgH-UQQhRa2ts0q/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/circle-167b8d39/NmgH-UQQhRa2ts0q/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/circle-167b8d39/NmgH-UQQhRa2ts0q/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/circle-167b8d39/NmgH-UQQhRa2ts0q/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/circle-167b8d39/NmgH-UQQhRa2ts0q/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/circle-167b8d39/NmgH-UQQhRa2ts0q/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/circle-167b8d39/NmgH-UQQhRa2ts0q/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/circle-167b8d39/NmgH-UQQhRa2ts0q/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"How the entity secret works - Circle Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Learn how the entity secret secures developer-controlled wallets and how it is used in API requests.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Circle Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developers.circle.com/wallets/dev-controlled/entity-secret-management\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://circle-167b8d39.mintlify.app/_mintlify/api/og/v2?division=Entity+secret\u0026amp;title=How+the+entity+secret+works\u0026amp;description=Learn+how+the+entity+secret+secures+developer-controlled+wallets+and+how+it+is+used+in+API+requests.\u0026amp;theme=5260492f3b2b0d8ab3e7e4f3\u0026amp;signature=8f15e26c9d168692d42e3032bac59062ebe0eece724bb8ff79a7cf1f7881a722\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"How the entity secret works - Circle Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Learn how the entity secret secures developer-controlled wallets and how it is used in API requests.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://circle-167b8d39.mintlify.app/_mintlify/api/og/v2?division=Entity+secret\u0026amp;title=How+the+entity+secret+works\u0026amp;description=Learn+how+the+entity+secret+secures+developer-controlled+wallets+and+how+it+is+used+in+API+requests.\u0026amp;theme=5260492f3b2b0d8ab3e7e4f3\u0026amp;signature=8f15e26c9d168692d42e3032bac59062ebe0eece724bb8ff79a7cf1f7881a722\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/circle-167b8d39/NmgH-UQQhRa2ts0q/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Circle Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0073C3\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developers.circle.com/wallets/dev-controlled/entity-secret-management\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/wallets/dev-controlled/entity-secret-management.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developers.circle.com/#organization\",\"name\":\"Circle Docs\",\"url\":\"https://developers.circle.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/circle-167b8d39/K2XWSLhaeRomzNa1/logo/light.svg?fit=max\u0026auto=format\u0026n=K2XWSLhaeRomzNa1\u0026q=85\u0026s=decfb42837e0eb7c32dd425866902e78\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developers.circle.com#website\",\"name\":\"Circle Docs\",\"url\":\"https://developers.circle.com\",\"publisher\":{\"@id\":\"https://developers.circle.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developers.circle.com/wallets/dev-controlled/entity-secret-management#webpage\",\"url\":\"https://developers.circle.com/wallets/dev-controlled/entity-secret-management\",\"name\":\"How the entity secret works\",\"description\":\"Learn how the entity secret secures developer-controlled wallets and how it is used in API requests.\",\"dateModified\":\"2026-09-04T20:52:15.751Z\",\"isPartOf\":{\"@id\":\"https://developers.circle.com#website\"},\"breadcrumb\":{\"@id\":\"https://developers.circle.com/wallets/dev-controlled/entity-secret-management#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developers.circle.com/wallets/dev-controlled/entity-secret-management#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Wallets\",\"item\":\"https://developers.circle.com/wallets\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Wallets: Dev-Controlled\",\"item\":\"https://developers.circle.com/wallets/dev-controlled\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How the entity secret works\",\"item\":\"https://developers.circle.com/wallets/dev-controlled/entity-secret-management\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://developers.circle.com/wallets/dev-controlled/entity-secret-management#article\",\"headline\":\"How the entity secret works\",\"name\":\"How the entity secret works\",\"description\":\"Learn how the entity secret secures developer-controlled wallets and how it is used in API requests.\",\"url\":\"https://developers.circle.com/wallets/dev-controlled/entity-secret-management\",\"mainEntityOfPage\":{\"@id\":\"https://developers.circle.com/wallets/dev-controlled/entity-secret-management#webpage\"},\"dateModified\":\"2026-09-04T20:52:15.751Z\",\"publisher\":{\"@id\":\"https://developers.circle.com/#organization\"},\"isPartOf\":{\"@id\":\"https://developers.circle.com#website\"}}]}\u003c/script>","siteName":"Circle Docs","nav":{"global":null,"tabs":[{"tab":"Get started","pages":[{"title":"Get started","href":""}]},{"tab":"Assets","pages":[{"title":"Assets","href":"/assets"}]},{"tab":"Build onchain","pages":[{"title":"Build onchain experiences","sidebarTitle":"Overview","mode":"wide","href":"/build-onchain"},{"group":"Wallets","pages":[{"title":"Circle Wallets","sidebarTitle":"Overview","href":"/wallets"},{"group":"Get started","pages":[{"title":"Choose your wallet product and account types","sidebarTitle":"Choose your wallet and account types","href":"/wallets/account-types"},{"title":"Supported blockchains","href":"/wallets/supported-blockchains"},{"group":"Core concepts","pages":[{"title":"Transaction signing and authorization","sidebarTitle":"Transaction signing and authorization","href":"/wallets/signing-and-authorization-models"},{"title":"Key management","sidebarTitle":"Key management","href":"/wallets/key-management"},{"title":"Blockchain infrastructure","sidebarTitle":"Blockchain infrastructure","href":"/wallets/blockchain-infrastructure"},{"title":"Blockchain confirmations","href":"/wallets/blockchain-confirmations"}]}]},{"group":"Wallets: Dev-Controlled","pages":[{"title":"Dev-controlled wallets","description":"Understand how dev-controlled wallets work, when to use them, and how Circle enables programmatic wallet infrastructure.","sidebarTitle":"Overview","href":"/wallets/dev-controlled"},{"group":"Entity secret","pages":[{"title":"How the entity secret works","href":"/wallets/dev-controlled/entity-secret-management"},{"title":"How-to: Generate and register your entity secret","description":"Generate an entity secret and register it with Circle.","sidebarTitle":"Generate and register your entity secret","href":"/wallets/dev-controlled/register-entity-secret"}]},{"title":"Quickstart: Create a dev-controlled wallet","sidebarTitle":"Create a dev-controlled wallet","href":"/wallets/dev-controlled/create-your-first-wallet"},{"title":"Send tokens across wallets","sidebarTitle":"Send tokens across wallets","href":"/wallets/dev-controlled/transfer-tokens-across-wallets"},{"group":"Manage wallet creation","pages":[{"title":"How-to: Batch-create wallets for existing users","sidebarTitle":"Batch-create wallets for existing users","href":"/wallets/dev-controlled/batch-create-wallets"},{"title":"How-to: Pre-create wallets and assign on demand","sidebarTitle":"Pre-create wallets and assign on demand","href":"/wallets/dev-controlled/pre-create-wallets"}]},{"group":"Transaction signing","pages":[{"title":"How signing APIs work","sidebarTitle":"How signing APIs work","href":"/wallets/signing-apis"},{"title":"Sign transactions","sidebarTitle":"Sign transactions","href":"/wallets/sign-transactions"},{"title":"EVM testnet chain IDs for signing","sidebarTitle":"EVM testnet chain IDs","href":"/wallets/sign-tx-chain-id"}]},{"title":"How-to: Retire existing wallets","sidebarTitle":"Retire existing wallets","href":"/wallets/dev-controlled/retire-existing-wallets"}]},{"group":"Wallets: User-Controlled","pages":[{"title":"User-controlled wallets","sidebarTitle":"Overview","href":"/wallets/user-controlled"},{"title":"Authentication methods","href":"/wallets/user-controlled/authentication-methods"},{"title":"Build a wallet app","href":"/wallets/user-controlled/build-a-wallet-app"},{"title":"How-to: Transfer tokens","sidebarTitle":"Transfer tokens","href":"/wallets/user-controlled/transfer-tokens"},{"title":"How-to: Request a signature","sidebarTitle":"Request a signature","href":"/wallets/user-controlled/request-a-signature"},{"group":"Account management","pages":[{"title":"How-to: Reset a user's PIN","sidebarTitle":"Reset a user's PIN","href":"/wallets/user-controlled/reset-pin"},{"title":"How-to: Recover an account","sidebarTitle":"Recover an account","href":"/wallets/user-controlled/recover-account"},{"title":"How-to: Remove a user","sidebarTitle":"Remove a user","href":"/wallets/user-controlled/remove-a-user"}]}]},{"group":"Wallets: Modular","pages":[{"title":"Modular wallets","sidebarTitle":"Overview","href":"/wallets/modular"},{"title":"How passkeys and modules work","href":"/wallets/modular/how-passkeys-and-modules-work"},{"title":"Create a modular wallet","sidebarTitle":"Create a modular wallet","href":"/wallets/modular/create-a-modular-wallet"},{"group":"Wallet operations","pages":[{"title":"How-to: Transfer tokens","sidebarTitle":"Transfer tokens","href":"/wallets/modular/transfer-tokens"},{"title":"Batch and parallel user operations","sidebarTitle":"Batch and parallel user operations","href":"/wallets/modular/batch-and-parallel-user-operations"},{"title":"Sign and verify messages","sidebarTitle":"Sign and verify messages","href":"/wallets/modular/sign-and-verify-messages"},{"title":"How-to: Use a modular wallet as an EIP-1193 provider","sidebarTitle":"Use as an EIP-1193 provider","href":"/wallets/modular/use-as-eip-1193-provider"}]},{"title":"How-to: Set up passkey recovery","sidebarTitle":"Set up passkey recovery","href":"/wallets/modular/set-up-passkey-recovery"},{"title":"How-to: Use Dynamic as a signer","sidebarTitle":"Use Dynamic as a signer","href":"/wallets/modular/use-dynamic-as-a-signer"}]},{"group":"Learn more","pages":[{"title":"Gas fees","sidebarTitle":"Gas fees","href":"/wallets/gas-fees"},{"title":"Transaction throughput","href":"/wallets/transaction-limits-and-optimizations"},{"title":"Batch operations for smart contract accounts","sidebarTitle":"Batch operations","href":"/wallets/batch-operations"},{"title":"Unified wallet addressing on EVM blockchains","sidebarTitle":"Unified wallet addressing (EVM)","href":"/wallets/unified-wallet-addressing-evm"},{"title":"Token IDs","sidebarTitle":"Token IDs","href":"/wallets/tokens"},{"title":"Smart contract account (SCA) upgrades","sidebarTitle":"SCA upgrades","href":"/wallets/wallet-upgrades"},{"title":"Compliance requirements","href":"/wallets/compliance-requirements"}]}]},{"group":"Gas fees","pages":[{"group":"Gas Station","pages":[{"title":"Gas Station","sidebarTitle":"Overview","href":"/wallets/gas-station"},{"group":"Quickstarts","pages":[{"title":"Send a gasless transaction","href":"/wallets/gas-station/send-a-gasless-transaction"},{"title":"Quickstart: Create and fund a Solana associated token account (ATA)","sidebarTitle":"Create and fund a Solana ATA","href":"/wallets/gas-station/create-solana-ata"}]},{"group":"References","pages":[{"title":"Gas Station contract addresses","sidebarTitle":"Contract addresses","href":"/wallets/gas-station/contract-addresses"},{"title":"Solana ATA sponsorship","href":"/wallets/gas-station/solana-ata-sponsorship"},{"title":"Billing for sponsored gas fees","href":"/wallets/gas-station/billing"},{"title":"Policy management","href":"/wallets/gas-station/policy-management"}]}]},{"group":"Paymaster","pages":[{"title":"Paymaster","sidebarTitle":"Paymaster Overview","href":"/paymaster"},{"group":"Quickstarts","pages":[{"title":"Quickstart: Circle Paymaster","sidebarTitle":"Build a wallet to pay gas fees in USDC","href":"/paymaster/pay-gas-fees-usdc"}]},{"group":"References","pages":[{"title":"Paymaster addresses and events","sidebarTitle":"Addresses and events","href":"/paymaster/addresses-and-events"}]}]}]},{"group":"Compliance","pages":[{"group":"Compliance Engine","pages":[{"title":"Compliance Engine","sidebarTitle":"Overview","href":"/wallets/compliance-engine"},{"group":"Concepts","pages":[{"title":"Transaction screening","href":"/wallets/compliance-engine/tx-screening"}]},{"group":"Quickstarts","pages":[{"title":"Quickstart: Assess the risk of wallet addresses","sidebarTitle":"Assess the risk of wallet addresses","href":"/wallets/compliance-engine/tx-screening-quickstart"}]},{"group":"Tutorials","pages":[{"title":"Testing guide","sidebarTitle":"Testing transaction screening","href":"/wallets/compliance-engine/tx-screening-testing"},{"title":"Rule management","sidebarTitle":"Transaction screening rule management","href":"/wallets/compliance-engine/tx-screening-rule-management"},{"title":"Alert management","sidebarTitle":"Transaction screening alert management","href":"/wallets/compliance-engine/tx-screening-alert-management"}]}]}]},{"group":"Contracts","pages":[{"title":"Contracts","sidebarTitle":"Circle Contracts overview","href":"/contracts"},{"group":"Concepts","pages":[{"title":"Contracts templates","sidebarTitle":"Templates","href":"/contracts/scp-templates-overview"}]},{"group":"Quickstarts","pages":[{"title":"Quickstart: Deploy a smart contract using bytecode","sidebarTitle":"Deploy a smart contract using bytecode","href":"/contracts/scp-deploy-smart-contract"},{"title":"Quickstart: Deploy an ERC-1155 contract template","sidebarTitle":"Deploy an ERC-1155 contract template","href":"/contracts/deploy-smart-contract-template"},{"title":"Quickstart: Interact with a smart contract","sidebarTitle":"Interact with a smart contract","href":"/contracts/scp-interact-smart-contract"},{"title":"Quickstart: Event monitoring for smart contracts","sidebarTitle":"Event monitoring for smart contracts","href":"/contracts/scp-event-monitoring"}]},{"group":"References","pages":[{"title":"Circle Contracts supported blockchains","sidebarTitle":"Supported blockchains","href":"/contracts/supported-blockchains"},{"title":"Airdrop template","href":"/contracts/airdrop"},{"title":"Token template","href":"/contracts/erc-20-token"},{"title":"Multi-token template","href":"/contracts/erc-1155-multi-token"},{"title":"NFT template","href":"/contracts/erc-721-nft"},{"title":"How-to: Create an API key","sidebarTitle":"Create an API key","href":"/contracts/create-api-key"}]}]}]},{"tab":"Crosschain transfers","pages":[{"title":"Crosschain transfers","href":"/crosschain-transfers"}]},{"tab":"Agent stack","pages":[{"title":"Agent stack","href":"/agent-stack"}]},{"tab":"Payments","pages":[{"title":"Payments","href":"/cpn"}]},{"tab":"Liquidity services","pages":[{"title":"Liquidity services","href":"/liquidity-services"}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/api-reference"}]},{"tab":"Developer tools","menu":[{"item":"Sample projects","pages":[{"title":"Sample projects","href":"/sample-projects"}]},{"item":"SDKs","pages":[{"title":"SDKs","href":"/sdks"}]},{"item":"Release notes","pages":[{"title":"Release notes","href":"/release-notes"}]}],"pages":[{"title":"Developer tools","href":"/sample-projects"}]}]},"title":"How the entity secret works - Circle Docs","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":[],"chunks":[]}