Felo APIs
LLM API
استدعِ نقاط endpoint لنماذج Felo عبر بروتوكولات متوافقة مع OpenAI وأخرى متوافقة مع Anthropic.
/api/v1/modelsالمصادقة
Bearer API key or X-API-Key
نوع المحتوى
application/json
ملاحظات السعر
Model service limits may apply. Retry with backoff on 429 or 503.
يعرض LLM API endpoints استدعاء النماذج المباشرة عبر منصة Felo API. استخدمه عندما تريد استدعاء نماذج لغوية عامة الغرض، أو إعادة استخدام عملاء متوافقين مع OpenAI أو متوافقين مع Anthropic، أو ربط أطر الوكلاء بمنصة Felo API.
يتضمن LLM API حاليًا ثلاثة أسطح لاستدعاء النماذج متوافقة مع الدردشة:
POST /api/v1/responses: متوافق مع OpenAI ResponsesPOST /api/v1/chat/completions: متوافق مع OpenAI Chat CompletionsPOST /api/v1/messages: متوافق مع Anthropic Messages
Decisions API
POST https://openapi.felo.ai/api/v1/decisionsأرسل الحالة وأسئلة مصنّفة ضيقة إلى jev-1.13 (يُقبل أيضًا: typesafe/jev-1.13). استخدم /api/v1/decisions، لا endpoints Chat Completions أو Messages أو Responses. البث غير مدعوم.
حقول الطلب
model:jev-1.13state: السياق المطلوب تقييمه؛ سلسلة أو قيمة JSON.questions: أسئلة مسماة باستخدامtypeوinstructionsوcriteria.
import os
import requests
response = requests.post(
"https://openapi.felo.ai/api/v1/decisions",
headers={"Authorization": f"Bearer {os.environ['FELO_API_KEY']}"},
json={
"model": "jev-1.13",
"state": "Help! My payouts have been failing for 3 days.",
"questions": {
"is_urgent": {
"type": "noul",
"instructions": "Does this message convey urgency?",
"criteria": {"true": "Time-sensitive", "false": "No urgency"},
},
"department": {
"type": "choice",
"instructions": "Which team should handle this?",
"criteria": {
"billing": "Payments, invoicing, refunds",
"technical": "Bugs, outages, integrations",
"sales": "Pricing, upgrades, new accounts",
},
},
"frustration": {
"type": "score",
"instructions": "How frustrated is the customer?",
"criteria": ["Calm", "Frustrated", "Very angry"],
},
},
},
timeout=60,
)
response.raise_for_status()
answers = response.json()["answers"]
print(answers["is_urgent"]["noul"])
print(answers["department"]["choice"], answers["department"]["probabilities"])
print(answers["frustration"]["score"])أنواع الإجابات
noul: احتمال من 0 إلى 1. choice: الخيار المحدد وتوزيع احتمالاته. score: درجة رقمية لمعايير مرتبة، مع توزيعها.
تستخدم الأخطاء error.code (رمز حالة HTTP رقمي) وerror.message. تعامل مع الاستجابات غير 2xx قبل قراءة answers.
الاستخدام والتسعير
تتضمن الاستجابة usage.input_tokens وusage.output_tokens، وقد تتضمن usage.cost. الأسعار المرجعية المفحوصة في 2026-10-12: الإدخال 0.042 دولار لكل مليون رمز؛ الإخراج 0 دولار. سعر إخراج صفري لا يجعل استخدام الإدخال مجانيًا. قد تتغيّر الأسعار؛ استخدم سعر النموذج المنشور وخصومات الحساب المطبقة للتقديرات.
المصادقة
تتطلب طلبات LLM API مفتاحًا من منصة Felo API. استخدم Authorization: Bearer ... أو X-API-Key.
Authorization: Bearer YOUR_API_KEYX-API-Key: YOUR_API_KEYراجع دليل المصادقة لتفاصيل إنشاء مفاتيح API وإدارتها.
عنوان URL الأساسي
استخدم مضيف منصة Felo API العام:
https://openapi.felo.aiلعملاء SDK، اضبط عنوان URL الأساسي الخاص بالبروتوكول الموضح في Basic Usage.
الرؤوس المشتركة
| الرأس | مطلوب | الوصف |
|---|---|---|
Authorization | نعم، ما لم يُستخدم X-API-Key | مفتاح API بالصيغة Bearer YOUR_API_KEY |
X-API-Key | نعم، ما لم يُستخدم Authorization | بديل لمفتاح API عن رأس Bearer |
Content-Type | نعم | يجب أن يكون application/json |
X-Request-Id | لا | معرّف طلب اختياري لاستكشاف الأخطاء |
اكتشاف النماذج
يتضمن الكتالوج العام كل فئات النماذج. استخدم القوائم المخصصة لاكتشاف نماذج الفيديو أو نماذج القرار:
| Endpoint | فئات النماذج |
|---|---|
GET /api/v1/models | كل الفئات (دون تغيير) |
GET /api/v1/videos/models | توليد الفيديو (video_generation) |
GET /api/v1/decisions/models | القرارات، بما في ذلك Jev (decisions) |
تقبل endpoints الثلاثة جميعها معامل الاستعلام الاختياري provider (مثل openrouter) وتعيد {"object":"list","data":[...]}. ويحتوي كل عنصر على id وobject وcreated وowned_by وmodel_kind. وتستخدم القوائم المخصصة الفئة الفعلية بعد تجاوزات ربط المزوّد الممكّنة.
لا تُعاد إلا النماذج الممكّنة والمدرجة وغير المحذوفة وذات التسعير الحالي المطابق لشروط المزوّد؛ والسعر الصفري صالح. وتُخفى النماذج المتزامنة حديثًا حتى يدرجها مسؤول. وتشترك كل القوائم في الترتيب المضبوط، مع اسم النموذج ومعرّفه كعامل ترجيح. وعدم وجود تطابق يعيد HTTP 200 مع مصفوفة data فارغة. ويقرأ الاكتشاف الكتالوج المحلي ولا يستدعي النموذج ولا يفرض رسومًا على استدعائه.
لا يقبل GET /api/v1/models وحده معامل exclude_video_and_decisions (boolean، الافتراضي false). اضبطه على true لاستبعاد الأنواع الفعلية video_generation وdecisions؛ وتبقى نماذج الصور مؤهلة. ويمكن دمجه مع provider. وحذفه أو ضبطه على false يحفظ الكتالوج الكامل. وقيم boolean غير الصالحة تعيد HTTP 422.
curl "https://openapi.felo.ai/api/v1/models?exclude_video_and_decisions=true&provider=openrouter" \
-H "Authorization: Bearer ${FELO_API_KEY}"
curl "https://openapi.felo.ai/api/v1/videos/models?provider=openrouter" \
-H "Authorization: Bearer ${FELO_API_KEY}"
curl "https://openapi.felo.ai/api/v1/decisions/models?provider=openrouter" \
-H "Authorization: Bearer ${FELO_API_KEY}"اختر endpoint الاستدعاء حسب model_kind: chat لـResponses أو Chat Completions أو Messages حسب دعم النموذج؛ video_generation لـPOST /api/v1/videos/generations؛ decisions لـPOST /api/v1/decisions؛ image_generation لـPOST /api/v1/images/generations. وتبقى التفاصيل في GET /api/v1/models/{model_id}. والنموذج المدرج ليس بالضرورة متوافقًا مع كل endpoint استدعاء.
لا تملك نماذج الصور endpoint قائمة مخصصًا. صفِّ GET /api/v1/models حسب model_kind: "image_generation". راجع توليد الصور لحقول طلب الصور.
Models and Pricing (النماذج والتسعير)
تستخدم الطلبات القناة الافتراضية للنموذج ما لم تثبّت قناة بـX-Felo-Channel. مرّر قائمة مرتبة مفصولة بفواصل من رموز القنوات العامة من كتالوج النموذج؛ واحذف الرأس لاستخدام الافتراضي. واستخدم default وحدها فقط. ولا تُرسل إلا مجموعة مزوّد القناة الأولى؛ ولا يوجد تراجع احتياطي تلقائي. راجع القنوات وتوجيه المزوّد.
تُدرج الأسعار بالدولار الأمريكي. وتُعرض أسعار الرموز لكل مليون رمز لسهولة القراءة؛ وتستخدم الفوترة دقة السعر لكل رمز من لقطة الأسعار الحالية. ولا تُطبّق أسعار ذاكرة التخزين المؤقت إلا عندما تتضمن استجابة البروتوكول استخدام ذاكرة التخزين المؤقت. وتعني الشرطة عدم وجود سعر منشور منفصل أو حد منشور. ويُحتسب استخدام البحث على الويب، عندما تبلغ عنه خدمة النموذج، بـ$0.01 لكل بحث.
| معرّف النموذج | السياق | أقصى مخرجات | الإدخال / مليون رمز | الإخراج / مليون رمز | قراءة ذاكرة التخزين المؤقت / مليون رمز | كتابة ذاكرة التخزين المؤقت / مليون رمز |
|---|---|---|---|---|---|---|
claude-haiku-4-5 | 200K | 64K | $1.00 | $5.00 | $0.10 | $1.25 |
claude-sonnet-4-6 | 1M | 128K | $3.00 | $15.00 | $0.30 | $3.75 |
claude-opus-4-8 | 1M | 128K | $5.00 | $25.00 | $0.50 | $6.25 |
claude-sonnet-5 | 1M | 128K | $2.00 | $10.00 | $0.20 | $2.50 |
claude-haiku-5-5 | 1M | 128K | $0.10 | $0.50 | $0.01 | $0.0125 |
gpt-5.5 | 1.05M | 128K | $5.00 | $30.00 | $0.50 | - |
gpt-5.5-pro | 1.05M | 128K | $30.00 | $180.00 | - | - |
gpt-5.6-luna | 1.05M | 128K | $1.00 | $6.00 | $0.10 | $1.25 |
gpt-5.6-terra | 1.05M | 128K | $2.50 | $15.00 | $0.25 | $3.125 |
gpt-5.6-sol | 1.05M | 128K | $5.00 | $30.00 | $0.50 | $6.25 |
grok-4.5 | 500K | - | $2.00 | $6.00 | $0.50 | - |
deepseek-v4-flash | 1M | 384K | $0.09 | $0.18 | $0.018 | - |
يستخدم Claude Haiku 5.5 تسعيرًا متدرّجًا: تُحاسَب الموجّهات حتى 100K رمز بالأسعار القياسية أعلاه، وتُحاسَب الطلبات التي يتجاوز موجّهها 100K رمز بـ$0.50 للإدخال و$2.50 للإخراج و$0.05 لقراءة ذاكرة التخزين المؤقت و$0.0625 لكتابة ذاكرة التخزين المؤقت لكل مليون رمز للطلب بأكمله.
يتوفر GPT-5.6 بثلاث فئات: Luna لأعباء العمل السريعة الموفّرة، وTerra لمهام البرمجة والاستدلال والوكلاء المتوازنة، وSol للاستدلال المعقد والبرمجة الرائدة. وتوفّر كل فئة أيضًا معرّف نموذج -pro (gpt-5.6-luna-pro وgpt-5.6-terra-pro وgpt-5.6-sol-pro) يستخدم النموذج الأساسي نفسه مع وضع استدلال pro. ولا يتغيّر التسعير وطول السياق وأقصى مخرجات لمعرّفات -pro.
يدعم DeepSeek V4 Flash وضعي الاستدلال وغير الاستدلال، ومخرجات JSON، واستدعاءات الأدوات، وResponses API، والتوافق مع Anthropic API. وهو متاح عبر أسطح Responses وChat Completions وMessages في Felo. ولم يُنشر تسعير كتابة ذاكرة التخزين المؤقت بعد.
Basic Usage (الاستخدام الأساسي)
تستخدم هذه الأمثلة SDK الرسمية لـOpenAI وAnthropic. اضبط FELO_API_KEY على مفتاح منصة Felo API قبل تشغيل الأمثلة.
export FELO_API_KEY="YOUR_API_KEY"تثبيت SDK
OpenAI SDK
استخدم OpenAI SDK لـResponses API وChat Completions API.
##### JavaScript
npm install openai##### Python
pip install openaiAnthropic SDK
استخدم Anthropic SDK لـMessages API.
##### JavaScript
npm install @anthropic-ai/sdk##### Python
pip install anthropicإعداد العملاء
تستخدم endpoints المتوافقة مع OpenAI عنوان URL الأساسي لـOpenAI SDK مع /api/v1، لأن SDK تلحق مسارات الموارد مثل /responses و/chat/completions.
JavaScript
import OpenAI from "openai";
const openai = new OpenAI({
apiKey: process.env.FELO_API_KEY,
baseURL: "https://openapi.felo.ai/api/v1",
});Python
import os
from openai import OpenAI
openai = OpenAI(
api_key=os.environ.get("FELO_API_KEY"),
base_url="https://openapi.felo.ai/api/v1",
)وتستخدم endpoints المتوافقة مع Anthropic عنوان URL الأساسي لـAnthropic SDK دون /v1، لأن SDK تلحق /v1/messages.
JavaScript
import Anthropic from "@anthropic-ai/sdk";
const anthropic = new Anthropic({
apiKey: process.env.FELO_API_KEY,
baseURL: "https://openapi.felo.ai/api",
});Python
import os
from anthropic import Anthropic
anthropic = Anthropic(
api_key=os.environ.get("FELO_API_KEY"),
base_url="https://openapi.felo.ai/api",
)استخدام Responses API
استخدم Responses API للتكاملات الجديدة المتوافقة مع OpenAI وكائنات الاستجابة بنمط الوكيل.
JavaScript
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.FELO_API_KEY,
baseURL: "https://openapi.felo.ai/api/v1",
});
const response = await client.responses.create({
model: "gpt-5.6-sol",
input: "Write a one-sentence bedtime story about a unicorn.",
});
console.log(response.output_text);Python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ.get("FELO_API_KEY"),
base_url="https://openapi.felo.ai/api/v1",
)
response = client.responses.create(
model="gpt-5.6-sol",
input="Write a one-sentence bedtime story about a unicorn.",
)
print(response.output_text)استخدام Chat Completions
استخدم Chat Completions عندما يرسل تطبيقك بالفعل messages بنمط OpenAI.
JavaScript
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.FELO_API_KEY,
baseURL: "https://openapi.felo.ai/api/v1",
});
const completion = await client.chat.completions.create({
model: "gpt-5.6-sol",
messages: [
{
role: "user",
content: "Give me one sentence about why API compatibility matters.",
},
],
});
console.log(completion.choices[0].message.content);Python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ.get("FELO_API_KEY"),
base_url="https://openapi.felo.ai/api/v1",
)
completion = client.chat.completions.create(
model="gpt-5.6-sol",
messages=[
{
"role": "user",
"content": "Give me one sentence about why API compatibility matters.",
}
],
)
print(completion.choices[0].message.content)استخدام Messages
استخدم Messages عندما يتوقع عميلك أو إطار وكيلك أشكال طلب واستجابة متوافقة مع Anthropic.
JavaScript
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: process.env.FELO_API_KEY,
baseURL: "https://openapi.felo.ai/api",
});
const message = await client.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 128,
messages: [
{
role: "user",
content: "Summarize the value of direct model APIs in one sentence.",
},
],
});
const text = message.content
.filter((block) => block.type === "text")
.map((block) => block.text)
.join("");
console.log(text);Python
import os
from anthropic import Anthropic
client = Anthropic(
api_key=os.environ.get("FELO_API_KEY"),
base_url="https://openapi.felo.ai/api",
)
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=128,
messages=[
{
"role": "user",
"content": "Summarize the value of direct model APIs in one sentence.",
}
],
)
text = "".join(block.text for block in message.content if block.type == "text")
print(text)المستندات الرسمية
- بدء سريع لـOpenAI API
- OpenAI Create response
- OpenAI Create chat completion
- Claude Messages API
- Anthropic TypeScript SDK
- Anthropic Python SDK
لإعداد عملاء الوكلاء، راجع إعداد Claude Code وCodex.
مرجع البروتوكول
Responses
استخدم هذا endpoint للعملاء والتكاملات المتوافقة مع OpenAI Responses API.
Endpoint
POST https://openapi.felo.ai/api/v1/responsesنص الطلب
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
model | string | نعم | معرّف نموذج Felo العام |
input | string أو array | نعم | مدخلات المستخدم، أو المدخلات متعددة الأدوار، أو المدخلات متعددة الوسائط |
instructions | string | لا | تعليمات النظام أو المطوّر |
stream | boolean | لا | ما إذا كنت تريد استخدام بث Server-Sent Events |
temperature | number | لا | درجة حرارة أخذ العينات |
max_output_tokens | integer | لا | أقصى رموز مخرجات |
طلب SDK
const response = await client.responses.create({
model: "gpt-5.6-sol",
input: "Reply with exactly: responses ok",
});
console.log(response.output_text);مسار نص الاستجابة
output_textChat Completions
استخدم هذا endpoint للعملاء وSDK المتوافقة مع OpenAI Chat Completions.
Endpoint
POST https://openapi.felo.ai/api/v1/chat/completionsنص الطلب
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
model | string | نعم | معرّف نموذج Felo العام |
messages | array | نعم | رسائل المحادثة |
messages[].role | string | نعم | system أو user أو assistant |
messages[].content | string | نعم | محتوى الرسالة |
stream | boolean | لا | ما إذا كنت تريد استخدام بث Server-Sent Events |
temperature | number | لا | درجة حرارة أخذ العينات |
max_tokens | integer | لا | أقصى رموز مخرجات |
طلب SDK
const completion = await client.chat.completions.create({
model: "gpt-5.6-sol",
messages: [
{
role: "user",
content: "Reply with exactly: chat completions ok",
},
],
});
console.log(completion.choices[0].message.content);مسار نص الاستجابة
choices[0].message.contentMessages
استخدم هذا endpoint للعملاء وSDK المتوافقة مع Anthropic Messages.
Endpoint
POST https://openapi.felo.ai/api/v1/messagesنص الطلب
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
model | string | نعم | معرّف نموذج Felo العام |
max_tokens | integer | نعم | أقصى رموز مخرجات |
messages | array | نعم | رسائل المحادثة |
messages[].role | string | نعم | user أو assistant |
messages[].content | string أو array | نعم | نص عادي أو كتل محتوى Anthropic |
system | string | لا | موجّه النظام |
stream | boolean | لا | ما إذا كنت تريد استخدام بث Server-Sent Events |
temperature | number | لا | درجة حرارة أخذ العينات |
طلب SDK
const message = await client.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 64,
messages: [
{
role: "user",
content: "Reply with exactly: messages ok",
},
],
});
const text = message.content
.filter((block) => block.type === "text")
.map((block) => block.text)
.join("");
console.log(text);طلب كتلة المحتوى
const message = await client.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 64,
messages: [
{
role: "user",
content: [
{
type: "text",
text: "Reply with exactly: messages ok",
},
],
},
],
});مسار نص الاستجابة
content[].textالبث
عيّن stream على true لتلقي Server-Sent Events. ويتبع تنسيق حمولة الحدث البروتوكول المختار:
- تعيد تدفقات Responses أحداث استجابة متوافقة مع Responses.
- تعيد تدفقات Chat Completions أجزاء إكمال دردشة متوافقة مع OpenAI.
- تعيد تدفقات Messages أحداث رسائل متوافقة مع Anthropic.
const stream = await client.responses.create({
model: "gpt-5.6-sol",
input: "Write one sentence.",
stream: true,
});ينبغي للعملاء تحليل البث وفق البروتوكول الذي يستخدمونه، بدلًا من توقع مخطط حدث مشترك واحد عبر endpoints الثلاثة.
الأخطاء
يعيد LLM API شكل الخطأ الخاص بالبروتوكول المختار متى أمكن. وتشمل الأسباب الشائعة:
| حالة HTTP | السبب | الإجراء المقترح |
|---|---|---|
400 | نص JSON غير صالح أو حقول بروتوكول مطلوبة مفقودة | تحقق من model وmessages وinput وmax_tokens وحقول كتل المحتوى |
401 | مفتاح API مفقود أو غير صالح | تحقق من Authorization: Bearer ... أو X-API-Key |
402 | أرصدة الحساب غير كافية | تحقق من رصيد حساب Felo |
429 | تجاوز حد المعدل | أبطئ الطلبات وأعد المحاولة لاحقًا |
502 | فشل طلب خدمة النموذج | أعد المحاولة وأرفق X-Request-Id عند التواصل مع الدعم |
503 | خدمة النموذج غير متاحة مؤقتًا | أعد المحاولة مع تراجع تدريجي أو اختر نموذجًا منشورًا آخر |