Felo API PlatformFelo API Platform

Felo APIs

LLM API

Wywołuj endpointy modeli Felo przez protokoły zgodne z OpenAI i Anthropic.

GET/api/v1/models

Uwierzytelnianie

Bearer API key or X-API-Key

Typ zawartości

application/json

Uwagi o limitach

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

API LLM udostępnia endpointy bezpośredniego wywoływania modeli przez Felo API Platform. Użyj go, gdy chcesz wywoływać modele językowe ogólnego przeznaczenia, ponownie wykorzystać klienty zgodne z OpenAI lub Anthropic albo podłączyć frameworki agentowe do Felo API Platform.

API LLM obejmuje obecnie trzy płaszczyzny wywoływania modeli zgodne z czatem:

  • POST /api/v1/responses: zgodna z OpenAI Responses
  • POST /api/v1/chat/completions: zgodna z OpenAI Chat Completions
  • POST /api/v1/messages: zgodna z Anthropic Messages

API decyzji

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

Wysyłaj stan i wąskie pytania typowane do jev-1.13 (akceptowany jest też typesafe/jev-1.13). Używaj /api/v1/decisions, a nie endpointów Chat Completions, Messages ani Responses. Przesyłanie strumieniowe nie jest obsługiwane.

Pola żądania

  • model: jev-1.13
  • state: kontekst do oceny; ciąg znaków lub wartość JSON.
  • questions: nazwane pytania wykorzystujące type, instructions i 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"])

Typy odpowiedzi

noul: prawdopodobieństwo od 0 do 1. choice: wybrana opcja i jej rozkład prawdopodobieństwa. score: wynik liczbowy dla uporządkowanych kryteriów wraz z rozkładem.

Błędy używają error.code (liczbowy status HTTP) i error.message. Obsłuż odpowiedzi inne niż 2xx przed odczytaniem answers.

Zużycie i ceny

Odpowiedź zawiera usage.input_tokens, usage.output_tokens i może zawierać usage.cost. Stawki referencyjne sprawdzone 2026-10-12: wejście 0,042 USD za milion tokenów; wyjście 0 USD. Zerowa stawka wyjściowa nie oznacza, że użycie wejścia jest bezpłatne. Stawki mogą się zmieniać; do szacunków używaj opublikowanej ceny modelu i obowiązujących rabatów konta.

Uwierzytelnianie

Żądania do API LLM wymagają klucza Felo API Platform. Użyj Authorization: Bearer ... albo X-API-Key.

Authorization: Bearer YOUR_API_KEY
X-API-Key: YOUR_API_KEY

Szczegóły tworzenia kluczy API i zarządzania nimi znajdziesz w przewodniku uwierzytelniania.

Bazowy adres URL

Użyj publicznego hosta Felo API Platform:

https://openapi.felo.ai

Dla klientów SDK skonfiguruj bazowy adres URL specyficzny dla protokołu, pokazany w Podstawowym użyciu.

Wspólne nagłówki

NagłówekWymaganyOpis
AuthorizationTak, chyba że używany jest X-API-KeyKlucz API w formacie Bearer YOUR_API_KEY
X-API-KeyTak, chyba że używany jest AuthorizationAlternatywa dla nagłówka Bearer
Content-TypeTakMusi mieć wartość application/json
X-Request-IdNieOpcjonalny identyfikator żądania do celów diagnostycznych

Wykrywanie modeli

Ogólny katalog obejmuje wszystkie kategorie modeli. Użyj dedykowanych list, aby wykrywać modele wideo lub decyzyjne:

EndpointKategorie modeli
GET /api/v1/modelsWszystkie kategorie (bez zmian)
GET /api/v1/videos/modelsGenerowanie wideo (video_generation)
GET /api/v1/decisions/modelsDecyzje, w tym Jev (decisions)

Wszystkie trzy endpointy przyjmują opcjonalny parametr zapytania provider (na przykład openrouter) i zwracają {"object":"list","data":[...]}. Każdy element zawiera id, object, created, owned_by i model_kind. Dedykowane listy używają efektywnej kategorii po nadpisaniach mapowania włączonych dostawców.

Zwracane są tylko włączone, wymienione i nieusunięte modele z bieżącymi cenami pasującymi do warunków dostawcy; zerowa cena jest prawidłowa. Nowo zsynchronizowane modele są ukryte, dopóki administrator ich nie wymieni. Wszystkie listy używają skonfigurowanej kolejności, a nazwa modelu i identyfikator rozstrzygają remisy. Brak dopasowań zwraca HTTP 200 z pustą tablicą data. Wykrywanie odczytuje lokalny katalog i nie wywołuje modelu ani nie nalicza opłat.

