Two npm packages that together add passkey-based Strong Customer Authentication (SCA) to your integration with Circle's Digital Asset Accounts. Use them to register a passkey for your end user and to have that user approve sensitive operations, such as a transfer or a withdrawal, with it.
| Package | Runs on | Holds your Circle API key | Purpose |
|---|---|---|---|
@circle-fin/daa-node-sdk |
Your backend (Node.js) | Yes | Calls Circle's passkey endpoints with your API key |
@circle-fin/daa-web-sdk |
Your end user's browser | Never | Shows Circle's passkey ceremony in your web app and returns its result |
Your backend and your web app each do one half of the flow. Only a short-lived
frameToken passes from your backend to the browser. Your API key never does.
- Backend:
daa.passkeys.createRegistration(...)opens a registration and returns aregistrationIdand aframeToken. - Backend to browser: send the
frameToken(and nothing else from that response) to your page. - Browser:
sca.enroll(frameToken, ...)shows Circle's ceremony. The user creates a passkey, and the SDK returns the browser's result. - Browser to backend: send that result back to your backend unchanged.
- Backend:
daa.passkeys.complete(...)finishes the registration.
Approving an operation follows the same pattern with
daa.passkeys.openChallenge(...) on the backend and sca.approve(...) in the
browser. Each package README has a complete example.
- Node.js 22 or later, for the backend package and for the toolchain that installs and bundles the browser package.
- A Circle API key for Digital Asset Accounts, and the origin of each web app that will show the ceremony registered with Circle. Contact your Circle representative if you do not have these.
- Both packages are ESM-only.
- Server SDK guide
- Browser SDK guide
- How-to: Implement Strong Customer Authentication in Circle's developer documentation, for the end-to-end integration flow
- Digital Asset Accounts API reference
This repository is a pnpm and Turborepo workspace. Use Node.js 22 or later.
pnpm install
pnpm lint # eslint, no --fix
pnpm check:type
pnpm test:coverage # what CI runs
pnpm build
pnpm format:checkFor integration questions, contact your Circle representative or use the support channels listed at developers.circle.com. Open a GitHub issue for bugs in the SDKs themselves. See CONTRIBUTING.md.
Do not report security vulnerabilities in public issues. Report them privately through Circle's Vulnerability Disclosure Program. See SECURITY.md for the full policy.