
# Obtener un usuario

`GET /v1/users/{user_id}` · permiso `users:read`

Devuelve un usuario. Un usuario de otro entorno, un usuario que no existe y un usuario que ha sido eliminado devuelven todos `404`; la existencia nunca se revela entre entornos.

## Solicitud

| Parámetro | En | Obligatorio | Descripción |
|---|---|---|---|
| `user_id` | path | sí | Id del usuario, con el prefijo `usr_`. |
| `include` | query | no | Establézcalo en `deleted` para obtener un registro de eliminación de un usuario eliminado en lugar de `404`. |

Con `include=deleted`, un usuario eliminado devuelve `410` con `deleted_at`, `deletion_id`, `backups_purged_by` (la fecha en que los datos se purgan de las copias de seguridad) y, en el caso de un usuario fusionado, `merged_into`; un usuario que nunca existió sigue devolviendo `404`.

## Respuesta

`200 OK`. El cuerpo es el objeto del usuario. El encabezado `ETag` contiene la versión del usuario.

Los datos personales se enmascaran cuando la clave no tiene el permiso `users:read_pii`: `email` pasa a ser `a***@e***.com`, `phone_number` conserva solo sus últimos 2 dígitos (`+**********67`), `name`, `given_name`, `family_name`, `middle_name` y `nickname` pasan a ser iniciales (`A. L.`), `username` conserva solo su primer carácter (`a***`), `birthdate` pasa a ser `****-**-**` y `address` pasa a ser `{"redacted": true}`. `user_metadata` y `app_metadata` no se enmascaran.

```json
{
  "id": "usr_0a1b2c3d4e5f6g7h8j9k0m1n2p",
  "kind": "regular",
  "status": "active",
  "external_id": null,
  "username": null,
  "name": "Ada Lovelace",
  "email": "ada@example.com",
  "email_verified": true,
  "phone_number": null,
  "phone_verified": false,
  "user_metadata": {},
  "app_metadata": {},
  "created_via": "admin_api",
  "created_at": "2026-01-15T09:30:00Z",
  "updated_at": "2026-01-15T09:30:00Z",
  "last_sign_in_at": null,
  "deletion_requested_at": null,
  "deletion_due_at": null
}
```

## Errores

Cada error es un cuerpo `application/problem+json` con un `code` estable.

| HTTP | `code` | Cuándo |
|---|---|---|
| 404 | `not_found` | El usuario no existe en este entorno (o el id tiene un formato incorrecto). |
| 410 | `user_deleted` | El usuario fue eliminado y se solicitó `include=deleted`; el cuerpo incluye `deleted_at`, `deletion_id`, `backups_purged_by` y, en el caso de un usuario fusionado, `merged_into`. |
| 401 | `unauthenticated` | La clave de API falta, no es válida o ha sido revocada. |
| 403 | `insufficient_permissions` | La clave no tiene el permiso `users:read`. |
| 429 | `rate_limited` | Se superó el límite de solicitudes; respete `Retry-After`. |
| 503 | `service_unavailable` | Una dependencia no está disponible temporalmente; vuelva a intentarlo más tarde. |

## Ejemplo

```bash
curl https://api.eu.keenauth.com/v1/users/usr_0a1b2c3d4e5f6g7h8j9k0m1n2p \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

## Datos personales

Este endpoint maneja datos personales: perfil del usuario final. [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.
