---
title: "Limites de débit et codes d'erreur de l'API · gérer les 429"
description: "Fonctionnement des limites de débit et des erreurs de l'API inference.eu : codes HTTP, objet d'erreur, en-têtes de limite et schéma de reprise fiable."
canonical: "https://inference.eu/fr/api/rate-limits-and-errors/"
language: "fr"
---

Guides · Rate limits and errors

# Limites de débit et erreurs : codes, en-têtes et reprises

Toute intégration en production finit par rencontrer des erreurs : une requête mal formée, une clé expirée, un pic de trafic au-delà de votre limite ou une brève interruption. Ce guide explique comment l'API inference.eu signale chaque cas, quelles erreurs méritent une reprise, comment lire les en-têtes de limite de débit et comment écrire une boucle de reprise qui tient la route.

[Contacter l'équipe](https://inference.eu/fr/contact/)[Exemple de requête](#example)

1.  01Format d'API: OpenAI et Anthropic
2.  02Centres de données dans l'UE
3.  03Couvert par un seul DPA

retry.py

```
import os, random, time
import openai
from openai import OpenAI

# The SDK already retries some errors; max_retries=0 here so the loop below is explicit.
client = OpenAI(base_url="https://api.inference.eu/v1", api_key=os.environ["INFERENCE_EU_API_KEY"], max_retries=0)

def complete(messages, attempts=6):
    for attempt in range(attempts):
        try:
            return client.chat.completions.create(model="gpt-oss-120b", messages=messages)
        except (openai.RateLimitError, openai.InternalServerError, openai.APIConnectionError) as err:
            if attempt == attempts - 1:
                raise
            retry_after = getattr(getattr(err, "response", None), "headers", {}).get("retry-after")
            delay = float(retry_after) if retry_after else min(2 ** attempt, 30) + random.random()
            time.sleep(delay)
        except openai.BadRequestError as err:
            # 400s will fail again unchanged: log and fix the request instead of retrying
            print("Invalid request:", err.message)
            raise
```

## Codes de statut et objet d'erreur

Les erreurs utilisent les codes HTTP standard et, sur les points de terminaison au format OpenAI, un corps JSON avec un objet `error` contenant `message`, `type`, `param` et `code`. Le message s'adresse aux développeurs et désigne le champ ou la valeur en cause. Les points de terminaison au format Anthropic renvoient plutôt `{"type": "error", "error": {"type", "message"}}`.

Les codes que vous verrez : 400 pour une requête invalide, comme un champ erroné ou un prompt qui dépasse la fenêtre de contexte ; 401 pour une clé absente ou invalide ; 403 si la clé n'a pas accès à un modèle ou une fonction ; 404 pour un modèle ou objet inconnu ; 413 pour un corps trop volumineux ; 422 pour une requête valide mais impossible à traiter ; 429 pour les limites de débit ; 500, 502, 503 ou 529 pour un incident temporaire côté serveur.

## Comment fonctionnent les limites de débit

Les limites s'appliquent par organisation ou par projet et par modèle, et portent en général sur les requêtes et les tokens par minute. Leurs valeurs dépendent de votre offre et nous les convenons avec vous plutôt que de publier des paliers fixes. Si vous prévoyez un lancement ou une grosse migration, prévenez-nous et nous les relèverons.

Les réponses comportent des en-têtes qui indiquent où vous en êtes : `x-ratelimit-limit-requests`, `x-ratelimit-remaining-requests` et `x-ratelimit-reset-requests`, ainsi que leurs équivalents `-tokens`. En cas de dépassement, l'API renvoie un 429 avec un en-tête `Retry-After` indiquant le nombre de secondes à attendre. Lisez ces en-têtes pour ralentir avant d'atteindre la limite, pas après.

## Un schéma de reprise fiable

Réessayez les 429, les 5xx et les erreurs de connexion ; pas les 400, 401, 403 ou 404, car la même requête échouera de nouveau. Attendez avant chaque reprise : utilisez `Retry-After` s'il est présent, sinon un délai exponentiel avec une part aléatoire, comme dans l'exemple, pour éviter que de nombreux clients réessaient au même instant. Plafonnez le nombre de tentatives et l'attente totale.

Les SDK OpenAI et Anthropic réessaient déjà certaines erreurs par défaut : appuyez-vous dessus en réglant `max_retries`, ou désactivez-le et utilisez votre propre boucle, mais pas les deux. Pour de gros volumes, préférez une file d'attente à concurrence fixe, ou passez par un traitement par lots.

## Cas particuliers à prévoir

Un 400 lié à la longueur de contexte est fréquent avec les longs documents. Comptez les tokens au préalable, réduisez l'historique ou découpez l'entrée. Une réponse réussie peut aussi être incomplète : vérifiez `finish_reason` ou `status` avant d'utiliser le résultat. En streaming, une erreur peut survenir en cours de flux sous forme d'événement ; considérez la sortie partielle comme inachevée.

Prévoyez des délais d'attente suffisants pour les modèles de raisonnement et les longues sorties, et rendez les opérations rejouables sans risque, par exemple en dédupliquant sur votre propre identifiant de requête. Journalisez l'identifiant de requête renvoyé dans les en-têtes avec chaque erreur : si vous nous contactez, nous retrouverons la requête exacte.

## Rate limits and errors

Catégorie

Guides

Format d'API

OpenAI et Anthropic

Base URL

api.inference.eu/v1

Traitement

Centres de données dans l'UE

Entraînement sur vos données

Jamais

## Rate limits and errors : questions fréquentes

Les questions que nous posent le plus les achats, les développeurs et les juristes. Il en manque une ? Posez-la-nous directement.

Vous avez dépassé une limite de débit, en requêtes ou en tokens par minute, pour votre organisation, votre projet ou un modèle. Attendez le nombre de secondes indiqué dans l'en-tête \`Retry-After\`, puis réessayez. Si les 429 sont fréquents en charge normale, demandez-nous de revoir les limites de votre offre.

Les limites dépendent de votre offre et des modèles utilisés, et nous les convenons avec vous au lieu de publier des paliers fixes. Elles peuvent être relevées pour un trafic de production ou des pics prévus. Les en-têtes \`x-ratelimit-\*\` affichent à tout moment votre limite actuelle et la capacité restante.

Réessayez les réponses 429, 500, 502, 503 et 529 ainsi que les erreurs réseau, comme les délais dépassés et les connexions coupées, avec un délai exponentiel. Ne réessayez pas tels quels les 400, 401, 403, 404 ou 422 : ils signalent un problème de requête, de clé ou de droits qu'une nouvelle tentative ne résoudra pas.

Sur les points de terminaison au format OpenAI, le corps est \`{"error": {"message": "...", "type": "...", "param": "...", "code": "..."}}\`. Sur les points de terminaison Messages d'Anthropic, il est \`{"type": "error", "error": {"type": "...", "message": "..."}}\`. Les SDK les transforment en exceptions typées comme \`RateLimitError\` ou \`BadRequestError\`.

Le prompt et \`max\_tokens\` réunis dépassent la fenêtre de contexte du modèle, ce que précise le message d'erreur. Comptez les tokens avant l'envoi, raccourcissez ou résumez les anciens tours de conversation, découpez les longs documents ou choisissez un modèle doté d'un contexte plus long.

Lisez les en-têtes \`x-ratelimit-remaining-\*\` et ralentissez quand ils approchent de zéro. Limitez la concurrence avec une file d'attente, étalez le travail non urgent, utilisez les lots pour les traitements de masse et mettez en cache les résultats demandés souvent. Prévenez-nous avant un lancement pour que nous relevions vos limites à temps.

Vérifiez que la clé est bien transmise : en \`Authorization: Bearer\` sur les points de terminaison au format OpenAI, ou en \`x-api-key\` au format Anthropic. Assurez-vous qu'il n'y a ni espace ni guillemet en trop, que la variable d'environnement est définie là où le code s'exécute et que la clé n'a pas été révoquée.

Indiquez l'heure de la requête, le modèle, le statut HTTP, le message d'erreur et l'identifiant de requête figurant dans les en-têtes de réponse. N'envoyez ni votre clé d'API ni le contenu complet de prompts sensibles. Grâce à l'identifiant de requête, nous retraçons ce qui s'est passé de notre côté.

[Poser une question](https://inference.eu/fr/contact/)

## Pages liées

[Présentation de l'API](https://inference.eu/fr/api/)

-   [Chat completionsEnvoyez vos messages à des modèles open-weight au format chat completions d'OpenAI. Traitement dans des centres de données de l'UE, sans entraînement.Endpoints](https://inference.eu/fr/api/chat-completions/)
-   [BatchesExécutez des milliers de requêtes de chat ou d'embeddings en un seul traitement asynchrone avec une API batch compatible OpenAI, traitée dans l'UE.Endpoints](https://inference.eu/fr/api/batches/)
-   [StreamingRecevez les tokens des modèles ouverts au fil de la génération, en server-sent events aux formats OpenAI et Anthropic. Exemples, fragments et erreurs.Guides](https://inference.eu/fr/api/streaming/)
-   [Migrate from OpenAIFaites passer votre application d'OpenAI à des modèles ouverts traités dans l'UE. Changez l'URL de base, la clé et le modèle, puis testez outils et JSON.Guides](https://inference.eu/fr/api/migrate-from-openai/)

## Faites passer vos charges IA sur une infrastructure européenne

Dites-nous quels modèles vous utilisez et votre volume approximatif. Nous répondons sous un jour ouvré avec un tarif et la suite.

-   Réponse sous un jour ouvré
-   Tarif adapté à votre volume
-   DPA prêt à signer
