Felo API PlatformFelo API Platform

Felo APIs

LLM API

Gọi endpoint mô hình Felo qua giao thức tương thích OpenAI và Anthropic.

GET/api/v1/models

Xác thực

Bearer API key or X-API-Key

Loại nội dung

application/json

Ghi chú về giới hạn

Model service limits may apply. Retry with backoff on 429 or 503.

LLM API cung cấp các endpoint gọi mô hình trực tiếp qua Felo API Platform. Hãy dùng nó khi bạn muốn gọi các mô hình ngôn ngữ đa dụng, tái sử dụng máy khách tương thích OpenAI hoặc tương thích Anthropic, hoặc kết nối các framework agent với Felo API Platform.

LLM API hiện bao gồm ba bề mặt gọi mô hình tương thích chat:

  • POST /api/v1/responses: tương thích OpenAI Responses
  • POST /api/v1/chat/completions: tương thích OpenAI Chat Completions
  • POST /api/v1/messages: tương thích Anthropic Messages

Decisions API

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

Gửi trạng thái và các câu hỏi có kiểu hẹp đến jev-1.13 (cũng chấp nhận: typesafe/jev-1.13). Hãy dùng /api/v1/decisions, không dùng các endpoint Chat Completions, Messages hay Responses. Không hỗ trợ truyền trực tiếp.

Các trường yêu cầu

  • model: jev-1.13
  • state: Ngữ cảnh cần đánh giá; một chuỗi hoặc giá trị JSON.
  • questions: Các câu hỏi có tên dùng type, instructions và 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"])

Các loại câu trả lời

noul: một xác suất từ 0 đến 1. choice: tùy chọn được chọn và phân phối xác suất của nó. score: điểm số cho các tiêu chí có thứ tự, cùng phân phối của nó.

Lỗi dùng error.code (trạng thái HTTP dạng số) và error.message. Hãy xử lý các phản hồi không phải 2xx trước khi đọc answers.

Mức sử dụng và giá

Phản hồi bao gồm usage.input_tokens, usage.output_tokens và có thể bao gồm usage.cost. Mức giá tham chiếu được kiểm tra ngày 2026-10-12: đầu vào 0,042 USD mỗi triệu token; đầu ra 0 USD. Mức giá đầu ra bằng 0 không làm cho việc dùng đầu vào trở nên miễn phí. Mức giá có thể thay đổi; hãy dùng giá mô hình được công bố và các khoản giảm giá áp dụng cho tài khoản để ước tính.

Xác thực

Các yêu cầu LLM API cần khóa Felo API Platform. Dùng Authorization: Bearer ... hoặc X-API-Key.

Authorization: Bearer YOUR_API_KEY
X-API-Key: YOUR_API_KEY

Xem Hướng dẫn xác thực để biết chi tiết về cách tạo và quản lý khóa API.

Base URL

Dùng host công khai của Felo API Platform:

https://openapi.felo.ai

Với máy khách SDK, hãy cấu hình base URL theo giao thức được hiển thị trong Sử dụng cơ bản.

Header chung

HeaderBắt buộcMô tả
AuthorizationCó, trừ khi dùng X-API-KeyKhóa API theo định dạng Bearer YOUR_API_KEY
X-API-KeyCó, trừ khi dùng AuthorizationKhóa API thay thế cho header Bearer
Content-TypeCóPhải là application/json
X-Request-IdKhôngRequest ID tùy chọn để khắc phục sự cố

Khám phá mô hình

Danh mục chung bao gồm mọi danh mục mô hình. Hãy dùng các danh sách chuyên dụng để khám phá mô hình video hoặc quyết định:

EndpointDanh mục mô hình
GET /api/v1/modelsMọi danh mục (không thay đổi)
GET /api/v1/videos/modelsTạo video (video_generation)
GET /api/v1/decisions/modelsQuyết định, bao gồm Jev (decisions)

Cả ba endpoint đều chấp nhận tham số truy vấn provider tùy chọn (ví dụ openrouter) và trả về {"object":"list","data":[...]}. Mỗi mục chứa id, object, created, owned_by và model_kind. Các danh sách chuyên dụng dùng danh mục hiệu lực sau khi áp dụng ghi đè ánh xạ nhà cung cấp đang bật.

Chỉ các mô hình đang bật, đã được liệt kê, chưa bị xóa và có giá hiện tại khớp với điều kiện của nhà cung cấp mới được trả về; mức giá bằng 0 là hợp lệ. Các mô hình mới được đồng bộ sẽ bị ẩn cho đến khi quản trị viên liệt kê chúng. Mọi danh sách dùng chung thứ tự đã cấu hình, với tên mô hình và ID làm tiêu chí phụ. Không có kết quả khớp trả về HTTP 200 với mảng data rỗng. Việc khám phá chỉ đọc danh mục cục bộ và không gọi hay tính phí một lệnh gọi mô hình.

