Felo API PlatformFelo API Platform

Felo APIs

LLM API

Roep Felo-model-endpoints aan via OpenAI-compatible en Anthropic-compatible protocollen.

GET/api/v1/models

Authenticatie

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

Decisions API

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

Stuur 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.13
  • state: Context om te beoordelen; een string of een JSON-waarde.
  • questions: Benoemde vragen met type, instructions en 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"])

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

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

Configureer voor SDK-clients de protocolspecifieke base-URL die in Basisgebruik wordt getoond.

Algemene headers

HeaderVerplichtBeschrijving
AuthorizationJa, tenzij X-API-Key wordt gebruiktAPI-sleutel in de vorm Bearer YOUR_API_KEY
X-API-KeyJa, tenzij Authorization wordt gebruiktAPI-sleutel als alternatief voor de Bearer-header
Content-TypeJaMoet application/json zijn
X-Request-IdNeeOptionele request-ID voor foutopsporing

Modellen ontdekken

De algemene catalogus bevat alle modelcategorieën. Gebruik de aparte lijsten om video- of decision-modellen te ontdekken:

EndpointModelcategorieën
GET /api/v1/modelsAlle categorieën (ongewijzigd)
GET /api/v1/videos/modelsVideogeneratie (video_generation)
GET /api/v1/decisions/modelsDecisions, 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-IDContextMax. uitvoerInvoer / 1M tokensUitvoer / 1M tokensCache lezen / 1M tokensCache schrijven / 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 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 openai

Anthropic SDK

Gebruik de Anthropic SDK voor de Messages API.

##### JavaScript

npm install @anthropic-ai/sdk

##### Python

pip install anthropic

Clients 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

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

Verzoekbody

ParameterTypeVerplichtBeschrijving
modelstringJaOpenbare Felo-model-ID
inputstring of arrayJaInvoer van de gebruiker, invoer over meerdere beurten of multimodale invoer
instructionsstringNeeSysteem- of ontwikkelaarsinstructies
streambooleanNeeOf Server-Sent Events-streaming moet worden gebruikt
temperaturenumberNeeSamplingtemperatuur
max_output_tokensintegerNeeMaximaal 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_text

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

Verzoekbody

ParameterTypeVerplichtBeschrijving
modelstringJaOpenbare Felo-model-ID
messagesarrayJaGespreksberichten
messages[].rolestringJasystem, user of assistant
messages[].contentstringJaInhoud van het bericht
streambooleanNeeOf Server-Sent Events-streaming moet worden gebruikt
temperaturenumberNeeSamplingtemperatuur
max_tokensintegerNeeMaximaal 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.content

Messages

Gebruik dit endpoint voor clients en SDK's die compatibel zijn met Anthropic Messages.

Endpoint

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

Verzoekbody

ParameterTypeVerplichtBeschrijving
modelstringJaOpenbare Felo-model-ID
max_tokensintegerJaMaximaal aantal uitvoertokens
messagesarrayJaGespreksberichten
messages[].rolestringJauser of assistant
messages[].contentstring of arrayJaPlatte tekst of Anthropic-contentblokken
systemstringNeeSysteemprompt
streambooleanNeeOf Server-Sent Events-streaming moet worden gebruikt
temperaturenumberNeeSamplingtemperatuur

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[].text

Streaming

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-statusOorzaakVoorgestelde actie
400Ongeldige JSON-body of ontbrekende verplichte protocolveldenControleer model, messages, input, max_tokens en de velden van contentblokken
401API-sleutel ontbreekt of is ongeldigControleer Authorization: Bearer ... of X-API-Key
402Onvoldoende service-tegoed op de accountControleer je tegoedsaldo bij Felo
429Rate limit overschredenBeperk het aantal verzoeken en probeer het later opnieuw
502Verzoek aan de modeldienst is misluktProbeer het opnieuw en geef X-Request-Id mee wanneer je contact opneemt met support
503Modeldienst tijdelijk niet beschikbaarProbeer het opnieuw met backoff of kies een ander gepubliceerd model