الانتقال إلى المحتوى الرئيسي

OpenAPI 3.1

مرجع API للعملاء

تصف هذه الصفحة طلب الاستدلال المدعوم للعملاء والاستجابة المقابلة. نزّل مستند OpenAPI القابل للقراءة آلياً لاستخدامه مع الأدوات.

تنزيل OpenAPI JSON

أمثلة على استخدام واجهات API للنماذج

اختر معرّف نموذج منشوراً وبروتوكول API واللغة لعرض مثال للطلب. احتفظ بمفاتيح API الخاصة بالعملاء على خادم موثوق.

متطلبات البروتوكول

تستخدم الطلبات المتوافقة مع OpenAI الطريقة POST /chat/completions على عنوان API الأساسي المهيأ للعميل (الافتراضي https://fusionpointai.com/api/v1). صادق باستخدام Authorization: Bearer ومفتاح عميل يتيح الاستدلال. عنوان URL الافتراضي الكامل هو https://fusionpointai.com/api/v1/chat/completions.

الإمكانات المدعومة

تعالج نقطة المحادثة الحالية المتوافقة مع OpenAI الرسائل النصية بصورة متزامنة. ولا تدعم هذه النقطة البث أو استدعاء الأدوات.

تثبيت عميل

ثبّت عميل Python وعميل Node.js كحزمتين منفصلتين:

Python: pip install openai anthropic

Node.js: npm install openai @anthropic-ai/sdk

cURL
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
}'

أنماط الطلبات

إعداد مفاتيح API بأمان

أنشئ مفتاح API للعميل يتيح الاستدلال، ومرره إلى عملية الخادم عبر مدير الأسرار أو متغيرات البيئة.

  1. اضبط FUSIONPOINTAI_API_KEY في بيئة الخادم؛ لا تضع المفتاح في شيفرة المتصفح ولا تودعه في مستودع المصدر.
  2. استخدم HTTPS واقصر المفتاح على الحساب وصلاحيات الاستدلال اللازمة للتطبيق.
  3. احذف ترويستي Authorization وx-api-key من السجلات وآثار التتبع وطلبات الدعم؛ ألغ المفتاح إن احتمل انكشافه.
Bash
export FUSIONPOINTAI_API_KEY="YOUR_CUSTOMER_API_KEY"

اختيار معرّف نموذج دقيق

حقل النموذج قيمة توجيه وليس اسماً للعرض. اختر معرّفاً منشوراً في دليل النماذج المباشر.

  1. اختر نموذجاً نشطاً أو قديماً معلماً بأنه متاح للاستدلال.
  2. انسخ المعرّف كما هو، بما في ذلك علامات الترقيم ولواحق الإصدار؛ لا تستنتجه من اسم النموذج.
  3. إذا لم يُنشر معرّف، فانتظر نشره في الدليل ولا تستبدله بقيمة تخمينية.
Python
model_id = "Astra 6"
# Use this exact identifier with either protocol.

إرسال رسائل النظام والمحادثات المتعددة

حافظ على ترتيب أدوار المحادثة الأصلي واستخدم الأدوار وأشكال المحتوى التي يدعمها البروتوكول والنموذج المحددان فقط.

  1. في الطلبات المتوافقة مع OpenAI أرسل رسائل system وuser وassistant بالترتيب وبمحتوى نصي.
  2. في Claude Messages أرسل تعليمات النظام والأدوار المتتابعة للمستخدم والمساعد ضمن الحقول الأصلية للبروتوكول.
  3. احتفظ بسياق المحادثة الذي يحتاجه التطبيق فقط، والتزم بحدود سياق النموذج المختار.
Python
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

إذا احتاج التطبيق إلى مخرجات منظمة، فتحقق من مطابقة الاستجابة لمخططه قبل استخدامها.

  1. استخدم أدوات المخرجات المنظمة التي يدعمها البروتوكول المختار والنموذج المحدد لدى المزود الأصلي.
  2. تعامل مع JSON المنشأ بوصفه مدخلاً غير موثوق: حلله وتحقق من الحقول والأنواع المطلوبة وعالج الصيغ غير الصالحة.
  3. لا تفترض دعم وضع JSON لمزيج نموذج وبروتوكول إلا إذا أكدته وثائق النموذج.
