---
title: "Erreurs et limites"
description: "Comprendre les erreurs API, les codes de statut et les limites de ressources selon l'offre."
---

# Erreurs et limites

Comprendre les erreurs API, les rate limits et les restrictions des offres.

## Format des réponses d'erreur

Toutes les erreurs suivent un format cohérent :

```json
{
  "statusCode": 400,
  "statusMessage": "Name is required",
  "message": "Name is required",
  "url": "/api/v1/minds",
  "error": true
}
```

<table>
<thead>
  <tr>
    <th>
      Champ
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        statusCode
      </code>
    </td>
    
    <td>
      Code de statut HTTP
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        statusMessage
      </code>
    </td>
    
    <td>
      Description d'erreur lisible (définie par le handler pour chaque erreur — pour les erreurs de validation, il s'agit du problème spécifique, p. ex. <code>
        "Mind not found"
      </code>
      
       ou <code>
        "Invalid Mind ID format"
      </code>
      
      )
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        message
      </code>
    </td>
    
    <td>
      Même contenu que <code>
        statusMessage
      </code>
      
       pour les erreurs v1. Réservé à la stack/au contexte supplémentaire dans les réponses <code>
        5xx
      </code>
      
       sur les builds de debug.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        url
      </code>
    </td>
    
    <td>
      Le chemin de la requête (ajouté par Nuxt H3)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        error
      </code>
    </td>
    
    <td>
      <code>
        true
      </code>
      
       pour les réponses d'erreur (ajouté par Nuxt H3)
    </td>
  </tr>
</tbody>
</table>

> Appuyez-vous toujours sur `statusCode` pour le traitement programmatique et sur `statusMessage` (ou `message`) pour la raison lisible. Les champs `url` et `error` sont des métadonnées de commodité fournies par le framework sous-jacent.

## Codes de statut HTTP

### 2xx Succès

<table>
<thead>
  <tr>
    <th>
      Code
    </th>
    
    <th>
      Statut
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      200
    </td>
    
    <td>
      OK
    </td>
    
    <td>
      Requête réussie
    </td>
  </tr>
  
  <tr>
    <td>
      201
    </td>
    
    <td>
      Created
    </td>
    
    <td>
      Ressource créée avec succès (p. ex. <code>
        POST /minds
      </code>
      
      , <code>
        POST /minds/{id}/knowledge
      </code>
      
      )
    </td>
  </tr>
  
  <tr>
    <td>
      202
    </td>
    
    <td>
      Accepted
    </td>
    
    <td>
      Requête acceptée pour traitement asynchrone (p. ex. <code>
        POST /minds/{id}/knowledge
      </code>
      
       avec <code>
        keywords
      </code>
      
      )
    </td>
  </tr>
  
  <tr>
    <td>
      204
    </td>
    
    <td>
      No Content
    </td>
    
    <td>
      Requête réussie, aucun corps de réponse (p. ex. <code>
        DELETE /minds/{id}/knowledge/{itemId}
      </code>
      
      )
    </td>
  </tr>
</tbody>
</table>

### 4xx Erreurs client

<table>
<thead>
  <tr>
    <th>
      Code
    </th>
    
    <th>
      Statut
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      400
    </td>
    
    <td>
      Bad Request
    </td>
    
    <td>
      Paramètres de requête invalides
    </td>
  </tr>
  
  <tr>
    <td>
      401
    </td>
    
    <td>
      Unauthorized
    </td>
    
    <td>
      Clé API manquante ou invalide
    </td>
  </tr>
  
  <tr>
    <td>
      403
    </td>
    
    <td>
      Forbidden
    </td>
    
    <td>
      Accès refusé ou limite d'offre atteinte
    </td>
  </tr>
  
  <tr>
    <td>
      404
    </td>
    
    <td>
      Not Found
    </td>
    
    <td>
      La ressource n'existe pas
    </td>
  </tr>
  
  <tr>
    <td>
      415
    </td>
    
    <td>
      Unsupported Media Type
    </td>
    
    <td>
      En-tête Content-Type incorrect
    </td>
  </tr>
  
  <tr>
    <td>
      429
    </td>
    
    <td>
      Too Many Requests
    </td>
    
    <td>
      Rate limit dépassé
    </td>
  </tr>
</tbody>
</table>

### 5xx Erreurs serveur

<table>
<thead>
  <tr>
    <th>
      Code
    </th>
    
    <th>
      Statut
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      500
    </td>
    
    <td>
      Internal Server Error
    </td>
    
    <td>
      Erreur côté serveur
    </td>
  </tr>
  
  <tr>
    <td>
      503
    </td>
    
    <td>
      Service Unavailable
    </td>
    
    <td>
      Service temporairement indisponible
    </td>
  </tr>
</tbody>
</table>

## Erreurs courantes

### 400 Bad Request

**Champ requis manquant :**

```json
{
  "statusCode": 400,
  "statusMessage": "Name is required"
}
```

**Entrée invalide :**

```json
{
  "statusCode": 400,
  "statusMessage": "File too large: document.pdf (55.2MB). Maximum size is 50MB."
}
```

### 401 Unauthorized

**Clé API manquante :**

```json
{
  "statusCode": 401,
  "statusMessage": "Unauthorized"
}
```

**Solution :** Incluez l'en-tête `Authorization` :

