Felo APIs
LLM API
Panggil endpoint model Felo melalui protokol yang kompatibel dengan OpenAI dan Anthropic.
/api/v1/modelsAutentikasi
Bearer API key or X-API-Key
Tipe konten
application/json
Catatan batas laju
Model service limits may apply. Retry with backoff on 429 or 503.
LLM API menyediakan endpoint pemanggilan model langsung melalui Felo API Platform. Gunakan saat Anda ingin memanggil model bahasa serbaguna, menggunakan kembali klien yang kompatibel dengan OpenAI atau Anthropic, atau menghubungkan kerangka kerja agen ke Felo API Platform.
LLM API saat ini mencakup tiga antarmuka pemanggilan model yang kompatibel dengan chat:
POST /api/v1/responses: Kompatibel dengan OpenAI ResponsesPOST /api/v1/chat/completions: Kompatibel dengan OpenAI Chat CompletionsPOST /api/v1/messages: Kompatibel dengan Anthropic Messages
Decisions API
POST https://openapi.felo.ai/api/v1/decisionsKirim state dan pertanyaan bertipe yang sempit ke jev-1.13 (juga diterima: typesafe/jev-1.13). Gunakan /api/v1/decisions, bukan endpoint Chat Completions, Messages, atau Responses. Streaming tidak didukung.
Field Permintaan
model:jev-1.13state: Konteks yang akan dievaluasi; berupa string atau nilai JSON.questions: Pertanyaan bernama yang 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 Jawaban
noul: probabilitas dari 0 hingga 1. choice: opsi yang dipilih dan distribusi probabilitasnya. score: skor numerik untuk kriteria terurut, beserta distribusinya.
Error menggunakan error.code (status HTTP numerik) dan error.message. Tangani respons non-2xx sebelum membaca answers.
Penggunaan dan Harga
Respons mencakup usage.input_tokens, usage.output_tokens, dan dapat mencakup usage.cost. Tarif referensi yang diperiksa pada 2026-10-12: input USD 0.042 per juta token; output USD 0. Tarif output nol tidak membuat penggunaan input gratis. Tarif dapat berubah; gunakan harga model yang dipublikasikan dan diskon akun yang berlaku untuk estimasi.
Autentikasi
Permintaan LLM API memerlukan kunci Felo API Platform. Gunakan Authorization: Bearer ... atau X-API-Key.
Authorization: Bearer YOUR_API_KEYX-API-Key: YOUR_API_KEYLihat Panduan Autentikasi untuk detail tentang membuat dan mengelola kunci API.
URL Dasar
Gunakan host publik Felo API Platform:
https://openapi.felo.aiUntuk klien SDK, konfigurasikan URL dasar khusus protokol yang ditunjukkan di Penggunaan Dasar.
Header Umum
| Header | Wajib | Deskripsi |
|---|---|---|
Authorization | Ya, kecuali X-API-Key digunakan | Kunci API dalam format Bearer YOUR_API_KEY |
X-API-Key | Ya, kecuali Authorization digunakan | Alternatif kunci API sebagai pengganti header Bearer |
Content-Type | Ya | Harus application/json |
X-Request-Id | Tidak | ID permintaan opsional untuk pemecahan masalah |
Penemuan Model
Katalog umum mencakup semua kategori model. Gunakan daftar khusus untuk menemukan model video atau model Decisions:
| Endpoint | Kategori model |
|---|---|
GET /api/v1/models | Semua kategori (tidak berubah) |
GET /api/v1/videos/models | Pembuatan video (video_generation) |
GET /api/v1/decisions/models | Decisions, termasuk Jev (decisions) |
Ketiga endpoint menerima parameter kueri provider opsional (misalnya, openrouter) dan mengembalikan {"object":"list","data":[...]}. Setiap item berisi id, object, created, owned_by, dan model_kind. Daftar khusus menggunakan kategori efektif setelah override pemetaan penyedia yang diaktifkan.
Hanya model yang diaktifkan, terdaftar, tidak dihapus, dan memiliki harga saat ini yang cocok dengan kondisi penyedia yang dikembalikan; harga nol tetap valid. Model yang baru disinkronkan disembunyikan hingga administrator mendaftarkannya. Semua daftar berbagi urutan yang dikonfigurasi, dengan nama model dan ID sebagai penentu akhir. Tanpa kecocokan, API mengembalikan HTTP 200 dengan array data kosong. Penemuan membaca katalog lokal dan tidak memanggil atau menagih panggilan model.
Hanya GET /api/v1/models yang menerima exclude_video_and_decisions (boolean, default false). Atur menjadi true untuk mengecualikan tipe efektif video_generation dan decisions; model gambar tetap memenuhi syarat. Parameter ini dapat digabungkan dengan provider. Menghilangkannya atau mengatur false mempertahankan katalog lengkap. Nilai boolean yang tidak valid 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 pemanggilan berdasarkan model_kind: chat untuk Responses, Chat Completions, atau Messages sesuai dukungan model; video_generation untuk POST /api/v1/videos/generations; decisions untuk POST /api/v1/decisions; image_generation untuk POST /api/v1/images/generations. Detail tetap tersedia di GET /api/v1/models/{model_id}. Model yang terdaftar tidak selalu kompatibel dengan setiap endpoint pemanggilan.
Model gambar tidak memiliki endpoint daftar khusus. Filter GET /api/v1/models berdasarkan model_kind: "image_generation". Lihat Pembuatan Gambar untuk field permintaan gambar.
Model dan Harga
Permintaan menggunakan kanal default model kecuali Anda menetapkan satu kanal dengan X-Felo-Channel. Berikan daftar kode kanal publik yang terurut dan dipisahkan koma dari katalog model; hilangkan header untuk menggunakan default. Gunakan default hanya sendiri. Hanya grup penyedia dari kanal pertama yang dikirim; tidak ada fallback otomatis. Lihat Kanal dan Perutean Penyedia.
Harga tercantum dalam USD. Tarif token ditampilkan per 1 juta token agar mudah dibaca; penagihan menggunakan presisi per token dari snapshot harga saat ini. Tarif cache hanya berlaku jika respons protokol menyertakan penggunaan cache. Tanda hubung berarti tidak ada tarif terpublikasi atau batas terpublikasi yang terpisah. Penggunaan pencarian web, jika dilaporkan oleh layanan model, dikenakan biaya $0.01 per pencarian.
| Model ID | Konteks | Output maks | Input / 1 juta token | Output / 1 juta token | Baca cache / 1 juta token | Tulis cache / 1 juta 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 bertingkat: prompt hingga 100K token ditagih dengan tarif standar di atas, dan permintaan yang prompt-nya melebihi 100K token ditagih sebesar $0.50 input, $2.50 output, $0.05 baca cache, dan $0.0625 tulis cache per 1 juta token untuk seluruh permintaan.
GPT-5.6 tersedia dalam tiga tingkatan: Luna untuk beban kerja yang cepat dan hemat biaya; Terra untuk tugas pengodean, penalaran, dan agentik yang seimbang; dan Sol untuk penalaran kompleks dan pengodean unggulan. Setiap tingkatan juga menyediakan ID model -pro (gpt-5.6-luna-pro, gpt-5.6-terra-pro, dan gpt-5.6-sol-pro) yang menggunakan model dasar yang sama dengan mode penalaran pro. Harga, panjang konteks, dan output maksimum tidak berubah untuk ID -pro.
DeepSeek V4 Flash mendukung mode penalaran dan non-penalaran, output JSON, panggilan alat, Responses API, dan kompatibilitas Anthropic API. Model ini tersedia melalui antarmuka Responses, Chat Completions, dan Messages dari Felo. Harga tulis cache belum dipublikasikan.
Penggunaan Dasar
Contoh-contoh ini menggunakan SDK resmi OpenAI dan Anthropic. Atur FELO_API_KEY menjadi kunci Felo API Platform Anda sebelum menjalankan contoh.
export FELO_API_KEY="YOUR_API_KEY"Instal 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 yang kompatibel dengan OpenAI menggunakan URL dasar OpenAI SDK dengan /api/v1, karena SDK menambahkan jalur sumber daya 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 yang kompatibel dengan Anthropic menggunakan URL dasar Anthropic SDK tanpa /v1, karena 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 baru yang kompatibel dengan OpenAI dan objek respons bergaya agen.
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 jika aplikasi Anda sudah mengirim messages bergaya 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 jika klien atau kerangka kerja agen Anda mengharapkan bentuk permintaan dan respons yang kompatibel dengan 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 Resmi
- Mulai Cepat OpenAI API
- Membuat respons OpenAI
- Membuat chat completion OpenAI
- Claude Messages API
- SDK TypeScript Anthropic
- SDK Python Anthropic
Untuk penyiapan klien agen, lihat Konfigurasi Claude Code dan Codex.
Referensi Protokol
Responses
Gunakan endpoint ini untuk klien dan integrasi yang kompatibel dengan OpenAI Responses API.
Endpoint
POST https://openapi.felo.ai/api/v1/responsesIsi Permintaan
| Parameter | Tipe | Wajib | Deskripsi |
|---|---|---|---|
model | string | Ya | ID model Felo publik |
input | string atau array | Ya | Masukan pengguna, masukan multi-giliran, atau masukan multimodal |
instructions | string | Tidak | Instruksi sistem atau pengembang |
stream | boolean | Tidak | Apakah menggunakan streaming Server-Sent Events |
temperature | number | Tidak | Suhu sampling |
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);Jalur Teks Respons
output_textChat Completions
Gunakan endpoint ini untuk klien dan SDK yang kompatibel dengan OpenAI Chat Completions.
Endpoint
POST https://openapi.felo.ai/api/v1/chat/completionsIsi Permintaan
| Parameter | Tipe | Wajib | Deskripsi |
|---|---|---|---|
model | string | Ya | ID model Felo publik |
messages | array | Ya | Pesan percakapan |
messages[].role | string | Ya | system, user, atau assistant |
messages[].content | string | Ya | Konten pesan |
stream | boolean | Tidak | Apakah menggunakan streaming Server-Sent Events |
temperature | number | Tidak | Suhu sampling |
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);Jalur Teks Respons
choices[0].message.contentMessages
Gunakan endpoint ini untuk klien dan SDK yang kompatibel dengan Anthropic Messages.
Endpoint
POST https://openapi.felo.ai/api/v1/messagesIsi Permintaan
| Parameter | Tipe | Wajib | Deskripsi |
|---|---|---|---|
model | string | Ya | ID model Felo publik |
max_tokens | integer | Ya | Token output maksimum |
messages | array | Ya | Pesan percakapan |
messages[].role | string | Ya | user atau assistant |
messages[].content | string atau array | Ya | Teks biasa atau blok konten Anthropic |
system | string | Tidak | Prompt sistem |
stream | boolean | Tidak | Apakah menggunakan streaming Server-Sent Events |
temperature | number | Tidak | Suhu sampling |
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 Konten
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",
},
],
},
],
});Jalur Teks Respons
content[].textStreaming
Atur stream menjadi true untuk menerima Server-Sent Events. Format payload peristiwa mengikuti protokol yang dipilih:
- Stream Responses mengembalikan peristiwa respons yang kompatibel dengan Responses.
- Stream Chat Completions mengembalikan potongan chat completion yang kompatibel dengan OpenAI.
- Stream Messages mengembalikan peristiwa pesan yang kompatibel dengan Anthropic.
const stream = await client.responses.create({
model: "gpt-5.6-sol",
input: "Write one sentence.",
stream: true,
});Klien harus mengurai stream sesuai protokol yang digunakan, bukan mengharapkan satu skema peristiwa bersama di ketiga endpoint.
Error
LLM API mengembalikan bentuk error dari protokol yang dipilih jika memungkinkan. Penyebab umum meliputi:
| Status HTTP | Penyebab | Tindakan yang Disarankan |
|---|---|---|
400 | Isi JSON tidak valid atau field protokol wajib tidak ada | Periksa model, messages, input, max_tokens, dan field blok konten |
401 | Kunci API tidak ada atau tidak valid | Verifikasi Authorization: Bearer ... atau X-API-Key |
402 | Kredit layanan akun tidak mencukupi | Periksa saldo akun Felo Anda |
429 | Batas laju terlampaui | Perlambat permintaan dan coba lagi nanti |
502 | Permintaan layanan model gagal | Coba lagi dan sertakan X-Request-Id saat menghubungi dukungan |
503 | Layanan model sementara tidak tersedia | Coba lagi dengan backoff atau pilih model terpublikasi lain |