# Erreurs, rate limits et retries

> Erreurs de l'API LLM : statut HTTP, code et cause, lesquelles réessayer, rate limits, et que faire sur 402 solde insuffisant. Les erreurs sont gratuites.

- URL: https://llmwithcrypto.com/fr/docs/errors/
- Dernière mise à jour: 2026-10-23
- Éditeur: LLMwithCrypto (https://llmwithcrypto.com)

Les erreurs reviennent au format OpenAI, donc les SDK les lèvent comme des exceptions habituelles. Cette page liste chaque statut et chaque code, indique lesquels valent un retry, et montre une boucle de retry qui respecte le rate limit.

**Réponse rapide — Quelles erreurs l'API LLMwithCrypto peut-elle renvoyer, et sont-elles facturées ?**

L'API répond aux erreurs avec un statut HTTP et un corps au style OpenAI : `{"error": {"message", "type", "param", "code"}}`. **LLMwithCrypto** utilise 400 pour une requête invalide, 401 pour une mauvaise clé, 402 quand le crédit ne peut pas payer, 404 pour un modèle inconnu, 429 pour le rate limit et 500 ou 503 de notre côté. Un appel qui se termine par une erreur ne coûte rien, comme documenté le 23 octobre 2026.

## Quelles erreurs existent ?

Aucune erreur n'utilise de crédit. `code` est la valeur stable à tester dans votre code ; `message` est destiné aux humains et peut changer.

| HTTP | `code` | Cause | Retry ? |
| --- | --- | --- | --- |
| 400 | `invalid_parameter` | Un champ requis est manquant, ou une valeur est hors plage ou du mauvais type | Non : corriger la requête |
| 400 | `context_length_exceeded` | Les messages plus `max_tokens` ne tiennent pas dans la fenêtre de contexte du modèle | Non : raccourcir l'entrée ou baisser `max_tokens` |
| 400 | `unsupported_parameter` | Un champ que ce modèle ne prend pas en charge, comme `response_format` sur un modèle sans mode JSON | Non : le retirer ou changer de modèle |
| 401 | `invalid_api_key` | La clé est absente, mal saisie ou révoquée | Non : vérifiez la clé |
| 402 | `insufficient_balance` | Le solde restant ne suffit pas pour cet appel | Non : achetez un pack de crédits |
| 404 | `model_not_found` | L'id `model` n'est pas dans notre liste | Non : utilisez un id de `GET /api/v1/models` |
| 429 | `rate_limit_exceeded` | Plus de requêtes ou de tokens par minute que ce que le compte autorise | Oui, après une pause |
| 500 | `server_error` | Quelque chose a échoué de notre côté | Oui, avec backoff |
| 503 | `model_overloaded` | Le modèle est momentanément à pleine capacité | Oui, avec backoff, ou essayez un autre modèle |

*Corps de l'erreur : un modèle inconnu*

```json
{
  "error": {
    "message": "The model `gpt-4o` does not exist or is not available to your key.",
    "type": "invalid_request_error",
    "param": "model",
    "code": "model_not_found"
  }
}

```

## Pourquoi j'obtiens 404 pour gpt-4o ou claude ?

Parce que ces modèles ne sont pas vendus ici. Nous ne vendons pas d'accès à GPT, Claude, Gemini ou Grok : leurs éditeurs interdisent la revente d'accès API sans leur autorisation, et nous ne l'avons pas. Le code écrit pour l'API OpenAI nomme souvent un modèle à plusieurs endroits ; cherchez l'ancien nom dans votre projet et remplacez-le par un id de la [page des modèles](https://llmwithcrypto.com/fr/models/), comme `deepseek-v4-pro` ou `gpt-oss-120b`.

## Quand mon code doit-il réessayer ?

Réessayez sur `429`, `500` et `503`, ainsi que sur les erreurs réseau comme un timeout ou une connexion réinitialisée. Ne réessayez jamais sur `400`, `401`, `402` ou `404` : la même requête échouera de la même façon.

Attendez avant chaque nouvelle tentative. Quand la réponse contient un header `Retry-After`, attendez ce nombre de secondes ; sinon, doublez la pause à chaque fois (1, 2, 4, 8 secondes…) et ajoutez un peu de temps aléatoire, pour que de nombreux workers ne réessaient pas en cadence. Abandonnez après quelques tentatives et journalisez l'erreur. Les SDK OpenAI réessaient déjà d'eux-mêmes ; l'exemple ci-dessous désactive ce comportement pour montrer toute la logique.

*Python : réessayer sur 429, 500 et 503 avec backoff exponentiel*

```python
import os
import random
import time

from openai import APIConnectionError, APIStatusError, OpenAI

client = OpenAI(
    base_url="https://llmwithcrypto.com/api/v1",
    api_key=os.environ["LLMWITHCRYPTO_API_KEY"],
    max_retries=0,
)
RETRY = {429, 500, 503}


def chat(messages, model="deepseek-v4-pro", attempts=5):
    for attempt in range(attempts):
        try:
            return client.chat.completions.create(model=model, messages=messages, max_tokens=500)
        except APIStatusError as err:
            if err.status_code not in RETRY or attempt == attempts - 1:
                raise
            wait = err.response.headers.get("retry-after")
            delay = float(wait) if wait else min(30, 2**attempt) + random.random()
        except APIConnectionError:
            if attempt == attempts - 1:
                raise
            delay = min(30, 2**attempt) + random.random()
        time.sleep(delay)

```

## Que faire en cas de 402 insufficient_balance ?

Rechargez. L'appel n'a pas été facturé et rien d'autre sur le compte ne change : vos clés fonctionnent de nouveau dès qu'il y a des crédits. Une fois votre recharge crypto confirmée et un pack de crédits acheté, votre clé API vous attend dans le dashboard.

Pour éviter les surprises en production, lisez `GET https://llmwithcrypto.com/api/v1/credits` de temps en temps et alertez-vous sous un seuil de votre choix ; la [page des modèles et crédits](https://llmwithcrypto.com/fr/docs/models/) affiche l'appel. Les crédits n'ont pas de date d'expiration : ce que vous ne dépensez pas ce mois-ci est toujours là l'année prochaine, donc un pack plus grand acheté à l'avance ne coûte rien de plus.

## Comment rester sous le rate limit ?

Chaque compte a une limite de requêtes et de tokens par minute, affichée dans le dashboard ; demandez au support, elle peut être augmentée.

- **Limitez la concurrence.** Lancez un nombre fixe de requêtes en parallèle plutôt que d'envoyer tout un lot d'un coup.
- **Limitez la sortie.** Les limites de tokens comptent aussi ce que le modèle écrit, donc un `max_tokens` raisonnable garde plus de requêtes sous la limite.
- **Étalez les lots.** Pour les gros travaux hors ligne, répartissez les requêtes sur la minute au lieu de les envoyer par rafales.

## Erreurs : questions fréquentes

### Suis-je facturé pour un appel échoué ?

Non. Vous payez au token depuis votre solde : les tokens d'entrée et de sortie sont comptés par le tokenizer du modèle lui-même et facturés au prix de ce modèle par 1M de tokens. Un appel qui se termine par une erreur ne coûte rien.

### Où puis-je voir s'il y a une panne ?

Sur la [page de statut](https://llmwithcrypto.com/fr/status/). Une série d'erreurs `500` ou `503` sur plusieurs modèles signifie généralement un incident de notre côté ; écrivez à support@llmwithcrypto.com si cela dure.

### Puis-je voir la requête qui a échoué ?

Pas de notre côté. Nous ne stockons ni vos prompts ni les réponses du modèle : une fois une réponse envoyée, son texte a disparu. Chaque appel laisse une ligne de log avec l'heure, le compte, le modèle et le nombre de tokens, supprimée après 30 jours. Journalisez l'erreur `code` et votre propre id de requête dans votre app.

---

LLMwithCrypto: LLMwithCrypto est une API LLM compatible OpenAI pour les modèles open-weight — DeepSeek V4 Pro, DeepSeek V4.1 Flash, DeepSeek R1, Qwen3.5 397B A17B, Qwen3 235B A22B Instruct, gpt-oss-120b, gpt-oss-20b, GLM-4.7, Llama 3.3 70B Instruct, Gemma 4 31B, Mistral Large 3, Mistral Small 4 — facturés au token depuis un solde crypto prépayé, à 5 % en dessous du prix médian des hébergeurs publics. Sans KYC : pas de pièce d'identité, pas de selfie, pas de documents. Les prompts et les sorties ne sont pas stockés.
