Start Direct Auth passkey signup.
curl --request POST \ --url https://auth.example.com/api/v1/auth/direct/passkey/signup/start \ --header 'Content-Type: application/json' \ --data '{ "client_id": "client_123", "email": "user@example.com", "display_name": "Example User", "code_challenge": "rfc7636-code-challenge", "code_challenge_method": "S256", "channel": "browser" }'Creates WebAuthn registration options for Direct Auth signup after validating client, channel, and origin. Email is optional and is not used for discoverable Passkey lookup.
Request Body required
Section titled “Request Body required ”Email is optional and is retained only as profile data when supplied.
object
Accepted for compatibility and ignored. User verification is always required for passkey registration.
object
Internal Login UI continuation token returned by a previous 202 response.
Internal Login UI continuation value paired with provisioning_token.
Tenant invitation token. Checked before the account is created (active, of this tenant, and for the email it names, if any) and one use reserved for this signup; its role or organization is assigned to the new account when signup/finish registers the passkey.
Proof of the invited email from /api/v1/invitations/email-verification/verify, needed when the tenant requires the email an invitation names to be proved.
Example
{ "client_id": "client_123", "email": "user@example.com", "display_name": "Example User", "code_challenge": "rfc7636-code-challenge", "code_challenge_method": "S256", "channel": "browser"}Responses
Section titled “ Responses ”Successful JSON response.
object
WebAuthn options generated by @simplewebauthn/server.
object
Example
{ "challenge_id": "challenge_123", "options": { "challenge": "challenge", "rpId": "auth.example.com", "allowCredentials": [], "userVerification": "required" }}Account creation is durable but its active Lookup route is not ready yet.
object
Present for passkey signup only. The Login UI sends this continuation value back with the provisioning token so a retried request reuses the same account candidate.
Example
{ "status": "provisioning", "status_endpoint": "/api/v1/auth/account-provisioning/status"}Error response.
object
Optional browser-side WebAuthn Signal API hint. When unknown_credential is true, clients that just received a WebAuthn credential assertion may call PublicKeyCredential.signalUnknownCredential() for that credential ID.
object
Example generated
{ "error": "example", "error_description": "example", "message": "example", "webauthn_signal": { "unknown_credential": true }}Error response.
object
Optional browser-side WebAuthn Signal API hint. When unknown_credential is true, clients that just received a WebAuthn credential assertion may call PublicKeyCredential.signalUnknownCredential() for that credential ID.
object
Example generated
{ "error": "example", "error_description": "example", "message": "example", "webauthn_signal": { "unknown_credential": true }}Error response.
object
Optional browser-side WebAuthn Signal API hint. When unknown_credential is true, clients that just received a WebAuthn credential assertion may call PublicKeyCredential.signalUnknownCredential() for that credential ID.
object
Example generated
{ "error": "example", "error_description": "example", "message": "example", "webauthn_signal": { "unknown_credential": true }}