Felo APIs
LLM API
Rufen Sie Felo-Modell-Endpoints über OpenAI-compatible und Anthropic-compatible Protokolle auf.
/api/v1/modelsAuthentifizierung
Bearer API key or X-API-Key
Inhaltstyp
application/json
Hinweise zu Limits
Model service limits may apply. Retry with backoff on 429 or 503.
Die LLM API stellt über die Felo API Platform Endpoints zum direkten Aufrufen von Modellen bereit. Verwenden Sie sie, wenn Sie Allzweck-Sprachmodelle aufrufen, OpenAI-kompatible oder Anthropic-kompatible Clients wiederverwenden oder Agent-Frameworks mit der Felo API Platform verbinden möchten.
Die LLM API umfasst derzeit drei chat-kompatible Oberflächen zum Aufrufen von Modellen:
POST /api/v1/responses: kompatibel mit OpenAI ResponsesPOST /api/v1/chat/completions: kompatibel mit OpenAI Chat CompletionsPOST /api/v1/messages: kompatibel mit Anthropic Messages
Decisions API
POST https://openapi.felo.ai/api/v1/decisionsSenden Sie Statusinformationen und eng gefasste typisierte Fragen an jev-1.13 (auch akzeptiert: typesafe/jev-1.13). Verwenden Sie /api/v1/decisions, nicht die Endpoints Chat Completions, Messages oder Responses. Streaming wird nicht unterstützt.
Anfragefelder
model:jev-1.13state: Zu bewertender Kontext; eine Zeichenfolge oder ein JSON-Wert.questions: Benannte Fragen mittype,instructionsundcriteria.
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"])Antworttypen
noul: eine Wahrscheinlichkeit von 0 bis 1. choice: die gewählte Option und ihre Wahrscheinlichkeitsverteilung. score: eine numerische Bewertung für geordnete Kriterien zusammen mit ihrer Verteilung.
Fehler verwenden error.code (numerischer HTTP-Status) und error.message. Behandeln Sie Antworten außerhalb des 2xx-Bereichs, bevor Sie answers lesen.
Nutzung und Preise
Die Antwort enthält usage.input_tokens, usage.output_tokens und möglicherweise usage.cost. Referenztarife mit Stand 2026-10-12: Eingabe 0,042 USD pro Million Tokens; Ausgabe 0 USD. Ein Ausgabetarif von null macht die Eingabenutzung nicht kostenlos. Die Tarife können sich ändern; verwenden Sie für Schätzungen den veröffentlichten Modellpreis und die geltenden Kontorabatte.
Authentifizierung
Anfragen an die LLM API erfordern einen Schlüssel der Felo API Platform. Verwenden Sie entweder Authorization: Bearer ... oder X-API-Key.
Authorization: Bearer YOUR_API_KEYX-API-Key: YOUR_API_KEYInformationen zum Erstellen und Verwalten von API-Schlüsseln finden Sie im Authentifizierungsleitfaden.
Basis-URL
Verwenden Sie den öffentlichen Host der Felo API Platform:
https://openapi.felo.aiKonfigurieren Sie für SDK-Clients die protokollspezifische Basis-URL, die unter Grundlegende Verwendung angegeben ist.
Gemeinsame Header
| Header | Erforderlich | Beschreibung |
|---|---|---|
Authorization | Ja, sofern nicht X-API-Key verwendet wird | API-Schlüssel im Format Bearer YOUR_API_KEY |
X-API-Key | Ja, sofern nicht Authorization verwendet wird | API-Schlüssel als Alternative zum Bearer-Header |
Content-Type | Ja | Muss application/json sein |
X-Request-Id | Nein | Optionale Request-ID für die Fehlerbehebung |
Modelle entdecken
Der allgemeine Katalog umfasst alle Modellkategorien. Verwenden Sie die speziellen Listen, um Video- oder Decision-Modelle zu finden:
| Endpoint | Modellkategorien |
|---|---|
GET /api/v1/models | Alle Kategorien (unverändert) |
GET /api/v1/videos/models | Videogenerierung (video_generation) |
GET /api/v1/decisions/models | Decisions, einschließlich Jev (decisions) |
Alle drei Endpoints akzeptieren den optionalen Query-Parameter provider (zum Beispiel openrouter) und geben {"object":"list","data":[...]} zurück. Jedes Element enthält id, object, created, owned_by und model_kind. Spezielle Listen verwenden die effektive Kategorie nach aktivierten Überschreibungen durch das Provider-Mapping.
Es werden nur aktivierte, gelistete und nicht gelöschte Modelle mit aktueller Preisangabe zurückgegeben, die den Provider-Bedingungen entsprechen; ein Preis von null ist gültig. Neu synchronisierte Modelle bleiben ausgeblendet, bis ein Administrator sie listet. Alle Listen verwenden dieselbe konfigurierte Reihenfolge, wobei Modellname und ID als Tie-Breaker dienen. Bei keinen Treffern wird HTTP 200 mit einem leeren data-Array zurückgegeben. Die Modell-Erkennung liest den lokalen Katalog und ruft kein Modell auf, noch wird ein Modellaufruf berechnet.
Nur GET /api/v1/models akzeptiert exclude_video_and_decisions (boolean, Standard false). Setzen Sie den Parameter auf true, um die effektiven Typen video_generation und decisions auszuschließen; Bildmodelle bleiben zulässig. Er kann mit provider kombiniert werden. Wenn Sie ihn weglassen oder auf false setzen, bleibt der vollständige Katalog erhalten. Ungültige boolesche Werte führen zu 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}"Wählen Sie den aufzurufenden Endpoint anhand von model_kind: chat für Responses, Chat Completions oder Messages, sofern das Modell dies unterstützt; video_generation für POST /api/v1/videos/generations; decisions für POST /api/v1/decisions; image_generation für POST /api/v1/images/generations. Details finden Sie weiterhin unter GET /api/v1/models/{model_id}. Ein gelistetes Modell ist nicht zwangsläufig mit jedem aufrufenden Endpoint kompatibel.
Bildmodelle haben keinen eigenen Listen-Endpoint. Filtern Sie GET /api/v1/models nach model_kind: "image_generation". Die Anfragefelder für Bilder finden Sie unter Bildgenerierung.
Modelle und Preise
Anfragen verwenden den Standardkanal des Modells, sofern Sie keinen mit X-Felo-Channel festlegen. Übergeben Sie eine geordnete, kommagetrennte Liste öffentlicher Kanalcodes aus dem Modellkatalog; lassen Sie den Header weg, um den Standard zu verwenden. Verwenden Sie default nur allein. Es wird nur die Provider-Gruppe des ersten Kanals übermittelt; es gibt kein automatisches Fallback. Siehe Kanäle und Provider-Routing.
Die Preise sind in USD angegeben. Token-Tarife werden aus Gründen der Lesbarkeit pro 1 Million Tokens angezeigt; die Abrechnung verwendet die Präzision pro Token aus dem aktuellen Preis-Snapshot. Cache-Tarife gelten nur, wenn die Protokollantwort Cache-Nutzung enthält. Ein Bindestrich bedeutet, dass kein separater veröffentlichter Tarif oder kein veröffentlichtes Limit vorliegt. Die Websuche-Nutzung wird, wenn der Modelldienst sie meldet, mit $0.01 pro Suche berechnet.
| Modell-ID | Kontext | Max. Ausgabe | Eingabe / 1M Tokens | Ausgabe / 1M Tokens | Cache-Lesen / 1M Tokens | Cache-Schreiben / 1M Tokens |
|---|---|---|---|---|---|---|
claude-haiku-4-5 | 200K | 64K | $1.00 | $5.00 | $0.10 | $1.25 |
claude-sonnet-4-6 | 1M | 128K | $3.00 | $15.00 | $0.30 | $3.75 |
claude-opus-4-8 | 1M | 128K | $5.00 | $25.00 | $0.50 | $6.25 |
claude-sonnet-5 | 1M | 128K | $2.00 | $10.00 | $0.20 | $2.50 |
claude-haiku-5-5 | 1M | 128K | $0.10 | $0.50 | $0.01 | $0.0125 |
gpt-5.5 | 1.05M | 128K | $5.00 | $30.00 | $0.50 | - |
gpt-5.5-pro | 1.05M | 128K | $30.00 | $180.00 | - | - |
gpt-5.6-luna | 1.05M | 128K | $1.00 | $6.00 | $0.10 | $1.25 |
gpt-5.6-terra | 1.05M | 128K | $2.50 | $15.00 | $0.25 | $3.125 |
gpt-5.6-sol | 1.05M | 128K | $5.00 | $30.00 | $0.50 | $6.25 |
grok-4.5 | 500K | - | $2.00 | $6.00 | $0.50 | - |
deepseek-v4-flash | 1M | 384K | $0.09 | $0.18 | $0.018 | - |
Claude Haiku 5.5 verwendet gestaffelte Preise: Prompts mit bis zu 100K Tokens werden zu den oben genannten Standardtarifen abgerechnet, und Anfragen, deren Prompt 100K Tokens überschreitet, werden für die gesamte Anfrage mit $0.50 Eingabe, $2.50 Ausgabe, $0.05 Cache-Lesen und $0.0625 Cache-Schreiben pro 1M Tokens abgerechnet.
GPT-5.6 ist in drei Stufen verfügbar: Luna für schnelle, kosteneffiziente Workloads; Terra für ausgewogene Coding-, Reasoning- und Agentic-Aufgaben; und Sol für komplexes Reasoning und Coding der Spitzenklasse. Jede Stufe bietet außerdem eine Modell-ID mit dem Suffix -pro (gpt-5.6-luna-pro, gpt-5.6-terra-pro und gpt-5.6-sol-pro), die dasselbe zugrunde liegende Modell mit dem Pro-Reasoning-Modus verwendet. Preise, Kontextlänge und maximale Ausgabe bleiben für die -pro-IDs unverändert.
DeepSeek V4 Flash unterstützt Reasoning- und Nicht-Reasoning-Modi, JSON-Ausgabe, Tool-Aufrufe, die Responses API und die Kompatibilität mit der Anthropic API. Es ist über die Oberflächen Responses, Chat Completions und Messages von Felo verfügbar. Die Preise für Cache-Schreiben sind noch nicht veröffentlicht.
Grundlegende Verwendung
Diese Beispiele verwenden die offiziellen OpenAI- und Anthropic-SDKs. Legen Sie FELO_API_KEY vor dem Ausführen der Beispiele auf Ihren Schlüssel der Felo API Platform fest.
export FELO_API_KEY="YOUR_API_KEY"SDKs installieren
OpenAI SDK
Verwenden Sie das OpenAI SDK für die Responses API und die Chat Completions API.
##### JavaScript
npm install openai##### Python
pip install openaiAnthropic SDK
Verwenden Sie das Anthropic SDK für die Messages API.
##### JavaScript
npm install @anthropic-ai/sdk##### Python
pip install anthropicClients konfigurieren
OpenAI-kompatible Endpoints verwenden die Basis-URL des OpenAI SDK mit /api/v1, da das SDK Ressourcenpfade wie /responses und /chat/completions anhängt.
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",
)Anthropic-kompatible Endpoints verwenden die Basis-URL des Anthropic SDK ohne /v1, da das SDK /v1/messages anhängt.
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 verwenden
Verwenden Sie die Responses API für neue OpenAI-kompatible Integrationen und Antwortobjekte im Agent-Stil.
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 verwenden
Verwenden Sie Chat Completions, wenn Ihre Anwendung bereits messages im OpenAI-Stil sendet.
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 verwenden
Verwenden Sie Messages, wenn Ihr Client oder Agent-Framework Anthropic-kompatible Anfrage- und Antwortstrukturen erwartet.
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)Offizielle Dokumentation
- OpenAI API-Schnellstart
- OpenAI: Antwort erstellen
- OpenAI: Chat-Completion erstellen
- Claude Messages API
- Anthropic TypeScript SDK
- Anthropic Python SDK
Die Einrichtung von Agent-Clients wird unter Claude Code und Codex konfigurieren beschrieben.
Protokollreferenz
Responses
Verwenden Sie diesen Endpoint für Clients und Integrationen, die mit der OpenAI Responses API kompatibel sind.
Endpoint
POST https://openapi.felo.ai/api/v1/responsesAnfrage-Textkörper
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
model | string | Ja | Öffentliche Felo-Modell-ID |
input | string or array | Ja | Benutzereingabe, mehrstufige Eingabe oder multimodale Eingabe |
instructions | string | Nein | System- oder Entwickleranweisungen |
stream | boolean | Nein | Ob Streaming per Server-Sent Events verwendet wird |
temperature | number | Nein | Sampling-Temperatur |
max_output_tokens | integer | Nein | Maximale Ausgabe-Tokens |
SDK-Anfrage
const response = await client.responses.create({
model: "gpt-5.6-sol",
input: "Reply with exactly: responses ok",
});
console.log(response.output_text);Pfad des Antworttexts
output_textChat Completions
Verwenden Sie diesen Endpoint für Clients und SDKs, die mit OpenAI Chat Completions kompatibel sind.
Endpoint
POST https://openapi.felo.ai/api/v1/chat/completionsAnfrage-Textkörper
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
model | string | Ja | Öffentliche Felo-Modell-ID |
messages | array | Ja | Konversationsnachrichten |
messages[].role | string | Ja | system, user oder assistant |
messages[].content | string | Ja | Nachrichteninhalt |
stream | boolean | Nein | Ob Streaming per Server-Sent Events verwendet wird |
temperature | number | Nein | Sampling-Temperatur |
max_tokens | integer | Nein | Maximale Ausgabe-Tokens |
SDK-Anfrage
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);Pfad des Antworttexts
choices[0].message.contentMessages
Verwenden Sie diesen Endpoint für Clients und SDKs, die mit Anthropic Messages kompatibel sind.
Endpoint
POST https://openapi.felo.ai/api/v1/messagesAnfrage-Textkörper
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
model | string | Ja | Öffentliche Felo-Modell-ID |
max_tokens | integer | Ja | Maximale Ausgabe-Tokens |
messages | array | Ja | Konversationsnachrichten |
messages[].role | string | Ja | user oder assistant |
messages[].content | string or array | Ja | Reiner Text oder Anthropic-Content-Blöcke |
system | string | Nein | System-Prompt |
stream | boolean | Nein | Ob Streaming per Server-Sent Events verwendet wird |
temperature | number | Nein | Sampling-Temperatur |
SDK-Anfrage
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);Anfrage mit Content-Blöcken
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",
},
],
},
],
});Pfad des Antworttexts
content[].textStreaming
Setzen Sie stream auf true, um Server-Sent Events zu erhalten. Das Format der Ereignisnutzlast folgt dem ausgewählten Protokoll:
- Responses-Streams geben Responses-kompatible Antwortereignisse zurück.
- Chat-Completions-Streams geben OpenAI-kompatible Chat-Completion-Chunks zurück.
- Messages-Streams geben Anthropic-kompatible Nachrichtenereignisse zurück.
const stream = await client.responses.create({
model: "gpt-5.6-sol",
input: "Write one sentence.",
stream: true,
});Clients sollten den Stream gemäß dem verwendeten Protokoll parsen und nicht ein gemeinsames Ereignisschema für alle drei Endpoints erwarten.
Fehler
Die LLM API gibt nach Möglichkeit die Fehlerstruktur des ausgewählten Protokolls zurück. Häufige Ursachen sind:
| HTTP-Status | Ursache | Empfohlene Maßnahme |
|---|---|---|
400 | Ungültiger JSON-Textkörper oder fehlende erforderliche Protokollfelder | Prüfen Sie model, messages, input, max_tokens und die Felder der Content-Blöcke |
401 | API-Schlüssel fehlt oder ist ungültig | Prüfen Sie Authorization: Bearer ... oder X-API-Key |
402 | Nicht genügend Guthaben auf dem Konto | Prüfen Sie Ihr Felo-Kontoguthaben |
429 | Rate-Limit überschritten | Drosseln Sie Anfragen und versuchen Sie es später erneut |
502 | Anfrage an den Modelldienst fehlgeschlagen | Wiederholen Sie die Anfrage und geben Sie X-Request-Id an, wenn Sie den Support kontaktieren |
503 | Modelldienst vorübergehend nicht verfügbar | Wiederholen Sie die Anfrage mit Backoff oder wählen Sie ein anderes veröffentlichtes Modell |