Reference / Auth

Finish a passkey sign-in (primary): verify the assertion and open a session (or demand MFA).

POST /v1/auth/passkeys/authenticate/finish
End-user session operationId: passkey_authenticate_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 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 request
POST http://localhost:8080/v1/auth/passkeys/authenticate/finish

Request body

application/json