Felo APIs
LLM API
Roep Felo-model-endpoints aan via OpenAI-compatible en Anthropic-compatible protocollen.
/api/v1/modelsAuthenticatie
Bearer API key or X-API-Key
Inhoudstype
application/json
Toelichting op limieten
Model service limits may apply. Retry with backoff on 429 or 503.
De LLM API biedt directe endpoints voor modelaanroepen via Felo API Platform. Gebruik deze API wanneer je algemene taalmodellen wilt aanroepen, OpenAI-compatibele of Anthropic-compatibele clients wilt hergebruiken, of agentframeworks wilt koppelen aan Felo API Platform.
De LLM API omvat momenteel drie chat-compatibele interfaces voor modelaanroepen:
POST /api/v1/responses: compatibel met OpenAI ResponsesPOST /api/v1/chat/completions: compatibel met OpenAI Chat CompletionsPOST /api/v1/messages: compatibel met Anthropic Messages
Decisions API
POST https://openapi.felo.ai/api/v1/decisionsStuur status en afgebakende, getypeerde vragen naar jev-1.13 (ook toegestaan: typesafe/jev-1.13). Gebruik /api/v1/decisions, niet de endpoints voor Chat Completions, Messages of Responses. Streaming wordt niet ondersteund.
Verzoekvelden
model:jev-1.13state: Context om te beoordelen; een string of een JSON-waarde.questions: Benoemde vragen mettype,instructionsencriteria.
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"])Antwoordtypen
noul: een kans van 0 tot 1. choice: de gekozen optie en de kansverdeling daarvan. score: een numerieke score voor geordende criteria, met de bijbehorende verdeling.
Fouten gebruiken error.code (numerieke HTTP-status) en error.message. Handel niet-2xx-responsen af voordat je answers leest.
Gebruik en prijzen
De respons bevat usage.input_tokens, usage.output_tokens en kan usage.cost bevatten. Referentietarieven gecontroleerd op 2026-10-12: invoer USD 0,042 per miljoen tokens; uitvoer USD 0. Een uitvoertarief van nul maakt invoergebruik niet gratis. Tarieven kunnen veranderen; gebruik de gepubliceerde modelprijs en de geldende accountkortingen voor schattingen.
Authenticatie
Verzoeken aan de LLM API vereisen een Felo API Platform-sleutel. Gebruik Authorization: Bearer ... of X-API-Key.
Authorization: Bearer YOUR_API_KEYX-API-Key: YOUR_API_KEYZie de authenticatiehandleiding voor informatie over het aanmaken en beheren van API-sleutels.
Base-URL
Gebruik de publieke host van Felo API Platform:
https://openapi.felo.aiConfigureer voor SDK-clients de protocolspecifieke base-URL die in Basisgebruik wordt getoond.
Algemene headers
| Header | Verplicht | Beschrijving |
|---|---|---|
Authorization | Ja, tenzij X-API-Key wordt gebruikt | API-sleutel in de vorm Bearer YOUR_API_KEY |
X-API-Key | Ja, tenzij Authorization wordt gebruikt | API-sleutel als alternatief voor de Bearer-header |
Content-Type | Ja | Moet application/json zijn |
X-Request-Id | Nee | Optionele request-ID voor foutopsporing |
Modellen ontdekken
De algemene catalogus bevat alle modelcategorieën. Gebruik de aparte lijsten om video- of decision-modellen te ontdekken:
| Endpoint | Modelcategorieën |
|---|---|
GET /api/v1/models | Alle categorieën (ongewijzigd) |
GET /api/v1/videos/models | Videogeneratie (video_generation) |
GET /api/v1/decisions/models | Decisions, inclusief Jev (decisions) |
Alle drie de endpoints accepteren de optionele queryparameter provider (bijvoorbeeld openrouter) en retourneren {"object":"list","data":[...]}. Elk item bevat id, object, created, owned_by en model_kind. De aparte lijsten gebruiken de effectieve categorie na eventuele overrides van de providertoewijzing.
Alleen ingeschakelde, getoonde, niet-verwijderde modellen met actuele prijzen die aan de providervoorwaarden voldoen, worden geretourneerd; een prijs van nul is geldig. Nieuw gesynchroniseerde modellen blijven verborgen tot een beheerder ze toont. Alle lijsten gebruiken dezelfde geconfigureerde volgorde, met modelnaam en ID als tiebreaker. Bij geen resultaten retourneert de API HTTP 200 met een lege data-array. Het ontdekken van modellen leest de lokale catalogus en roept geen modelaanroep aan en brengt daarvoor dus geen kosten in rekening.
Alleen GET /api/v1/models accepteert exclude_video_and_decisions (boolean, standaard false). Zet deze op true om de effectieve typen video_generation en decisions uit te sluiten; beeldmodellen blijven beschikbaar. De parameter kan worden gecombineerd met provider. Weglaten of op false zetten behoudt de volledige catalogus. Ongeldige booleanwaarden retourneren 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}"Kies een aanroependpoint op basis van model_kind: chat voor Responses, Chat Completions of Messages, afhankelijk van wat het model ondersteunt; video_generation voor POST /api/v1/videos/generations; decisions voor POST /api/v1/decisions; image_generation voor POST /api/v1/images/generations. Details staan op GET /api/v1/models/{model_id}. Een getoond model is niet noodzakelijk compatibel met elk aanroependpoint.
Beeldmodellen hebben geen apart lijst-endpoint. Filter GET /api/v1/models op model_kind: "image_generation". Zie Beeldgeneratie voor de velden van een beeldverzoek.
Modellen en prijzen
Verzoeken gebruiken het standaardkanaal van het model, tenzij je er een vastlegt met X-Felo-Channel. Geef een geordende, kommagescheiden lijst met openbare kanaalcodes uit de modelcatalogus mee; laat de header weg om het standaardkanaal te gebruiken. Gebruik default alleen op zichzelf. Alleen de providergroep van het eerste kanaal wordt aangesproken; er is geen automatische fallback. Zie Kanalen en providerroutering.
Prijzen zijn in USD. Tokentarieven worden voor de leesbaarheid per 1 miljoen tokens getoond; de facturering gebruikt de precisie per token uit de actuele prijsmomentopname. Cachetarieven gelden alleen wanneer de protocolrespons cachegebruik bevat. Een streepje betekent dat er geen apart gepubliceerd tarief of gepubliceerde limiet is. Gebruik van webzoekopdrachten wordt, wanneer de modeldienst dit rapporteert, in rekening gebracht tegen $0.01 per zoekopdracht.
| Model-ID | Context | Max. uitvoer | Invoer / 1M tokens | Uitvoer / 1M tokens | Cache lezen / 1M tokens | Cache schrijven / 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 gebruikt staffelprijzen: prompts tot 100K tokens worden tegen de bovenstaande standaardtarieven gefactureerd, en verzoeken waarvan de prompt meer dan 100K tokens bevat, worden voor het hele verzoek gefactureerd tegen $0.50 invoer, $2.50 uitvoer, $0.05 cache lezen en $0.0625 cache schrijven per 1M tokens.
GPT-5.6 is beschikbaar in drie staffels: Luna voor snelle, kostenefficiënte workloads; Terra voor gebalanceerde coding-, redeneer- en agenttaken; en Sol voor complexe redeneer- en codingtaken op vlaggenschipniveau. Elke staffel heeft ook een -pro-model-ID (gpt-5.6-luna-pro, gpt-5.6-terra-pro en gpt-5.6-sol-pro) die hetzelfde onderliggende model met de pro-redeneermodus gebruikt. Prijzen, contextlengte en maximale uitvoer zijn ongewijzigd voor de -pro-ID's.
DeepSeek V4 Flash ondersteunt redeneer- en niet-redeneermodi, JSON-uitvoer, tool calls, de Responses API en compatibiliteit met de Anthropic API. Het model is beschikbaar via de interfaces Responses, Chat Completions en Messages van Felo. Prijzen voor cache schrijven zijn nog niet gepubliceerd.
Basisgebruik
Deze voorbeelden gebruiken de officiële SDK's van OpenAI en Anthropic. Stel FELO_API_KEY in op je Felo API Platform-sleutel voordat je de voorbeelden uitvoert.
export FELO_API_KEY="YOUR_API_KEY"SDK's installeren
OpenAI SDK
Gebruik de OpenAI SDK voor de Responses API en de Chat Completions API.
##### JavaScript
npm install openai##### Python
pip install openaiAnthropic SDK
Gebruik de Anthropic SDK voor de Messages API.
##### JavaScript
npm install @anthropic-ai/sdk##### Python
pip install anthropicClients configureren
OpenAI-compatibele endpoints gebruiken de base-URL van de OpenAI SDK met /api/v1, omdat de SDK resourcepaden zoals /responses en /chat/completions toevoegt.
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-compatibele endpoints gebruiken de base-URL van de Anthropic SDK zonder /v1, omdat de SDK /v1/messages toevoegt.
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",
)De Responses API gebruiken
Gebruik de Responses API voor nieuwe OpenAI-compatibele integraties en agentachtige responsobjecten.
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 gebruiken
Gebruik Chat Completions wanneer je applicatie al OpenAI-stijl messages verstuurt.
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 gebruiken
Gebruik Messages wanneer je client of agentframework Anthropic-compatibele verzoek- en responsvormen verwacht.
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)Officiële documentatie
- OpenAI API Quickstart
- OpenAI Create response
- OpenAI Create chat completion
- Claude Messages API
- Anthropic TypeScript SDK
- Anthropic Python SDK
Zie Configuratie voor Claude Code en Codex voor het instellen van agentclients.
Protocolreferentie
Responses
Gebruik dit endpoint voor clients en integraties die compatibel zijn met de OpenAI Responses API.
Endpoint
POST https://openapi.felo.ai/api/v1/responsesVerzoekbody
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
model | string | Ja | Openbare Felo-model-ID |
input | string of array | Ja | Invoer van de gebruiker, invoer over meerdere beurten of multimodale invoer |
instructions | string | Nee | Systeem- of ontwikkelaarsinstructies |
stream | boolean | Nee | Of Server-Sent Events-streaming moet worden gebruikt |
temperature | number | Nee | Samplingtemperatuur |
max_output_tokens | integer | Nee | Maximaal aantal uitvoertokens |
SDK-verzoek
const response = await client.responses.create({
model: "gpt-5.6-sol",
input: "Reply with exactly: responses ok",
});
console.log(response.output_text);Pad naar de responstekst
output_textChat Completions
Gebruik dit endpoint voor clients en SDK's die compatibel zijn met OpenAI Chat Completions.
Endpoint
POST https://openapi.felo.ai/api/v1/chat/completionsVerzoekbody
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
model | string | Ja | Openbare Felo-model-ID |
messages | array | Ja | Gespreksberichten |
messages[].role | string | Ja | system, user of assistant |
messages[].content | string | Ja | Inhoud van het bericht |
stream | boolean | Nee | Of Server-Sent Events-streaming moet worden gebruikt |
temperature | number | Nee | Samplingtemperatuur |
max_tokens | integer | Nee | Maximaal aantal uitvoertokens |
SDK-verzoek
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);Pad naar de responstekst
choices[0].message.contentMessages
Gebruik dit endpoint voor clients en SDK's die compatibel zijn met Anthropic Messages.
Endpoint
POST https://openapi.felo.ai/api/v1/messagesVerzoekbody
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
model | string | Ja | Openbare Felo-model-ID |
max_tokens | integer | Ja | Maximaal aantal uitvoertokens |
messages | array | Ja | Gespreksberichten |
messages[].role | string | Ja | user of assistant |
messages[].content | string of array | Ja | Platte tekst of Anthropic-contentblokken |
system | string | Nee | Systeemprompt |
stream | boolean | Nee | Of Server-Sent Events-streaming moet worden gebruikt |
temperature | number | Nee | Samplingtemperatuur |
SDK-verzoek
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);Verzoek met contentblokken
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",
},
],
},
],
});Pad naar de responstekst
content[].textStreaming
Zet stream op true om Server-Sent Events te ontvangen. Het formaat van de gebeurtenispayload volgt het gekozen protocol:
- Responses-streams retourneren responsgebeurtenissen die compatibel zijn met Responses.
- Chat Completions-streams retourneren OpenAI-compatibele chat completion-chunks.
- Messages-streams retourneren Anthropic-compatibele berichtgebeurtenissen.
const stream = await client.responses.create({
model: "gpt-5.6-sol",
input: "Write one sentence.",
stream: true,
});Clients moeten de stream parseren volgens het protocol dat ze gebruiken, in plaats van één gedeeld gebeurtenisschema voor alle drie de endpoints te verwachten.
Fouten
De LLM API retourneert waar mogelijk de foutvorm van het gekozen protocol. Veelvoorkomende oorzaken zijn:
| HTTP-status | Oorzaak | Voorgestelde actie |
|---|---|---|
400 | Ongeldige JSON-body of ontbrekende verplichte protocolvelden | Controleer model, messages, input, max_tokens en de velden van contentblokken |
401 | API-sleutel ontbreekt of is ongeldig | Controleer Authorization: Bearer ... of X-API-Key |
402 | Onvoldoende service-tegoed op de account | Controleer je tegoedsaldo bij Felo |
429 | Rate limit overschreden | Beperk het aantal verzoeken en probeer het later opnieuw |
502 | Verzoek aan de modeldienst is mislukt | Probeer het opnieuw en geef X-Request-Id mee wanneer je contact opneemt met support |
503 | Modeldienst tijdelijk niet beschikbaar | Probeer het opnieuw met backoff of kies een ander gepubliceerd model |