Chỉ GET /api/v1/models chấp nhận exclude_video_and_decisions (boolean, mặc định false). Đặt thành true để loại trừ các loại hiệu lực video_generation và decisions; các mô hình hình ảnh vẫn đủ điều kiện. Có thể kết hợp với provider. Bỏ qua hoặc đặt false sẽ giữ nguyên danh mục đầy đủ. Giá trị boolean không hợp lệ trả về 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}"

Chọn endpoint gọi theo model_kind: chat cho Responses, Chat Completions hoặc Messages tùy theo mô hình hỗ trợ; video_generation cho POST /api/v1/videos/generations; decisions cho POST /api/v1/decisions; image_generation cho POST /api/v1/images/generations. Chi tiết vẫn ở GET /api/v1/models/{model_id}. Một mô hình được liệt kê không nhất thiết tương thích với mọi endpoint gọi.

Các mô hình hình ảnh không có endpoint liệt kê riêng. Hãy lọc GET /api/v1/models theo model_kind: "image_generation". Xem Tạo hình ảnh để biết các trường yêu cầu hình ảnh.

Mô hình và giá

Các yêu cầu dùng kênh mặc định của mô hình trừ khi bạn ghim một kênh bằng X-Felo-Channel. Truyền một danh sách mã kênh công khai có thứ tự, phân tách bằng dấu phẩy từ danh mục mô hình; bỏ header để dùng mặc định. Chỉ dùng default một mình. Chỉ nhóm nhà cung cấp của kênh đầu tiên được gửi đi; không có tự động chuyển đổi dự phòng. Xem Kênh và định tuyến nhà cung cấp.

Giá được liệt kê bằng USD. Để dễ đọc, mức giá token được hiển thị theo 1 triệu token; việc tính phí dùng độ chính xác theo từng token từ ảnh chụp giá hiện tại. Mức giá cache chỉ áp dụng khi phản hồi giao thức bao gồm mức sử dụng cache. Dấu gạch ngang nghĩa là không có mức giá hoặc giới hạn riêng được công bố. Mức sử dụng tìm kiếm web, khi được dịch vụ mô hình báo cáo, được tính $0.01 mỗi lần tìm kiếm.

Model IDNgữ cảnhĐầu ra tối đaĐầu vào / 1M tokenĐầu ra / 1M tokenĐọc cache / 1M tokenGhi cache / 1M 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 dùng giá theo bậc: các prompt tối đa 100K token được tính theo mức giá tiêu chuẩn ở trên, và các yêu cầu có prompt vượt quá 100K token được tính $0.50 đầu vào, $2.50 đầu ra, $0.05 đọc cache và $0.0625 ghi cache mỗi 1M token cho toàn bộ yêu cầu.

GPT-5.6 có sẵn ở ba bậc: Luna cho khối lượng công việc nhanh, tiết kiệm chi phí; Terra cho các tác vụ viết mã, suy luận và agent cân bằng; và Sol cho suy luận và viết mã phức tạp hàng đầu. Mỗi bậc cũng cung cấp một model ID -pro (gpt-5.6-luna-pro, gpt-5.6-terra-pro và gpt-5.6-sol-pro) dùng cùng mô hình nền với chế độ suy luận pro. Giá, độ dài ngữ cảnh và đầu ra tối đa không thay đổi với các ID -pro.

DeepSeek V4 Flash hỗ trợ chế độ suy luận và không suy luận, đầu ra JSON, gọi công cụ, Responses API và tương thích Anthropic API. Nó có sẵn qua các bề mặt Responses, Chat Completions và Messages của Felo. Giá ghi cache chưa được công bố.

Sử dụng cơ bản

Các ví dụ này dùng SDK chính thức của OpenAI và Anthropic. Đặt FELO_API_KEY thành khóa Felo API Platform của bạn trước khi chạy các ví dụ.

export FELO_API_KEY="YOUR_API_KEY"

Cài đặt SDK

OpenAI SDK

Dùng OpenAI SDK cho Responses API và Chat Completions API.

##### JavaScript

npm install openai

##### Python

pip install openai

Anthropic SDK

Dùng Anthropic SDK cho Messages API.

##### JavaScript

npm install @anthropic-ai/sdk

##### Python

pip install anthropic

Cấu hình máy khách

Các endpoint tương thích OpenAI dùng base URL của OpenAI SDK với /api/v1, vì SDK nối thêm các đường dẫn tài nguyên như /responses và /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",
)

Các endpoint tương thích Anthropic dùng base URL của Anthropic SDK không có /v1, vì SDK nối thêm /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",
)