Tylko GET /api/v1/models przyjmuje exclude_video_and_decisions (wartość logiczna, domyślnie false). Ustaw je na true, aby wykluczyć efektywne typy video_generation i decisions; modele obrazów pozostają uwzględniane. Można je łączyć z provider. Pominięcie lub ustawienie false zachowuje pełny katalog. Nieprawidłowe wartości logiczne zwracają 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}"

Wybierz endpoint wywołania według model_kind: chat dla Responses, Chat Completions lub Messages zgodnie z obsługą modelu; video_generation dla POST /api/v1/videos/generations; decisions dla POST /api/v1/decisions; image_generation dla POST /api/v1/images/generations. Szczegóły pozostają pod GET /api/v1/models/{model_id}. Wymieniony model niekoniecznie jest zgodny z każdym endpointem wywołania.

Modele obrazów nie mają dedykowanego endpointu listy. Filtruj GET /api/v1/models według model_kind: "image_generation". Pola żądania obrazu znajdziesz w Generowaniu obrazów.

Modele i ceny

Żądania używają domyślnego kanału modelu, chyba że przypniesz kanał nagłówkiem X-Felo-Channel. Przekaż uporządkowaną, rozdzieloną przecinkami listę publicznych kodów kanałów z katalogu modeli; pomiń nagłówek, aby użyć domyślnego. Używaj default tylko samodzielnie. Przesyłana jest tylko grupa dostawcy pierwszego kanału; nie ma automatycznego przełączania awaryjnego. Zobacz Kanały i routing dostawców.

Ceny są podane w USD. Stawki tokenów są wyświetlane za 1 milion tokenów dla czytelności; rozliczenie używa precyzji na token z bieżącej migawki cen. Stawki pamięci podręcznej obowiązują tylko wtedy, gdy odpowiedź protokołu zawiera użycie pamięci podręcznej. Myślnik oznacza brak osobno opublikowanej stawki lub opublikowanego limitu. Użycie wyszukiwania w sieci, gdy jest raportowane przez usługę modelu, jest rozliczane według $0.01 za wyszukiwanie.

Identyfikator modeluKontekstMaks. wyjścieWejście / 1 mln tokenówWyjście / 1 mln tokenówOdczyt pamięci podręcznej / 1 mln tokenówZapis pamięci podręcznej / 1 mln tokenów
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 stosuje ceny progowe: prompty do 100K tokenów są rozliczane według powyższych standardowych stawek, a żądania, których prompt przekracza 100K tokenów, są rozliczane według $0.50 za wejście, $2.50 za wyjście, $0.05 za odczyt pamięci podręcznej i $0.0625 za zapis pamięci podręcznej na 1 mln tokenów za całe żądanie.

GPT-5.6 jest dostępny w trzech poziomach: Luna do szybkich, oszczędnych obciążeń; Terra do zrównoważonych zadań kodowania, rozumowania i agentowych; Sol do flagowego, złożonego rozumowania i kodowania. Każdy poziom udostępnia też identyfikator modelu -pro (gpt-5.6-luna-pro, gpt-5.6-terra-pro i gpt-5.6-sol-pro), który używa tego samego modelu bazowego w trybie rozumowania pro. Ceny, długość kontekstu i maksymalne wyjście nie zmieniają się dla identyfikatorów -pro.

DeepSeek V4 Flash obsługuje tryby rozumowania i bez rozumowania, dane wyjściowe JSON, wywołania narzędzi, API Responses oraz zgodność z API Anthropic. Jest dostępny przez płaszczyzny Responses, Chat Completions i Messages Felo. Ceny zapisu pamięci podręcznej nie są jeszcze opublikowane.

Podstawowe użycie

Te przykłady używają oficjalnych SDK OpenAI i Anthropic. Przed uruchomieniem przykładów ustaw FELO_API_KEY na swój klucz Felo API Platform.

export FELO_API_KEY="YOUR_API_KEY"

Instalacja SDK

OpenAI SDK

Użyj OpenAI SDK dla API Responses i API Chat Completions.

##### JavaScript

npm install openai

##### Python

pip install openai

Anthropic SDK

Użyj Anthropic SDK dla API Messages.

##### JavaScript

npm install @anthropic-ai/sdk

##### Python

pip install anthropic

Konfiguracja klientów

Endpointy zgodne z OpenAI używają bazowego adresu URL OpenAI SDK z /api/v1, ponieważ SDK dopisuje ścieżki zasobów, takie jak /responses i /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",
)

