Finish a passkey second factor: verify the assertion and open a session at `aal = 2`.
POST
End-user session operationId: passkey_mfa_finish/v1/auth/passkeys/mfa/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 Second factor accepted; signed in
{
"data": {
"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/mfa/finish" \
-H "Content-Type: application/json" \
-d '{
"credential": {},
"state": "string"
}'Try it
live requestPOST
http://localhost:8080/v1/auth/passkeys/mfa/finish