> ## Documentation Index
> Fetch the complete documentation index at: https://docs.msgflash.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Codes d'erreur

> Principaux codes d'erreur retournés par l'API publique MsgFlash.

## Format

```json theme={null}
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid request data",
    "details": []
  }
}
```

***

## Authentification et quotas API

| Code                                 | HTTP | Description                                                     |
| ------------------------------------ | ---- | --------------------------------------------------------------- |
| `UNAUTHORIZED`                       | 401  | Clé API manquante, invalide ou révoquée. Vérifiez `x-api-key`.  |
| `FORBIDDEN`                          | 403  | Ressource non accessible avec cette clé                         |
| `SUBSCRIPTION_INACTIVE`              | 403  | Le compte n'a pas de souscription exploitable pour cette action |
| `API_RATE_LIMIT_EXCEEDED`            | 429  | Plus de 10 requêtes/seconde sur la même clé                     |
| `MONTHLY_API_REQUEST_QUOTA_EXCEEDED` | 429  | Quota mensuel de requêtes API épuisé                            |

***

## Limites de plan

| Code                              | HTTP | Description                                       |
| --------------------------------- | ---- | ------------------------------------------------- |
| `MAX_INSTANCES_REACHED`           | 403  | Limite d'instances atteinte                       |
| `API_KEYS_NOT_AVAILABLE_ON_PLAN`  | 403  | Clés API indisponibles sur le plan actuel         |
| `MAX_API_KEYS_REACHED`            | 403  | Limite de clés API atteinte                       |
| `WEBHOOKS_NOT_AVAILABLE_ON_PLAN`  | 403  | Webhooks indisponibles sur le plan actuel         |
| `MAX_WEBHOOK_ENDPOINTS_REACHED`   | 403  | Limite d'endpoints webhook atteinte               |
| `CAMPAIGNS_NOT_AVAILABLE_ON_PLAN` | 403  | Campagnes indisponibles sur le plan actuel        |
| `STATUSES_NOT_AVAILABLE_ON_PLAN`  | 403  | Statuts WhatsApp indisponibles sur le plan actuel |
| `MAX_CONTACT_GROUPS_REACHED`      | 403  | Limite de groupes de contacts atteinte            |
| `FEATURE_NOT_AVAILABLE_ON_PLAN`   | 403  | Feature indisponible sur le plan courant          |

***

## Messages, templates et validation

| Code                           | HTTP | Description                                                        |
| ------------------------------ | ---- | ------------------------------------------------------------------ |
| `VALIDATION_ERROR`             | 400  | Le body ne respecte pas le schéma attendu                          |
| `BAD_REQUEST`                  | 400  | Requête invalide                                                   |
| `TEMPLATE_INVALID`             | 400  | Placeholder invalide ou template incohérent                        |
| `TEMPLATE_VARIABLES_MISSING`   | 400  | Une ou plusieurs variables requises n'ont pas pu être résolues     |
| `TEMPLATE_CONTEXT_UNAVAILABLE` | 400  | Le contexte demandé n'est pas disponible (`instance` ou `contact`) |
| `INVALID_DESTINATION`          | 422  | Numéro destinataire invalide                                       |

***

## Général

| Code                   | HTTP | Description                                   |
| ---------------------- | ---- | --------------------------------------------- |
| `NOT_FOUND`            | 404  | Ressource inexistante ou hors de votre compte |
| `CONFLICT`             | 409  | Conflit d'unicité                             |
| `INTERNAL_ERROR`       | 500  | Erreur serveur                                |
| `PROVIDER_TIMEOUT`     | 502  | Timeout côté provider WhatsApp                |
| `PROVIDER_UNAVAILABLE` | 502  | Provider temporairement indisponible          |
| `PROVIDER_ERROR`       | 502  | Erreur générique côté provider                |

***

## Équipes & workspaces

Ces codes apparaissent quand la requête combine un mauvais type de clé API avec `X-Team-Id`, ou quand une ressource d'équipe est accédée sans le rôle adéquat. Voir [Team context](/fr/api-reference/teams/team-context) et le [guide Équipes & workspaces](/fr/guides/teams-workspaces).

| Code                               | HTTP | Description                                                                                                                                                                            |
| ---------------------------------- | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `TEAM_KEY_REQUIRED`                | 403  | Clé personnelle (`msgf_live_…`) utilisée avec `X-Team-Id`. Utilisez une clé d'équipe (`msgf_team_…`) ou retirez l'en-tête.                                                             |
| `TEAM_KEY_NOT_ALLOWED`             | 403  | Clé d'équipe utilisée sur une route `v1` réservée au compte personnel (`/me`, `/usage`, `/billing/subscription`, `/billing/usage`, `/billing/payments`). Utilisez une clé personnelle. |
| `TEAM_NOT_FOUND`                   | 404  | `X-Team-Id` ne correspond à aucune équipe dont vous êtes membre actif (supprimée, retirée ou ID erroné).                                                                               |
| `TEAM_ACCESS_DENIED`               | 403  | Authentifié mais le rôle ne permet pas cette action (ex. collaborateur tentant de gérer des clés d'équipe).                                                                            |
| `TEAM_FEATURE_UNAVAILABLE`         | 403  | Le plan de votre compte n'inclut pas la création d'équipes (Free). Passez à Pro ou MAX.                                                                                                |
| `TEAM_LIMIT_REACHED`               | 403  | Le propriétaire a atteint le nombre maximum d'équipes autorisé par son plan.                                                                                                           |
| `TEAM_SEAT_LIMIT_REACHED`          | 403  | L'équipe a déjà le nombre maximum de membres autorisé par le plan du propriétaire.                                                                                                     |
| `INSTANCE_NOT_ASSIGNED`            | 403  | Collaborateur qui cible une instance non assignée à lui dans ce workspace d'équipe.                                                                                                    |
| `INVITE_INVALID_OR_EXPIRED`        | 400  | Token / id d'invitation inconnu, déjà utilisé ou expiré (24h).                                                                                                                         |
| `INVITE_EMAIL_MISMATCH`            | 403  | L'email du JWT ne correspond pas à l'email invité.                                                                                                                                     |
| `INVITE_DUPLICATE_MEMBER`          | 409  | L'invité est déjà membre actif de l'équipe.                                                                                                                                            |
| `PLAN_CHANGE_BLOCKED_ACTIVE_TEAMS` | 409  | Downgrade refusé : le nouveau plan ne peut pas héberger les équipes / sièges actuels. Supprimez des équipes ou réduisez les sièges d'abord.                                            |

### Console (JWT, dashboard ou portail)

Ces codes n'apparaissent que sur les routes JWT `/api/billing/*` appelées avec `X-Team-Id` :

| Code                               | HTTP | Description                                                                                                                                           |
| ---------------------------------- | ---- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `BILLING_PAYMENTS_TEAM_OWNER_ONLY` | 403  | `GET /api/billing/payments` en workspace d'équipe est réservé au propriétaire de l'équipe.                                                            |
| `BILLING_TEAM_MUTATION_FORBIDDEN`  | 403  | Les mutations `POST` (`checkout`, `cancel`, `downgrade`, `cancel-scheduled-change`) en workspace d'équipe sont réservées au propriétaire de l'équipe. |
