spicyapiDocumentación
Desarrollar con la API
Contenido principal

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-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

La 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.

ParteFinalidad
sk-spicy-Prefijo fijo que permite reconocer la clave en registros, repositorios y el análisis de secretos de GitHub
Los 8 caracteres siguientesSegmento de búsqueda: permite localizar rápidamente el registro de la clave. Aun así, se verifica la clave completa
Los 40 restantesEl 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

  1. Abre Consola → Claves de API y pulsa Crear clave.
  2. Dale el nombre del servicio que la utilizará (production backend, staging worker). Debes poder reconocerla cuando quieras revocarla.
  3. 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.
  4. 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 .env que cargue tu código. Añade .env a .gitignore antes 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_KEY desde 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ónQué te permite controlarCódigo de negocio al alcanzarla
Límite de gasto diarioLas 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 UTC40202
Presupuesto mensualLo que esta clave puede gastar en el mes calendario actual, calculado en UTC40202
Límite de gasto totalTodo lo que una clave puede gastar durante su vida útil. Sirve para claves entregadas a un socio40202
VencimientoLa clave deja de funcionar al terminar el día seleccionado, en UTC401
Lista de IP permitidasSolo pueden hacer llamadas las direcciones o los rangos CIDR incluidos. Se recomienda para integraciones desde servidores40302
Lista de modelos permitidosPermite, 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és40301

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 claveResultado
Consultar la tarea (recordInfo), reintentarla, destruir su contenido o pedir un enlace de descarga404, 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-Key409, 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 deadlineAt de 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 conQué ocurrióQué hacer
Missing credentialsNo recibimos una claveComprueba 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 recognizedSe envió algo, pero no es una clave de SpicyAPILas 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 expiredLa 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.

En esta página