Finish a passkey sign-in (primary): verify the assertion and open a session (or demand MFA).
POST
End-user session operationId: passkey_authenticate_finish/v1/auth/passkeys/authenticate/finish Authorization
Called from the browser with the publishable application id (x-application-id); the access token lives in memory.
Request body · required
credentialany requiredThe `PublicKeyCredential` JSON from `navigator.credentials.create/get` (base64url fields).
statestring required
Responses
200 Signed in or MFA required
{
"data": {
"consent_documents": [
{
"doc_type": null,
"url": null,
"version": null
}
],
"mfa": {
"methods": [
null
],
"pending_token": "string"
},
"pending_token": "string",
"status": "string",
"tokens": {
"aal": 0,
"access_token": "string",
"expires_in": 0,
"refresh_token": "string",
"session_id": "018f3c4a-7b2e-7c1d-9e0a-1f2b3c4d5e6f",
"token_type": "string"
},
"user": {
"created_at": "2026-01-15T09:30:00Z",
"email_verified": false,
"id": "018f3c4a-7b2e-7c1d-9e0a-1f2b3c4d5e6f",
"primary_email": "string",
"profile": {},
"status": "string"
}
},
"error": {
"code": "string",
"message": "string"
},
"meta": {
"timestamp": "string"
},
"success": false
} 401 Assertion failed
Request
curl -X POST "http://localhost:8080/v1/auth/passkeys/authenticate/finish" \
-H "Content-Type: application/json" \
-d '{
"credential": {},
"state": "string"
}'Try it
live requestPOST
http://localhost:8080/v1/auth/passkeys/authenticate/finish