# Passkeys endpoints (Client API: account)

> 8 FeatherPanel Client API: account endpoints from user/passkeys.php: methods, paths, auth, permissions, rate limits, parameters and responses.

Source: https://featherpanel.com/docs/api/reference/user/passkeys/

Defined in [`backend/app/routes/user/passkeys.php`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/passkeys.php). Authentication used here: **Public**, **Signed-in user**. Read [Authentication](https://featherpanel.com/docs/api/authentication/) for how to send credentials and [Rate limits and errors](https://featherpanel.com/docs/api/rate-limits-and-errors/) for the response envelope.

Paths, methods, permissions and rate limits come from the route file. Summaries, parameters and response codes come from the OpenAPI annotations on the controllers; endpoints without annotations show only what the route file declares.

## Endpoints

### POST `/api/user/auth/passkeys/status`

- Auth: Public
- Default rate limit: 30 / minute (`user-auth`)
- Route name: `passkeys-status`
- Controller: [`PasskeyController::postStatus`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Auth/PasskeyController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/passkeys.php#L26)

```bash
curl -X POST "$PANEL_URL/api/user/auth/passkeys/status" \
  -H "Accept: application/json"
```

### POST `/api/user/auth/passkeys/authentication/options`

- Auth: Public
- Default rate limit: 30 / minute (`user-auth`)
- Route name: `passkeys-authentication-options`
- Controller: [`PasskeyController::postAuthenticationOptions`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Auth/PasskeyController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/passkeys.php#L38)

```bash
curl -X POST "$PANEL_URL/api/user/auth/passkeys/authentication/options" \
  -H "Accept: application/json"
```

### POST `/api/user/auth/passkeys/authentication/verify`

- Auth: Public
- Default rate limit: 20 / minute (`user-auth`)
- Route name: `passkeys-authentication-verify`
- Controller: [`PasskeyController::postAuthenticationVerify`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Auth/PasskeyController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/passkeys.php#L50)

```bash
curl -X POST "$PANEL_URL/api/user/auth/passkeys/authentication/verify" \
  -H "Accept: application/json"
```

Plugin events: [`featherpanel:auth:passkey:authentication:failed`](https://featherpanel.com/docs/plugins/events/passkeys/#passkey-authentication-failed), [`featherpanel:auth:passkey:authentication:success`](https://featherpanel.com/docs/plugins/events/passkeys/#passkey-authentication-success)

### GET `/api/user/passkeys`

- Auth: Signed-in user
- Default rate limit: 60 / minute (`user-session`)
- Route name: `passkeys-list`
- Controller: [`PasskeyController::getList`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Auth/PasskeyController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/passkeys.php#L62)

```bash
curl -X GET "$PANEL_URL/api/user/passkeys" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

### POST `/api/user/passkeys/registration/options`

- Auth: Signed-in user
- Default rate limit: 15 / minute (`user-session`)
- Route name: `passkeys-registration-options`
- Controller: [`PasskeyController::postRegistrationOptions`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Auth/PasskeyController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/passkeys.php#L74)

```bash
curl -X POST "$PANEL_URL/api/user/passkeys/registration/options" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

### POST `/api/user/passkeys/registration/verify`

- Auth: Signed-in user
- Default rate limit: 15 / minute (`user-session`)
- Route name: `passkeys-registration-verify`
- Controller: [`PasskeyController::postRegistrationVerify`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Auth/PasskeyController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/passkeys.php#L86)

```bash
curl -X POST "$PANEL_URL/api/user/passkeys/registration/verify" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Plugin events: [`featherpanel:auth:passkey:registered`](https://featherpanel.com/docs/plugins/events/passkeys/#passkey-registered)

### DELETE `/api/user/passkeys/{id}`

- Auth: Signed-in user
- Default rate limit: 30 / minute (`user-session`)
- Route name: `passkeys-delete`
- Controller: [`PasskeyController::delete`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Auth/PasskeyController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/passkeys.php#L98)

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | \- | yes |  |

```bash
curl -X DELETE "$PANEL_URL/api/user/passkeys/$ID" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Plugin events: [`featherpanel:auth:passkey:deleted`](https://featherpanel.com/docs/plugins/events/passkeys/#passkey-deleted)

### PATCH `/api/user/passkeys/{id}`

- Auth: Signed-in user
- Default rate limit: 30 / minute (`user-session`)
- Route name: `passkeys-patch`
- Controller: [`PasskeyController::patch`](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/Controllers/User/Auth/PasskeyController.php)
- [route source](https://github.com/MythicalLTD/FeatherPanel/blob/15b94e9fc9df233123706b47c42728b81e48cb3d/backend/app/routes/user/passkeys.php#L115)

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | \- | yes |  |

```bash
curl -X PATCH "$PANEL_URL/api/user/passkeys/$ID" \
  -H "Authorization: Bearer $FEATHERPANEL_API_KEY" \
  -H "Accept: application/json"
```

Plugin events: [`featherpanel:auth:passkey:updated`](https://featherpanel.com/docs/plugins/events/passkeys/#passkey-updated)
