---
title: "Complete passkey bridge"
method: POST
path: "/auth/passkey-bridge/{ceremony_id}/complete"
tags: ["Auth"]
---

# Complete passkey bridge

`POST /auth/passkey-bridge/{ceremony_id}/complete`

Verify the WebAuthn response for a pending passkey bridge ceremony. A failed verification leaves the ceremony pending so it can be retried.

## Path parameters

- `ceremony_id` string, required — Identifier of the passkey ceremony

## Request body

- PasskeyBridgeCompleteRequest
  - `response` WebAuthnAuthenticationResponse, required
    - `id` string, required
    - `rawId` string, required
    - `type` 'public-key', required
    - `authenticatorAttachment` 'cross-platform' | 'platform'
    - `clientExtensionResults` object, required
      - `appid` boolean
      - `credProps` object
        - `rk` boolean
      - `hmacCreateSecret` boolean
    - `response` object, required
      - `clientDataJSON` string, required
      - `authenticatorData` string, required
      - `signature` string, required
      - `userHandle` string

## Response `200`

Success

- PasskeyBridgeFinishResponse
  - `return_url` string, nullable, required — Where the page runner goes next, or null for the native runner
  - `completion_code` string, nullable, required — Code the native runner redeems, or null for the page runner

## Other responses

- `400` — Bad Request - The request was malformed or contained invalid data
- `429` — Too Many Requests - You are being rate limited
- `500` — Internal Server Error - An unexpected error occurred

## Changes

> 21 revisions in range; 2 not diffed.

- **2026-09-26** `3d3fd6ec1785` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/fluxer/apis/fluxer-api/changes/auth/passkey-bridge/:ceremony_id/complete/post.md)

---

[API](https://skmtc.dev/fluxer/apis/fluxer-api.md) · [All operations](https://skmtc.dev/fluxer/apis/fluxer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fluxer/apis/fluxer-api/revisions/3d3fd6ec1785?raw)
