spicyapiDocumentation
Contenu principal

Devis et compatibilité des protocoles

Confirmez le devis exact avant l’appel API.

Enregistrez la requête complète dans request.json selon le schéma actuel du modèle : model, input et callBackUrl facultatif. Le devis ne crée aucune tâche et ne réserve aucun solde. Il lie l’identité, le modèle et la requête pendant cinq minutes.

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 et quantity sont des chaînes décimales ; currency vaut USD. Affichez le montant, le plafond et expiresAt, puis envoyez la même requête avec quoteId et expectedCost après confirmation. Toute modification, expiration ou variation de prix renvoie 40901 lors d’une nouvelle acceptation : demandez un nouveau devis et une confirmation.

En cas de réponse perdue, réutilisez l’Idempotency-Key initial, sans créer une deuxième tâche. Une requête déjà acceptée reste rejouable après expiration du devis. Le coût final se vérifie dans cost et settled de recordInfo ; une estimation ou un marqueur de fin de texte ne prouve pas la facturation.

SDK, CLI et MCP

CLI tasks create demande un devis avant confirmation ; le mode non interactif exige --yes explicite. MCP spicyapi_task_quote ne fait que chiffrer. spicyapi_task_create lie le devis à un état signé puis sollicite l’utilisateur via le protocole. L’agent ne doit pas confirmer à sa place.

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

Compatibilité texte et vidéo

L’URL de base du format OpenAI est https://api.spicyapi.ai/v1 ; pour les SDK Anthropic et Google GenAI, indiquez https://api.spicyapi.ai, car ils ajoutent eux-mêmes /v1 ou /v1beta. Toutes les API compatibles utilisent la même clé API, placée dans l’en-tête Authorization: Bearer ; x-api-key, utilisé par le SDK Anthropic, et x-goog-api-key, utilisé par le SDK Google GenAI, sont également acceptés, mais pas ?key= dans l’URL. Sélectionnez un modèle chat exact dans le catalogue actuel. Outils, messages image et paramètres de génération dépendent de son schéma. Les réponses utilisent le format du protocole correspondant, sans l’enveloppe JSON de la plateforme. La correspondance des paramètres, la fin des flux et le format des erreurs de chaque protocole sont détaillés dans Texte et streaming.

ProtocolePoint d’accès
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

Les modèles Chat qui exposent un texte de raisonnement peuvent renvoyer la chaîne facultative message.reasoning_content, ou delta.reasoning_content en streaming. Après un appel d’outil, vous pouvez la conserver dans le message assistant correspondant si le schéma actuel du modèle le permet. usage.completion_tokens_details.reasoning_tokens est déjà compris dans completion_tokens : ne l’ajoutez pas une seconde fois. Tous les modèles ne renvoient pas de raisonnement ni de détail des tokens.

Responses exige l’historique complet dans input ; previous_response_id n’est pas pris en charge. Videos accepte du JSON avec model, prompt, input_reference, seconds et size. Le point content redirige en HTTP 302 vers une URL signée temporaire. Consultez OpenAPI pour tous les champs et états.

quoteId et expectedCost s’appliquent à jobs/createTask et jobs/stream. Les API compatibles /v1 et /v1beta utilisent le tarif à l’acceptation. Utilisez l’API native de tâches pour un plafond de facturation à confirmer.

OpenAPI · API

Streaming avec le client OpenAI officiel

Pour Chat Completions, utilisez directement le client officiel openai. @spicyapi/sdk gère les tâches natives, devis et téléversements. Installez openai séparément et exécutez cet exemple sur votre serveur, avec un identifiant exact de modèle de chat appelable et une clé d’idempotence persistante par action utilisateur.

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();
}

Le signal d’annulation couvre la connexion et toute la lecture du flux. L’interruption arrête la réception locale ; elle n’annule pas une tâche acceptée et ne garantit aucun remboursement. Sans streaming, utilisez stream: false et lisez choices[0].message.content. Assemblez les fragments d’appels d’outils par index, conservez le message assistant complet, puis ajoutez les résultats avec leur tool_call_id. Les outils et champs de raisonnement doivent être pris en charge par le schéma du modèle.

CLI et MCP soumettent et suivent les tâches natives, sans streaming des tokens de chat. Utilisez ce client pour une interface en direct, ou jobs/stream pour confirmer un devis.

Sur cette page