Felo API PlatformFelo API Platform

Felo APIs

LLM API

استدعِ نقاط endpoint لنماذج Felo عبر بروتوكولات متوافقة مع OpenAI وأخرى متوافقة مع Anthropic.

GET/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 Responses
  • POST /api/v1/chat/completions: متوافق مع OpenAI Chat Completions
  • POST /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.13
  • state: السياق المطلوب تقييمه؛ سلسلة أو قيمة 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_KEY
X-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-5200K64K$1.00$5.00$0.10$1.25
claude-sonnet-4-61M128K$3.00$15.00$0.30$3.75
claude-opus-4-81M128K$5.00$25.00$0.50$6.25
claude-sonnet-51M128K$2.00$10.00$0.20$2.50
claude-haiku-5-51M128K$0.10$0.50$0.01$0.0125
gpt-5.51.05M128K$5.00$30.00$0.50-
gpt-5.5-pro1.05M128K$30.00$180.00--
gpt-5.6-luna1.05M128K$1.00$6.00$0.10$1.25
gpt-5.6-terra1.05M128K$2.50$15.00$0.25$3.125
gpt-5.6-sol1.05M128K$5.00$30.00$0.50$6.25
grok-4.5500K-$2.00$6.00$0.50-
deepseek-v4-flash1M384K$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 openai

Anthropic 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)

المستندات الرسمية

لإعداد عملاء الوكلاء، راجع إعداد Claude Code وCodex.

مرجع البروتوكول

Responses

استخدم هذا endpoint للعملاء والتكاملات المتوافقة مع OpenAI Responses API.

Endpoint

POST https://openapi.felo.ai/api/v1/responses

نص الطلب

المعاملالنوعمطلوبالوصف
modelstringنعممعرّف نموذج Felo العام
inputstring أو arrayنعممدخلات المستخدم، أو المدخلات متعددة الأدوار، أو المدخلات متعددة الوسائط
instructionsstringلاتعليمات النظام أو المطوّر
streambooleanلاما إذا كنت تريد استخدام بث Server-Sent Events
temperaturenumberلادرجة حرارة أخذ العينات
max_output_tokensintegerلاأقصى رموز مخرجات

طلب SDK

const response = await client.responses.create({
  model: "gpt-5.6-sol",
  input: "Reply with exactly: responses ok",
});

console.log(response.output_text);

مسار نص الاستجابة

output_text

Chat Completions

استخدم هذا endpoint للعملاء وSDK المتوافقة مع OpenAI Chat Completions.

Endpoint

POST https://openapi.felo.ai/api/v1/chat/completions

نص الطلب

المعاملالنوعمطلوبالوصف
modelstringنعممعرّف نموذج Felo العام
messagesarrayنعمرسائل المحادثة
messages[].rolestringنعمsystem أو user أو assistant
messages[].contentstringنعممحتوى الرسالة
streambooleanلاما إذا كنت تريد استخدام بث Server-Sent Events
temperaturenumberلادرجة حرارة أخذ العينات
max_tokensintegerلاأقصى رموز مخرجات

طلب 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.content

Messages

استخدم هذا endpoint للعملاء وSDK المتوافقة مع Anthropic Messages.

Endpoint

POST https://openapi.felo.ai/api/v1/messages

نص الطلب

المعاملالنوعمطلوبالوصف
modelstringنعممعرّف نموذج Felo العام
max_tokensintegerنعمأقصى رموز مخرجات
messagesarrayنعمرسائل المحادثة
messages[].rolestringنعمuser أو assistant
messages[].contentstring أو arrayنعمنص عادي أو كتل محتوى Anthropic
systemstringلاموجّه النظام
streambooleanلاما إذا كنت تريد استخدام بث Server-Sent Events
temperaturenumberلادرجة حرارة أخذ العينات

طلب 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خدمة النموذج غير متاحة مؤقتًاأعد المحاولة مع تراجع تدريجي أو اختر نموذجًا منشورًا آخر