```bash
-H "Authorization: Bearer minds_your_api_key"
```

### 403 Forbidden

**Limite d'offre atteinte :**

```json
{
  "statusCode": 403,
  "statusMessage": "Individual plan limit reached",
  "message": "Individual plan limit reached",
  "url": "/api/v1/minds",
  "error": true,
  "data": {
    "code": "PLAN_LIMIT",
    "limitType": "sparks",
    "currentPlan": "premium",
    "limit": 100,
    "current": 100
  }
}
```

**Accès refusé :**

```json
{
  "statusCode": 403,
  "statusMessage": "Access denied"
}
```

### 404 Not Found

**La ressource n'existe pas :**

```json
{
  "statusCode": 404,
  "statusMessage": "Mind not found"
}
```

### 415 Unsupported Media Type

**Content-Type incorrect :**

```json
{
  "statusCode": 415,
  "statusMessage": "Unsupported Content-Type. Use application/json for links or multipart/form-data for files"
}
```

**Solution :** Utilisez le bon en-tête `Content-Type` :

- `application/json` pour les requêtes JSON
- `multipart/form-data` pour les téléversements de fichiers

### 429 Too Many Requests

**Rate limit dépassé :**

```json
{
  "statusCode": 429,
  "statusMessage": "Too many requests. Please try again later."
}
```

## Rate limits

L'API v1 applique une fenêtre fixe par compte authentifié. La limite de déploiement par défaut est de 300 requêtes par minute, mais elle est configurable. Lisez toujours `RateLimit-Limit` et `RateLimit-Remaining` ; après un `429`, attendez le nombre de secondes indiqué par `Retry-After`.

## Limites d'offre

Consultez le [tableau généré des limites](/docs/api/overview) pour les valeurs publiques actuelles. Les ajustements contractuels peuvent différer ; `data.limit` et `data.current` dans une erreur authentifiée font donc foi pour cette requête. L'offre Individual apparaît comme `"premium"` dans les payloads API.

### Exemple de limite de Minds

**Erreur lorsque la limite est atteinte :**

```json
{
  "statusCode": 403,
  "statusMessage": "Individual plan limit reached",
  "message": "Individual plan limit reached",
  "url": "/api/v1/minds",
  "error": true,
  "data": {
    "code": "PLAN_LIMIT",
    "limitType": "sparks",
    "currentPlan": "premium",
    "limit": 100,
    "current": 100
  }
}
```

### Limites de téléversement de connaissance

- **Taille de fichier :** Maximum 50 Mo par fichier (toutes offres)
- **Stockage :** Pas de limite de stockage explicite actuellement imposée

### Limites de clés API

- **Clés maximum :** Aucune limite n'est actuellement appliquée.

## Bonnes pratiques

### Gestion des erreurs

**Gérez toujours les erreurs :**

```javascript
try {
  const response = await fetch(url, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${apiKey}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(data)
  });

  if (!response.ok) {
    const error = await response.json();
    console.error(`Error ${error.statusCode}: ${error.message}`);
    // Handle specific errors
    if (error.statusCode === 429) {
      // Implement retry logic
    }
  }

  const result = await response.json();
  return result;
} catch (error) {
  console.error('Network error:', error);
}
```

### Logique de nouvelle tentative

**Mettez en place des retries intelligents :**

- Réessayez sur les erreurs `429` (rate limit) et `5xx`
- Utilisez un backoff exponentiel
- Définissez un nombre maximum de tentatives
- Ne réessayez pas sur les erreurs `4xx` (sauf 429)

### Surveillance

**Suivez votre utilisation :**

- Loggez les en-têtes de rate limit
- Surveillez les taux d'erreur
- Configurez des alertes pour les erreurs récurrentes
- Suivez les temps de réponse

### Effectuez une mise à niveau au besoin

Passez à une offre supérieure si vous :

- Atteignez fréquemment les rate limits
- Avez besoin de plus de minds
- Nécessitez des téléversements de fichiers plus volumineux
- Souhaitez un support prioritaire

[Voir les offres](/settings?tab=subscription)

## Obtenir de l'aide

### Vérifier le statut

Surveillez l'état de notre service :

- [État du service Minds](https://uptime.getminds.ai)
- Suivez [@mindsai_co](https://x.com/mindsai_co) pour les mises à jour

### Contacter le support

Si vous rencontrez :

- Des erreurs 500 persistantes
- Un rate limiting incorrect
- Un comportement inattendu

Contactez-nous :

- Formulaire de retour
- E-mail : [support@getminds.ai](mailto:support@getminds.ai)

### Consulter la documentation

- [API Overview](/docs/api/overview)
- [Authentication](/docs/api/authentication)
- [Minds API](/docs/api/minds)
- [Knowledge API](/docs/api/knowledge)
- [Chat API](/docs/api/chat)

## Référence des codes de statut

Référence rapide pour tous les codes de statut HTTP :

```text
2xx Success
├─ 200 OK
└─ 201 Created

4xx Client Error
├─ 400 Bad Request
├─ 401 Unauthorized
├─ 403 Forbidden
├─ 404 Not Found
├─ 415 Unsupported Media Type
└─ 429 Too Many Requests

5xx Server Error
├─ 500 Internal Server Error
└─ 503 Service Unavailable
```
