Felo API PlatformFelo API Platform

Felo APIs

LLM API

Panggil endpoint model Felo melalui protokol yang kompatibel dengan OpenAI dan Anthropic.

GET/api/v1/models

Autentikasi

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 Responses
  • POST /api/v1/chat/completions: Kompatibel dengan OpenAI Chat Completions
  • POST /api/v1/messages: Kompatibel dengan Anthropic Messages

Decisions API

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

Kirim 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.13
  • state: Konteks yang akan dievaluasi; berupa string atau nilai JSON.
  • questions: Pertanyaan bernama yang menggunakan type, instructions, dan 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"])

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_KEY
X-API-Key: YOUR_API_KEY

Lihat Panduan Autentikasi untuk detail tentang membuat dan mengelola kunci API.

URL Dasar

Gunakan host publik Felo API Platform:

https://openapi.felo.ai

Untuk klien SDK, konfigurasikan URL dasar khusus protokol yang ditunjukkan di Penggunaan Dasar.

Header Umum

HeaderWajibDeskripsi
AuthorizationYa, kecuali X-API-Key digunakanKunci API dalam format Bearer YOUR_API_KEY
X-API-KeyYa, kecuali Authorization digunakanAlternatif kunci API sebagai pengganti header Bearer
Content-TypeYaHarus application/json
X-Request-IdTidakID permintaan opsional untuk pemecahan masalah

Penemuan Model

Katalog umum mencakup semua kategori model. Gunakan daftar khusus untuk menemukan model video atau model Decisions:

EndpointKategori model
GET /api/v1/modelsSemua kategori (tidak berubah)
GET /api/v1/videos/modelsPembuatan video (video_generation)
GET /api/v1/decisions/modelsDecisions, 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 IDKonteksOutput maksInput / 1 juta tokenOutput / 1 juta tokenBaca cache / 1 juta tokenTulis cache / 1 juta token
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 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 openai

Anthropic SDK

Gunakan Anthropic SDK untuk Messages API.

##### JavaScript

npm install @anthropic-ai/sdk

##### Python

pip install anthropic

Konfigurasikan 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

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/responses

Isi Permintaan

ParameterTipeWajibDeskripsi
modelstringYaID model Felo publik
inputstring atau arrayYaMasukan pengguna, masukan multi-giliran, atau masukan multimodal
instructionsstringTidakInstruksi sistem atau pengembang
streambooleanTidakApakah menggunakan streaming Server-Sent Events
temperaturenumberTidakSuhu sampling
max_output_tokensintegerTidakToken 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_text

Chat Completions

Gunakan endpoint ini untuk klien dan SDK yang kompatibel dengan OpenAI Chat Completions.

Endpoint

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

Isi Permintaan

ParameterTipeWajibDeskripsi
modelstringYaID model Felo publik
messagesarrayYaPesan percakapan
messages[].rolestringYasystem, user, atau assistant
messages[].contentstringYaKonten pesan
streambooleanTidakApakah menggunakan streaming Server-Sent Events
temperaturenumberTidakSuhu sampling
max_tokensintegerTidakToken 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.content

Messages

Gunakan endpoint ini untuk klien dan SDK yang kompatibel dengan Anthropic Messages.

Endpoint

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

Isi Permintaan

ParameterTipeWajibDeskripsi
modelstringYaID model Felo publik
max_tokensintegerYaToken output maksimum
messagesarrayYaPesan percakapan
messages[].rolestringYauser atau assistant
messages[].contentstring atau arrayYaTeks biasa atau blok konten Anthropic
systemstringTidakPrompt sistem
streambooleanTidakApakah menggunakan streaming Server-Sent Events
temperaturenumberTidakSuhu 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[].text

Streaming

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 HTTPPenyebabTindakan yang Disarankan
400Isi JSON tidak valid atau field protokol wajib tidak adaPeriksa model, messages, input, max_tokens, dan field blok konten
401Kunci API tidak ada atau tidak validVerifikasi Authorization: Bearer ... atau X-API-Key
402Kredit layanan akun tidak mencukupiPeriksa saldo akun Felo Anda
429Batas laju terlampauiPerlambat permintaan dan coba lagi nanti
502Permintaan layanan model gagalCoba lagi dan sertakan X-Request-Id saat menghubungi dukungan
503Layanan model sementara tidak tersediaCoba lagi dengan backoff atau pilih model terpublikasi lain