Felo API PlatformFelo API Platform

Felo APIs

LLM API

เรียก endpoint ของโมเดล Felo ผ่านโปรโตคอลที่เข้ากันได้กับ OpenAI และ Anthropic

GET/api/v1/models

การยืนยันตัวตน

Bearer API key or X-API-Key

ประเภทเนื้อหา

application/json

หมายเหตุเรื่องข้อจำกัด

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

LLM API เปิด endpoint สำหรับเรียกโมเดลโดยตรงผ่าน Felo API Platform ใช้เมื่อคุณต้องการเรียกโมเดลภาษาทั่วไป ใช้ไคลเอนต์ที่เข้ากันได้กับ OpenAI หรือ Anthropic ซ้ำ หรือเชื่อมต่อเฟรมเวิร์ก Agent เข้ากับ Felo API Platform

LLM API ปัจจุบันมีพื้นผิวการเรียกโมเดลที่เข้ากันได้กับแชตสามแบบ:

  • POST /api/v1/responses: เข้ากันได้กับ OpenAI Responses
  • POST /api/v1/chat/completions: เข้ากันได้กับ OpenAI Chat Completions
  • POST /api/v1/messages: เข้ากันได้กับ Anthropic Messages

Decisions API

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

ส่งสถานะและคำถามแบบแคบที่มีชนิดกำกับไปยัง jev-1.13 (ยังยอมรับ typesafe/jev-1.13 ด้วย) ใช้ /api/v1/decisions ไม่ใช่ endpoint Chat Completions, Messages หรือ Responses ไม่รองรับสตรีมมิ่ง

ฟิลด์คำขอ

  • model: jev-1.13
  • state: บริบทที่จะประเมิน เป็นสตริงหรือค่า JSON
  • questions: คำถามที่ตั้งชื่อโดยใช้ type, instructions และ 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"])

ประเภทคำตอบ

noul: ความน่าจะเป็นตั้งแต่ 0 ถึง 1 choice: ตัวเลือกที่เลือกและการกระจายความน่าจะเป็น score: คะแนนเชิงตัวเลขสำหรับเกณฑ์แบบเรียงลำดับ พร้อมการกระจายของคะแนน

ข้อผิดพลาดใช้ error.code (สถานะ HTTP แบบตัวเลข) และ error.message ให้จัดการการตอบกลับที่ไม่ใช่ 2xx ก่อนอ่าน answers

การใช้งานและราคา

การตอบกลับประกอบด้วย usage.input_tokens, usage.output_tokens และอาจมี usage.cost อัตราอ้างอิงที่ตรวจสอบเมื่อ 2026-10-12: อินพุต USD 0.042 ต่อหนึ่งล้านโทเค็น เอาต์พุต USD 0 อัตราเอาต์พุตเป็นศูนย์ไม่ได้ทำให้การใช้อินพุตฟรี อัตราอาจเปลี่ยนแปลง ให้ใช้ราคาโมเดลที่เผยแพร่และส่วนลดบัญชีที่เกี่ยวข้องในการประเมิน

การรับรองความถูกต้อง

คำขอ LLM API ต้องใช้คีย์ของ Felo API Platform ใช้ Authorization: Bearer ... หรือ X-API-Key อย่างใดอย่างหนึ่ง

Authorization: Bearer YOUR_API_KEY
X-API-Key: YOUR_API_KEY

ดูคู่มือการรับรองความถูกต้องสำหรับรายละเอียดการสร้างและจัดการคีย์ API

Base URL

ใช้โฮสต์สาธารณะของ Felo API Platform:

https://openapi.felo.ai

สำหรับไคลเอนต์ SDK ให้กำหนดค่า base URL เฉพาะโปรโตคอลตามที่แสดงในการใช้งานพื้นฐาน

Headerจำเป็นคำอธิบาย
Authorizationใช่ เว้นแต่ใช้ X-API-Keyคีย์ API ในรูปแบบ Bearer YOUR_API_KEY
X-API-Keyใช่ เว้นแต่ใช้ Authorizationคีย์ API ทางเลือกแทน header แบบ Bearer
Content-Typeใช่ต้องเป็น application/json
X-Request-Idไม่request ID แบบเลือกได้สำหรับการแก้ไขข้อบกพร่อง

การค้นหาโมเดล

แค็ตตาล็อกทั่วไปมีทุกหมวดหมู่โมเดล ใช้รายการเฉพาะเพื่อค้นหาโมเดลวิดีโอหรือโมเดลตัดสินใจ:

Endpointหมวดหมู่โมเดล
GET /api/v1/modelsทุกหมวดหมู่ (ไม่เปลี่ยนแปลง)
GET /api/v1/videos/modelsการสร้างวิดีโอ (video_generation)
GET /api/v1/decisions/modelsDecisions รวมถึง Jev (decisions)

endpoint ทั้งสามยอมรับพารามิเตอร์คิวรี provider แบบเลือกได้ (เช่น openrouter) และส่ง {"object":"list","data":[...]} แต่ละรายการมี id, object, created, owned_by และ model_kind รายการเฉพาะใช้หมวดหมู่ที่มีผลหลังการแทนที่การแมปผู้ให้บริการที่เปิดใช้งาน

จะส่งกลับเฉพาะโมเดลที่เปิดใช้งาน อยู่ในรายการ ไม่ถูกลบ และมีราคาปัจจุบันที่ตรงกับเงื่อนไขของผู้ให้บริการเท่านั้น ราคาเป็นศูนย์ถือว่าถูกต้อง โมเดลที่เพิ่งซิงโครไนซ์จะถูกซ่อนจนกว่าผู้ดูแลระบบจะเพิ่มเข้าในรายการ รายการทั้งหมดใช้ลำดับที่กำหนดค่าไว้ร่วมกัน โดยใช้ชื่อโมเดลและ ID เป็นตัวตัดสินกรณีเสมอกัน หากไม่พบรายการที่ตรง จะได้ HTTP 200 พร้อมอาร์เรย์ data ว่าง การค้นหาจะอ่านแค็ตตาล็อกในเครื่องและไม่เรียกหรือคิดค่าใช้จ่ายสำหรับการเรียกโมเดล

เฉพาะ GET /api/v1/models เท่านั้นที่ยอมรับ exclude_video_and_decisions (บูลีน ค่าเริ่มต้น false) ตั้งเป็น true เพื่อยกเว้นประเภทที่มีผล video_generation และ decisions โมเดลรูปภาพยังคงมีสิทธิ์ รวมกับ provider ได้ การละเว้นพารามิเตอร์นี้หรือตั้งเป็น false จะคงแค็ตตาล็อกเต็มไว้ ค่าบูลีนที่ไม่ถูกต้องจะได้ 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}"

เลือก endpoint สำหรับเรียกตาม model_kind: chat สำหรับ Responses, Chat Completions หรือ Messages ตามที่โมเดลรองรับ; video_generation สำหรับ POST /api/v1/videos/generations; decisions สำหรับ POST /api/v1/decisions; image_generation สำหรับ POST /api/v1/images/generations รายละเอียดยังอยู่ที่ GET /api/v1/models/{model_id} โมเดลที่อยู่ในรายการไม่ได้หมายความว่าเข้ากันได้กับทุก endpoint สำหรับเรียก

โมเดลรูปภาพไม่มี endpoint แยกรายการ ให้กรอง GET /api/v1/models ด้วย model_kind: "image_generation" ดูการสร้างรูปภาพสำหรับฟิลด์คำขอของรูปภาพ

โมเดลและราคา (Models and Pricing)

คำขอใช้ช่องทางเริ่มต้นของโมเดล เว้นแต่คุณตรึงช่องทางด้วย X-Felo-Channel ส่งรายการรหัสช่องทางสาธารณะที่คั่นด้วยจุลภาคและเรียงตามลำดับจากแค็ตตาล็อกโมเดล ละเว้น header เพื่อใช้ค่าเริ่มต้น ใช้ default เฉพาะเมื่อใช้เดี่ยว ๆ เท่านั้น เฉพาะกลุ่มผู้ให้บริการของช่องทางแรกที่ถูกส่งไป ไม่มีการสำรองอัตโนมัติ ดูช่องทางและการกำหนดเส้นทางผู้ให้บริการ

ราคาแสดงเป็นสกุลดอลลาร์สหรัฐ อัตราต่อโทเค็นแสดงต่อ 1 ล้านโทเค็นเพื่อความอ่านง่าย การเรียกเก็บเงินใช้ความละเอียดต่อโทเค็นจากสแนปช็อตราคาปัจจุบัน อัตราแคชมีผลเฉพาะเมื่อการตอบกลับของโปรโตคอลมีการใช้แคช ขีดกลางหมายถึงไม่มีอัตราที่เผยแพร่แยกหรือขีดจำกัดที่เผยแพร่ การใช้การค้นหาเว็บ เมื่อโมเดลรายงาน จะถูกคิดที่ $0.01 ต่อการค้นหา