Dùng Responses API

Dùng Responses API cho các tích hợp tương thích OpenAI mới và các đối tượng phản hồi kiểu agent.

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)

Dùng Chat Completions

Dùng Chat Completions khi ứng dụng của bạn đã gửi messages kiểu 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)

Dùng Messages

Dùng Messages khi máy khách hoặc framework agent của bạn mong đợi cấu trúc yêu cầu và phản hồi tương thích 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)

Tài liệu chính thức

Để thiết lập máy khách agent, xem Cấu hình Claude Code và Codex.

Tham chiếu giao thức

Responses

Dùng endpoint này cho máy khách và tích hợp tương thích OpenAI Responses API.

Endpoint

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

Nội dung yêu cầu

Tham sốKiểuBắt buộcMô tả
modelstringCóModel ID công khai của Felo
inputstring or arrayCóĐầu vào người dùng, đầu vào nhiều lượt hoặc đầu vào đa phương thức
instructionsstringKhôngChỉ dẫn hệ thống hoặc nhà phát triển
streambooleanKhôngCó dùng truyền trực tiếp Server-Sent Events hay không
temperaturenumberKhôngNhiệt độ lấy mẫu
max_output_tokensintegerKhôngSố token đầu ra tối đa

Yêu cầu qua SDK

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

console.log(response.output_text);

Đường dẫn văn bản phản hồi

output_text

Chat Completions

Dùng endpoint này cho máy khách và SDK tương thích OpenAI Chat Completions.

Endpoint

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

Nội dung yêu cầu

Tham sốKiểuBắt buộcMô tả
modelstringCóModel ID công khai của Felo
messagesarrayCóCác thông điệp hội thoại
messages[].rolestringCósystem, user hoặc assistant
messages[].contentstringCóNội dung thông điệp
streambooleanKhôngCó dùng truyền trực tiếp Server-Sent Events hay không
temperaturenumberKhôngNhiệt độ lấy mẫu
max_tokensintegerKhôngSố token đầu ra tối đa

Yêu cầu qua 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);

Đường dẫn văn bản phản hồi

choices[0].message.content

Messages

Dùng endpoint này cho máy khách và SDK tương thích Anthropic Messages.

Endpoint

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

Nội dung yêu cầu

Tham sốKiểuBắt buộcMô tả
modelstringCóModel ID công khai của Felo
max_tokensintegerCóSố token đầu ra tối đa
messagesarrayCóCác thông điệp hội thoại
messages[].rolestringCóuser hoặc assistant
messages[].contentstring or arrayCóVăn bản thuần hoặc các khối nội dung Anthropic
systemstringKhôngPrompt hệ thống
streambooleanKhôngCó dùng truyền trực tiếp Server-Sent Events hay không
temperaturenumberKhôngNhiệt độ lấy mẫu

Yêu cầu qua 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);

Yêu cầu khối nội dung

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",
        },
      ],
    },
  ],
});

Đường dẫn văn bản phản hồi

content[].text

Truyền trực tiếp

Đặt stream thành true để nhận Server-Sent Events. Định dạng nội dung sự kiện theo giao thức đã chọn:

  • Các luồng Responses trả về sự kiện phản hồi tương thích Responses.
  • Các luồng Chat Completions trả về chunk hoàn tất chat tương thích OpenAI.
  • Các luồng Messages trả về sự kiện thông điệp tương thích Anthropic.
const stream = await client.responses.create({
  model: "gpt-5.6-sol",
  input: "Write one sentence.",
  stream: true,
});

Máy khách nên phân tích luồng theo giao thức mình đang dùng thay vì mong đợi một lược đồ sự kiện chung trên cả ba endpoint.

Lỗi

LLM API trả về cấu trúc lỗi của giao thức đã chọn bất cứ khi nào có thể. Các nguyên nhân thường gặp bao gồm:

Trạng thái HTTPNguyên nhânHành động đề xuất
400Nội dung JSON không hợp lệ hoặc thiếu trường giao thức bắt buộcKiểm tra model, messages, input, max_tokens và các trường khối nội dung
401Thiếu hoặc sai khóa APIXác minh Authorization: Bearer ... hoặc X-API-Key
402Không đủ tín dụng tài khoảnKiểm tra số dư tài khoản Felo của bạn
429Đã vượt giới hạn tần suấtGiảm tốc độ yêu cầu và thử lại sau
502Yêu cầu đến dịch vụ mô hình thất bạiThử lại và cung cấp X-Request-Id khi liên hệ hỗ trợ
503Dịch vụ mô hình tạm thời không khả dụngThử lại với thời gian chờ tăng dần hoặc chọn một mô hình được công bố khác