Python
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 لحظياً

يعتمد البث على البروتوكول المختار والنموذج الأصلي؛ فالاستجابة العادية بصيغة JSON ليست بثاً.

  1. تعيد المحادثة المتوافقة مع OpenAI حالياً نصاً متزامناً ولا توفر البث.
  2. في Claude Messages استخدم وضع stream عندما يدعمه النموذج المحدد لدى المزود الأصلي؛ يمرر الوسيط أحداث الخادم المرسلة الأصلية.
  3. استهلك الأحداث تباعاً وأنهِ الاتصال عند الاكتمال أو الخطأ، ولا تعتبر المخرجات الجزئية إجابة مكتملة.
Python
# 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)

التعامل مع الأدوات وكتل المحتوى والأخطاء

حافظ على البنى الأصلية للبروتوكول وحدد سلوك التطبيق بوضوح عند استدعاء الأدوات والمحتوى متعدد الوسائط والإخفاقات.

  1. لا تدعم المحادثة المتوافقة مع OpenAI حالياً استدعاء الأدوات أو كتل المحتوى غير النصية.
  2. يحافظ Claude على كتل المحتوى الأصلية وبيانات استخدام الأدوات ونتائجها عند دعم النموذج لها؛ تحقق من أسماء الأدوات ومدخلاتها قبل التنفيذ.
  3. افحص حالة HTTP ومتن الاستجابة، وميّز أخطاء المصادقة والصلاحيات والتحقق وتحديد المعدل، وأعد المحاولة للأخطاء العابرة مع تراجع زمني.
Python
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))

الأسئلة الشائعة

هل يمكنني استخدام اسم النموذج الظاهر في الطلب؟

استخدم المعرّف الدقيق المنشور للاستدلال فقط. الاسم الظاهر ليس قيمة توجيه، ولا يجوز تخمين معرّف غير منشور.

ما متغير البيئة الذي يحوي مفتاح العميل؟

استخدم FUSIONPOINTAI_API_KEY للبروتوكولين. احتفظ بقيمته في بيئة خادم موثوقة وبعيداً عن شيفرة العميل والسجلات.

ما عنوان URL الذي أضبطه لعميل OpenAI؟

استخدم عنوان API الأساسي المهيأ للعميل، والافتراضي https://fusionpointai.com/api/v1. وتضيف نقطة المحادثة /chat/completions.

لماذا يختلف عنوان Claude SDK الأساسي عن cURL؟

يضيف Anthropic SDK المسار /v1/messages، لذا اضبط عنوانه الأساسي على https://fusionpointai.com/api. أما طلب HTTP المباشر فيستخدم العنوان الكامل /api/v1/messages.

هل تدعم المحادثة المتوافقة مع OpenAI البث أو الأدوات؟

لا. تدعم النقطة الحالية الرسائل النصية المتزامنة فقط، ولا توفر البث أو استدعاء الأدوات.

هل تضمن جميع نماذج Claude دعم الكتل أو الأدوات أو البث؟

لا. تُحفظ هذه الإمكانات الأصلية عندما يدعمها النموذج المختار لدى المزود الأصلي. تحقق من إمكانات النموذج وعالج الطلبات غير المدعومة.

Claude Messages · POST /messages

تستخدم طلبات Claude Messages الطريقة POST /api/v1/messages. أرسل مفتاح العميل في x-api-key واضبط anthropic-version على 2023-06-01. عنوان URL الأساسي لـ Anthropic SDK هو https://fusionpointai.com/api لأن SDK يضيف /v1/messages؛ كما يدعم البروتوكول المصادقة بصيغة bearer.

يحافظ وسيط Claude Messages على كتل المحتوى الأصلية وبيانات الأدوات والبث الفعلي عبر أحداث الخادم المرسلة، عندما يدعمها النموذج المحدد لدى المزود الأصلي.

