---
title: "Complete passkey registration"
method: POST
path: "/user/passkey/register/complete"
tags: ["Enrollment"]
---

# Complete passkey registration

`POST /user/passkey/register/complete`

Submits the WebAuthn `PublicKeyCredential` returned by the browser to bind the passkey to the user. Returns the credential details and the refreshed MFA state.

## Request body

- object
  - `userId` string, required
  - `origin` string, required
  - `credential` object, required — Serialised WebAuthn `PublicKeyCredential` from `navigator.credentials.create()`. Standard base64url encoding for binary fields.
    - `id` string
    - `rawId` string
    - `type` string
    - `response` object
      - `clientDataJSON` string
      - `attestationObject` string
      - `transports` string[]
    - `clientExtensionResults` object — WebAuthn client extension results.
      - `appid` string — Optional appid extension result.

## Response `200`

Passkey enrolled.

- object
  - `credential` object, required — WebAuthn credential details.
    - `id` string
    - `credentialId` string
    - `displayName` string
    - `name` string
    - `relyingPartyId` string
    - `transports` string[]
    - `insertInstant` integer
    - `lastUseInstant` integer
    - `userAgent` string
  - `multiFactorAuth` object, required — Current MFA enrollment summary.
    - `enabled` boolean, required
    - `primaryMethod` 'totp' | 'passkey' | 'sms'
    - `enrolledMethods` string[], required
    - `passkeyCount` integer, required

## Other responses

- `400` — Request was rejected. The `errorCode` field disambiguates.
- `401` — Invalid API key or HMAC signature.

---

[API](https://skmtc.net/striga/apis/striga-v1.md) · [All operations](https://skmtc.net/striga/apis/striga-v1/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/striga/striga-v1/versions/63e57aa7df45/schema)
