
# Cambiar contraseña

`POST /fapi/v1/me/password` · llamado desde el host de inicio de sesión del entorno

Cambia la contraseña del usuario con sesión iniciada. Se verifica la contraseña actual; la nueva contraseña debe cumplir la política de contraseñas del entorno, la comprobación de contraseñas filtradas y la regla de historial de contraseñas. Si tiene éxito, se revocan todas las demás sesiones y tokens de actualización del usuario, esta sesión sigue iniciada y se envía una notificación de seguridad a las direcciones de correo electrónico del usuario. Requiere la cookie `__Host-idp_session` del usuario autenticado. Una aplicación propia en otro origen puede enviar en su lugar su token de acceso de la API frontal (`Authorization: DPoP <token>` con una prueba DPoP; consulte [Token de acceso de la API frontal](/docs/api/fapi/front-api-token)).

## Solicitud

Encabezados:

| Encabezado | Obligatorio | Descripción |
| --- | --- | --- |
| `Idp-Client` | sí | Identificador del SDK. |
| `Origin` | sí | Debe ser exactamente `https://<host de inicio de sesión>`. |

Cuerpo:

```json
{"current_password": "…", "new_password": "…"}
```

## Respuesta

`204 No Content`.

## Errores

| Estado | Código | Cuándo |
| --- | --- | --- |
| 401 | `unauthenticated` | No hay una cookie de sesión válida. |
| 401 | `step_up_required` | La sesión no se verificó en los últimos 5 minutos; vuelva a verificar con `max_age=300` en el encabezado `WWW-Authenticate`. No se comprueba ni se cuenta nada. |
| 401 | `invalid_credentials` | La contraseña actual es incorrecta. Los fallos repetidos bloquean la contraseña del mismo modo que en el inicio de sesión. |
| 403 | `origin_not_allowed` | `Origin` falta o es incorrecto. |
| 422 | `password_policy_violation` | La nueva contraseña incumple la política; `errors[]` enumera cada regla incumplida para `/new_password` (`too_short`, `too_long`, `context_term`, `custom_term`, `repeated_chars`, `invalid_text`, `reused`). |
| 422 | `breached_password` | La nueva contraseña aparece en una filtración de datos conocida. |
| 503 | `temporarily_unavailable` | El servidor está ocupado; reintente tras los segundos indicados en `Retry-After`. |

## Ejemplo

```bash
curl -X POST https://example.keenauth.app/fapi/v1/me/password \
  -H "Idp-Client: my-app/1.0.0 (node/22.0.0)" \
  -H "Origin: https://example.keenauth.app" \
  -H "Content-Type: application/json" \
  -d '{"current_password": "…", "new_password": "…"}' \
  -b cookies.txt
```

## Datos personales

Este endpoint contiene datos personales: credenciales. [Datos personales en las API de KeenAuth](/docs/policies/personal-data) describe qué se almacena, cuánto tiempo se conserva y cómo se elimina. No envíe categorías especiales de datos personales (salud, datos biométricos, religión, opiniones políticas, orientación sexual) en ningún campo.