Model IDหน้าต่างบริบทเอาต์พุตสูงสุดอินพุต / 1M โทเค็นเอาต์พุต / 1M โทเค็นอ่านแคช / 1M โทเค็นเขียนแคช / 1M โทเค็น
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 ใช้ราคาแบบแบ่งระดับ: พรอมต์ไม่เกิน 100K โทเค็นคิดตามอัตรามาตรฐานข้างต้น และคำขอที่พรอมต์เกิน 100K โทเค็นจะคิดที่อินพุต $0.50, เอาต์พุต $2.50, อ่านแคช $0.05 และเขียนแคช $0.0625 ต่อ 1M โทเค็นสำหรับทั้งคำขอ

GPT-5.6 มีสามระดับ: Luna สำหรับงานที่ต้องการความเร็วและประหยัดต้นทุน; Terra สำหรับงานเขียนโค้ด การให้เหตุผล และงาน Agentic ที่สมดุล; และ Sol สำหรับงานให้เหตุผลและเขียนโค้ดที่ซับซ้อนระดับเรือธง แต่ละระดับยังมี ID โมเดล -pro (gpt-5.6-luna-pro, gpt-5.6-terra-pro และ gpt-5.6-sol-pro) ที่ใช้โมเดลพื้นฐานเดียวกันกับโหมดการให้เหตุผลแบบ pro ราคา ความยาวหน้าต่างบริบท และเอาต์พุตสูงสุดไม่เปลี่ยนแปลงสำหรับ ID -pro

DeepSeek V4 Flash รองรับโหมดให้เหตุผลและไม่ให้เหตุผล เอาต์พุต JSON การเรียกเครื่องมือ Responses API และความเข้ากันได้กับ Anthropic API ใช้ได้ผ่านพื้นผิว Responses, Chat Completions และ Messages ของ Felo ยังไม่มีการเผยแพร่ราคาการเขียนแคช

การใช้งานพื้นฐาน

ตัวอย่างเหล่านี้อ่าน SDK อย่างเป็นทางการของ OpenAI และ Anthropic ตั้ง FELO_API_KEY เป็นคีย์ของ Felo API Platform ก่อนรันตัวอย่าง

export FELO_API_KEY="YOUR_API_KEY"

ติดตั้ง SDK

OpenAI SDK

ใช้ OpenAI SDK สำหรับ Responses API และ Chat Completions API

##### JavaScript

npm install openai

##### Python

pip install openai

Anthropic SDK

ใช้ Anthropic SDK สำหรับ Messages API

##### JavaScript

npm install @anthropic-ai/sdk

##### Python

pip install anthropic

กำหนดค่าไคลเอนต์

endpoint ที่เข้ากันได้กับ OpenAI ใช้ base URL ของ OpenAI SDK พร้อม /api/v1 เพราะ SDK จะต่อท้ายด้วยพาธทรัพยากรเช่น /responses และ /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 ที่เข้ากันได้กับ Anthropic ใช้ base URL ของ Anthropic SDK โดยไม่มี /v1 เพราะ SDK จะต่อท้ายด้วย /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",
)

การใช้ Responses API

ใช้ Responses API สำหรับการผสานใหม่ที่เข้ากันได้กับ OpenAI และออบเจกต์การตอบกลับสไตล์ 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)

การใช้ Chat Completions

ใช้ Chat Completions เมื่อแอปพลิเคชันของคุณส่ง messages สไตล์ 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)

การใช้ Messages

ใช้ Messages เมื่อไคลเอนต์หรือเฟรมเวิร์ก Agent ของคุณคาดหวังรูปแบบคำขอและการตอบกลับที่เข้ากันได้กับ 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)

เอกสารอย่างเป็นทางการ

สำหรับการตั้งค่าไคลเอนต์ Agent โปรดดู การกำหนดค่า Claude Code และ Codex

เอกสารอ้างอิงโปรโตคอล

Responses

ใช้ endpoint นี้สำหรับไคลเอนต์และการผสานที่เข้ากันได้กับ OpenAI Responses API

Endpoint

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

