---
title: "Passkey Registration Options"
method: POST
path: "/v1/auth/passkeys/register/options"
tags: ["Auth: Passkeys"]
---

# Passkey Registration Options

`POST /v1/auth/passkeys/register/options`

## Request

- Base URL: `https://api.robosystems.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.robosystems.ai/v1/auth/passkeys/register/options`
- Auth: none declared

Begin a passkey enrollment ceremony. The settings lane requires a fresh re-auth proof (password or assertion); the forced lane presents its enrollment token.

## Request body

- PasskeyRegisterOptionsRequest: Begin enrollment. Two disjoint lanes: `mfa_token` (forced enrollment — the token was minted seconds after a password verify, so it is its own freshness proof) or an authenticated settings-flow enrollment, which must carry a fresh re-auth proof — `password`, or a `reauth`-ceremony `assertion` when adding a passkey beside an existing one.
  - `mfa_token` string, nullable: Enrollment token from a login that returned mfa_enrollment_required
  - `password` string, nullable: Current password — settings-lane re-authentication
  - `assertion` object, nullable: Fresh WebAuthn assertion from the re-auth ceremony (settings lane)

## Response `200`

Successful Response

- CeremonyOptionsResponse: WebAuthn options for the browser, verbatim from the RP library.
  - `options` object, required: PublicKeyCredential options (browser JSON, opaque)

## Other responses

- `400`: Invalid request
- `401`: Authentication required
- `422`: Validation Error
- `429`: Rate limit exceeded
- `500`: Internal server error

---

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