Erreurs
UberLLM renvoie des enveloppes d'erreur de style OpenAI afin que la gestion des erreurs existante fonctionne sans modification :
{
"error": {
"code": "insufficient_credits",
"message": "Your credit balance is too low to serve this request.",
"type": "insufficient_credits"
}
}
Surface d’inférence (/v1/*)
| HTTP | code |
Signification | Que faire |
|---|---|---|---|
| 402 | insufficient_credits |
Votre solde prépayé ne couvre pas la réservation de la requête. | Rechargez dans Tableau de bord → Crédits. |
| 402 | key_spend_cap_exceeded |
Cette clé a atteint sa limite de dépenses configurée (quotidienne / mensuelle / sur la durée de vie). | Augmentez ou supprimez le plafond de la clé, ou utilisez une autre clé. |
| 400 | invalid_request |
Le corps de la requête n’a pas pu être analysé, ou le modèle a rejeté la requête (le message en indique la raison). | Corrigez la requête ; elle n’est pas réessayée. |
| 413 | request_too_large |
Le corps de la requête dépasse 10 Mo (le plus souvent des images envoyées en base64). | Envoyez les images sous forme de liens https://, ou raccourcissez la conversation. Rien n’a été facturé. |
| 404 | model_not_found |
L’id model n’est pas disponible. Un préfixe uberllm/ devant fonctionne : uberllm/deepseek/deepseek-v4.1-flash atteint deepseek/deepseek-v4.1-flash. |
Vérifiez GET /v1/models ; corrigez l’id. |
| 400 | context_length_exceeded |
Le prompt est plus long que ce que le modèle accepte, quel que soit le vendeur. Sur /v1/chat/completions sans liste models, le modèle le plus proche qui l’accepte répond à la place (le model de la réponse le nomme) ; cette erreur survient quand aucun ne le fait, ou sur /v1/messages. Le message donne les deux tailles et nomme des modèles qui l’acceptent. |
Envoyez moins, ou choisissez un modèle nommé dans le message. Rien n’a été facturé. |
| 400 | tools_not_supported |
La requête envoie tools et le modèle ne peut pas les appeler, quel que soit le vendeur. Même règle de remplacement que ci-dessus. Le message nomme des modèles qui le peuvent. |
Envoyez-la sans outils, ou choisissez un modèle nommé dans le message. Rien n’a été facturé. |
| 400 | max_price_exceeded |
Personne ne vend le modèle dans votre provider.max_price pour le moment (et aucun modèle dans models ne pourrait le prendre). |
Augmentez max_price, réessayez plus tard, ou nommez d’autres modèles. Rien n’a été facturé. |
| 400 | unsupported_routing_option |
Une option provider qu’UberLLM ne peut pas appliquer (le message la nomme). |
Retirez-la ; voir Modèles et routage. |
| 400 | invalid_metadata |
metadata n’est pas un objet contenant jusqu’à 16 valeurs texte. |
Corrigez les tags ; les nombres doivent être entre guillemets. |
| 400 | unknown_capability |
Un alias best-price: / fastest: ne désigne aucune tâche. |
Utilisez l’un de chat, image, image-edit, text-to-video, image-to-video, music, speech, transcription. |
| 400 | wrong_endpoint |
Le modèle (ou l’alias) fait une tâche que cette route ne fait pas : un modèle d’image, de vidéo, de musique, de synthèse vocale ou de transcription envoyé à /v1/chat/completions ou /v1/messages, un modèle de chat envoyé à une route média, ou synthèse vocale et transcription interverties. Le message nomme la bonne route. Refusée avant toute exécution ; rien n’est facturé, et l’Activité la répertorie comme refusée. |
Envoyez-la vers la route nommée dans le message (aussi dans endpoints sur /v1/models/{id}). |
| 503 | no_timing_data |
fastest: a été demandé avant que suffisamment de requêtes aient été mesurées pour comparer les modèles. |
Utilisez best-price: ou nommez un modèle. |
| 429 | rate_limited |
Cette clé a dépassé sa limite de requêtes par minute, ou la place de marché a continué à limiter le débit après les réessais automatiques. | Ralentissez et réessayez avec jitter ; augmentez la limite de débit de la clé. |
| 503 | no_available_provider |
Personne ne peut servir ce modèle pour le moment, même après les réessais automatiques (aucun vendeur, tous les vendeurs en échec ou trop lents à démarrer, ou vos options provider n’ont laissé aucune cible de routage), ou un alias best-price: / fastest: n’a trouvé aucun modèle disponible pour la tâche pour le moment. Le message nomme le modèle ou la tâche. Cela couvre aussi un vendeur dont le propre compte fournisseur a échoué : UberLLM essaie d’autres vendeurs et ne relaie jamais l’erreur de ce vendeur comme si votre clé était erronée. |
Réessayez sous peu ou choisissez un autre modèle. Rien n’a été facturé. |
| 503 | service_unavailable |
Un problème temporaire du côté d’UberLLM. | Réessayez dans quelques minutes. |
Les requêtes d’image, de vidéo et de musique ajoutent quelques codes qui leur sont propres (image_required,
invalid_image_url (un lien vers une image source qui ne mène pas à une image),
max_cost_too_low, idempotency_key_reused, artifact_expired) ; voir
Créer une vidéo ou une image.
Une requête de chat refusée ou échouée apparaît dans Tableau de bord → Activité avec le
message qui vous a été envoyé. Les réponses de chat, d’image, de vidéo, de musique, de synthèse vocale et de transcription
portent un en-tête X-Request-Id avec le même id que sa ligne d’Activité,
erreurs comprises.
Les réessais sont effectués pour vous avant qu’une erreur ne soit renvoyée : jusqu’à 4 tentatives, uniquement avant le premier octet de contenu. Voir Modèles et routage.
Réservations et interruptions
UberLLM réserve un coût estimé avant de relayer la requête et règle ensuite selon l’usage réel. Si une requête échoue, est interrompue, ou si vous vous déconnectez en cours de streaming, la réservation inutilisée est libérée — vous n’êtes facturé que pour le contenu réellement produit. Les streams interrompus sont réconciliés à partir d’une estimation du tokenizer et signalés dans Tableau de bord → Activité.
Limitation du débit
Les limitations de débit par clé sont appliquées avec une fenêtre fixe. Sur la surface d'inférence, les vérifications de limitation de débit échouent en mode fermé — si UberLLM ne peut pas vérifier votre limite, la requête est rejetée plutôt que servie sans comptage. Définissez (ou augmentez) la limite de requêtes par minute d'une clé dans Tableau de bord → API keys.
Chaque réponse authentifiée /v1/* contient la fenêtre actuelle de la clé :
| En-tête | Signification |
|---|---|
X-RateLimit-Limit |
Requêtes que cette clé peut envoyer par minute |
X-RateLimit-Remaining |
Requêtes restantes dans la minute actuelle |
X-RateLimit-Reset |
Quand la fenêtre redémarre (secondes Unix) |
Retry-After |
En cas de 429 de cette limite : secondes à attendre avant de réessayer |
Ralentissez lorsque X-RateLimit-Remaining approche 0. Les en-têtes sont omis lorsque
la fenêtre ne peut pas être lue.
API Vendeur (/api/v1/seller/*)
Ces codes utilisent les standards REST :
| HTTP | code |
Signification |
|---|---|---|
| 400 | invalid_request |
Échec de la validation (par ex. endpoint_url non-https, prix manquants pour absolute, multiplier en dehors de 0 < m ≤ 1.5). Le message indique le champ concerné. |
| 400 | model_not_in_catalog |
model_id n'est pas un modèle de catalogue connu. |
| 401 | unauthorized |
JWT de tableau de bord manquant ou invalide. |
| 404 | seller_not_found |
Aucun vendeur pour votre organisation — appelez POST /api/v1/seller/register d'abord. |
| 404 | offer_not_found |
Aucune offre avec cet identifiant sous votre vendeur. |
| 409 | invalid_status_transition |
Changement de statut illégal — par ex. reprendre une offre delisted (une offre déréférencée est terminale). |
Note : une sonde de validation échouée n'est pas une réponse d'erreur. L'offre est créée/mise à jour avec succès et renvoyée avec status: "paused" et un last_probe_error expliquant pourquoi — corrigez l'endpoint et PATCH-la à nouveau à active pour relancer la sonde. Voir Vendeurs.
Erreurs d'authentification
| HTTP | Signification |
|---|---|
| 401 | En-tête Authorization manquant/invalide. Les clés d'inférence sont Bearer ull_... ; les endpoints de tableau de bord utilisent votre JWT de compte. |
| 403 | La clé est valide mais ne dispose pas du scope requis (par exemple, une clé d'inférence seule appelant un endpoint de tableau de bord). |