spicyapiDocumentación
Contenido principal

Cotizaciones y compatibilidad

Confirma el precio exacto antes de llamar a la API.

Guarda la solicitud completa en request.json según el esquema actual del modelo: model, input y callBackUrl opcional. La cotización no crea tareas ni reserva saldo. Vincula la identidad, el modelo y la solicitud durante cinco minutos.

curl https://api.spicyapi.ai/api/v1/jobs/quote \
  -H "Authorization: Bearer $SPICY_API_KEY" \
  -H "Content-Type: application/json" \
  --data-binary @request.json

estimatedCost, maxCharge y quantity son cadenas decimales; currency es USD. Muestra el importe, el máximo y expiresAt. Tras la confirmación, envía la misma solicitud con quoteId y expectedCost. Los cambios de entrada, caducidad o precio devuelven 40901 al aceptar una solicitud nueva: vuelve a cotizar y confirmar.

Si se pierde la respuesta, reutiliza el Idempotency-Key original; no crees otra tarea con una clave nueva. Una solicitud ya aceptada puede repetirse tras caducar la cotización. La tarifa final figura en cost y settled de recordInfo; una estimación o el final del texto no acreditan la liquidación.

SDK, CLI y MCP

CLI tasks create cotiza antes de confirmar; el modo no interactivo exige --yes explícito. MCP spicyapi_task_quote solo cotiza. spicyapi_task_create vincula la cotización al estado firmado y pide confirmación al usuario mediante el protocolo. El agente no debe confirmar por él.

spicyapi tasks quote --model "$SPICY_MODEL" --input-file input.json
spicyapi tasks create --model "$SPICY_MODEL" --input-file input.json \
  --idempotency-key "$SPICY_IDEMPOTENCY_KEY" --wait

Compatibilidad de texto y video

La URL base del formato OpenAI es https://api.spicyapi.ai/v1; en los SDK de Anthropic y Google GenAI, indica https://api.spicyapi.ai como URL base y ellos añaden /v1 o /v1beta por su cuenta. Todas las API compatibles usan la misma clave API, en la cabecera Authorization: Bearer; también se aceptan x-api-key, la que usa el SDK de Anthropic, y x-goog-api-key, la del SDK de Google GenAI. En cambio, ?key= en la URL no se acepta. Selecciona un modelo chat exacto del catálogo actual; las llamadas a herramientas, los mensajes con imágenes y los parámetros de generación dependen del esquema del modelo. Las respuestas siguen el formato del protocolo correspondiente, sin la envoltura JSON de la plataforma. La correspondencia de parámetros de cada protocolo, cómo termina el flujo y la forma de los errores se explican en Texto y streaming.

ProtocoloRuta
ModelsGET /v1/models
Chat CompletionsPOST /v1/chat/completions
ResponsesPOST /v1/responses
MessagesPOST /v1/messages
Gemini generateContentPOST /v1beta/models/{model}:generateContent
Gemini streamGenerateContentPOST /v1beta/models/{model}:streamGenerateContent
VideosPOST /v1/videos
Video statusGET /v1/videos/{videoId}
Video contentGET /v1/videos/{videoId}/content

Los modelos Chat que muestran texto de razonamiento pueden devolver la cadena opcional message.reasoning_content, o delta.reasoning_content en streaming. Al continuar después de una llamada a herramientas, puedes conservarla en el mensaje assistant correspondiente si el esquema actual del modelo lo admite. usage.completion_tokens_details.reasoning_tokens solo indica la parte de razonamiento de los tokens de salida y ya está incluido en completion_tokens; no lo sumes de nuevo. No todos los modelos devuelven razonamiento ni detalles de tokens.

Responses necesita toda la conversación en input; previous_response_id no es compatible. Videos recibe JSON con model, prompt, input_reference, seconds y size. El endpoint content redirige con HTTP 302 a una URL firmada temporal. Consulta todos los campos y estados en OpenAPI.

Los datos de cotización quoteId y expectedCost se aplican a jobs/createTask y jobs/stream. Las API compatibles /v1 y /v1beta usan el precio vigente al aceptar la solicitud. Usa la API nativa de tareas cuando necesites confirmar un límite de cargo.

OpenAPI · API

Streaming con el cliente oficial de OpenAI

Para Chat Completions, usa directamente el cliente oficial openai. @spicyapi/sdk gestiona tareas nativas, cotizaciones y subidas. Instala openai por separado y ejecuta el ejemplo en tu servidor, con el ID exacto de un modelo de chat disponible y una clave de idempotencia persistente por acción del usuario.

npm install openai
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.SPICY_API_KEY,
  baseURL: "https://api.spicyapi.ai/v1",
  maxRetries: 0,
});
const signal = AbortSignal.timeout(120_000);
const stream = await client.chat.completions.create({
  model: process.env.SPICY_MODEL,
  messages: [{ role: "user", content: "Explain a rainbow in one sentence." }],
  stream: true,
  stream_options: { include_usage: true },
}, {
  signal,
  headers: { "Idempotency-Key": process.env.SPICY_IDEMPOTENCY_KEY },
});
try {
  for await (const chunk of stream) {
    process.stdout.write(chunk.choices[0]?.delta.content ?? "");
    if (chunk.usage) process.stderr.write(JSON.stringify(chunk.usage) + "\n");
  }
} finally {
  stream.controller.abort();
}

La señal de cancelación cubre la conexión y toda la lectura del flujo. Interrumpirlo detiene la recepción local; no cancela una tarea aceptada ni garantiza un reembolso. Sin streaming, usa stream: false y lee choices[0].message.content. Une los fragmentos de llamadas a herramientas por index, conserva el mensaje assistant completo y añade después los resultados con su tool_call_id. Activa herramientas y campos de razonamiento solo si el schema del modelo los admite.

CLI y MCP envían y siguen tareas nativas; no ofrecen streaming de tokens de chat. Usa este cliente para una interfaz en directo, o jobs/stream si necesitas confirmar una cotización.

En esta página