Felo API PlatformFelo API Platform

Felo APIs

LLM API

Panggil endpoint model Felo melalui protokol serasi OpenAI dan serasi Anthropic.

GET/api/v1/models

Pengesahan

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

Decisions API

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

Hantar 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.13
  • state: Konteks untuk dinilai; rentetan atau nilai JSON.
  • questions: Soalan bernama 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 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_KEY
X-API-Key: YOUR_API_KEY

Lihat Panduan Pengesahan untuk butiran tentang mencipta dan mengurus kunci API.

URL Asas

Gunakan hos awam Felo API Platform:

https://openapi.felo.ai

Untuk klien SDK, konfigurasikan URL asas khusus protokol yang ditunjukkan dalam Penggunaan Asas.

Pengepala Biasa

PengepalaWajibPenerangan
AuthorizationYa, melainkan X-API-Key digunakanKunci API dalam format Bearer YOUR_API_KEY
X-API-KeyYa, melainkan Authorization digunakanAlternatif kunci API kepada pengepala Bearer
Content-TypeYaMesti application/json
X-Request-IdTidakID permintaan pilihan untuk penyelesaian masalah

Penemuan Model

Katalog umum merangkumi semua kategori model. Gunakan senarai khusus untuk menemui model video atau keputusan:

EndpointKategori model
GET /api/v1/modelsSemua kategori (tidak berubah)
GET /api/v1/videos/modelsPenjanaan video (video_generation)
GET /api/v1/decisions/modelsKeputusan, 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 ModelKonteksOutput maksimumInput / 1J tokenOutput / 1J tokenBaca cache / 1J tokenTulis cache / 1J 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 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 openai

Anthropic SDK

Gunakan Anthropic SDK untuk Messages API.

##### JavaScript

npm install @anthropic-ai/sdk

##### Python

pip install anthropic

Konfigurasikan 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

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

Isi Badan Permintaan

ParameterJenisWajibPenerangan
modelstringYaID model Felo awam
inputstring atau arrayYaInput pengguna, input berbilang pusingan, atau input multimodal
instructionsstringTidakArahan sistem atau pembangun
streambooleanTidakSama ada untuk menggunakan penstriman Server-Sent Events
temperaturenumberTidakSuhu persampelan
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);

Laluan Teks Respons

output_text

Chat Completions

Gunakan endpoint ini untuk klien dan SDK serasi OpenAI Chat Completions.

Endpoint

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

Isi Badan Permintaan

ParameterJenisWajibPenerangan
modelstringYaID model Felo awam
messagesarrayYaMesej perbualan
messages[].rolestringYasystem, user, atau assistant
messages[].contentstringYaKandungan mesej
streambooleanTidakSama ada untuk menggunakan penstriman Server-Sent Events
temperaturenumberTidakSuhu persampelan
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);

Laluan Teks Respons

choices[0].message.content

Messages

Gunakan endpoint ini untuk klien dan SDK serasi Anthropic Messages.

Endpoint

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

Isi Badan Permintaan

ParameterJenisWajibPenerangan
modelstringYaID model Felo awam
max_tokensintegerYaToken output maksimum
messagesarrayYaMesej perbualan
messages[].rolestringYauser atau assistant
messages[].contentstring atau arrayYaTeks biasa atau blok kandungan Anthropic
systemstringTidakGesaan sistem
streambooleanTidakSama ada untuk menggunakan penstriman Server-Sent Events
temperaturenumberTidakSuhu 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[].text

Penstriman

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 HTTPPuncaTindakan Disyorkan
400Badan JSON tidak sah atau medan protokol wajib tiadaSemak model, messages, input, max_tokens, dan medan blok kandungan
401Kunci API tiada atau tidak sahSahkan Authorization: Bearer ... atau X-API-Key
402Kredit akaun tidak mencukupiSemak baki akaun Felo anda
429Had kadar dilampauiPerlahan permintaan dan cuba semula kemudian
502Permintaan perkhidmatan model gagalCuba semula dan berikan X-Request-Id apabila menghubungi sokongan
503Perkhidmatan model tidak tersedia sementaraCuba semula dengan pengunduran atau pilih model terbitan lain