Autenticación
Formato de claves, restricciones por clave, tareas visibles para cada una y qué hacer en cuanto una clave se filtra.
Todas las llamadas de API que crean, consultan o facturan algo llevan tu clave de API en el encabezado Authorization. El catálogo público de modelos utilizado para evaluar el servicio es la única excepción: no necesita una clave.
Authorization: Bearer sk-spicy-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxLa API nativa (/api/v1/*) acepta únicamente claves bearer, sin cookies ni parámetros de consulta.
Los endpoints de compatibilidad de texto y video (/v1, /v1beta) utilizan la misma clave y también aceptan el encabezado x-api-key de los SDK de Anthropic y x-goog-api-key de los SDK de Google GenAI, de modo que los SDK oficiales funcionan cambiando solo la URL base; consulta Texto y streaming. Esos dos encabezados no tienen efecto en /api/v1, y ningún endpoint acepta una clave en la cadena de consulta de la URL.
Las claves de API y la consola son independientes
Solo /api/v1, /v1 y /v1beta aceptan claves de API. La consola web utiliza su propia sesión del navegador. Por tanto, una sesión de la consola no puede utilizarse como clave de API y una clave filtrada no permite iniciar sesión en la consola. Enviar un tipo de credencial incorrecto siempre devuelve 401, nunca un error de permisos.
Formato de una clave
Un prefijo fijo sk-spicy- seguido de 48 caracteres hexadecimales en minúsculas.
| Parte | Finalidad |
|---|---|
sk-spicy- | Prefijo fijo que permite reconocer la clave en registros, repositorios y el análisis de secretos de GitHub |
| Los 8 caracteres siguientes | Segmento de búsqueda: permite localizar rápidamente el registro de la clave. Aun así, se verifica la clave completa |
| Los 40 restantes | El resto del secreto. Solo almacenamos un hash SHA-256 de toda la clave con un secreto adicional o pepper; tampoco podemos recuperar su valor |
El prefijo es deliberado: es preferible detectar la clave y recibir una notificación antes de descubrir que otra persona ya está gastando tu saldo.
La clave se muestra una sola vez
Cópiala o pulsa Guardar como archivo antes de cerrar el cuadro de diálogo. Si la pierdes, tendrás que crear otra. No podemos recuperarla: es una medida intencional, ya que poder recuperarla implicaría almacenarla en texto claro.
Crear una clave
- Abre Consola → Claves de API y pulsa Crear clave.
- Dale el nombre del servicio que la utilizará (
production backend,staging worker). Debes poder reconocerla cuando quieras revocarla. - Opcionalmente, abre Avanzado para configurar límites de gasto, una lista de modelos permitidos, una lista de IP permitidas y una fecha de vencimiento. Puedes cambiarlo todo después.
- Copia la clave o pulsa Guardar como archivo y confirma que la guardaste. Una vez cerrado el cuadro de diálogo, la clave no puede volver a mostrarse.
Para crear claves necesitas el rol de propietario, administrador o desarrollador en el equipo. La clave pertenece al equipo seleccionado en la parte superior izquierda de la consola: su uso y sus límites se contabilizan en ese equipo. Cada equipo puede tener hasta 50 claves activas. Tu cuenta también necesita un correo verificado y saldo antes de que una clave pueda ejecutar trabajos de pago; consulta Configuración de cuenta.
Dónde guardar la clave
- En tu computadora, para pruebas: usa
export SPICY_API_KEY="…"en la terminal (dura hasta que cierres esa ventana) o un archivo.envque cargue tu código. Añade.enva.gitignoreantes de tu primer commit. - En un servidor o plataforma de alojamiento: utiliza su configuración de secretos o variables de entorno y lee
SPICY_API_KEYdesde el entorno en tu código. - Nunca pegues la clave en el código fuente, un chat, una captura de pantalla, un ticket de soporte ni el prompt de un asistente de IA.
Nunca distribuyas una clave al cliente
Cualquier dato incluido en un navegador o una aplicación puede extraerse
Empaquetar, ofuscar o dividir la cadena entre archivos no la protege. Cualquiera con herramientas de desarrollo o un descompilador puede obtener tu clave, y una clave filtrada seguirá funcionando hasta agotar el saldo o sus límites.
Cuando un frontend necesite generar contenido, hazlo a través de tu propio backend: el navegador te llama a ti y tú nos llamas a nosotros. En esa misma capa puedes aplicar tus propias cuotas por usuario.
Esto también se aplica a los binarios móviles, clientes de escritorio, notebooks públicos, registros de CI y cualquier dato que termine en una salida de curl -v pegada en un ticket de soporte.
Las herramientas que tú utilizas en tu propio navegador son un caso diferente. La API acepta llamadas desde navegadores, así que las herramientas que ejecutas para ti, como la extensión de SillyTavern o una aplicación de roleplay donde pegas tu propia clave, pueden llamarla directamente. La regla anterior se refiere a incluir una clave en algo que otras personas cargan. Asigna a cada herramienta su propia clave con un límite diario, para poder consultar su gasto y revocarla de forma independiente.
Restricciones por clave
Configúralas en la consola al crear la clave o posteriormente. Se aplican en el servidor.
| Restricción | Qué te permite controlar | Código de negocio al alcanzarla |
|---|---|---|
| Límite de gasto diario | Las claves nuevas no tienen límite salvo que lo configures. Define tu propio importe para limitar el impacto de una configuración errónea o una filtración. Se reinicia cada día en UTC | 40202 |
| Presupuesto mensual | Lo que esta clave puede gastar en el mes calendario actual, calculado en UTC | 40202 |
| Límite de gasto total | Todo lo que una clave puede gastar durante su vida útil. Sirve para claves entregadas a un socio | 40202 |
| Vencimiento | La clave deja de funcionar al terminar el día seleccionado, en UTC | 401 |
| Lista de IP permitidas | Solo pueden hacer llamadas las direcciones o los rangos CIDR incluidos. Se recomienda para integraciones desde servidores | 40302 |
| Lista de modelos permitidos | Permite, por ejemplo, limitar claves de staging a modelos económicos. Sin restricciones, la clave también puede llamar a modelos que se añadan después | 40301 |
La tarjeta de cada clave muestra sus límites actuales, que puedes cambiar allí en cualquier momento.
Los límites incluyen tanto el dinero retenido para tareas en ejecución como el ya gastado, por lo que una clave puede alcanzar su límite mientras todavía hay tareas en curso. msg indica qué límite se alcanzó. Un 40202 cuyo msg menciona la cuota de la plataforma no corresponde a tu clave: crear otra no ayudará, así que reintenta más tarde.
La lista de IP permitidas se compara con tu dirección pública real tal como la ve nuestra red perimetral, no con la dirección del último proxy. Tu dirección de salida es la IP pública desde la que salen las solicitudes del servidor: la mayoría de las plataformas de alojamiento la muestran en su configuración de red, y en tu propia máquina puedes verla con curl https://ifconfig.me.
Las tareas pertenecen a la clave que las creó
La API solo permite ver una tarea con la clave de API que la creó. Con cualquier otra clave, incluso del mismo equipo:
| Acción con otra clave | Resultado |
|---|---|
Consultar la tarea (recordInfo), reintentarla, destruir su contenido o pedir un enlace de descarga | 404, igual que si la tarea no existiera |
Listar tareas (GET /api/v1/jobs) o consultar uso (GET /api/v1/usage) | Solo aparecen las tareas y el gasto de esa clave |
Reenviar una solicitud con el mismo Idempotency-Key | 409, sin el ID de la tarea original |
Un 409 después de cambiar de clave no significa que la tarea no se haya creado
Si una solicitud agota su tiempo de espera con una clave y la reenvías con otra, el 409 oculta una tarea que podría estar ejecutándose y que se facturará. No lo interpretes como «no creada» ni reenvíes con una clave de idempotencia nueva: eso pagaría una segunda generación. Reenvía con la clave de API utilizada en el primer intento o busca la tarea en la consola.
Hay dos aspectos que no están vinculados a la clave. Los webhooks de una tarea se entregan incluso después de revocar la clave que la creó. Además, todas las tareas del equipo, con independencia de la clave que las creó, aparecen en Consola → Logs, donde los detalles de cada una muestran la Clave utilizada.
Rotación
- Una clave por entorno (producción / staging / local), para poder revocar una sin afectar a las demás.
- Rotación planificada: crea la clave nueva y envía con ella solo tareas nuevas. Mantén activa la antigua hasta que todas sus tareas hayan llegado a un estado final (como máximo, en el
deadlineAtde cada tarea) y hayas recogido sus resultados; después revócala. Utiliza esta secuencia únicamente cuando todavía confíes en la clave antigua. - La revocación es inmediata e irreversible. No hay una caché cuyo vencimiento debas esperar ni una forma de reactivar la clave: tendrás que crear otra.
Después de una filtración
Revócala de inmediato
En Consola → Claves de API, abre las acciones de la clave y selecciona Revocar. Tiene efecto inmediato.
No esperes a que terminen tus tareas en curso: desde ese momento ya no podrás consultarlas por la API con esa clave. Las tareas aceptadas siguen ejecutándose y se facturan. Recoge sus resultados mediante tus webhooks o en Consola → Logs. Ante una filtración, no conviene esperar.
Crea una sustituta
Crea una clave nueva y actualiza la configuración del servidor. No mantengas activa la clave filtrada mientras preparas su sustituta.
Comprueba para qué se utilizó
Abre Consola → Logs durante el período de exposición y busca tareas que no hayas creado: modelos desconocidos, un volumen inusual o gastos que no puedas explicar. Los detalles de cada tarea muestran la Clave utilizada, y Exportar CSV incluye el ID de la clave de cada tarea. La página de claves de API también indica cuándo se utilizó cada una por última vez.
Refuerza la sustituta
Asigna a la nueva clave una lista de IP permitidas y un límite diario adecuados, y elimina la exposición original de tu código, tus registros o tu configuración de despliegue.
Si hubo gastos inesperados, contáctanos desde Consola → Soporte con los ID de las tareas o los valores de request_id.
Cómo se presenta un fallo
{
"code": 401,
"msg": "Credentials are invalid or expired",
"request_id": "req_01k3m8x9q2z4v7n5p6r8s0t1w2"
}El estado HTTP también es 401. Todos los fallos de autenticación devuelven code: 401, y msg indica de qué tipo se trata:
msg comienza con | Qué ocurrió | Qué hacer |
|---|---|---|
Missing credentials | No recibimos una clave | Comprueba que el encabezado diga Authorization: Bearer … y que SPICY_API_KEY esté definida en el proceso que envía la solicitud (una variable definida en una ventana de terminal no existe en otra) |
API key format is not recognized | Se envió algo, pero no es una clave de SpicyAPI | Las claves comienzan con sk-spicy-. Busca un prefijo Bearer ausente, un carácter faltante o adicional, comillas o un salto de línea copiado junto a la clave |
Credentials are invalid or expired | La clave tiene el formato correcto, pero no existe, fue revocada o venció | Estos casos se hacen deliberadamente indistinguibles para impedir que alguien averigüe qué claves existen. Comprueba su estado en Consola → Claves de API o crea otra |
Usa code para la lógica, no el texto: la redacción puede cambiar y sigue tu idioma de errores. Consulta Errores para obtener más información sobre cómo distinguirlos.
Si la propia cuenta no puede llamar a la API (correo sin verificar o cuenta suspendida), recibes 403. Cambiar de clave no resolverá ese caso.

