Documentation

Référence de l'API Frontière AI

L'API Frontière AI est une passerelle compatible OpenAI vers un catalogue sélectionné de modèles open-source puissants hébergés en Europe. Pointez votre SDK ou client HTTP existant vers l'URL de base ci-dessous, authentifiez-vous avec une clé API de votre dashboard, et chaque modèle en ligne est disponible via le même endpoint — chacun étiqueté souverain UE ou accès rapide, pour toujours savoir quelle juridiction sert vos données.

Vue d'ensemble

L'API implémente le contrat chat-completions d'OpenAI. Si votre code parle déjà à OpenAI — via le SDK officiel Python ou JavaScript, LangChain, ou un simple client HTTP — vous ne changez que deux choses : l'URL de base et la clé. Une seule clé donne accès à tout le catalogue.

Machine-readable OpenAPI spec: /openapi.json (OpenAPI 3.1).

URL de base
https://getfrontiereai.eu/api/v1

Deux endpoints :

POST /chat/completionsAppeler un modèle (streaming supporté)
GET /modelsLister le catalogue — public, aucune clé requise

Authentification

Chaque appel au endpoint de chat porte votre clé API dans l'en-tête Authorization. Les clés se créent dans le dashboard, section Clés API — la valeur complète (sk-front-…) n'est affichée qu'une fois à la création, ensuite seulement son préfixe. Créez une clé par environnement ou par application ; chacune se révoque indépendamment sans toucher aux autres.

En-tête
Authorization: Bearer sk-front-…

Gardez vos clés côté serveur (variables d'environnement, gestionnaire de secrets) — jamais dans du code client ni un dépôt public. Si une clé fuite, révoquez-la depuis le dashboard et créez-en une nouvelle ; l'ancienne cesse de fonctionner immédiatement.

Démarrage rapide

Le même appel en trois langages. Les exemples Python et JavaScript utilisent le SDK OpenAI officiel (pip install openai / npm install openai) — aucune librairie spécifique à Frontière AI n'est nécessaire.

curl
curl https://getfrontiereai.eu/api/v1/chat/completions \
  -H "Authorization: Bearer $FRONTIERE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "glm-5.2",
    "messages": [{"role": "user", "content": "Bonjour"}]
  }'
Python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://getfrontiereai.eu/api/v1",
    api_key=os.environ["FRONTIERE_KEY"],
)

reply = client.chat.completions.create(
    model="glm-5.2",
    messages=[{"role": "user", "content": "Bonjour"}],
)
print(reply.choices[0].message.content)
JavaScript / TypeScript
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://getfrontiereai.eu/api/v1",
  apiKey: process.env.FRONTIERE_KEY,
});

const reply = await client.chat.completions.create({
  model: "glm-5.2",
  messages: [{ role: "user", content: "Bonjour" }],
});
console.log(reply.choices[0].message.content);

Essayer un modèle sans écrire de code

Votre espace client contient une console : une fenêtre de discussion sur le même catalogue, par le même routage UE, au même prix au token. Elle sert à répondre à « quel modèle, avec quel prompt système et quels paramètres ? » avant de câbler quoi que ce soit — chaque réponse affiche le modèle, le nombre de tokens et le montant exact débité.

Une fois qu'un prompt se comporte comme vous voulez, la console traduit le modèle, les paramètres et le prompt courants en un appel curl, Python ou JavaScript prêt à coller contre cette API. Les conversations restent dans votre navigateur, pas sur nos serveurs, tant que vous ne synchronisez pas explicitement un fil sur votre compte.

Ouvrir la console

Chat completions

POST
https://getfrontiereai.eu/api/v1/chat/completions

Envoyez une conversation, recevez la réponse du modèle. Champs du corps de requête :

ChampTypeDescription
modelstring — requisUn identifiant de modèle en ligne du catalogue, ex. glm-5.2 (voir Modèles ci-dessous).
messagesarray — requisLa conversation : une liste d'objets {role, content} avec les rôles system, user et assistant, au format OpenAI.
streambooleantrue streame la réponse en server-sent events (voir Streaming).
max_tokensintegerPlafond de tokens de complétion. Sur les modèles de raisonnement, la réflexion compte dedans — omettez-le ou prévoyez au moins ~1 000 (voir Modèles de raisonnement).
temperature, top_p, stop, …diversParamètres d'échantillonnage OpenAI standard, transmis tels quels au provider qui sert le modèle.

Le corps de la requête est transmis au provider qui héberge le modèle : les paramètres OpenAI standard se comportent exactement comme documentés par OpenAI. Les champs qu'un provider donné ne supporte pas sont ignorés par ce provider.

