Kostenschätzungen und Protokollkompatibilität
Prüfen Sie den genauen Preis vor dem API-Aufruf.
Speichern Sie die vollständige Anfrage gemäß aktuellem Modell-Schema in request.json: model, input und optional callBackUrl. Ein Angebot erzeugt keinen Auftrag und reserviert kein Guthaben. Es gilt fünf Minuten und ist an Identität, Modell und Anfrage gebunden.
curl https://api.spicyapi.ai/api/v1/jobs/quote \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
--data-binary @request.jsonestimatedCost, maxCharge und quantity sind Dezimalzeichenfolgen; currency ist USD. Zeigen Sie Betrag, Höchstbetrag und expiresAt an. Nach Bestätigung senden Sie dieselbe Anfrage mit quoteId und expectedCost. Geänderte Eingaben, Ablauf oder Preisänderungen führen bei neuer Annahme zu 40901; holen Sie ein neues Angebot mit Bestätigung ein.
Bei verlorener Antwort verwenden Sie den ursprünglichen Idempotency-Key. Erzeugen Sie keinen zweiten Auftrag mit einem neuen Schlüssel. Bereits angenommene Wiederholungen bleiben nach Ablauf des Angebots gültig. Die endgültige Belastung steht in cost und settled von recordInfo; Schätzung oder Textende belegen keine Abrechnung.
SDK, CLI und MCP
CLI tasks create holt vor der Bestätigung ein Angebot ein. Ohne Interaktion ist ein ausdrückliches --yes nötig. MCP spicyapi_task_quote liefert nur das Angebot. spicyapi_task_create bindet es an signierten Anfragestatus und fordert die Bestätigung des Nutzers an. Der Agent darf sie nicht stellvertretend erteilen.
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" --waitText- und Video-Kompatibilität
Die Basis-URL für das OpenAI-Format lautet https://api.spicyapi.ai/v1. In den SDKs von Anthropic und Google GenAI tragen Sie https://api.spicyapi.ai als Basis-URL ein; /v1 bzw. /v1beta hängen sie selbst an. Alle Kompatibilitätsschnittstellen verwenden denselben API-Schlüssel im Header Authorization: Bearer. Ebenfalls akzeptiert werden x-api-key, den das Anthropic-SDK verwendet, und x-goog-api-key aus dem Google-GenAI-SDK; ?key= in der URL wird nicht akzeptiert. Wählen Sie ein genaues Chat-Modell aus dem aktuellen Katalog. Tools, Bildnachrichten und Generierungsparameter richten sich nach dessen Schema. Die Antwort folgt dem jeweiligen Protokollformat, ohne JSON-Envelope der Plattform. Parameterzuordnung, Stream-Abschluss und Fehlerformate der einzelnen Protokolle beschreibt Text und Streaming.
| Protokoll | Endpunkt |
|---|---|
| Models | GET /v1/models |
| Chat Completions | POST /v1/chat/completions |
| Responses | POST /v1/responses |
| Messages | POST /v1/messages |
| Gemini generateContent | POST /v1beta/models/{model}:generateContent |
| Gemini streamGenerateContent | POST /v1beta/models/{model}:streamGenerateContent |
| Videos | POST /v1/videos |
| Video status | GET /v1/videos/{videoId} |
| Video content | GET /v1/videos/{videoId}/content |
Chat-Modelle mit sichtbarem Begründungstext können die optionale Zeichenfolge message.reasoning_content zurückgeben; beim Streaming heißt sie delta.reasoning_content. Nach einem Tool-Aufruf kann sie in der zugehörigen assistant-Nachricht erhalten bleiben, sofern das aktuelle Modell-Schema dies unterstützt. usage.completion_tokens_details.reasoning_tokens ist bereits in completion_tokens enthalten und darf nicht erneut addiert werden. Nicht jedes Modell liefert Begründungstext oder Token-Details.
Responses benötigt den gesamten Verlauf in input; previous_response_id wird nicht unterstützt. Videos verarbeitet JSON mit model, prompt, input_reference, seconds und size. Der content-Endpunkt leitet per HTTP 302 auf eine kurzlebige signierte URL um. Alle Felder und Zustände stehen in OpenAPI.
quoteId und expectedCost gelten für jobs/createTask und jobs/stream. Die Kompatibilitäts-APIs unter /v1 und /v1beta verwenden den Preis bei Annahme. Nutzen Sie die native Task-API, wenn eine bestätigte Kostengrenze erforderlich ist.
Streaming mit dem offiziellen OpenAI-Client
Für Chat Completions nutzen Sie den offiziellen openai-Client direkt. @spicyapi/sdk übernimmt native Aufgaben, Angebote und Uploads. Installieren Sie openai separat und führen Sie das Beispiel auf Ihrem Server aus. Verwenden Sie eine exakt passende, aufrufbare Chat-Modell-ID und einen dauerhaft gespeicherten Idempotenzschlüssel je Nutzeraktion.
npm install openaiimport 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();
}Das Abbruchsignal gilt auch während des gesamten Stream-Lesens. Ein Abbruch beendet den lokalen Empfang; er storniert keine angenommene Aufgabe und garantiert keine Erstattung. Für Antworten ohne Stream setzen Sie stream: false und lesen choices[0].message.content. Fügen Sie Tool-Call-Fragmente nach index zusammen, behalten Sie die vollständige assistant-Nachricht und ergänzen Sie danach die passenden tool_call_id-Ergebnisse. Tools und Reasoning-Felder setzen Unterstützung im Modell-Schema voraus.
CLI und MCP senden und verfolgen derzeit native Aufgaben; sie bieten kein laufendes Chat-Token-Streaming. Verwenden Sie diesen Client für eine Live-Chat-Oberfläche oder jobs/stream, wenn Sie eine Angebotsbestätigung benötigen.
Spicy-Schema-Vertrag
Einheitliche Requests, kanonische Felder, Formular-Schema, asynchrone Zustände, Fehler, Ergebnisspeicherung und Kompatibilität.
Text und Streaming
Textmodelle im offiziellen Format von OpenAI, Anthropic oder Google Gemini aufrufen und dabei Gespräche, Tools, Streams und Kosten sauber handhaben.