الحقلالنوعمطلوبالقيود
model string نعم {"minLength":1,"maxLength":160}
max_tokens integer نعم {"minimum":1,"maximum":100000}
messages 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 string | array لا {"oneOf":[{"type":"string"},{"type":"array","items":{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string"}},"additionalProperties":true}}]}
stream boolean لا {"default":false}
temperature number لا {"minimum":0,"maximum":1}
top_p number لا {"minimum":0,"maximum":1}
top_k integer لا {"minimum":0,"maximum":100000}
stop_sequences array لا {"items":{"type":"string"}}
tools array لا {"items":{"type":"object","additionalProperties":true}}
tool_choice object لا {"additionalProperties":true}
thinking object لا {"additionalProperties":true}
metadata object لا {"additionalProperties":true}
output_config object لا {"additionalProperties":true}
service_tier string لا []
Claude Messages · مثال
{
    "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."}}

بدء سريع باستخدام SDK

استخدم عنوان URL الأساسي للإنتاج مع عميل متوافق لـPython أو Node.js، أو أرسل طلب JSON نفسه باستخدام cURL.

عنوان URL الأساسي لـ API: https://fusionpointai.com/api/v1

أرسل مفتاح API للعميل في ترويسة Authorization: Bearer. يجب أن يملك المفتاح نطاق ai:inference وإمكانية الوصول إلى حساب الخدمة. احتفظ به على خادم موثوق.

Shell
# 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
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
}'
Python
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)
Node.js
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 · حقول الطلب

قيم النموذج هي المعرّفات المسجلة الدقيقة المنشورة حالياً للاستدلال. إذا لم يُنشر أي منها، فراجع كتالوج مقدم الخدمة قبل إرسال الطلب.

الحقلالنوعمطلوبالقيود
modelstringنعمبحد أقصى 160 حرفاً؛ استخدم معرّفاً منشوراً كما هو.
messagesarrayنعممن 1 إلى 100 رسالة، وتُرسل بالترتيب.
messages[].rolestringنعمsystem أو user أو assistant.
messages[].contentstringنعمبحد أقصى 100,000 حرف لكل رسالة.
temperaturenumberلامن 0 إلى 2.
max_tokensintegerلامن 1 إلى 100,000؛ وقد يفرض النموذج حداً أقل.

استجابة ناجحة

تحتوي استجابة JSON الناجحة على id وobject (chat.completion) وcreated وmodel وchoices. ويتضمن كل choice الفهرس ورسالة للمساعد وfinish_reason. وقد يُعاد أيضاً استخدام الرموز.

مثال · JSON
{
    "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
    }
}
الحقلالنوعالمعنى
idstringمعرّف فريد للإكمال.
objectstringنوع الاستجابة: chat.completion.
createdintegerوقت الإنشاء كطابع زمني Unix.
modelstringمعرّف النموذج المستخدم للإكمال.
choicesarrayبدائل الإكمال، وتتضمن رسالة للمساعد وسبب الإنهاء.
usageobjectأعداد الرموز عند إعادتها.

حدود المعدل والأخطاء

لا تحتسب اشتراكات العملاء المباشرة الطلبات أو استخدام الرموز ضمن حصة محددة؛ أما مفاتيح sandbox فتخضع للحد الشهري المنشور لها. وتظل نوافذ سياق النموذج وحدود المخرجات وضوابط الحركة المؤقتة سارية. يدعم Chat Completions النص المتزامن، ويحافظ Claude Messages على كتل المحتوى الأصلية والأدوات وSSE المدعومة. راجع مخططات العمليات المنفصلة قبل إرسال الطلبات.

تعيد عملية المحادثة إخفاقات التحقق وأخطاء مقدم الخدمة ضمن كائن خطأ. وقد تعيد برمجيات المصادقة والنطاق بدلاً من ذلك حقلاً message على المستوى الأعلى؛ ويتوقف شكل الاستجابة والحالة على الطبقة التي رفضت الطلب.

حالة HTTPالمعنى
200تم إنشاء الإكمال بنجاح.
400متن الطلب أو إحدى معلماته غير صالح.
401مفتاح API بصيغة bearer مفقود أو غير صالح.
403نطاق المفتاح المطلوب أو صلاحية الوصول إلى الحساب غير متاح.
429طُبّق تحديد معدل على مستوى التطبيق أو ضابط حركة مؤقت لدى جهة وسيطة؛ أعد المحاولة بعد تراجع زمني.
500تعذّر على الخدمة إعادة إكمال صالح للاستخدام.
تنزيل OpenAPI JSON
{
    "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"
                        }
                    }
                }
            }
        }
    }
}