La réponse est un objet chat.completion standard. Le bloc usage est ce qui est décompté de votre solde — au token près, tokens de raisonnement inclus sur les modèles de raisonnement :

200 — application/json
{
  "id": "chatcmpl-…",
  "object": "chat.completion",
  "model": "glm-5.2",
  "choices": [
    {
      "index": 0,
      "message": { "role": "assistant", "content": "Bonjour ! Comment puis-je aider ?" },
      "finish_reason": "stop"
    }
  ],
  "usage": { "prompt_tokens": 9, "completion_tokens": 42, "total_tokens": 51 }
}

Streaming

Passez "stream": true et la réponse arrive en server-sent events — des chunks data: portant le delta incrémental, terminés par data: [DONE]. C'est le même format que chez OpenAI : les helpers de streaming des SDK fonctionnent tels quels.

Python — stream
stream = client.chat.completions.create(
    model="llama-3.3-70b",
    messages=[{"role": "user", "content": "Bonjour"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

Frontière AI active toujours stream_options.include_usage en amont : le dernier chunk data avant [DONE] porte l'objet usage (et un tableau choices vide). C'est ce chunk qui permet de facturer exactement les appels streamés — ne soyez pas surpris de le voir si vous parsez le flux à la main.

Modèles

GET
https://getfrontiereai.eu/api/v1/models

Le catalogue est servi en direct par GET /api/v1/models — public, aucune clé requise. Il ne liste que les modèles en ligne : ce que vous y découvrez est appelable immédiatement ; ajoutez ?include=all pour obtenir aussi les entrées « coming soon ». Chaque entrée porte les champs OpenAI (id, object, created, owned_by), context_length et pricing (prix client en euros par million de tokens, en entrée et en sortie) quand ils sont vérifiés, plus quatre champs propres à Frontière AI : status ("live" ou "coming-soon"), sovereign (booléen), tool_calling (booléen, présent uniquement là où nous l'avons mesuré par un appel réel — filtrez dessus avant de bâtir un agent) et note (avertissement d'usage, quand il y en a un).

200 — application/json
{
  "object": "list",
  "data": [
    {
      "id": "glm-5.2",
      "object": "model",
      "created": 1786022547,
      "owned_by": "Zhipu / Z.ai",
      "label": "GLM-5.2 (Zhipu/Z.ai)",
      "provider": "scaleway",
      "status": "live",
      "sovereign": true,
      "tool_calling": true,
      "pricing": {
        "currency": "EUR",
        "input_per_million": 2.52,
        "output_per_million": 7.7
      },
      "note": "Reasoning model — thinks before answering. Omit max_tokens or allow at least ~1,000."
    }
  ]
}

sovereign: true signifie que la société qui exploite l'infrastructure n'a aucun contrôle capitalistique ou juridictionnel non-UE (principe SecNumCloud) — OVHcloud, Scaleway, ou serveurs UE dédiés. Les modèles servis via une infrastructure américaine (même en région UE) sont étiquetés accès rapide, jamais souverain — vous filtrez à chaque appel, en toute connaissance de cause.

ModèleIdentifiant modelHébergementStatut
Qwen3 235B (instruct)qwen3-235bSouverain UElive
Qwen3.5 397B (multimodal)qwen3.5-397bSouverain UElive
GLM-5.2 (Zhipu/Z.ai)glm-5.2Souverain UElive
DeepSeek V4 Flash 0731 (1M contexte)deepseek-v4-flash-0731Souverain UElive
Llama 3.3 70Bllama-3.3-70bSouverain UElive
Qwen3.6 27B (multimodal)qwen3.6-27bSouverain UElive
Qwen3.5 9B (rapide, économique)qwen3.5-9bSouverain UElive
Qwen3 32Bqwen3-32bSouverain UElive
Qwen3 Coder 30Bqwen3-coder-30bSouverain UElive
Qwen2.5-VL 72B (vision)qwen2.5-vl-72bSouverain UElive
GPT-OSS 120B (OpenAI)gpt-oss-120bSouverain UElive
GPT-OSS 20B (OpenAI)gpt-oss-20bSouverain UElive
Mistral Small 3.2 24Bmistral-small-3.2-24bSouverain UElive
Kimi K3 (2,8T paramètres, 1M contexte)kimi-k3Accès rapide (US)live
Kimi K3 — variante souveraine UEkimi-k3-souverainSouverain UEBientôt disponible
Muse Spark 1.1 (1M contexte)muse-spark-1.1Accès rapide (US)live
Muse Spark 1.2 (1M contexte)muse-spark-1.2Accès rapide (US)live
GLM-5.3 Flash (Zhipu/Z.ai)glm-5.3-flashAccès rapide (US)live
Qwen3.8 Max (2,4T, 1M contexte)qwen3.8-maxAccès rapide (US)live
Qwen3.8 27B (multimodal)qwen3.8-27bSouverain UElive
Qwen3.8 Flash (Qwen)qwen3.8-flashAccès rapide (US)live
DeepSeek R1 (671B MoE)deepseek-r1Accès rapide (US)live
DeepSeek V4 Pro (345B MoE)deepseek-v4-proAccès rapide (US)live
DeepSeek R1 (Distill Qwen 32B)deepseek-r1-distill-qwen-32bAccès rapide (US)live
DeepSeek R1 (Distill Qwen 14B)deepseek-r1-distill-qwen-14bAccès rapide (US)live
GLM-5.3 (Zhipu/Z.ai)glm-5.3Accès rapide (US)live
Gemma 3 27B (Google)gemma-3-27bAccès rapide (US)live
DeepSeek V4.1 Flash (552B MoE, 1M contexte)deepseek-v4.1-flashAccès rapide (US)live

Notes par modèle

  • glm-5.2Modèle de raisonnement — réfléchit avant de répondre. Omettez max_tokens ou prévoyez au moins ~1 000.
  • deepseek-v4-flash-0731Modèle de raisonnement — réfléchit avant de répondre. Omettez max_tokens ou prévoyez au moins ~1 000.
  • qwen2.5-vl-72bModèle de vision — son provider refuse les appels d'outils par une 400 : il ne peut pas servir d'agent. À utiliser pour l'analyse d'images, pas pour le function calling.
  • kimi-k3Modèle de raisonnement. Le premier appel après une période d'inactivité peut prendre quelques minutes de préchauffage — ensuite il répond en quelques secondes.
  • muse-spark-1.1Modèle de raisonnement — réfléchit avant de répondre. Omettez max_tokens ou prévoyez au moins ~1 000.
  • muse-spark-1.2Modèle de raisonnement — réfléchit avant de répondre. Omettez max_tokens ou prévoyez au moins ~1 000.
  • glm-5.3-flashModèle de raisonnement — réfléchit avant de répondre. Omettez max_tokens ou prévoyez au moins ~1 000.
  • qwen3.8-27bModèle de raisonnement — réfléchit avant de répondre. Omettez max_tokens ou prévoyez au moins ~1 000.
  • deepseek-r1Modèle de raisonnement — réfléchit avant de répondre. Omettez max_tokens ou prévoyez au moins ~1 000.
  • deepseek-r1-distill-qwen-32bModèle de raisonnement — réfléchit avant de répondre. Omettez max_tokens ou prévoyez au moins ~1 000.
  • deepseek-r1-distill-qwen-14bModèle de raisonnement — réfléchit avant de répondre. Omettez max_tokens ou prévoyez au moins ~1 000.
  • glm-5.3Modèle de raisonnement — réfléchit avant de répondre. Omettez max_tokens ou prévoyez au moins ~1 000.
  • deepseek-v4.1-flashModèle multimodal de raisonnement (texte + images). Le premier appel après une période d'inactivité peut prendre du temps de préchauffage. Omettez max_tokens ou prévoyez une large marge pour le raisonnement.

Les prix au token de chaque modèle en ligne sont listés sur le catalogue de modèles. Appeler un modèle « coming soon » renvoie HTTP 409 — et enregistre votre intérêt : demander un modèle est la meilleure façon de voter pour sa priorité. Un identifiant inconnu renvoie 404 avec un renvoi vers le catalogue.

Erreurs

Les erreurs sont en JSON, au format OpenAI — un objet error avec un message lisible et un type stable sur lequel brancher votre code :

402 — application/json
{
  "error": {
    "message": "Insufficient credit balance. Top up your account from the dashboard.",
    "type": "insufficient_credit"
  }
}
StatuttypeSignification
400invalid_requestLe corps n'est pas du JSON valide ou le champ model manque.
401invalid_api_keyClé API absente, malformée ou révoquée dans l'en-tête Authorization.
402insufficient_creditVotre solde prépayé est à zéro. Rechargez depuis le dashboard pour reprendre.
404model_not_foundL'identifiant de modèle n'est pas au catalogue — listez les identifiants valides via GET /api/v1/models.
409model_not_liveLe modèle existe mais est encore « coming soon ». Choisissez un modèle en ligne.
502upstream_errorLe provider a renvoyé une réponse illisible. Réessayez ; signalez-le si ça persiste.
503provider_not_configuredAucun identifiant provider pour ce modèle sur cette instance.

Les erreurs côté provider (rate limit, modèle surchargé, paramètre invalide pour ce provider) sont relayées telles quelles, avec leur statut et leur corps d'origine — ce que vous obtiendriez en appelant le provider directement.

Crédit & facturation

Frontière AI est prépayé : vous rechargez un solde (dès 10 €, via Stripe, dans le dashboard) et chaque appel réussi le décrémente. Pas d'abonnement, pas de carte enregistrée, pas de facture en fin de mois — quand le solde atteint zéro, les appels renvoient 402 et rien d'autre ne se passe.

La facturation est exacte au token, calculée depuis l'objet usage que le provider rapporte pour votre appel : les prompt tokens au tarif input du modèle, les completion tokens (tokens de raisonnement inclus) au tarif output. Quand un provider sert une partie de votre prompt depuis son cache et le rapporte (usage.prompt_tokens_details.cached_tokens), ces tokens sont facturés au tarif cache du modèle, moins cher.

Votre dashboard affiche le solde, l'historique de facturation par appel (tokens in/out et prix de chaque appel) et l'historique des recharges. Le prix de chaque appel est débité au moment où le provider renvoie son usage — appels streamés compris, via le chunk usage final.

Modèles de raisonnement

glm-5.2 et kimi-k3 réfléchissent avant de répondre : cette réflexion consomme des tokens de complétion (facturés en output) avant qu'aucun texte visible ne soit produit. Avec un max_tokens trop petit, tout le budget peut partir en raisonnement — la réponse revient alors avec content: null et finish_reason « length », ce qui ressemble à une réponse vide. Omettez max_tokens ou prévoyez au moins ~1 000.

kimi-k3 tourne en plus à l'échelle zéro entre deux usages : le premier appel après une période d'inactivité peut prendre quelques minutes de préchauffage, ensuite il répond en quelques secondes. Il est servi via une infrastructure américaine et étiqueté accès rapide — vérifiez le champ sovereign si la juridiction compte pour votre usage.

Le raisonnement prend aussi du temps horloge : sur un prompt substantiel, glm-5.2 peut réfléchir plusieurs minutes avant que la réponse complète soit prête. Réglez généreusement le timeout de votre client HTTP (beaucoup d'outils coupent bien avant la minute — le module HTTP de Make.com, par exemple, coupe à 40 secondes si vous ne l'augmentez pas), ou mieux, utilisez le streaming : le premier chunk arrive en moins d'une seconde et la connexion reste active pendant toute la génération.

Embeddings

POST /api/v1/embeddings transforme du texte en vecteurs, avec la même authentification et la même facturation prépayée que le chat. Le corps de requête suit celui d'OpenAI : model, et input sous forme de chaîne ou de tableau de chaînes. La réponse est un objet de type list dont data porte un embedding par entrée, dans l'ordre d'envoi.

curl
curl https://getfrontiereai.eu/api/v1/embeddings \
  -H "Authorization: Bearer $FRONTIERE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "bge-m3",
    "input": ["Premier document", "Second document"]
  }'

Les modèles d'embedding forment leur propre catalogue — un modèle de chat envoyé ici répond 404, et un modèle d'embedding envoyé à /chat/completions aussi. GET /api/v1/models?kind=embedding ne rend que les valides ; chaque entrée du catalogue porte par ailleurs un champ kind ("chat" ou "embedding"), de quoi les distinguer en un seul appel.

ModèleDimensionsContexte
bge-m310248192
bge-multilingual-gemma235848192
qwen3-embedding-8b409640960

Choisissez d'abord selon dimensions : la longueur du vecteur fait partie de votre schéma de stockage, et changer de modèle plus tard oblige à recalculer tous les vecteurs conservés. La facturation ne compte que les tokens d'entrée — un embedding ne produit aucun token de sortie, il n'y a donc pas de tarif de sortie.

Serveur MCP

Frontière AI expose un endpoint Model Context Protocol (MCP) qui donne aux agents IA (Claude Code, Codex, Cursor, Roo Code, Continue, etc.) un accès programmatique complet à l'API Frontière AI. Tout client compatible MCP se connecte avec une seule URL et peut parcourir le catalogue, lancer de l'inférence, créer des embeddings et vérifier le solde du compte — le tout en JSON-RPC 2.0 standard.

Connectez le client MCP de votre agent à l'URL de l'endpoint ci-dessous. L'endpoint utilise un HTTP stateless : chaque requête POST est un appel JSON-RPC 2.0 autonome avec une réponse synchrone — pas de flux SSE, pas d'état de session. L'authentification se fait en envoyant votre clé API dans l'en-tête Authorization de chaque requête (ex. Authorization: Bearer sk-front-...). Les outils de lecture (requêtes catalogue) fonctionnent sans clé ; les outils d'inférence et de solde en exigent une.

Le serveur MCP expose huit outils : trois pour la découverte du catalogue (list_models, get_model, search_models — aucune authentification requise) et cinq pour les opérations authentifiées (chat_completion relaie une requête de chat vers la gateway avec facturation au token, create_embedding génère des vecteurs à partir de texte, check_balance renvoie votre solde de crédit actuel, et web_search / web_fetch donnent à l'agent un accès web live via un provider de recherche UE). Une page dédiée détaille l'installation et chaque outil.

MCP endpoint
https://getfrontiereai.eu/api/mcp

Transport: POST with application/json — JSON-RPC 2.0, stateless (no SSE, no sessions).

Available tools

ToolDescription
list_modelsLister tous les modèles avec filtres optionnels : filter (live/coming-soon/sovereign), provider, kind (chat/embedding), includeComingSoon
get_modelObtenir les détails d'un modèle par son slug : tarification, vendeur, licence, paramètres, souveraineté, données de conformité
search_modelsRechercher des modèles par mot-clé dans slug, nom, vendeur, provider et modalité
chat_completionExécuter de l'inférence sur tout modèle en ligne. Supporte temperature, max_tokens, tool calling. Facturation au token (mêmes tarifs que l'API REST)
create_embeddingGénérer des embeddings de texte pour RAG/recherche sémantique. Supporte chaîne ou tableau en entrée. Facturation au token
check_balanceVérifier le solde de crédit prépayé actuel en EUR (aucun paramètre requis)
web_searchRecherche web live (Linkup, UE) renvoyant jusqu'à 8 résultats avec le texte complet de chaque page — couvert par notre quota de recherche, non débité sur votre solde
web_fetchLire une page web en markdown propre (Linkup, UE) — pour approfondir l'URL d'un résultat de recherche

Intégrations

Tout ce qui parle le protocole OpenAI fonctionne en changeant la base URL et la clé — SDK, LangChain, frameworks d'agents, outils no-code. Certaines plateformes demandent quelques étapes spécifiques, et les agents exigent en plus l'appel d'outils, que nous avons mesuré modèle par modèle :

Intégrations : plateformes d'agents, matrice d'appel d'outils, limites connues

FAQ

Puis-je essayer un modèle sans écrire de code ?

Oui — votre espace client contient une console web qui interroge le même catalogue, par le même routage UE, au même prix au token que l'API. Elle sert à arrêter un modèle, un prompt système et des paramètres, puis à générer l'appel curl, Python ou JavaScript correspondant. Les conversations restent dans votre navigateur tant que vous ne synchronisez pas explicitement un fil sur votre compte.

Puis-je utiliser le SDK OpenAI officiel ?

Oui. L'API implémente le contrat chat-completions d'OpenAI : pointez base_url vers l'API Frontière AI et passez votre clé en api_key — les SDK officiels Python et JavaScript, et les outils construits dessus, fonctionnent tels quels.

Que se passe-t-il quand mon crédit atteint zéro ?

Les appels renvoient HTTP 402 (insufficient_credit) et ne sont plus servis. Rien d'autre ne se passe — pas de découvert, pas de prélèvement automatique. Rechargez depuis le dashboard pour reprendre.

Comment savoir si un modèle est souverain UE ?

Chaque modèle porte un booléen sovereign dans GET /api/v1/models et un badge sur le catalogue. sovereign: true signifie aucun contrôle capitalistique ou juridictionnel non-UE sur l'opérateur (principe SecNumCloud) ; les modèles servis via une infrastructure américaine sont toujours étiquetés accès rapide, jamais souverain.

Pourquoi ma réponse est-elle revenue vide ?

Vous avez probablement appelé un modèle de raisonnement (glm-5.2, kimi-k3) avec un max_tokens trop petit : tout le budget est parti en réflexion et content est revenu null avec finish_reason « length ». Omettez max_tokens ou prévoyez au moins ~1 000.

Prêt pour votre premier appel ?

Créez un compte, rechargez dès 10 €, collez deux lignes — tout le catalogue derrière une seule clé.

Créer un compte
Créer un compte