Endpointy zgodne z Anthropic używają bazowego adresu URL Anthropic SDK bez /v1, ponieważ SDK dopisuje /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",
)

Używanie API Responses

Używaj API Responses do nowych integracji zgodnych z OpenAI i obiektów odpowiedzi w stylu agentowym.

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)

Używanie Chat Completions

Używaj Chat Completions, gdy Twoja aplikacja już wysyła messages w stylu 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)

Używanie Messages

Używaj Messages, gdy Twój klient lub framework agentowy oczekuje kształtów żądań i odpowiedzi zgodnych z 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)

Oficjalna dokumentacja

Informacje o konfiguracji klientów agentowych znajdziesz w Konfiguracji Claude Code i Codex.

Dokumentacja protokołów

Responses

Użyj tego endpointu dla klientów i integracji zgodnych z API OpenAI Responses.

Endpoint

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

Treść żądania

ParametrTypWymaganyOpis
modelstringTakPubliczny identyfikator modelu Felo
inputstring lub arrayTakDane wejściowe użytkownika, dane wieloturowe lub dane multimodalne
instructionsstringNieInstrukcje systemowe lub deweloperskie
streambooleanNieCzy używać przesyłania strumieniowego Server-Sent Events
temperaturenumberNieTemperatura próbkowania
max_output_tokensintegerNieMaksymalna liczba tokenów wyjściowych

Żądanie SDK

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

console.log(response.output_text);

Ścieżka tekstu odpowiedzi

output_text

Chat Completions

Użyj tego endpointu dla klientów i SDK zgodnych z OpenAI Chat Completions.

Endpoint

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

Treść żądania

ParametrTypWymaganyOpis
modelstringTakPubliczny identyfikator modelu Felo
messagesarrayTakWiadomości konwersacji
messages[].rolestringTaksystem, user lub assistant
messages[].contentstringTakTreść wiadomości
streambooleanNieCzy używać przesyłania strumieniowego Server-Sent Events
temperaturenumberNieTemperatura próbkowania
max_tokensintegerNieMaksymalna liczba tokenów wyjściowych

Żądanie 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);

Ścieżka tekstu odpowiedzi

choices[0].message.content

Messages

Użyj tego endpointu dla klientów i SDK zgodnych z Anthropic Messages.

Endpoint

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

Treść żądania

ParametrTypWymaganyOpis
modelstringTakPubliczny identyfikator modelu Felo
max_tokensintegerTakMaksymalna liczba tokenów wyjściowych
messagesarrayTakWiadomości konwersacji
messages[].rolestringTakuser lub assistant
messages[].contentstring lub arrayTakZwykły tekst lub bloki treści Anthropic
systemstringNiePrompt systemowy
streambooleanNieCzy używać przesyłania strumieniowego Server-Sent Events
temperaturenumberNieTemperatura próbkowania

Żądanie 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);

Żądanie z blokami treści

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

Ścieżka tekstu odpowiedzi

content[].text

Przesyłanie strumieniowe

Ustaw stream na true, aby otrzymywać zdarzenia Server-Sent Events. Format ładunku zdarzeń zależy od wybranego protokołu:

  • strumienie Responses zwracają zdarzenia odpowiedzi zgodne z Responses.
  • strumienie Chat Completions zwracają fragmenty ukończenia czatu zgodne z OpenAI.
  • strumienie Messages zwracają zdarzenia wiadomości zgodne z Anthropic.
const stream = await client.responses.create({
  model: "gpt-5.6-sol",
  input: "Write one sentence.",
  stream: true,
});

Klienci powinni parsować strumień zgodnie z używanym protokołem, zamiast oczekiwać jednego wspólnego schematu zdarzeń dla wszystkich trzech endpointów.

Błędy

API LLM zwraca kształt błędu wybranego protokołu, gdy to możliwe. Typowe przyczyny:

Status HTTPPrzyczynaSugerowane działanie
400Nieprawidłowa treść JSON lub brak wymaganych pól protokołuSprawdź model, messages, input, max_tokens i pola bloków treści
401Brakujący lub nieprawidłowy klucz APIZweryfikuj Authorization: Bearer ... lub X-API-Key
402Niewystarczające kredyty na koncieSprawdź saldo konta Felo
429Przekroczono limit szybkościZwolnij tempo żądań i ponów później
502Niepowodzenie żądania do usługi modeluPonów i podaj X-Request-Id przy kontakcie z pomocą techniczną
503Usługa modelu tymczasowo niedostępnaPonów z wykładniczym opóźnieniem lub wybierz inny opublikowany model