Reference / Auth

Finish a passkey second factor: verify the assertion and open a session at `aal = 2`.

POST /v1/auth/passkeys/mfa/finish
End-user session operationId: passkey_mfa_finish

Authorization

Called from the browser with the publishable application id (x-application-id); the access token lives in memory.

Request body · required

  • credential any required

    The `PublicKeyCredential` JSON from `navigator.credentials.create/get` (base64url fields).

  • state string 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 request
POST http://localhost:8080/v1/auth/passkeys/mfa/finish

Request body

application/json