パスキーを登録する

POST /fapi/v1/me/passkeys · 環境のサインインホストから呼び出されます

POST /fapi/v1/me/passkeys/registration-options で開始した登録を完了します。ブラウザーの応答を検証し、パスキーまたはセキュリティキーを保存して、そのデータを返します。ユーザーには、新しいサインイン方法に関するセキュリティメールが届きます。このメールは無効にできません。認証済みユーザーの __Host-idp_session Cookie が必要です。Cookie がない、期限切れ、または取り消されている場合は 401 unauthenticated を返します。別オリジンのファーストパーティアプリは、代わりに DPoP 証明書付きのフロント API アクセストークン(Authorization: DPoP <token>。詳細は フロント API アクセストークン を参照)を送信できます。

セッションのルールは開始時の呼び出しと同じです。直近10分以内に検証されていること、そしてユーザーが第2要素を持つ場合は第2要素を使ってセッションを開いていることが必要です。

リクエスト

ヘッダー:

ヘッダー 必須 説明
Idp-Client はい SDK の識別子。
Origin はい 正確に https://<sign-in host> である必要があります。
Content-Type はい application/json。

ボディ:

フィールド 型 必須 説明
ceremony_id string はい 開始呼び出しの ceremony_id。
credential object はい navigator.credentials.create の結果を JSON 化したもの(PublicKeyCredential.toJSON())。16 KiB まで。

レスポンス

201 Created で、新しい認証機能を返します:

{
  "id": "cred_01j9zzzzzzzzzzzzzzzzzzzzzz",
  "type": "passkey",
  "label": "iCloud Keychain",
  "status": "active",
  "synced": true,
  "created_at": "2026-10-12T09:00:00Z",
  "last_used_at": null
}

エラー

拒否された登録は失敗回数に含まれません。新しい登録を作成して、やり直してください。

ステータス コード 発生条件
400 malformed_request ボディが有効な JSON ではありません。
400 unknown_field ボディに ceremony_id と credential 以外のフィールドがあります。
401 unauthenticated 有効なセッション Cookie がありません。
401 step_up_required セッションが古い、または第2要素が必要です。WWW-Authenticate ヘッダーの値を使って再検証してください。
403 origin_not_allowed Origin がない、または誤っています。
409 credential_already_registered この認証機能は、環境内にすでに登録されています。
409 credential_limit_reached ユーザーは、パスキーとセキュリティキーの上限数にすでに達しています。
413 payload_too_large ボディが大きすぎます。
415 unsupported_media_type Content-Type が application/json ではありません。
422 validation_failed /ceremony_id: 登録が不明、期限切れ、使用済み、または別のセッションのものです。/credential: 応答がない、または検証に失敗しました。
422 device_bound_passkey_required 環境では、1台のデバイスに留まるパスキーのみが許可されています。
422 aaguid_not_allowed 環境では、この認証機器のモデルは許可されていません。
422 attestation_untrusted 環境では信頼された証明が必要ですが、この証明は信頼されていません。

例

curl -X POST https://example.keenauth.app/fapi/v1/me/passkeys \
  -H "Idp-Client: my-app/1.0.0 (node/22.0.0)" \
  -H "Origin: https://example.keenauth.app" \
  -H "Content-Type: application/json" \
  -b cookies.txt \
  -d '{"ceremony_id": "CQAAAAAAAAAAAAAAAAAAAA", "credential": {"id": "…", "rawId": "…", "type": "public-key", "response": {"clientDataJSON": "…", "attestationObject": "…"}}}'

個人データ

このエンドポイントは個人データを扱います。認証情報が対象です。KeenAuth API における個人データでは、保存される内容、保存期間、削除方法を説明しています。いずれのフィールドにも、特別な種類の個人データ(健康、生体情報、宗教、政治的意見、性的指向)を送信しないでください。