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

# Gérer les erreurs d’API et les tentatives avec CometAPI

> Gérez les erreurs CometAPI en séparant les problèmes de forme de requête, les échecs d’authentification, les limites de débit et les échecs temporaires de la plateforme pouvant être retentés.

Gérez les erreurs CometAPI en décidant si la requête doit être corrigée ou retentée. Retentez les échecs `429`, les échecs de type délai d’expiration et les échecs temporaires du serveur avec un backoff ; ne retentez pas les requêtes mal formées ni les échecs d’authentification.

## Retenter uniquement les échecs pouvant être retentés

| Status or signal             | Retry?           | Action                                                                 |
| ---------------------------- | ---------------- | ---------------------------------------------------------------------- |
| `400`                        | Non              | Corrigez le corps de la requête ou les paramètres.                     |
| `401`                        | Non              | Corrigez la clé API et l’en-tête `Authorization`.                      |
| `403`                        | Généralement non | Supprimez les champs non pris en charge et vérifiez l’accès au modèle. |
| `429`                        | Oui              | Retentez avec un backoff exponentiel et du jitter.                     |
| `500` with `invalid_request` | Non              | Corrigez la forme de la requête.                                       |
| `500`, `503`, `504`, `524`   | Oui              | Retentez avec un backoff et conservez le request ID.                   |

## Ajouter un backoff

L’exemple Python suivant ne retente que les échecs pouvant être retentés :

```python theme={null}
import os
import random
import time
from openai import APIError, OpenAI, RateLimitError

client = OpenAI(
    api_key=os.environ["COMETAPI_KEY"],
    base_url="https://api.cometapi.com/v1",
)

for attempt in range(5):
    try:
        response = client.chat.completions.create(
            model="your-model-id",
            messages=[{"role": "user", "content": "Say hello."}],
        )
        print(response.choices[0].message.content)
        break
    except RateLimitError:
        delay = min(30, 2**attempt) + random.random()
        time.sleep(delay)
    except APIError as error:
        status_code = getattr(error, "status_code", None)
        if status_code in {500, 503, 504, 524}:
            delay = min(30, 2**attempt) + random.random()
            time.sleep(delay)
            continue
        raise
else:
    raise RuntimeError("The request failed after retries.")
```

La réponse réussie inclut la sortie du modèle :

```json theme={null}
{
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "Hello."
      }
    }
  ],
  "usage": {
    "total_tokens": 9
  }
}
```

## Consigner le contexte utile

La structure JSON suivante peut être stockée en toute sécurité après avoir supprimé les secrets utilisateur et les fichiers volumineux :

```json theme={null}
{
  "method": "POST",
  "path": "/v1/chat/completions",
  "model": "your-model-id",
  "status": 429,
  "request_id": "request_id_from_error_message",
  "retryable": true
}
```

## Erreurs courantes

| Error                       | Fix                                                                  |
| --------------------------- | -------------------------------------------------------------------- |
| Retrying `401`              | Arrêtez les tentatives et remplacez ou rechargez la clé API.         |
| Retrying invalid JSON       | Validez le corps de la requête avant d’envoyer une autre requête.    |
| No request ID in logs       | Capturez le corps d’erreur exact avant que votre SDK ne l’encapsule. |
| Immediate retry after `429` | Ajoutez du jitter et réduisez la concurrence.                        |

## Liens connexes

* [Codes d’erreur et gestion](/fr/errors/error-codes-handling)
* [Limites de débit et concurrence](/fr/guides/rate-limits-and-concurrency)
* [Page des modèles](/fr/overview/models)
* [Répertoire des modèles](https://www.cometapi.com/models/)
* [Tarification](https://www.cometapi.com/pricing/)
* [Démarrage rapide de CometAPI](/fr/overview/quick-start)

<script type="application/ld+json">
  {`
    {
    "@context": "https://schema.org",
    "@graph": [
      {
        "@type": "TechArticle",
        "@id": "https://apidoc.cometapi.com/guides/error-codes-and-retry-strategy",
        "headline": "Comment gérer les codes d’erreur et les tentatives de nouvelle exécution avec CometAPI ?",
        "description": "Gérez les erreurs CometAPI en séparant les problèmes de forme de requête, les échecs d’authentification, les limites de débit et les défaillances de plateforme pouvant faire l’objet d’une nouvelle tentative.",
        "url": "https://apidoc.cometapi.com/guides/error-codes-and-retry-strategy",
        "author": {
          "@type": "Organization",
          "name": "CometAPI"
        },
        "publisher": {
          "@type": "Organization",
          "name": "CometAPI",
          "url": "https://www.cometapi.com"
        }
      },
      {
        "@type": "BreadcrumbList",
        "itemListElement": [
          {
            "@type": "ListItem",
            "position": 1,
            "name": "Documentation CometAPI",
            "item": "https://apidoc.cometapi.com/"
          },
          {
            "@type": "ListItem",
            "position": 2,
            "name": "Guides",
            "item": "https://apidoc.cometapi.com/guides/use-cometapi-with-openai-sdk"
          },
          {
            "@type": "ListItem",
            "position": 3,
            "name": "Comment gérer les codes d’erreur et les tentatives de nouvelle exécution avec CometAPI ?",
            "item": "https://apidoc.cometapi.com/guides/error-codes-and-retry-strategy"
          }
        ]
      }
    ]
    }
    `}
</script>
