---
title: "R230 BUG-028 Sprint+1 Phase 4 — Dashboard widget % admins 2FA."
method: GET
path: "/api/v1/admin/security/2fa-compliance"
tags: ["Administration"]
---

# R230 BUG-028 Sprint+1 Phase 4 — Dashboard widget % admins 2FA.

`GET /api/v1/admin/security/2fa-compliance`

## Request

- Base URL: `https://erp.eyeot.fr/api/v1`
- URL: `https://erp.eyeot.fr/api/v1/api/v1/admin/security/2fa-compliance`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

R230 BUG-028 Sprint+1 Phase 4 — Dashboard widget % admins 2FA.

    Retourne :
    - percentage_enabled  : % d'admins avec 2FA activée (float)
    - admins_total        : nombre total d'admins de l'org
    - admins_enabled      : nombre d'admins avec 2FA
    - admins_pending      : liste {user_id, email, grace_period_until}
    - enforce_active      : True si la politique est activée pour l'org
    - cron_alerting_active: True si la task Celery beat tourne
    - grace_period_days   : durée du délai de grâce (7j)

    Source canonique pour le widget dashboard "Sécurité comptes admin"
    et le cron `tasks.security_alerts.alert_2fa_compliance_drop`.

**Permissions requises** : `admin:all`

## Response `200`

Succès — payload `{data, meta}` (cf. API-GUIDE §3.1)

## Other responses

- `401`: JWT manquant, expiré ou révoqué.
- `402`: L'organisation n'a pas d'abonnement actif (paywall). Rediriger vers /activate.
- `403`: Permissions `module:action` insuffisantes pour cette route.
- `404`: Ressource introuvable (ou cross-tenant — équivalent à hidden).
- `429`: Trop de requêtes. Honorer le header `Retry-After` (secondes).

---

[API](https://skmtc.dev/eyeot/apis/eyeot-erp-api.md) · [All operations](https://skmtc.dev/eyeot/apis/eyeot-erp-api/llms.txt) · [OpenAPI document](https://skmtc.dev/eyeot/apis/eyeot-erp-api/revisions/42ab95222a89?raw)
