
# Marcar una dirección de correo electrónico como verificada por un administrador

`POST /v1/users/{user_id}/emails/{email_id}:verify` · permiso `users:write`

Marca la dirección como verificada bajo su autoridad. No se envía ningún código ni enlace al usuario, y el método de verificación se guarda como `admin_api`, por lo que no es prueba de que el usuario controle el buzón; prefiera `:send-verification` cuando usted mismo no haya verificado la dirección. Si la dirección ya está verificada no se escribe nada y se devuelve `200`. Las copias no verificadas de la misma dirección en otras cuentas del entorno se eliminan. El cambio se registra en el registro de auditoría de gestión como `user.email_verified` con la clave de API como actor, y emite `user.updated`.

## Solicitud

| Parámetro | En | Obligatorio | Descripción |
|---|---|---|---|
| `user_id` | path | sí | Id del usuario, con el prefijo `usr_`. |
| `email_id` | path | sí | Id de la fila de correo electrónico (UUID interno, en minúsculas y con guiones), tal como lo devuelve `GET /v1/users/{user_id}/emails`. |

La solicitud no lleva cuerpo (se acepta un cuerpo vacío o `{}`).

## Respuesta

`200 OK` con la fila de correo electrónico actualizada. Sin el permiso `users:read_pii`, la dirección se enmascara (`a***@e***.com`).

```json
{
  "id": "0191f0a0-3333-7444-8555-666666666666",
  "email": "ada@example.com",
  "verified": true,
  "primary": false,
  "created_at": "2026-01-15T09:30:00Z"
}
```

## Errores

Todos los errores son un cuerpo `application/problem+json` con un `code` estable.

| HTTP | `code` | Cuándo |
|---|---|---|
| 400 | `malformed_request`, `unknown_field` | El cuerpo no es JSON válido, o no está vacío ni es `{}`. |
| 404 | `not_found` | El usuario o la fila de correo electrónico no existen en este entorno, el correo no pertenece a este usuario, o algún id tiene un formato incorrecto. |
| 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:write`. |
| 429 | `rate_limited` | Se superó el límite de frecuencia; respete `Retry-After`. |
| 503 | `service_unavailable` | Una dependencia no está disponible temporalmente; reintente más tarde. |

## Ejemplo

```bash
curl -X POST https://api.eu.keenauth.com/v1/users/usr_0a1b2c3d4e5f6g7h8j9k0m1n2p/emails/0191f0a0-3333-7444-8555-666666666666:verify \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

## Datos personales

Este endpoint trata 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.
