
# Activar el modo de ataque

`POST /v1/attack-protection/attack-mode:activate` · permiso `attack-protection:write`

Pone el entorno en modo de ataque durante `duration_minutes` (de 15 a 1.440) a partir de ahora, sin importar lo que indiquen `bot_protection.mode` y `credential_stuffing`. Cada paso de contraseña o de código de un solo uso exige entonces una verificación de bot más estricta; el inicio de sesión con passkey y el inicio de sesión social no se someten a esa verificación. Úselo cuando detecte un ataque antes que el desencadenante automático.

Si su periodo manual ya está abierto, su final pasa a ser ahora más `duration_minutes`, cuando eso sea más tarde. Una duración más corta nunca lo termina antes (para eso use [`deactivate`](deactivate-attack-mode.md)). Abrir un periodo escribe el evento `attack_mode_activated` y un registro de auditoría de gestión (`attack_mode.activated`); una prórroga escribe el registro de auditoría `attack_mode.extended`. El actor es su credencial. Envíe una cabecera `Idempotency-Key` para reintentar sin riesgo.

## Solicitud

```json
{ "duration_minutes": 60 }
```

| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `duration_minutes` | integer | sí | De 15 a 1.440. |

## Respuesta

`200 OK` con el estado actual, tal como lo devuelve [`GET /v1/attack-protection/attack-mode`](get-attack-mode.md).

## Errores

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

| HTTP | `code` | Cuándo |
|---|---|---|
| 400 | `malformed_request` | El cuerpo no es un objeto JSON. |
| 400 | `unknown_field` | El cuerpo tiene un campo distinto de `duration_minutes`. |
| 422 | `validation_failed` | `duration_minutes` falta, no es un entero o está fuera de 15 a 1.440 (`errors[].pointer` es `/duration_minutes`). |
| 401 | `unauthenticated` | La clave de API falta, no es válida o fue revocada. |
| 403 | `insufficient_permissions` | La clave no tiene el permiso `attack-protection:write`. |
| 429 | `rate_limited` | Se superó el límite de peticiones; respete `Retry-After`. |
| 503 | `service_unavailable` | Una dependencia no está disponible temporalmente; vuelva a intentarlo más tarde. |

## Ejemplo

```bash
curl -X POST https://api.eu.keenauth.com/v1/attack-protection/attack-mode:activate \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 7b2f0c1e-attack-mode-1" \
  -d '{"duration_minutes": 60}'
```

CLI: `keenauth attack-protection attack-mode activate --duration-minutes 60`
