Erreurs & limites

Quand quelque chose tourne mal.

Les erreurs reviennent sous forme d'enveloppe JSON avec un type stable, un message lisible et un request_id que vous pouvez nous transmettre pour signaler un problème.

Réponse réelle - clé invalide (HTTP 401)
{"type": "error", "error": {
   "type": "authentication_error",
   "message": "Invalid or revoked API key.",
   "request_id": "063f8b83-eee2-4383-a5cf-11e4bcd29d7c"
 }}
HTTPSignificationQue faire
400Corps malformé (champ manquant ou de mauvais type)Le message nomme le champ exact - corrigez et réessayez.
401Clé API invalide ou révoquéeVérifiez la clé ; émettez-en une nouvelle dans la console.
402Solde épuisé, aucune carte enregistrée, ou plafond de palier atteintRechargez votre solde ou enregistrez une carte dans la console. La réponse contient balance_cents et floor_cents, ce qui vous indique lequel des deux vous a arrêté.
404Souvenir, store ou image introuvableVérifiez l'id. get_image répond également 404 lorsque le souvenir existe mais ne porte aucune image.
409Ce nom est déjà prisLes noms de store et de workspace sont uniques au sein d'un compte - choisissez-en un autre.
413Corps de requête au-delà de 10MBLe Base64 pèse environ 33% de plus que le fichier qu'il encode, redimensionnez donc l'image avant de l'encoder.
429Limite de débit atteinteLe SDK réessaie déjà pour vous, avec backoff et jitter, en respectant Retry-After. En recevoir une signifie que les tentatives sont épuisées - réduisez le nombre d'appels simultanés plutôt que d'enrouler votre propre boucle autour.
501Le moteur de ce modèle n'implémente pas cet endpointLes images et l'historique des révisions demandent un moteur plus récent. GET /api/v1/models indique quels modèles servent quoi.
5xxProblème côté serveurRéessayez avec backoff, mais pas aveuglément. Le SDK ne réessaie pas automatiquement un 5xx ici, car chaque appel de cette API est un POST et le serveur a peut-être déjà enregistré votre requête. Renvoyez-la avec une clé d'idempotence pour qu'une répétition ne puisse pas écrire deux fois, et joignez le request_id si vous nous contactez.

Chaque erreur est un WosError, et chaque statut possède en plus sa propre classe - BadRequestError, AuthenticationError, PaymentRequiredError, NotFoundError, ConflictError, RateLimitError, ServerError, APIConnectionError. Attrapez celle que vous voulez traiter au lieu de comparer des numéros.

# SDK error handling (Python)
from wontopos import Client, WosError, RateLimitError, PaymentRequiredError

try:
    mem.search("...", user_id="alice")
except PaymentRequiredError: ...      # 402 - top up
except RateLimitError: ...            # 429 - the SDK already retried; slow down
except WosError as e: ...            # e.status, e.message, e.request_id
except (ValueError, TypeError): ...    # never left the client

Certaines erreurs ne nous parviennent jamais. La clé API, l'id du store, la clé d'idempotence et l'image sont toutes vérifiées avant l'envoi de la requête, et celles-là lèvent ValueError ou TypeError - pas WosError. Un except WosError seul ne les attrapera pas.

Sécurité des clés. Votre clé n'est affichée qu'une fois à la création et n'est stockée que sous forme de hash de notre côté. Gardez-la dans une variable d'environnement ; en cas de fuite, révoquez-la dans la console - la révocation est immédiate.

Les limites de débit sont par compte, partagées entre toutes vos clés, et augmentent avec votre palier - voir Paliers d'utilisation. L'usage de votre compte est visible dans la console.