Limites et quotas

Ce qui borne vos appels, et comment le lire depuis votre code. Toutes ces limites sont administrées : elles changent sans redéploiement, et votre code doit donc les lire plutôt que les supposer.

Débit#

Chaque clé porte un débit en requêtes par minute et un nombre d'appels simultanés. Les deux sont attachés à la clé, pas au compte : séparer vos clés par environnement évite qu'un script de test affame votre production.

Quand le débit est atteint, la réponse est 429 et porte Retry-After, en secondes. Respectez-le. Réessayer plus tôt n'accélère rien et aggrave la charge au moment où le service en a le moins besoin.

HTTP/1.1 429 Too Many Requests
Retry-After: 3

Et si vous réessayez, ajoutez un peu d'aléa à votre attente. Sans cela, tous vos processus bloqués en même temps reviendront en même temps, c'est ce qui transforme un ralentissement passager en panne.

Taille des requêtes#

Le corps d'une requête est borné. Au-delà, la réponse est 413 avant même que le contenu soit lu : refuser tôt coûte moins cher que charger en mémoire ce qu'on va rejeter.

Pour un document volumineux, passez par l'API Fichiers et référencez l'identifiant. C'est ce à quoi elle sert.

Fenêtre de contexte et sortie#

Chaque modèle a sa fenêtre de contexte et son plafond de jetons produits. Ne les codez pas en dur : ils sont servis par GET /v1/pricing, et c'est la seule source qui dit ce que la passerelle applique réellement.

curl https://api.cloudzir.com/v1/pricing
{
  "object": "list",
  "data": [
    {
      "model": "mina-flash",
      "currency": "DZD",
      "unit": "per_million_tokens",
      "input": 250.0,
      "cached_input": 8.0,
      "output": 700.0,
      "context_window": 64000,
      "max_output_tokens": 8192,
      "description": "Tout ce que fait Mina, à la vitesse maximale et au coût le plus bas. Le bon choix quand la réponse doit être immédiate et le volume élevé."
    }
  ]
}

L'exemple montre un seul modèle : la liste contient un objet par modèle activé.

Cette route ne demande pas de clé : la page de vente, la documentation et votre application lisent la même chose.

Solde#

Un solde nul provoque des 402 sur tous les appels facturés qui suivent. Surveillez-le avec le point de solde plutôt que de découvrir la coupure en production.

total_balance est rendu comme une chaîne à quatre décimales, pas comme un nombre flottant. Ce n'est pas une bizarrerie : un flottant ferait perdre des centimes à chaque relecture, et un solde qui dérive de quelques centimes par jour finit par ne plus correspondre à vos écritures.

Mise en cache#

Les jetons d'entrée déjà vus sont facturés au tarif cached_input, nettement plus bas. Le bloc usage de chaque réponse détaille ce qui a été mis en cache :

"usage": {
  "prompt_tokens": 148,
  "completion_tokens": 12,
  "total_tokens": 160,
  "prompt_tokens_details": { "cached_tokens": 96 },
  "prompt_cache_hit_tokens": 96,
  "prompt_cache_miss_tokens": 52
}

Ces champs sont là pour que vous puissiez vérifier ce qu'on vous compte, pas seulement pour l'observer. Voir la mise en cache du contexte pour structurer vos requêtes de façon à en profiter.

Ce qui n'est pas une limite technique#

Les quotas commerciaux d'un forfait (nombre de messages, enveloppe de générations) sont distincts des bornes ci-dessus. Les premiers sont des allocations, révisables depuis l'administration. Les secondes sont des garde-fous : elles protègent le service, et aucune allocation commerciale ne peut les désactiver.

Paramètres

Réponse API