OpenAPI 3.1
Kunden-API-Referenz
Diese Seite beschreibt die unterstützte Kundenanfrage für Inferenz und ihre Antwort. Laden Sie für Ihre Tools das maschinenlesbare OpenAPI-Dokument herunter.
OpenAPI-JSON herunterladenBeispiele zur Modell-API
Wählen Sie eine veröffentlichte Modellkennung, ein API-Protokoll und eine Sprache aus, um ein Anfragebeispiel anzuzeigen. Bewahren Sie Kunden-API-Schlüssel auf einem vertrauenswürdigen Server auf.
Protokollanforderungen
OpenAI-kompatible Anfragen verwenden POST /chat/completions an der konfigurierten Kunden-API-Basis-URL (Standard: https://fusionpointai.com/api/v1). Authentifizieren Sie sich mit Authorization: Bearer und einem Kundenschlüssel mit Inferenzzugriff. Die vollständige Standard-URL lautet https://fusionpointai.com/api/v1/chat/completions.
Claude-Messages-Anfragen verwenden POST /api/v1/messages. Senden Sie den Kundenschlüssel in x-api-key und setzen Sie anthropic-version auf 2023-06-01. Die Basis-URL des Anthropic SDK lautet https://fusionpointai.com/api, da das SDK /v1/messages ergänzt. Bearer-Authentifizierung wird ebenfalls unterstützt.
Unterstützte Funktionen
Der aktuelle OpenAI-kompatible Chat-Endpunkt verarbeitet synchrone Textnachrichten. Dieser Endpunkt unterstützt weder Streaming noch Tool-Aufrufe.
Der Claude-Messages-Proxy erhält native Inhaltsblöcke, Tool-Daten und echtes Server-Sent-Event-Streaming, sofern das ausgewählte Upstream-Modell diese Funktionen unterstützt.
Client installieren
Installieren Sie die Python- und Node.js-Clients als getrennte Pakete:
Python: pip install openai anthropic
Node.js: npm install openai @anthropic-ai/sdk
curl 'https://fusionpointai.com/api/v1/chat/completions' \
-H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "Astra 6",
"messages": [
{
"role": "user",
"content": "Summarize this in one sentence."
}
],
"temperature": 0.7,
"max_tokens": 300
}'
Anfragemuster
API-Schlüssel sicher einrichten
Erstellen Sie einen Kundenschlüssel mit Inferenzzugriff und stellen Sie ihn einem Serverprozess über dessen Secret-Manager oder Umgebung bereit.
- Setzen Sie
FUSIONPOINTAI_API_KEYin der Serverumgebung. Hinterlegen Sie den Schlüssel weder im Browsercode noch in der Versionsverwaltung. - Verwenden Sie HTTPS und beschränken Sie den Schlüssel auf das benötigte Konto und die erforderlichen Inferenzrechte.
- Entfernen Sie Authorization- und
x-api-key-Header aus Protokollen, Traces und Supportanfragen. Widerrufen Sie einen möglicherweise offengelegten Schlüssel.
export FUSIONPOINTAI_API_KEY="YOUR_CUSTOMER_API_KEY"
Exakte Modellkennung auswählen
Das Modellfeld ist ein Routingwert, kein Anzeigename. Wählen Sie eine Kennung, die im aktuellen Modellkatalog veröffentlicht ist.
- Wählen Sie ein aktives oder älteres Modell, das für Inferenz als verfügbar markiert ist.
- Kopieren Sie seine Kennung exakt einschließlich Satzzeichen und Versionszusatz. Leiten Sie keine Kennung aus dem Modellnamen ab.
- Ist keine Kennung veröffentlicht, warten Sie auf den Katalogeintrag, statt einen Wert zu erraten.
model_id = "Astra 6"
# Use this exact identifier with either protocol.
System- und mehrstufige Nachrichten senden
Behalten Sie die ursprüngliche Reihenfolge der Gesprächsbeiträge bei und verwenden Sie nur Rollen und Inhaltsformen, die das gewählte Protokoll und Modell unterstützen.
- Senden Sie bei OpenAI-kompatiblen Anfragen Nachrichten von system, user und assistant als geordnete Einträge mit Textinhalt.
- Übermitteln Sie bei Claude Messages Systemanweisung und geordnete user-/assistant-Beiträge in den protokolleigenen Feldern.
- Bewahren Sie nur den für Ihre Anwendung nötigen Gesprächskontext auf und beachten Sie das Kontextlimit des ausgewählten Modells.
response = client.messages.create(
model="Astra 6",
max_tokens=512,
system="Answer in clear, concise German.",
messages=[
{"role": "user", "content": "What is an API?"},
{"role": "assistant", "content": "An API lets software exchange requests and responses."},
{"role": "user", "content": "Give a practical example."},
],
)
for block in response.content:
if block.type == "text":
print(block.text)
JSON-Antworten anfordern
Wenn Ihre Anwendung strukturierte Ausgaben benötigt, prüfen Sie die Antwort anhand Ihres eigenen Schemas, bevor Sie sie verwenden.
- Verwenden Sie nur die strukturierten Ausgabeoptionen, die das ausgewählte Protokoll und Upstream-Modell unterstützen.
- Behandeln Sie generiertes JSON als nicht vertrauenswürdige Eingabe: Parsen Sie es, prüfen Sie Felder und Typen und behandeln Sie ungültige Ausgaben.
- Nehmen Sie einen JSON-Modus nicht als unterstützt an, sofern die Modelldokumentation das nicht bestätigt.
import json
# JSON is generated content, not trusted application input.
response = client.messages.create(
model="Astra 6", max_tokens=256,
messages=[{"role": "user", "content": 'Return only JSON with a string field named "summary". Explain an API in one sentence.'}],
)
text = "".join(block.text for block in response.content if block.type == "text")
try:
result = json.loads(text)
if not isinstance(result, dict) or not isinstance(result.get("summary"), str):
raise ValueError("Unexpected response schema")
print(result["summary"])
except (json.JSONDecodeError, ValueError) as error:
print("Handle invalid model output:", error)
SSE-Ausgabe in Echtzeit empfangen
Streaming hängt vom Protokoll und Upstream-Modell ab. Eine gewöhnliche JSON-Antwort ist kein Stream.
- OpenAI-kompatibler Chat liefert derzeit synchronen Text und unterstützt kein Streaming.
- Verwenden Sie bei Claude Messages den stream-Modus, sofern das gewählte Upstream-Modell ihn unterstützt; der Proxy leitet native Server-Sent Events weiter.
- Verarbeiten Sie Ereignisse fortlaufend, beenden Sie den Empfang bei Abschluss oder Fehler und behandeln Sie Teilausgaben nicht als fertige Antwort.
# client is the Anthropic client configured above.
with client.messages.stream(
model="Astra 6", max_tokens=512,
messages=[{"role": "user", "content": "Explain API authentication."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
final_message = stream.get_final_message()
print("\nStop reason:", final_message.stop_reason)
Tools, Inhaltsblöcke und Fehler behandeln
Erhalten Sie protokolleigene Datenstrukturen und legen Sie das Verhalten Ihrer Anwendung für Tool-Aufrufe, multimodale Inhalte und Fehler ausdrücklich fest.
- OpenAI-kompatibler Chat unterstützt derzeit weder Tool-Aufrufe noch nicht textuelle Inhaltsblöcke.
- Claude erhält native Inhaltsblöcke sowie Tool-Aufruf- und Ergebnisdaten, sofern das gewählte Upstream-Modell dies unterstützt. Prüfen Sie Toolnamen und Argumente vor der Ausführung.
- Prüfen Sie HTTP-Status und Antworttext, unterscheiden Sie Authentifizierungs-, Berechtigungs-, Validierungs- und Ratenbegrenzungsfehler und wiederholen Sie vorübergehende Fehler mit Wartezeit.
import json
from datetime import datetime, timezone
from anthropic import APIError
messages = [{"role": "user", "content": "What time is it in UTC?"}]
tools = [{
"name": "current_utc_time", "description": "Read the current UTC time.",
"input_schema": {"type": "object", "properties": {}, "additionalProperties": False},
}]
try:
reply = client.messages.create(model="Astra 6", max_tokens=256, messages=messages, tools=tools)
results = []
for block in reply.content:
if block.type == "tool_use":
if block.name != "current_utc_time" or block.input != {}:
raise ValueError("Unapproved tool request")
results.append({"type": "tool_result", "tool_use_id": block.id,
"content": json.dumps({"utc": datetime.now(timezone.utc).isoformat()})})
if results:
messages.append({"role": "assistant", "content": reply.content})
messages.append({"role": "user", "content": results})
reply = client.messages.create(model="Astra 6", max_tokens=256, messages=messages, tools=tools)
print("".join(block.text for block in reply.content if block.type == "text"))
except APIError as error:
# Log status only; never log keys or private prompts.
print("API request failed:", getattr(error, "status_code", None))
Häufig gestellte Fragen
Kann ich in einer Anfrage den Anzeigenamen eines Modells verwenden?
Verwenden Sie nur die exakt veröffentlichte Inferenzkennung. Der Anzeigename ist kein Routingwert. Eine nicht veröffentlichte Kennung darf nicht erraten werden.
Welche Umgebungsvariable enthält den Kundenschlüssel?
Verwenden Sie für beide Protokolle FUSIONPOINTAI_API_KEY. Speichern Sie ihn in einer vertrauenswürdigen Serverumgebung, nicht im Clientcode oder in Protokollen.
Welche URL soll der OpenAI-Client verwenden?
Verwenden Sie die konfigurierte Kunden-API-Basis-URL, standardmäßig https://fusionpointai.com/api/v1. Der Chat-Completions-Endpunkt ergänzt /chat/completions.
Warum unterscheidet sich die Basis-URL des Claude SDK von cURL?
Das Anthropic SDK ergänzt /v1/messages. Setzen Sie seine Basis-URL daher auf https://fusionpointai.com/api. Eine direkte HTTP-Anfrage verwendet die vollständige URL /api/v1/messages.
Unterstützt OpenAI-kompatibler Chat Streaming oder Tools?
Nein. Der aktuelle Endpunkt unterstützt nur synchrone Textnachrichten, kein Streaming und keine Tool-Aufrufe.
Unterstützen alle Claude-Modelle Inhaltsblöcke, Tools oder Streaming?
Nein. Native Funktionen bleiben erhalten, wenn das ausgewählte Upstream-Modell sie unterstützt. Prüfen Sie die Modellfunktionen und behandeln Sie nicht unterstützte Anfragen.
Claude Messages · POST /messages
Claude-Messages-Anfragen verwenden POST /api/v1/messages. Senden Sie den Kundenschlüssel in x-api-key und setzen Sie anthropic-version auf 2023-06-01. Die Basis-URL des Anthropic SDK lautet https://fusionpointai.com/api, da das SDK /v1/messages ergänzt. Bearer-Authentifizierung wird ebenfalls unterstützt.
Der Claude-Messages-Proxy erhält native Inhaltsblöcke, Tool-Daten und echtes Server-Sent-Event-Streaming, sofern das ausgewählte Upstream-Modell diese Funktionen unterstützt.
| Feld | Typ | Erforderlich | Einschränkungen |
|---|---|---|---|
model |
string |
Ja | {"minLength":1,"maxLength":160} |
max_tokens |
integer |
Ja | {"minimum":1,"maximum":100000} |
messages |
array |
Ja | {"minItems":1,"maxItems":100,"items":{"type":"object","required":["role","content"],"properties":{"role":{"type":"string","enum":["user","assistant"]},"content":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","required":["type"],"properties":{"type":{"type":"string","maxLength":80}},"additionalProperties":true}}]}}}} |
system |
string | array |
Nein | {"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string"}},"additionalProperties":true}}]} |
stream |
boolean |
Nein | {"default":false} |
temperature |
number |
Nein | {"minimum":0,"maximum":1} |
top_p |
number |
Nein | {"minimum":0,"maximum":1} |
top_k |
integer |
Nein | {"minimum":0,"maximum":100000} |
stop_sequences |
array |
Nein | {"items":{"type":"string"}} |
tools |
array |
Nein | {"items":{"type":"object","additionalProperties":true}} |
tool_choice |
object |
Nein | {"additionalProperties":true} |
thinking |
object |
Nein | {"additionalProperties":true} |
metadata |
object |
Nein | {"additionalProperties":true} |
output_config |
object |
Nein | {"additionalProperties":true} |
service_tier |
string |
Nein | [] |
{
"id": "msg_example",
"type": "message",
"role": "assistant",
"model": "Astra 6",
"content": [
{
"type": "text",
"text": "A concise answer to the supplied question."
}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 12,
"output_tokens": 10
}
}
{"type":"error","error":{"type":"authentication_error","message":"Invalid or missing API key."}}
Schnelleinstieg mit SDKs
Verwenden Sie die Produktions-Basis-URL mit einem kompatiblen Python- oder Node.js-Client oder senden Sie dieselbe JSON-Anfrage mit cURL.
API-Basis-URL: https://fusionpointai.com/api/v1
Senden Sie den Kunden-API-Schlüssel im Header Authorization: Bearer. Der Schlüssel muss den Scope ai:inference und Kontozugriff auf den Service besitzen. Bewahren Sie ihn auf einem vertrauenswürdigen Server auf.
# Install the client for your application language.
# Python:
python -m pip install openai
# Node.js:
npm install openai
# Bash: enter the key without storing it in shell history.
read -rs -p 'FusionPointAI API key: ' FUSIONPOINTAI_API_KEY
export FUSIONPOINTAI_API_KEY
printf '\n'
# After finishing:
# unset FUSIONPOINTAI_API_KEY
curl 'https://fusionpointai.com/api/v1/chat/completions' \
-H "Authorization: Bearer $FUSIONPOINTAI_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "Jurassic-2",
"messages": [
{
"role": "user",
"content": "Summarize this in one sentence."
}
],
"temperature": 0.7,
"max_tokens": 300
}'
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["FUSIONPOINTAI_API_KEY"],
base_url="https://fusionpointai.com/api/v1",
)
response = client.chat.completions.create(
model="Jurassic-2",
messages=[{"role": "user", "content": "Summarize this in one sentence."}],
temperature=0.7,
max_tokens=300,
)
print(response.choices[0].message.content)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.FUSIONPOINTAI_API_KEY,
baseURL: "https://fusionpointai.com/api/v1",
});
const response = await client.chat.completions.create({
model: "Jurassic-2",
messages: [{ role: "user", content: "Summarize this in one sentence." }],
temperature: 0.7,
max_tokens: 300,
});
console.log(response.choices[0].message.content);
OpenAI · Anfragefelder
Als Modellwerte sind die exakten registrierten Kennungen zu verwenden, die derzeit für Inferenz veröffentlicht sind. Falls keine veröffentlicht wurden, prüfen Sie vor einer Anfrage den Anbieterkatalog.
| Feld | Typ | Erforderlich | Einschränkungen |
|---|---|---|---|
model | string | Ja | Maximal 160 Zeichen; verwenden Sie eine exakt veröffentlichte Kennung. |
messages | array | Ja | 1 bis 100 Nachrichten, die der Reihe nach gesendet werden. |
messages[].role | string | Ja | system, user oder assistant. |
messages[].content | string | Ja | Maximal 100.000 Zeichen je Nachricht. |
temperature | number | Nein | Zwischen 0 und 2. |
max_tokens | integer | Nein | Zwischen 1 und 100.000; das Modell kann eine niedrigere Grenze festlegen. |
Erfolgreiche Antwort
Eine erfolgreiche JSON-Antwort enthält id, object (chat.completion), created, model und choices. Eine Choice umfasst index, eine assistant-Nachricht und finish_reason. Tokenverbrauch kann ebenfalls zurückgegeben werden.
{
"id": "chatcmpl_example",
"object": "chat.completion",
"created": 1700000000,
"model": "Jurassic-2",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "A concise summary of the supplied text."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 12,
"completion_tokens": 10,
"total_tokens": 22
}
}
| Feld | Typ | Bedeutung |
|---|---|---|
id | string | Eindeutige Kennung der Completion. |
object | string | Antworttyp: chat.completion. |
created | integer | Erstellungszeitpunkt als Unix-Zeitstempel. |
model | string | Für die Completion verwendete Modellkennung. |
choices | array | Completion-Alternativen mit assistant-Nachricht und Beendigungsgrund. |
usage | object | Tokenzahlen, sofern zurückgegeben. |
Ratenbegrenzungen und Fehler
Bei aktiven Kundenabonnements werden Anfragen und Token nicht auf ein Kontingent angerechnet; für Sandbox-Schlüssel gilt ihr veröffentlichtes Monatskontingent. Kontextfenster, Ausgabelimits und vorübergehende Verkehrsbegrenzungen gelten weiterhin. Chat Completions liefert synchronen Text; Claude Messages erhält unterstützte native Inhaltsblöcke, Tools und SSE. Prüfen Sie vor Anfragen die getrennten Operationsschemas.
Die Chat-Operation gibt Validierungs- und Anbieterfehler in einem Fehlerobjekt zurück. Authentifizierungs- und Scope-Middleware können stattdessen ein message-Feld auf oberster Ebene ausgeben. Status und Antwortformat hängen davon ab, welche Ebene die Anfrage abgewiesen hat.
| HTTP-Status | Bedeutung |
|---|---|
200 | Completion erfolgreich erstellt. |
400 | Ungültiger Anfrage-Body oder Parameter. |
401 | Bearer-API-Schlüssel fehlt oder ist ungültig. |
403 | Erforderlicher Schlüssel-Scope oder Kontozugriff fehlt. |
429 | Anwendungsdrosselung oder vorübergehende Upstream-Verkehrsbegrenzung; mit wachsendem Abstand erneut versuchen. |
500 | Der Service konnte keine verwendbare Completion zurückgeben. |
OpenAPI-JSON herunterladen
{
"openapi": "3.1.0",
"info": {
"title": "FusionPointAI Customer API",
"version": "1.0.0",
"description": "OpenAI-compatible synchronous text Chat Completions and native Claude Messages. Use https://fusionpointai.com/api/v1 as the production HTTP base URL. Claude SDKs use the base without /v1 because they append /v1/messages. Model capabilities, subscription permissions and technical limits still apply. Native streaming and content blocks belong to the Messages operation, not Chat Completions."
},
"servers": [
{
"url": "https://fusionpointai.com/api/v1",
"description": "FusionPointAI Production API"
}
],
"security": [
{
"bearerAuth": []
}
],
"tags": [
{
"name": "Inference",
"description": "Synchronous JSON chat completion"
}
],
"x-rateLimitPolicy": {
"type": "unmetered_subscription",
"summary": "Live subscriptions do not meter request or token usage against a quota; sandbox keys use their published monthly allowance.",
"technical_constraints": "Model context windows, maximum output sizes, and temporary traffic controls may still apply according to the selected model or upstream provider."
},
"x-errorReference": [
{
"status": 200,
"description": "The completion was created successfully."
},
{
"status": 400,
"description": "The request body or one of its parameters is invalid."
},
{
"status": 401,
"description": "The bearer API key is missing or invalid."
},
{
"status": 403,
"description": "The key lacks the required inference scope or account access."
},
{
"status": 429,
"description": "The request was limited by application throttling or an upstream provider."
},
{
"status": 500,
"description": "The service could not complete the request."
}
],
"paths": {
"/chat/completions": {
"post": {
"tags": [
"Inference"
],
"summary": "Create a chat completion",
"operationId": "createChatCompletion",
"description": "Create a synchronous JSON completion. Messages support system, user, and assistant roles with string content. Use the separate Messages operation for native Claude content blocks and SSE.",
"security": [
{
"bearerAuth": []
}
],
"x-codeSamples": [
{
"lang": "cURL",
"label": "cURL",
"source": "curl 'https://fusionpointai.com/api/v1/chat/completions' \\\n -H \"Authorization: Bearer $FUSIONPOINTAI_API_KEY\" \\\n -H \"Content-Type: application/json\" \\\n --data '{\n \"model\": \"Jurassic-2\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"Summarize this in one sentence.\"\n }\n ],\n \"temperature\": 0.7,\n \"max_tokens\": 300\n}'"
},
{
"lang": "Python",
"label": "Python",
"source": "import os\nfrom openai import OpenAI\n\nclient = OpenAI(\n api_key=os.environ[\"FUSIONPOINTAI_API_KEY\"],\n base_url=\"https://fusionpointai.com/api/v1\",\n)\n\nresponse = client.chat.completions.create(\n model=\"Jurassic-2\",\n messages=[{\"role\": \"user\", \"content\": \"Summarize this in one sentence.\"}],\n temperature=0.7,\n max_tokens=300,\n)\nprint(response.choices[0].message.content)"
},
{
"lang": "Node.js",
"label": "Node.js",
"source": "import OpenAI from \"openai\";\n\nconst client = new OpenAI({\n apiKey: process.env.FUSIONPOINTAI_API_KEY,\n baseURL: \"https://fusionpointai.com/api/v1\",\n});\n\nconst response = await client.chat.completions.create({\n model: \"Jurassic-2\",\n messages: [{ role: \"user\", content: \"Summarize this in one sentence.\" }],\n temperature: 0.7,\n max_tokens: 300,\n});\nconsole.log(response.choices[0].message.content);"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ChatCompletionRequest"
}
}
}
},
"responses": {
"200": {
"description": "Completion created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ChatCompletionResponse"
}
}
}
},
"400": {
"$ref": "#/components/responses/BadRequest"
},
"401": {
"$ref": "#/components/responses/Unauthorised"
},
"403": {
"$ref": "#/components/responses/Forbidden"
},
"429": {
"$ref": "#/components/responses/RateLimited"
},
"500": {
"$ref": "#/components/responses/ServerError"
}
}
}
},
"/messages": {
"post": {
"tags": [
"Inference"
],
"summary": "Create a Claude Messages response",
"operationId": "createMessage",
"description": "Native Messages format. The model must support the requested content blocks, tools and streaming options. The gateway forwards provider-native JSON or real SSE without translating it into Chat Completions. A configured native upstream is required. Maximum JSON request size: 12 MiB.",
"security": [
{
"claudeApiKey": []
},
{
"bearerAuth": []
}
],
"parameters": [
{
"in": "header",
"name": "anthropic-version",
"schema": {
"type": "string",
"maxLength": 64
},
"example": "2023-06-01"
},
{
"in": "header",
"name": "anthropic-beta",
"schema": {
"type": "string",
"maxLength": 512
}
}
],
"x-codeSamples": [
{
"lang": "cURL",
"label": "cURL",
"source": "curl 'https://fusionpointai.com/api/v1/messages' \\\n -H \"x-api-key: $FUSIONPOINTAI_API_KEY\" \\\n -H \"anthropic-version: 2023-06-01\" \\\n -H \"Content-Type: application/json\" \\\n --data '{\n \"model\": \"Jurassic-2\",\n \"max_tokens\": 300,\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"Summarize this in one sentence.\"\n }\n ]\n}'"
},
{
"lang": "Python",
"label": "Python",
"source": "import os\nfrom anthropic import Anthropic\n\nclient = Anthropic(\n api_key=os.environ[\"FUSIONPOINTAI_API_KEY\"],\n base_url=\"https://fusionpointai.com/api\",\n)\n\nresponse = client.messages.create(\n model=\"Jurassic-2\",\n max_tokens=300,\n messages=[{\"role\": \"user\", \"content\": \"Summarize this in one sentence.\"}],\n)\nprint(response.content)"
},
{
"lang": "Node.js",
"label": "Node.js",
"source": "import Anthropic from \"@anthropic-ai/sdk\";\n\nconst client = new Anthropic({\n apiKey: process.env.FUSIONPOINTAI_API_KEY,\n baseURL: \"https://fusionpointai.com/api\",\n});\n\nconst response = await client.messages.create({\n model: \"Jurassic-2\",\n max_tokens: 300,\n messages: [{ role: \"user\", content: \"Summarize this in one sentence.\" }],\n});\nconsole.log(response.content);"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ClaudeMessagesRequest"
}
}
}
},
"responses": {
"200": {
"description": "Native message or incremental native SSE events.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ClaudeMessage"
}
},
"text/event-stream": {
"schema": {
"type": "string",
"description": "message_start, content_block_start/delta/stop, message_delta/stop and provider error events as delivered upstream."
}
}
}
},
"201": {
"description": "Invalid JSON, message structure, field type or bounds.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ClaudeError"
}
}
}
},
"202": {
"description": "Missing, invalid, conflicting or query-string credentials.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ClaudeError"
}
}
}
},
"203": {
"description": "Scope, account or training-reference permission denied.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ClaudeError"
}
}
}
},
"204": {
"description": "Request exceeds 12 MiB.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ClaudeError"
}
}
}
},
"205": {
"description": "Application or upstream rate limit.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ClaudeError"
}
}
}
},
"206": {
"description": "Inference provider or service failure.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ClaudeError"
}
}
}
},
"207": {
"description": "Inference provider or service failure.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ClaudeError"
}
}
}
},
"208": {
"description": "Native upstream or server credentials are not configured.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ClaudeError"
}
}
}
},
"209": {
"description": "Upstream overloaded.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ClaudeError"
}
}
}
}
}
}
}
},
"components": {
"securitySchemes": {
"bearerAuth": {
"type": "http",
"scheme": "bearer",
"bearerFormat": "API key"
},
"claudeApiKey": {
"type": "apiKey",
"in": "header",
"name": "x-api-key"
}
},
"schemas": {
"ChatCompletionRequest": {
"type": "object",
"required": [
"model",
"messages"
],
"properties": {
"model": {
"type": "string",
"maxLength": 160,
"enum": [
"Jurassic-2",
"Claude Fable 5.1",
"claude-opus-5-5",
"claude-sonnet-5-5",
"claude-haiku-5-5",
"Claude Opus 5",
"Claude Fable 5",
"Claude Mythos 5",
"Claude Sonnet 5",
"Claude Opus 4.8",
"Claude Haiku 4.5",
"command-a-plus-05-2026",
"command-a-reasoning-08-2025",
"command-a-vision-07-2025",
"command-a-translate-08-2025",
"embed-v5.0-pro",
"embed-v5.0-fast",
"rerank-v5.0-pro",
"rerank-v5.0-fast",
"Command R",
"Command R+",
"Embed",
"Rerank",
"deepseek-flash",
"DeepSeek V4",
"GLM-5.3",
"glm-5.3-flashx",
"GLM-5.3 Flash",
"GLM-4.7",
"kimi-k3.1-pro",
"kimi-k3.1-pro-highspeed",
"Kimi K3",
"Kimi K2.7 Code",
"Kimi K2.6",
"Kimi K2.5",
"Astra 6",
"gpt-6.1-sol",
"gpt-6.1-terra",
"gpt-6-luna",
"GPT-5.6 Sol",
"GPT-5.6 Terra",
"GPT-5.6 Luna",
"GPT-5.5",
"GPT-5.4",
"GPT-5.4 mini",
"GPT-5.4 nano",
"qwen3.8-max",
"qwen3.8-flash",
"qwen3.8-omni-flash",
"qwen3.7-plus",
"Qwen3.8",
"Qwen3 Coder Next",
"Qwen3-VL"
],
"description": "An exact registered model identifier currently published for inference."
},
"messages": {
"type": "array",
"minItems": 1,
"maxItems": 100,
"items": {
"$ref": "#/components/schemas/ChatMessage"
}
},
"temperature": {
"type": "number",
"minimum": 0,
"maximum": 2
},
"max_tokens": {
"type": "integer",
"minimum": 1,
"maximum": 100000,
"description": "The selected model may impose a lower output limit."
}
}
},
"ChatMessage": {
"type": "object",
"required": [
"role",
"content"
],
"properties": {
"role": {
"type": "string",
"enum": [
"system",
"user",
"assistant"
]
},
"content": {
"type": "string",
"maxLength": 100000
}
}
},
"ChatCompletionResponse": {
"type": "object",
"required": [
"id",
"object",
"model",
"choices"
],
"properties": {
"id": {
"type": "string"
},
"object": {
"type": "string",
"example": "chat.completion"
},
"created": {
"type": "integer"
},
"model": {
"type": "string"
},
"choices": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ChatChoice"
}
},
"usage": {
"$ref": "#/components/schemas/TokenUsage"
}
}
},
"ChatChoice": {
"type": "object",
"properties": {
"index": {
"type": "integer"
},
"message": {
"$ref": "#/components/schemas/ChatMessage"
},
"finish_reason": {
"type": [
"string",
"null"
]
}
}
},
"TokenUsage": {
"type": "object",
"properties": {
"prompt_tokens": {
"type": "integer"
},
"completion_tokens": {
"type": "integer"
},
"total_tokens": {
"type": "integer"
}
}
},
"Error": {
"oneOf": [
{
"$ref": "#/components/schemas/OperationError"
},
{
"$ref": "#/components/schemas/MiddlewareError"
}
]
},
"OperationError": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "object",
"required": [
"message",
"type",
"code"
],
"properties": {
"message": {
"type": "string"
},
"type": {
"type": "string"
},
"code": {
"type": [
"string",
"integer",
"null"
]
},
"details": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
},
"MiddlewareError": {
"type": "object",
"required": [
"message"
],
"properties": {
"message": {
"type": "string"
}
},
"additionalProperties": true
},
"ClaudeMessagesRequest": {
"type": "object",
"required": [
"model",
"max_tokens",
"messages"
],
"properties": {
"model": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"enum": [
"Jurassic-2",
"Claude Fable 5.1",
"claude-opus-5-5",
"claude-sonnet-5-5",
"claude-haiku-5-5",
"Claude Opus 5",
"Claude Fable 5",
"Claude Mythos 5",
"Claude Sonnet 5",
"Claude Opus 4.8",
"Claude Haiku 4.5",
"command-a-plus-05-2026",
"command-a-reasoning-08-2025",
"command-a-vision-07-2025",
"command-a-translate-08-2025",
"embed-v5.0-pro",
"embed-v5.0-fast",
"rerank-v5.0-pro",
"rerank-v5.0-fast",
"Command R",
"Command R+",
"Embed",
"Rerank",
"deepseek-flash",
"DeepSeek V4",
"GLM-5.3",
"glm-5.3-flashx",
"GLM-5.3 Flash",
"GLM-4.7",
"kimi-k3.1-pro",
"kimi-k3.1-pro-highspeed",
"Kimi K3",
"Kimi K2.7 Code",
"Kimi K2.6",
"Kimi K2.5",
"Astra 6",
"gpt-6.1-sol",
"gpt-6.1-terra",
"gpt-6-luna",
"GPT-5.6 Sol",
"GPT-5.6 Terra",
"GPT-5.6 Luna",
"GPT-5.5",
"GPT-5.4",
"GPT-5.4 mini",
"GPT-5.4 nano",
"qwen3.8-max",
"qwen3.8-flash",
"qwen3.8-omni-flash",
"qwen3.7-plus",
"Qwen3.8",
"Qwen3 Coder Next",
"Qwen3-VL"
]
},
"max_tokens": {
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"messages": {
"type": "array",
"minItems": 1,
"maxItems": 100,
"items": {
"type": "object",
"required": [
"role",
"content"
],
"properties": {
"role": {
"type": "string",
"enum": [
"user",
"assistant"
]
},
"content": {
"oneOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"maxLength": 80
}
},
"additionalProperties": true
}
}
]
}
}
}
},
"system": {
"oneOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"text"
],
"properties": {
"type": {
"const": "text"
},
"text": {
"type": "string"
}
},
"additionalProperties": true
}
}
]
},
"stream": {
"type": "boolean",
"default": false
},
"temperature": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"top_p": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"top_k": {
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"stop_sequences": {
"type": "array",
"items": {
"type": "string"
}
},
"tools": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"tool_choice": {
"type": "object",
"additionalProperties": true
},
"thinking": {
"type": "object",
"additionalProperties": true
},
"metadata": {
"type": "object",
"additionalProperties": true
},
"output_config": {
"type": "object",
"additionalProperties": true
},
"service_tier": {
"type": "string"
}
},
"additionalProperties": true
},
"ClaudeMessage": {
"type": "object",
"required": [
"type",
"content"
],
"properties": {
"id": {
"type": "string"
},
"type": {
"const": "message"
},
"role": {
"const": "assistant"
},
"content": {
"type": "array",
"items": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"maxLength": 80
}
},
"additionalProperties": true
}
},
"model": {
"type": "string"
},
"stop_reason": {
"type": [
"string",
"null"
]
},
"usage": {
"type": "object",
"properties": {
"input_tokens": {
"type": "integer"
},
"output_tokens": {
"type": "integer"
}
},
"additionalProperties": true
}
},
"additionalProperties": true
},
"ClaudeError": {
"type": "object",
"required": [
"type",
"error"
],
"properties": {
"type": {
"const": "error"
},
"error": {
"type": "object",
"required": [
"type",
"message"
],
"properties": {
"type": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
}
}
},
"responses": {
"BadRequest": {
"description": "Invalid request body or parameter.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"Unauthorised": {
"description": "Missing or invalid bearer API key.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"Forbidden": {
"description": "The key lacks the required inference scope or account access.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"RateLimited": {
"description": "Application throttle or temporary upstream traffic control.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
},
"ServerError": {
"description": "The service could not return a usable completion.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Error"
}
}
}
}
}
}
}