<!--
  AUTO-GENERADO por scripts/import-corpus.mjs a partir de manuales/corpus/ — NO EDITAR A MANO.
  Para cambiar este contenido: edita manuales/neutros/*.html, regenera el corpus
  (manuales/build-corpus.mjs) y vuelve a ejecutar "pnpm run import:corpus".
  Fuente: manuales/neutros/50-manual-claves-api.html#seccion-12
-->

| Código | Cuándo ocurre | Qué hacer |
| --- | --- | --- |
| **401**
`INVALID_CREDENTIALS` | La clave no existe, está mal copiada, o **está revocada** — el mensaje es el mismo genérico («Invalid API key») en los tres casos, para no dar pistas a quien intenta adivinar claves. | Revisa que has copiado la clave completa y sin espacios. Si la revocaste tú mismo, crea una clave nueva (apartado 4/5). |
| **401**
`TOKEN_EXPIRED` | La clave superó su fecha de caducidad (apartado 8). | Crea una clave nueva; si necesitas que no caduque, elige «Nunca» al crearla. |
| **401**
`INVALID_CREDENTIALS` («Origin not allowed») | La clave tiene orígenes restringidos (apartado 6) y la petición llega desde un navegador en un dominio que no está en la lista. | Añade ese dominio a la lista de orígenes permitidos de la clave, o usa una clave sin restricción para llamadas servidor-a-servidor. |
| **403**
`PERMISSION_DENIED` | La clave intenta una acción que su rol sellado no cubre — por ejemplo, una clave personal de un rol editor o viewer llamando a una ruta exclusiva de admin, o pidiendo crear/listar claves de la **empresa** sin ser admin («Only admins can create/list tenant-owned API keys»). | Usa una clave con permisos suficientes (una clave de empresa, o una personal de un admin) para esa acción concreta. |
| **429**
`RATE_LIMIT_EXCEEDED` | Se ha superado el cupo de la clave (120 peticiones/minuto por defecto, apartado 11) o algún otro cupo aplicable a la petición. | Espera al minuto siguiente y reduce la frecuencia de llamadas; si tu integración necesita más cupo de forma sostenida, contacta con tu proveedor. |