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 endpointهای فراخوانی مستقیم مدل را از طریق Felo API Platform در دسترس میگذارد. وقتی میخواهید مدلهای زبانی همهمنظوره را صدا بزنید، از کلاینتهای سازگار با OpenAI یا سازگار با Anthropic دوباره استفاده کنید، یا چارچوبهای عامل را به Felo API Platform وصل کنید، از آن استفاده کنید.
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 استفاده کنید، نه endpointهای 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 Platform نیاز دارند. از Authorization: Bearer ... یا X-API-Key استفاده کنید.
Authorization: Bearer YOUR_API_KEYX-API-Key: YOUR_API_KEYبرای جزئیات ساخت و مدیریت کلیدهای API راهنمای احراز هویت را ببینید.
URL پایه
از میزبان عمومی Felo API Platform استفاده کنید:
https://openapi.felo.aiبرای کلاینتهای SDK، base 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) |
هر سه endpoint پارامتر پرسوجوی اختیاری provider را میپذیرند (برای نمونه openrouter) و {"object":"list","data":[...]} برمیگردانند. هر مورد شامل id، object، created، owned_by و model_kind است. فهرستهای اختصاصی از دسته مؤثر پس از بازنویسیهای نگاشت ارائهدهنده فعال استفاده میکنند.
فقط مدلهای فعال، فهرستشده، حذفنشده و دارای قیمتگذاری جاری منطبق با شرطهای ارائهدهنده برگردانده میشوند؛ قیمت صفر معتبر است. مدلهای تازه همگامشده تا وقتی مدیر آنها را فهرست نکند پنهان میمانند. همه فهرستها ترتیب پیکربندیشده را به اشتراک میگذارند و نام و شناسه مدل ملاک تفکیکاند. نبود تطابق HTTP 200 با آرایه خالی data برمیگرداند. کشف، کاتالوگ محلی را میخواند و فراخوانی مدل را اجرا یا صورتحساب نمیکند.
فقط GET /api/v1/models پارامتر exclude_video_and_decisions را میپذیرد (بولی، پیشفرض false). آن را true کنید تا نوعهای مؤثر video_generation و decisions حذف شوند؛ مدلهای تصویری واجد شرایط میمانند. میتوان آن را با provider ترکیب کرد. حذف آن یا تنظیم روی false کاتالوگ کامل را حفظ میکند. مقدارهای بولی نامعتبر 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 را فقط بهتنهایی به کار ببرید. فقط گروه ارائهدهنده نخستین کانال ارسال میشود؛ بازگشت خودکار وجود ندارد. کانالها و مسیریابی ارائهدهنده را ببینید.
قیمتها به دلار آمریکا فهرست شدهاند. نرخهای توکن برای خوانایی بر حسب هر 1 میلیون توکن نمایش داده میشوند؛ صورتحساب از دقت هر توکن در تصویر قیمت جاری استفاده میکند. نرخهای کش فقط وقتی اعمال میشوند که پاسخ پروتکل مصرف کش را شامل شود. خط تیره یعنی نرخ منتشرشده جداگانه یا محدودیت منتشرشدهای وجود ندارد. مصرف جستجوی وب، وقتی سرویس مدل آن را گزارش کند، برای هر جستجو $0.01 محاسبه میشود.
| شناسه مدل | زمینه | بیشینه خروجی | ورودی / 1M توکن | خروجی / 1M توکن | خواندن کش / 1M توکن | نوشتن کش / 1M توکن |
|---|---|---|---|---|---|---|
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 نوشتن کش بهازای هر 1M توکن محاسبه میشوند.
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 Platform خود تنظیم کنید.
export FELO_API_KEY="YOUR_API_KEY"نصب SDKها
OpenAI SDK
برای Responses API و Chat Completions API از OpenAI SDK استفاده کنید.
##### JavaScript
npm install openai##### Python
pip install openaiAnthropic SDK
برای Messages API از Anthropic SDK استفاده کنید.
##### JavaScript
npm install @anthropic-ai/sdk##### Python
pip install anthropicپیکربندی کلاینتها
endpointهای سازگار با OpenAI از base 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",
)endpointهای سازگار با Anthropic از base 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
برای یکپارچگیهای تازه سازگار با OpenAI و اشیاء پاسخ به سبک عامل از Responses API استفاده کنید.
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
وقتی برنامه شما از قبل messages به سبک OpenAI میفرستد از Chat Completions استفاده کنید.
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
وقتی کلاینت یا چارچوب عامل شما شکل درخواست و پاسخ سازگار با Anthropic را انتظار دارد از Messages استفاده کنید.
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
- ساخت chat completion در OpenAI
- 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 تکههای chat completion سازگار با OpenAI برمیگردانند.
- جریانهای Messages رویدادهای پیام سازگار با Anthropic برمیگردانند.
const stream = await client.responses.create({
model: "gpt-5.6-sol",
input: "Write one sentence.",
stream: true,
});کلاینتها باید جریان را بر اساس پروتکلی که به کار میبرند تجزیه کنند، نه با انتظار یک طرحواره رویداد مشترک در هر سه endpoint.
خطاها
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 | سرویس مدل موقتاً در دسترس نیست | با عقبنشینی دوباره تلاش کنید یا مدل منتشرشده دیگری انتخاب کنید |