
# Den Angriffsmodus-Status abrufen

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

Gibt zurück, ob sich die Umgebung im Angriffsmodus befindet, sowie die Zeiträume des Angriffsmodus, die in den letzten 90 Tagen begonnen haben oder noch offen sind, neueste zuerst (höchstens 100; `more` zeigt an, dass ältere Zeiträume in diesem Fenster existieren).

Solange sich die Umgebung im Angriffsmodus befindet, wird bei jedem Schritt mit Passwort und Einmalcode eine strengere Bot-Prüfung verlangt, unabhängig davon, was `bot_protection.mode` vorgibt. Passkey- und Social-Anmeldung werden nicht geprüft. Ein Zeitraum beginnt auf einem von drei Wegen:

- `auto`: Fehlgeschlagene Anmeldungen in einem 5-Minuten-Fenster haben den Auslöseschwellenwert überschritten (der größere Wert aus 50 und dem Zehnfachen des Medians der Umgebung). Im `log`-Modus von `credential_stuffing` wird der Zeitraum mit `would_have: true` aufgezeichnet und nichts erzwungen, es sei denn, das Fenster überschreitet das Dreifache des Schwellenwerts.
- `manual_customer`: Sie haben ihn mit [`activate`](activate-attack-mode.md) eingeschaltet.
- `manual_platform`: Der KeenAuth-Betrieb hat ihn eingeschaltet.

`active` ist nur dann `true`, wenn ein erzwungener Zeitraum (`would_have: false`) die gesamte Umgebung abdeckt; `active_until` ist dann das späteste Ende dieser Zeiträume. Ein Zeitraum, dessen Ende bereits vergangen ist, den die Bereinigung aber noch nicht geschlossen hat, wird als bei `ends_at` beendet angezeigt. Wer einen manuellen Zeitraum geöffnet hat, steht im Verwaltungs-Audit-Log, nicht in dieser Antwort.

## Antwort

`200 OK`

| Feld | Typ | Beschreibung |
|---|---|---|
| `active` | boolean | Die Umgebung befindet sich jetzt im Angriffsmodus. |
| `active_until` | string (date-time) oder null | Wann der aktuelle Angriffsmodus endet, sofern ein automatischer Zeitraum nicht verlängert wird; `null`, wenn `active` `false` ist. |
| `periods[]` | array | Zeiträume, neueste zuerst. |
| `periods[].id` | string | Zeitraum-ID, mit dem Präfix `atm_`. |
| `periods[].scope` | string | `environment` oder `org_domain`. |
| `periods[].org_domain` | string oder null | Die E-Mail-Domain der Organisation eines `org_domain`-Zeitraums. |
| `periods[].trigger` | string | `auto`, `manual_customer` oder `manual_platform`. |
| `periods[].would_have` | boolean | `true`: im `log`-Modus aufgezeichnet, nicht erzwungen. |
| `periods[].trigger_value` | integer oder null | Fehlgeschlagene Versuche im 5-Minuten-Fenster, die einen `auto`-Zeitraum ausgelöst haben; `null` bei manuellen Zeiträumen. |
| `periods[].threshold` | integer oder null | Der Schwellenwert, den dieses Fenster überschritten hat; `null` bei manuellen Zeiträumen. |
| `periods[].started_at` | string (date-time) | Wann der Zeitraum begonnen hat. |
| `periods[].ends_at` | string (date-time) | Wann der Zeitraum von selbst endet. Ein `auto`-Zeitraum wird verlängert, solange der Angriff andauert. |
| `periods[].ended_at` | string (date-time) oder null | Wann der Zeitraum beendet wurde; `null`, solange er offen ist. |
| `more` | boolean | Es gibt ältere Zeiträume in den letzten 90 Tagen. |

```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
}
```

## Fehler

Jeder Fehler ist ein `application/problem+json`-Body mit einem stabilen `code`.

| HTTP | `code` | Wann |
|---|---|---|
| 401 | `unauthenticated` | Der API-Schlüssel fehlt, ist ungültig oder wurde widerrufen. |
| 403 | `insufficient_permissions` | Dem Schlüssel fehlt die Berechtigung `attack-protection:read`. |
| 429 | `rate_limited` | Das Ratenlimit wurde überschritten; beachten Sie `Retry-After`. |
| 503 | `service_unavailable` | Eine Abhängigkeit ist vorübergehend nicht verfügbar; versuchen Sie es später erneut. |

## Beispiel

```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`
