
# Obtenir l'état du mode attaque

`GET /v1/attack-protection/attack-mode` · autorisation `attack-protection:read`

Renvoie si l'environnement est en mode attaque, ainsi que les périodes de mode attaque commencées au cours des 90 derniers jours ou encore ouvertes, les plus récentes en premier (100 au maximum ; `more` indique que des périodes plus anciennes existent dans cette fenêtre).

Pendant que l'environnement est en mode attaque, chaque étape de mot de passe ou de code à usage unique demande une vérification anti-bot plus stricte, quelle que soit la valeur de `bot_protection.mode`. La connexion par clé d'accès et par réseau social n'est pas soumise à cette vérification. Une période s'ouvre de l'une des trois manières suivantes :

- `auto` : les échecs de connexion dans une fenêtre de 5 minutes ont dépassé le seuil de déclenchement (le plus élevé entre 50 et dix fois la médiane de l'environnement). En mode `log` de `credential_stuffing`, la période est enregistrée avec `would_have: true` sans être appliquée, sauf si la fenêtre dépasse trois fois le seuil.
- `manual_customer` : vous l'avez activée avec [`activate`](activate-attack-mode.md).
- `manual_platform` : les opérations KeenAuth l'ont activée.

`active` vaut `true` uniquement pendant qu'une période appliquée (`would_have: false`) couvre l'ensemble de l'environnement ; `active_until` correspond alors à la fin la plus tardive de ces périodes. Une période dont la fin est passée mais que le nettoyage n'a pas encore clôturée est considérée comme terminée à `ends_at`. L'auteur d'une période manuelle figure dans le journal d'audit de gestion, et non dans cette réponse.

## Réponse

`200 OK`

| Champ | Type | Description |
|---|---|---|
| `active` | boolean | L'environnement est actuellement en mode attaque. |
| `active_until` | string (date-time) ou null | Moment où le mode attaque en cours prend fin, sauf si une période automatique est prolongée ; `null` lorsque `active` vaut `false`. |
| `periods[]` | array | Périodes, les plus récentes en premier. |
| `periods[].id` | string | Identifiant de la période, préfixé `atm_`. |
| `periods[].scope` | string | `environment` ou `org_domain`. |
| `periods[].org_domain` | string ou null | Domaine e-mail de l'organisation d'une période `org_domain`. |
| `periods[].trigger` | string | `auto`, `manual_customer` ou `manual_platform`. |
| `periods[].would_have` | boolean | `true` : enregistrée en mode `log`, non appliquée. |
| `periods[].trigger_value` | integer ou null | Nombre de tentatives échouées dans la fenêtre de 5 minutes ayant ouvert une période `auto` ; `null` pour les périodes manuelles. |
| `periods[].threshold` | integer ou null | Seuil que cette fenêtre a dépassé ; `null` pour les périodes manuelles. |
| `periods[].started_at` | string (date-time) | Moment où la période a commencé. |
| `periods[].ends_at` | string (date-time) | Moment où la période prend fin d'elle-même. Une période `auto` est prolongée tant que l'attaque se poursuit. |
| `periods[].ended_at` | string (date-time) ou null | Moment où la période s'est terminée ; `null` tant qu'elle est ouverte. |
| `more` | boolean | Des périodes plus anciennes existent dans les 90 derniers jours. |

```json
{
  "active": true,
  "active_until": "2026-10-20T10:00:00Z",
  "periods": [
    {
      "id": "atm_01jaz8m5c3f6t9w2y4b7d0g3k6",
      "scope": "environment",
      "org_domain": null,
      "trigger": "manual_customer",
      "would_have": false,
      "trigger_value": null,
      "threshold": null,
      "started_at": "2026-10-20T09:00:00Z",
      "ends_at": "2026-10-20T10:00:00Z",
      "ended_at": null
    }
  ],
  "more": false
}
```

## Erreurs

Chaque erreur est un corps `application/problem+json` accompagné d'un `code` stable.

| HTTP | `code` | Quand |
|---|---|---|
| 401 | `unauthenticated` | La clé d'API est absente, invalide ou révoquée. |
| 403 | `insufficient_permissions` | La clé ne dispose pas de l'autorisation `attack-protection:read`. |
| 429 | `rate_limited` | La limite de débit a été dépassée ; respectez `Retry-After`. |
| 503 | `service_unavailable` | Une dépendance est temporairement indisponible ; réessayez plus tard. |

## Exemple

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

CLI : `keenauth attack-protection attack-mode get`
