Skip to Content
🛠 APILimites & codes d'erreur

Limites & codes d’erreur

L’API PetitPanda applique des rate limits par clé et retourne des codes HTTP standards avec un payload d’erreur structuré. Ce guide te donne tout ce qu’il faut pour gérer ça proprement côté client.

Rate limits par plan

PlanPar minutePar heure
Pro100 req/min1 000 req/h
Business200 req/min5 000 req/h
Enterpriseillimitéillimité

Les limites s’appliquent par clé API, pas par compte. Si tu as 3 clés actives sur un plan Pro, chaque clé a son propre quota de 100 req/min.

Headers de quota

Toutes les réponses incluent des headers pour suivre ton quota en temps réel :

HeaderDescription
X-RateLimit-LimitQuota par minute du plan
X-RateLimit-RemainingRequêtes restantes dans la fenêtre courante
X-RateLimit-ResetTimestamp UNIX du reset de la fenêtre

Exemple de réponse :

HTTP/1.1 200 OK X-RateLimit-Limit: 100 X-RateLimit-Remaining: 87 X-RateLimit-Reset: 1747749900 Content-Type: application/json
💡 Surveille X-RateLimit-Remaining dans ton code et mets en pause tes appels avant d’atteindre 0. C’est plus propre que d’attraper les 429 après coup.

Codes d’erreur HTTP

CodeSignificationCause typique
400Bad RequestJSON mal formé, champ requis manquant
401UnauthorizedClé API absente, invalide, ou révoquée
402Payment RequiredCrédits insuffisants pour l’opération
403ForbiddenScope manquant sur la clé (ex : appel /generate-post sans reels:generate)
404Not FoundRessource inexistante (draft_id, schedule_id introuvable)
422Unprocessable EntityValeur invalide (ex : platform: "facebook" qui n’est pas supporté)
429Too Many RequestsRate limit dépassé. Attends le X-RateLimit-Reset
500Internal Server ErrorBug côté PetitPanda. Réessaie avec backoff, puis contacte le support

Format des erreurs

Toutes les erreurs retournent un body JSON avec la même structure :

{ "error": { "code": "insufficient_credits", "message": "Tu n'as pas assez de crédits pour cette opération.", "details": { "required": 5, "available": 2 } } }
ChampTypeDescription
error.codestringCode machine-readable, stable d’une version à l’autre
error.messagestringMessage lisible en français
error.detailsobject | nullInfos contextuelles (variables selon l’erreur)

Codes d’erreur courants

CodeDescription
invalid_api_keyClé absente, mal formée, ou révoquée
missing_scopeLa clé n’a pas le scope requis par cet endpoint
insufficient_creditsPas assez de crédits pour cette opération
invalid_platformValeur de platform non reconnue
draft_not_founddraft_id inconnu ou n’appartenant pas à ton compte
schedule_conflictUne publication est déjà programmée à cette heure pour cette plateforme
rate_limit_exceededQuota par minute ou par heure dépassé
platform_token_expiredLe token OAuth de la plateforme cible doit être renouvelé

Bonnes pratiques

  • Retry exponentiel sur 429 et 500. Attends 1s, puis 2s, puis 4s, max 5 tentatives.
  • Pas de retry sur 4xx (sauf 429). Une 400 ou 422 ne deviendra jamais valide avec un retry. Corrige le payload.
  • Log error.code, pas error.message. Le code est stable, le message peut changer.
  • Surveille credits.low via webhook plutôt que de checker credits_remaining à chaque appel.

Et après ?

Last updated on