Aller au contenu principal

Erreurs

Les échecs de la Platform API utilisent les codes d’état HTTP standard. Presque chaque échec contient une chaîne subcode stable sur laquelle les clients doivent se baser — les codes d’état seuls sont ambigus (403 couvre scope, produit, origin, IP et type de clé).

Envelope

La plupart des erreurs renvoient un wrapper detail de style FastAPI :

{ "detail": "<subcode>" }

Les payloads 429 structurés (map_load_quota_exceeded, b2b_overloaded, org_overloaded, tile_access_restricted) sont des objets plats au niveau supérieur — sans wrapper detail :

{ "error": "map_load_quota_exceeded", "meter": "map_loads", "limit": 50000, "used": 50000 }

Les 429 avec string-detail (map-load hard stops) conservent le wrapper :

{ "detail": "map_load_hard_stop" }

Certains endpoints non streaming signalent les échecs sous forme HTTP 200 avec une clé error — notamment POST /chat/control/route. Un client qui se base uniquement sur le status les considérera comme des réussites. Lisez toujours le body.

Tableau

StatutSubcodeSignificationAction
401(no detail)Clé manquante / invalide / révoquée / expiréeVérifiez la valeur de la clé et qu’elle n’a pas été révoquée. Viewer n’a pas besoin de clé.
401publishable_requires_sessionUne clé publishable (kld_pk_…) a été envoyée comme bearer directUtilisez-la via le SDK, qui l’échange contre une session.
403insufficient_scopeClé valide, mais il lui manque le scope de la routeCréez / recréez une clé avec le bon scope (ai / maps / design).
403tier_capability_not_allowedLa clé stockée avait la capacité, mais le niveau actuel de l’organisation ne l’autorise plus (généralement downgrade Pro→Free)Mettez à niveau le plan ou utilisez un produit autorisé par le niveau actuel.
403origin_requiredUne clé publishable a été utilisée sans Origin navigateur (par ex. côté serveur)Les clés publishable sont réservées au navigateur.
403session_origin_mismatchLe Origin de la requête n’est pas dans l’allowlist de la cléMettez à jour les allowed origins de la clé (voir Obtenir une clé API).
403product_not_allowedLa clé n’est pas autorisée pour ce produitCréez une clé avec le produit autorisé (ou utilisez viewer, qui est sans clé).
403server_key_in_browserUne server key (kld_sk_…) a été utilisée depuis un navigateurLes server keys sont uniquement côté serveur ; elles sont aussi bloquées par CORS.
403ip_not_allowedUne server key a été utilisée depuis une IP hors de son allowlistMettez à jour l’IP allowlist de la clé ou appelez depuis une adresse autorisée.
403publishable_key_requiredLe SDK session exchange a été tenté avec autre chose qu’une clé publishableUtilisez une clé kld_pk_… lors de l’étape session-exchange.
403sessions_disabledL’émission de sessions est désactivée pour ce deploymentContactez le support — il s’agit d’un état opérationnel, pas d’un paramètre client.
403sessions_not_configuredL’infrastructure de session n’est pas configuréeContactez le support.
422(various)Body de requête mal forméCorrigez le payload (voir Endpoints). Lors du mint, unknown_scope / unknown_product indiquent une valeur inconnue ; publishable_live_requires_origins signifie qu’une clé publishable live a été créée sans allowed origins.
429(flat) map_load_quota_exceededL’allocation mensuelle de map-loads de l’organisation est épuiséeMettez à niveau ou réduisez les chargements de fonds de carte.
429map_load_hard_stopL’organisation payante dépasse de 5× son allocation de map-loadsLe service s’arrête ici ; la bande souple au-dessus de l’allocation continue de fonctionner.
429(flat) tile_access_restrictedRequête Tile rejetée (généralement origin absent de l’allowlist). Contient Retry-After: 3600Ajoutez l’origin de la page à l’allowlist de la clé ; réessayez après l’intervalle du header.
429(flat) b2b_overloadedLe délestage global des requêtes est actifRéduisez le rythme et réessayez avec jitter.
429(flat) org_overloadedDélestage par organisationRéduisez le rythme et réessayez.
429limiter_unavailableLe rate limiter est temporairement inaccessibleTraitez comme transitoire ; réessayez.
429rate_limitedTrop de requêtes actuellementRespectez Retry-After.
503(no detail)Service de clés temporairement indisponibleTransitoire — réessayez bientôt.

Gestion des clés

Échecs de POST/PATCH/DELETE /shared-api/api-keys/* (Cognito org-admin JWT, pas une platform key) :

StatutSubcodeSignification
403free_plan_publishable_onlyLes organisations Free ne peuvent créer que des clés publishable.
403plan_requiredL’organisation ne possède aucune ligne de plan API reconnue.
403tier_capability_not_allowedUn PATCH a tenté d’élargir une clé au-delà de ce que le niveau actuel de l’organisation autorise.
403vendor_scope_requires_acknowledgementLe scope vendor nécessite un indicateur explicite de confirmation par clé.
409key_limit_reachedL’organisation a atteint la limite de clés par organisation de son plan.

Consultez Obtenir une clé API pour le flux complet de mint et le chemin de mise à jour PATCH.

Erreurs de streaming

Sur un stream SSE, un échec terminal arrive sous forme d’événement error plutôt que de statut HTTP (la réponse a déjà commencé avec 200) :

event: error
data: { "type":"error", "message":"…", "code":"…", "partial_text":"…" }

Traitez un événement error comme la fin de ce stream. Un événement quota en cours de stream n’est pas une erreur — c’est le compteur indiquant le budget restant. Les clients doivent ignorer les noms d’événements inconnus — de nouveaux événements peuvent être ajoutés dans le contrat stable sans changement de version.

CORS "bloqué" dans le navigateur

Si le navigateur signale un blocage CORS sur une vraie requête, le Origin de la requête n’est pas dans l’allowlist de la clé — ce n’est pas un échec d’auth. Consultez CORS & allowed origins.