Felo APIs
LLM API
Panggil endpoint model Felo melalui protokol serasi OpenAI dan serasi Anthropic.
/api/v1/modelsPengesahan
Bearer API key or X-API-Key
Jenis kandungan
application/json
Nota had kadar
Model service limits may apply. Retry with backoff on 429 or 503.
LLM API mendedahkan endpoint panggilan model terus melalui Felo API Platform. Gunakannya apabila anda mahu memanggil model bahasa tujuan umum, menggunakan semula klien serasi OpenAI atau serasi Anthropic, atau menyambungkan rangka kerja ejen kepada Felo API Platform.
LLM API kini merangkumi tiga permukaan panggilan model serasi chat:
POST /api/v1/responses: Serasi OpenAI ResponsesPOST /api/v1/chat/completions: Serasi OpenAI Chat CompletionsPOST /api/v1/messages: Serasi Anthropic Messages
Decisions API
POST https://openapi.felo.ai/api/v1/decisionsHantar keadaan dan soalan bertaip sempit kepada jev-1.13 (juga diterima: typesafe/jev-1.13). Gunakan /api/v1/decisions, bukan endpoint Chat Completions, Messages, atau Responses. Penstriman tidak disokong.
Medan permintaan
model:jev-1.13state: Konteks untuk dinilai; rentetan atau nilai JSON.questions: Soalan bernama menggunakantype,instructions, dancriteria.
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"])Jenis jawapan
noul: kebarangkalian dari 0 hingga 1. choice: pilihan yang dipilih dan taburan kebarangkaliannya. score: skor berangka untuk kriteria tersusun, bersama taburannya.
Ralat menggunakan error.code (status HTTP berangka) dan error.message. Kendalikan respons bukan-2xx sebelum membaca answers.
Penggunaan dan harga
Respons merangkumi usage.input_tokens, usage.output_tokens, dan mungkin merangkumi usage.cost. Kadar rujukan disemak pada 2026-10-12: input USD 0.042 setiap juta token; output USD 0. Kadar output sifar tidak menjadikan penggunaan input percuma. Kadar mungkin berubah; gunakan harga model yang diterbitkan dan diskaun akaun yang berkenaan untuk anggaran.
Pengesahan
Permintaan LLM API memerlukan kunci Felo API Platform. Gunakan sama ada Authorization: Bearer ... atau X-API-Key.
Authorization: Bearer YOUR_API_KEYX-API-Key: YOUR_API_KEYLihat Panduan Pengesahan untuk butiran tentang mencipta dan mengurus kunci API.
URL Asas
Gunakan hos awam Felo API Platform:
https://openapi.felo.aiUntuk klien SDK, konfigurasikan URL asas khusus protokol yang ditunjukkan dalam Penggunaan Asas.
Pengepala Biasa
| Pengepala | Wajib | Penerangan |
|---|---|---|
Authorization | Ya, melainkan X-API-Key digunakan | Kunci API dalam format Bearer YOUR_API_KEY |
X-API-Key | Ya, melainkan Authorization digunakan | Alternatif kunci API kepada pengepala Bearer |
Content-Type | Ya | Mesti application/json |
X-Request-Id | Tidak | ID permintaan pilihan untuk penyelesaian masalah |
Penemuan Model
Katalog umum merangkumi semua kategori model. Gunakan senarai khusus untuk menemui model video atau keputusan:
| Endpoint | Kategori model |
|---|---|
GET /api/v1/models | Semua kategori (tidak berubah) |
GET /api/v1/videos/models | Penjanaan video (video_generation) |
GET /api/v1/decisions/models | Keputusan, termasuk Jev (decisions) |
Ketiga-tiga endpoint menerima parameter pertanyaan pilihan provider (contohnya openrouter) dan mengembalikan {"object":"list","data":[...]}. Setiap item mengandungi id, object, created, owned_by, dan model_kind. Senarai khusus menggunakan kategori berkesan selepas penggantian pemetaan penyedia yang didayakan.
Hanya model yang didayakan, tersenarai, tidak dipadam dengan harga semasa yang sepadan dengan syarat penyedia dikembalikan; harga sifar adalah sah. Model yang baru disegerakkan disembunyikan sehingga pentadbir menyenaraikannya. Semua senarai berkongsi susunan yang dikonfigurasikan, dengan nama model dan ID sebagai pemutus seri. Tiada padanan mengembalikan HTTP 200 dengan tatasusunan data kosong. Penemuan membaca katalog setempat dan tidak memanggil atau mengenakan caj untuk panggilan model.
Hanya GET /api/v1/models menerima exclude_video_and_decisions (boolean, lalai false). Tetapkan kepada true untuk mengecualikan jenis berkesan video_generation dan decisions; model imej kekal layak. Ia boleh digabungkan dengan provider. Meninggalkannya atau menetapkan false mengekalkan katalog penuh. Nilai boolean tidak sah mengembalikan 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}"Pilih endpoint panggilan mengikut model_kind: chat untuk Responses, Chat Completions, atau Messages seperti yang disokong oleh model; video_generation untuk POST /api/v1/videos/generations; decisions untuk POST /api/v1/decisions; image_generation untuk POST /api/v1/images/generations. Butiran kekal di GET /api/v1/models/{model_id}. Model yang tersenarai tidak semestinya serasi dengan setiap endpoint panggilan.
Model imej tiada endpoint senarai khusus. Tapis GET /api/v1/models mengikut model_kind: "image_generation". Lihat Penjanaan Imej untuk medan permintaan imej.
Model dan Harga
Permintaan menggunakan saluran lalai model melainkan anda menetapkan satu dengan X-Felo-Channel. Hantar senarai kod saluran awam yang tersusun dan dipisahkan koma daripada katalog model; tinggalkan pengepala untuk menggunakan lalai. Gunakan default hanya dengan sendirinya. Hanya kumpulan penyedia saluran pertama dihantar; tiada sandaran automatik. Lihat Saluran dan Penghalaan Penyedia.
Harga disenaraikan dalam USD. Kadar token ditunjukkan setiap 1 juta token untuk kebolehbacaan; pengebilan menggunakan ketepatan setiap token daripada petikan harga semasa. Kadar cache terpakai hanya apabila respons protokol merangkumi penggunaan cache. Sempang bermaksud tiada kadar terbitan berasingan atau had terbitan. Penggunaan carian web, apabila dilaporkan oleh perkhidmatan model, dikenakan caj $0.01 setiap carian.
| ID Model | Konteks | Output maksimum | Input / 1J token | Output / 1J token | Baca cache / 1J token | Tulis cache / 1J token |
|---|---|---|---|---|---|---|
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 menggunakan harga berperingkat: gesaan sehingga 100K token dibilkan pada kadar standard di atas, dan permintaan yang gesaannya melebihi 100K token dibilkan pada $0.50 input, $2.50 output, $0.05 baca cache, dan $0.0625 tulis cache setiap 1J token untuk keseluruhan permintaan.
GPT-5.6 tersedia dalam tiga peringkat: Luna untuk beban kerja pantas dan kos cekap; Terra untuk pengekodan, penaakulan, dan tugasan ejen yang seimbang; dan Sol untuk penaakulan kompleks serta pengekodan perdana. Setiap peringkat juga mendedahkan ID model -pro (gpt-5.6-luna-pro, gpt-5.6-terra-pro, dan gpt-5.6-sol-pro) yang menggunakan model asas yang sama dengan mod penaakulan pro. Harga, panjang konteks, dan output maksimum tidak berubah untuk ID -pro.
DeepSeek V4 Flash menyokong mod penaakulan dan bukan penaakulan, output JSON, panggilan alat, Responses API, dan keserasian Anthropic API. Ia tersedia melalui permukaan Responses, Chat Completions, dan Messages Felo. Harga tulis cache belum diterbitkan.
Penggunaan Asas
Contoh-contoh ini menggunakan SDK rasmi OpenAI dan Anthropic. Tetapkan FELO_API_KEY kepada kunci Felo API Platform anda sebelum menjalankan contoh.
export FELO_API_KEY="YOUR_API_KEY"Pasang SDK
OpenAI SDK
Gunakan OpenAI SDK untuk Responses API dan Chat Completions API.
##### JavaScript
npm install openai##### Python
pip install openaiAnthropic SDK
Gunakan Anthropic SDK untuk Messages API.
##### JavaScript
npm install @anthropic-ai/sdk##### Python
pip install anthropicKonfigurasikan Klien
Endpoint serasi OpenAI menggunakan URL asas OpenAI SDK dengan /api/v1, kerana SDK menambahkan laluan sumber seperti /responses dan /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 serasi Anthropic menggunakan URL asas Anthropic SDK tanpa /v1, kerana SDK menambahkan /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",
)Menggunakan Responses API
Gunakan Responses API untuk integrasi serasi OpenAI baharu dan objek respons gaya ejen.
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)Menggunakan Chat Completions
Gunakan Chat Completions apabila aplikasi anda sudah menghantar messages gaya 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)Menggunakan Messages
Gunakan Messages apabila klien atau rangka kerja ejen anda menjangkakan bentuk permintaan dan respons serasi 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)Dokumentasi Rasmi
- Mula Pantas OpenAI API
- OpenAI Create response
- OpenAI Create chat completion
- Claude Messages API
- Anthropic TypeScript SDK
- Anthropic Python SDK
Untuk persediaan klien ejen, lihat Konfigurasi Claude Code dan Codex.
Rujukan Protokol
Responses
Gunakan endpoint ini untuk klien dan integrasi serasi OpenAI Responses API.
Endpoint
POST https://openapi.felo.ai/api/v1/responsesIsi Badan Permintaan
| Parameter | Jenis | Wajib | Penerangan |
|---|---|---|---|
model | string | Ya | ID model Felo awam |
input | string atau array | Ya | Input pengguna, input berbilang pusingan, atau input multimodal |
instructions | string | Tidak | Arahan sistem atau pembangun |
stream | boolean | Tidak | Sama ada untuk menggunakan penstriman Server-Sent Events |
temperature | number | Tidak | Suhu persampelan |
max_output_tokens | integer | Tidak | Token output maksimum |
Permintaan SDK
const response = await client.responses.create({
model: "gpt-5.6-sol",
input: "Reply with exactly: responses ok",
});
console.log(response.output_text);Laluan Teks Respons
output_textChat Completions
Gunakan endpoint ini untuk klien dan SDK serasi OpenAI Chat Completions.
Endpoint
POST https://openapi.felo.ai/api/v1/chat/completionsIsi Badan Permintaan
| Parameter | Jenis | Wajib | Penerangan |
|---|---|---|---|
model | string | Ya | ID model Felo awam |
messages | array | Ya | Mesej perbualan |
messages[].role | string | Ya | system, user, atau assistant |
messages[].content | string | Ya | Kandungan mesej |
stream | boolean | Tidak | Sama ada untuk menggunakan penstriman Server-Sent Events |
temperature | number | Tidak | Suhu persampelan |
max_tokens | integer | Tidak | Token output maksimum |
Permintaan 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);Laluan Teks Respons
choices[0].message.contentMessages
Gunakan endpoint ini untuk klien dan SDK serasi Anthropic Messages.
Endpoint
POST https://openapi.felo.ai/api/v1/messagesIsi Badan Permintaan
| Parameter | Jenis | Wajib | Penerangan |
|---|---|---|---|
model | string | Ya | ID model Felo awam |
max_tokens | integer | Ya | Token output maksimum |
messages | array | Ya | Mesej perbualan |
messages[].role | string | Ya | user atau assistant |
messages[].content | string atau array | Ya | Teks biasa atau blok kandungan Anthropic |
system | string | Tidak | Gesaan sistem |
stream | boolean | Tidak | Sama ada untuk menggunakan penstriman Server-Sent Events |
temperature | number | Tidak | Suhu persampelan |
Permintaan 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);Permintaan Blok Kandungan
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",
},
],
},
],
});Laluan Teks Respons
content[].textPenstriman
Tetapkan stream kepada true untuk menerima Server-Sent Events. Format muatan peristiwa mengikut protokol yang dipilih:
- Strim Responses mengembalikan peristiwa respons serasi Responses.
- Strim Chat Completions mengembalikan ketulan penyiapan chat serasi OpenAI.
- Strim Messages mengembalikan peristiwa mesej serasi Anthropic.
const stream = await client.responses.create({
model: "gpt-5.6-sol",
input: "Write one sentence.",
stream: true,
});Klien harus menghuraikan strim mengikut protokol yang digunakan dan bukannya menjangka satu skema peristiwa yang dikongsi merentas ketiga-tiga endpoint.
Ralat
LLM API mengembalikan bentuk ralat protokol yang dipilih apabila boleh. Punca biasa termasuk:
| Status HTTP | Punca | Tindakan Disyorkan |
|---|---|---|
400 | Badan JSON tidak sah atau medan protokol wajib tiada | Semak model, messages, input, max_tokens, dan medan blok kandungan |
401 | Kunci API tiada atau tidak sah | Sahkan Authorization: Bearer ... atau X-API-Key |
402 | Kredit akaun tidak mencukupi | Semak baki akaun Felo anda |
429 | Had kadar dilampaui | Perlahan permintaan dan cuba semula kemudian |
502 | Permintaan perkhidmatan model gagal | Cuba semula dan berikan X-Request-Id apabila menghubungi sokongan |
503 | Perkhidmatan model tidak tersedia sementara | Cuba semula dengan pengunduran atau pilih model terbitan lain |