Saltar al contenido principal

Errores

Los fallos de Platform API utilizan códigos de estado HTTP estándar. Casi todos los fallos incluyen una cadena subcode estable sobre la que los clientes deben decidir — los códigos de estado por sí solos son ambiguos (403 cubre scope, producto, origin, IP y tipo de clave).

Envelope

La mayoría de los errores devuelven un contenedor detail al estilo FastAPI:

{ "detail": "<subcode>" }

Los payloads estructurados 429 (map_load_quota_exceeded, b2b_overloaded, org_overloaded, tile_access_restricted) son objetos planos en el nivel superior — sin wrapper detail:

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

Los 429 con string-detail (map-load hard stops) mantienen el wrapper:

{ "detail": "map_load_hard_stop" }

Algunos endpoints sin streaming informan de errores como HTTP 200 con una clave error — principalmente POST /chat/control/route. Cualquiera que decida solo según el status los interpretará como éxito. Lee siempre el body.

Tabla

EstadoSubcodeSignificadoQué hacer
401(no detail)Clave ausente / no válida / revocada / caducadaComprueba el valor de la clave y que no esté revocada. Viewer no necesita clave.
401publishable_requires_sessionSe envió una clave publishable (kld_pk_…) como bearer directoÚsala mediante el SDK, que la intercambia por una sesión.
403insufficient_scopeClave válida, pero no tiene el scope de la rutaCrea / vuelve a crear una clave con el scope adecuado (ai / maps / design).
403tier_capability_not_allowedLa clave almacenada tenía la capacidad, pero el nivel actual de la organización ya no la admite (normalmente downgrade Pro→Free)Mejora el plan o utiliza un producto admitido por el nivel actual.
403origin_requiredSe utilizó una clave publishable sin un Origin de navegador (p. ej. desde servidor)Las claves publishable son solo para navegador.
403session_origin_mismatchEl Origin de la solicitud no está en la allowlist de la claveActualiza los allowed origins de la clave (consulta Obtener una clave API).
403product_not_allowedLa clave no está permitida para este productoCrea una clave con el producto autorizado (o utiliza viewer, que no necesita clave).
403server_key_in_browserSe utilizó una server key (kld_sk_…) desde un navegadorLas server keys son solo para servidor; también están bloqueadas por CORS.
403ip_not_allowedSe utilizó una server key desde una IP fuera de su allowlistActualiza la allowlist de IP de la clave o llama desde una dirección permitida.
403publishable_key_requiredSe intentó el SDK session exchange con algo distinto de una clave publishableUtiliza una clave kld_pk_… en el paso de session-exchange.
403sessions_disabledLa emisión de sesiones está deshabilitada para este deploymentContacta con soporte — es un estado operativo, no una configuración del cliente.
403sessions_not_configuredLa infraestructura de sesiones no está configuradaContacta con soporte.
422(various)Body de solicitud malformadoCorrige el payload (consulta Endpoints). Durante mint, unknown_scope / unknown_product indican un valor no reconocido; publishable_live_requires_origins significa que se creó una clave publishable live sin allowed origins.
429(flat) map_load_quota_exceededSe agotó la asignación mensual de map-loads de la organizaciónMejora el plan o reduce las cargas de mapa base.
429map_load_hard_stopLa organización de pago supera 5× su asignación de map-loadsEl servicio se detiene aquí; la banda flexible por encima de la asignación sigue funcionando.
429(flat) tile_access_restrictedSolicitud de Tile rechazada (normalmente por falta del origin en la allowlist). Incluye Retry-After: 3600Añade el origin de la página a la allowlist de la clave; vuelve a intentarlo después del intervalo del header.
429(flat) b2b_overloadedEstá activo el descarte global de solicitudesReduce el ritmo y vuelve a intentarlo con jitter.
429(flat) org_overloadedDescarte por organizaciónReduce el ritmo y vuelve a intentarlo.
429limiter_unavailableEl rate limiter no está disponible temporalmenteTrátalo como transitorio; vuelve a intentarlo.
429rate_limitedDemasiadas solicitudes en este momentoRespeta Retry-After.
503(no detail)Servicio de claves no disponible temporalmenteTransitorio — vuelve a intentarlo pronto.

Gestión de claves

Fallos de POST/PATCH/DELETE /shared-api/api-keys/* (Cognito org-admin JWT, no una platform key):

EstadoSubcodeSignificado
403free_plan_publishable_onlyLas organizaciones Free solo pueden crear claves publishable.
403plan_requiredLa organización no tiene una fila de plan API reconocida.
403tier_capability_not_allowedUn PATCH intentó ampliar una clave más allá de lo admitido por el nivel actual de la organización.
403vendor_scope_requires_acknowledgementEl scope vendor requiere una marca explícita de confirmación por clave.
409key_limit_reachedLa organización alcanzó el límite de claves por organización de su plan.

Consulta Obtener una clave API para ver el flujo completo de mint y la ruta de actualización PATCH.

Errores de streaming

En un stream SSE, un fallo terminal llega como un evento error en lugar de un estado HTTP (la respuesta ya empezó con 200):

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

Trata un evento error como el final de ese stream. Un evento quota a mitad del stream no es un error — es el medidor que indica cuánto presupuesto queda. Los clientes deben ignorar nombres de eventos desconocidos — se pueden añadir nuevos eventos dentro del contrato estable sin cambiar de versión.

CORS "bloqueado" en el navegador

Si el navegador informa de un bloqueo CORS en una solicitud real, el Origin de la solicitud no está en la allowlist de la clave — no es un fallo de auth. Consulta CORS & allowed origins.