Felo API PlatformFelo API Platform

Felo APIs

LLM API

Rufen Sie Felo-Modell-Endpoints über OpenAI-compatible und Anthropic-compatible Protokolle auf.

GET/api/v1/models

Authentifizierung

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

Decisions API

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

Senden 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.13
  • state: Zu bewertender Kontext; eine Zeichenfolge oder ein JSON-Wert.
  • questions: Benannte Fragen mit type, instructions und 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"])

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_KEY
X-API-Key: YOUR_API_KEY

Informationen 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.ai

Konfigurieren Sie für SDK-Clients die protokollspezifische Basis-URL, die unter Grundlegende Verwendung angegeben ist.

Gemeinsame Header

HeaderErforderlichBeschreibung
AuthorizationJa, sofern nicht X-API-Key verwendet wirdAPI-Schlüssel im Format Bearer YOUR_API_KEY
X-API-KeyJa, sofern nicht Authorization verwendet wirdAPI-Schlüssel als Alternative zum Bearer-Header
Content-TypeJaMuss application/json sein
X-Request-IdNeinOptionale 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:

EndpointModellkategorien
GET /api/v1/modelsAlle Kategorien (unverändert)
GET /api/v1/videos/modelsVideogenerierung (video_generation)
GET /api/v1/decisions/modelsDecisions, 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-IDKontextMax. AusgabeEingabe / 1M TokensAusgabe / 1M TokensCache-Lesen / 1M TokensCache-Schreiben / 1M Tokens
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 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 openai

Anthropic SDK

Verwenden Sie das Anthropic SDK für die Messages API.

##### JavaScript

npm install @anthropic-ai/sdk

##### Python

pip install anthropic

Clients 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

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

Anfrage-Textkörper

ParameterTypErforderlichBeschreibung
modelstringJaÖffentliche Felo-Modell-ID
inputstring or arrayJaBenutzereingabe, mehrstufige Eingabe oder multimodale Eingabe
instructionsstringNeinSystem- oder Entwickleranweisungen
streambooleanNeinOb Streaming per Server-Sent Events verwendet wird
temperaturenumberNeinSampling-Temperatur
max_output_tokensintegerNeinMaximale 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_text

Chat 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/completions

Anfrage-Textkörper

ParameterTypErforderlichBeschreibung
modelstringJaÖffentliche Felo-Modell-ID
messagesarrayJaKonversationsnachrichten
messages[].rolestringJasystem, user oder assistant
messages[].contentstringJaNachrichteninhalt
streambooleanNeinOb Streaming per Server-Sent Events verwendet wird
temperaturenumberNeinSampling-Temperatur
max_tokensintegerNeinMaximale 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.content

Messages

Verwenden Sie diesen Endpoint für Clients und SDKs, die mit Anthropic Messages kompatibel sind.

Endpoint

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

Anfrage-Textkörper

ParameterTypErforderlichBeschreibung
modelstringJaÖffentliche Felo-Modell-ID
max_tokensintegerJaMaximale Ausgabe-Tokens
messagesarrayJaKonversationsnachrichten
messages[].rolestringJauser oder assistant
messages[].contentstring or arrayJaReiner Text oder Anthropic-Content-Blöcke
systemstringNeinSystem-Prompt
streambooleanNeinOb Streaming per Server-Sent Events verwendet wird
temperaturenumberNeinSampling-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[].text

Streaming

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-StatusUrsacheEmpfohlene Maßnahme
400Ungültiger JSON-Textkörper oder fehlende erforderliche ProtokollfelderPrüfen Sie model, messages, input, max_tokens und die Felder der Content-Blöcke
401API-Schlüssel fehlt oder ist ungültigPrüfen Sie Authorization: Bearer ... oder X-API-Key
402Nicht genügend Guthaben auf dem KontoPrüfen Sie Ihr Felo-Kontoguthaben
429Rate-Limit überschrittenDrosseln Sie Anfragen und versuchen Sie es später erneut
502Anfrage an den Modelldienst fehlgeschlagenWiederholen Sie die Anfrage und geben Sie X-Request-Id an, wenn Sie den Support kontaktieren
503Modelldienst vorübergehend nicht verfügbarWiederholen Sie die Anfrage mit Backoff oder wählen Sie ein anderes veröffentlichtes Modell