เนื้อหาคำขอ

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
modelstringใช่ID โมเดลสาธารณะของ Felo
inputstring หรือ arrayใช่อินพุตผู้ใช้ อินพุตหลายเทิร์น หรืออินพุตหลายรูปแบบ
instructionsstringไม่คำสั่งระดับระบบหรือนักพัฒนา
streambooleanไม่จะใช้สตรีมมิ่งแบบ Server-Sent Events หรือไม่
temperaturenumberไม่อุณหภูมิการสุ่ม
max_output_tokensintegerไม่จำนวนโทเค็นเอาต์พุตสูงสุด

คำขอผ่าน SDK

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

console.log(response.output_text);

พาธข้อความในการตอบกลับ

output_text

Chat Completions

ใช้ endpoint นี้สำหรับไคลเอนต์และ SDK ที่เข้ากันได้กับ OpenAI Chat Completions

Endpoint

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

เนื้อหาคำขอ

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
modelstringใช่ID โมเดลสาธารณะของ Felo
messagesarrayใช่ข้อความในบทสนทนา
messages[].rolestringใช่system, user หรือ assistant
messages[].contentstringใช่เนื้อหาของข้อความ
streambooleanไม่จะใช้สตรีมมิ่งแบบ Server-Sent Events หรือไม่
temperaturenumberไม่อุณหภูมิการสุ่ม
max_tokensintegerไม่จำนวนโทเค็นเอาต์พุตสูงสุด

คำขอผ่าน 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);

พาธข้อความในการตอบกลับ

choices[0].message.content

Messages

ใช้ endpoint นี้สำหรับไคลเอนต์และ SDK ที่เข้ากันได้กับ Anthropic Messages

Endpoint

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

เนื้อหาคำขอ

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
modelstringใช่ID โมเดลสาธารณะของ Felo
max_tokensintegerใช่จำนวนโทเค็นเอาต์พุตสูงสุด
messagesarrayใช่ข้อความในบทสนทนา
messages[].rolestringใช่user หรือ assistant
messages[].contentstring หรือ arrayใช่ข้อความธรรมดาหรือ content block แบบ Anthropic
systemstringไม่พรอมต์ระบบ
streambooleanไม่จะใช้สตรีมมิ่งแบบ Server-Sent Events หรือไม่
temperaturenumberไม่อุณหภูมิการสุ่ม

คำขอผ่าน 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);

คำขอแบบ Content Block

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

พาธข้อความในการตอบกลับ

content[].text

สตรีมมิ่ง

ตั้ง stream เป็น true เพื่อรับ Server-Sent Events รูปแบบเนื้อหาของเหตุการณ์เป็นไปตามโปรโตคอลที่เลือก:

  • สตรีม Responses ส่งเหตุการณ์การตอบกลับที่เข้ากันได้กับ Responses
  • สตรีม Chat Completions ส่ง chunk การสร้างข้อความแชตที่เข้ากันได้กับ OpenAI
  • สตรีม Messages ส่งเหตุการณ์ข้อความที่เข้ากันได้กับ Anthropic
const stream = await client.responses.create({
  model: "gpt-5.6-sol",
  input: "Write one sentence.",
  stream: true,
});

ไคลเอนต์ควรแยกวิเคราะห์สตรีมตามโปรโตคอลที่กำลังใช้ แทนการคาดหวังสคีมาเหตุการณ์เดียวร่วมกันในทั้งสาม endpoint

ข้อผิดพลาด

LLM API ส่งรูปแบบข้อผิดพลาดของโปรโตคอลที่เลือกเมื่อทำได้ สาเหตุที่พบบ่อยได้แก่:

สถานะ HTTPสาเหตุการดำเนินการที่แนะนำ
400เนื้อหา JSON ไม่ถูกต้องหรือฟิลด์โปรโตคอลที่จำเป็นหายไปตรวจสอบ model, messages, input, max_tokens และฟิลด์ content block
401คีย์ API หายไปหรือไม่ถูกต้องตรวจสอบ Authorization: Bearer ... หรือ X-API-Key
402เครดิตในบัญชีไม่เพียงพอตรวจสอบยอดคงเหลือในบัญชี Felo ของคุณ
429เกินขีดจำกัดอัตราลดความเร็วคำขอและลองใหม่ภายหลัง
502คำขอไปยังบริการโมเดลล้มเหลวลองใหม่และระบุ X-Request-Id เมื่อติดต่อฝ่ายสนับสนุน
503บริการโมเดลไม่พร้อมใช้งานชั่วคราวลองใหม่พร้อมการหน่วงแบบทวีคูณหรือเลือกโมเดลอื่นที่เผยแพร่