Back to API overview

Passkeys

3 endpoints

Passwordless WebAuthn sign-in with device biometrics.

passkeys.read
passkeys.write

List and revoke WebAuthn passkey credentials for directory users.

Authenticate with your organization API key. Include subOrgId as a query parameter or in the request body when using an org-wide key. Organization-scoped keys automatically target their organization.
POST
/v1/auth/passkey/register

Enroll a passkey for an existing directory user. Call with action: "options" then action: "verify" after navigator.credentials.create(). Requires passkeys.write.

Query Parameters

ParamTypeRequiredDescription
subOrgIdstringNoOrganization ID. Required for org-wide keys on write operations; optional on list when the key is scoped to one organization.

Request Body

ParamTypeRequiredDescription
actionstringYesCeremony step: options or verify
userIdstringYesDirectory user ID
challengeIdstringNoPasskey challenge ID from the options response
credentialobjectNoWebAuthn credential from navigator.credentials.create() or get()
deviceNamestringNoOptional friendly name for the passkey
subOrgIdstringYesOrganization ID. Required for org-wide keys on write operations; optional on list when the key is scoped to one organization.

Response — 200

{ "options": { /* WebAuthn create options */ }, "challengeId": "..." }
GET
/v1/webauthn/credentials

List passkey credentials for a directory user. Requires passkeys.read.

Query Parameters

ParamTypeRequiredDescription
subOrgIdstringNoOrganization ID. Required for org-wide keys on write operations; optional on list when the key is scoped to one organization.
userIdstringYesDirectory user ID

Response — 200

{ "credentials": [ /* passkey records */ ] }
DELETE
/v1/webauthn/credentials/{credentialId}

Revoke a passkey credential for a directory user. Requires passkeys.write.

Query Parameters

ParamTypeRequiredDescription
subOrgIdstringNoOrganization ID. Required for org-wide keys on write operations; optional on list when the key is scoped to one organization.

Response — 200

{ "success": true }