« Compatible avec OpenAI » signifie qu’une API utilise le même format filaire que /v1/chat/completions d’OpenAI — tout SDK ou outil OpenAI fonctionne donc avec elle en modifiant uniquement le base_url. Ollama expose un endpoint compatible avec OpenAI pour les modèles exécutés localement sur votre machine. Kunavo en expose un pour les modèles de pointe hébergés — Claude, GPT ainsi que des modèles d’image, de vidéo et d’audio — derrière un seul jeton bearer. Ce guide présente le principe et explique comment passer de l’un à l’autre sans réécrire le code.
Ce que signifie « compatible avec OpenAI »
Le format Chat Completions d’OpenAI est devenu le standard de facto : un tableau messages en entrée, un choices[].message en sortie, des Server-Sent Events pour la diffusion en continu et tools pour les appels de fonctions. Tout endpoint qui respecte ce contrat est « compatible avec OpenAI » ; les SDK officiels openai (Python, Node et tous les ports communautaires) s’y connectent en définissant base_url.
Le modèle Ollama (local)
Ollama exécute des modèles ouverts en local et les sert à http://localhost:11434/v1 :
from openai import OpenAI
# Ollama exposes an OpenAI-compatible endpoint on localhost
client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
resp = client.chat.completions.create(
model="llama3.1",
messages=[{"role": "user", "content": "Summarize this changelog."}],
)
print(resp.choices[0].message.content)Le même code avec des modèles de pointe hébergés (Kunavo)
Pointez exactement le même SDK vers Kunavo et choisissez un modèle de pointe. Seuls base_url, api_key et model changent — l’appel est identique octet par octet :
import os
from openai import OpenAI
# Same SDK, same call shape — only base_url, api_key and model change
client = OpenAI(
base_url="https://api.kunavo.com/v1",
api_key=os.environ["KUNAVO_API_KEY"],
)
resp = client.chat.completions.create(
model="claude-sonnet-5", # or claude-haiku-4-5, gpt-5-5, gpt-5-6-terra...
messages=[{"role": "user", "content": "Summarize this changelog."}],
)
print(resp.choices[0].message.content)Obtenez une clé à /app/keys ; le démarrage rapide propose des exemples Node et curl.
Local ou hébergé — quand utiliser lequel
| Ollama (local) | Kunavo (hébergé) | |
|---|---|---|
| Qualité du modèle | Modèles ouverts (Llama, Qwen, Mistral) | Pointe : Claude, GPT |
| Matériel | Votre GPU / RAM | Aucun — entièrement hébergé |
| Coûts | Gratuit (votre électricité) | Paiement à l’usage, inférieur au tarif catalogue |
| Confidentialité | Entièrement hors ligne | Hébergé aux États-Unis et transmis au fournisseur du modèle, dont la politique de conservation s’applique ; aucun DPA ni ZDR |
| Multimodal | Limitée | Image, vidéo et audio avec une seule clé |
Configuration courante : Ollama sur localhost pour le développement hors ligne, Kunavo pour la qualité hébergée en production — une seule variable d’environnement permet de passer de l’un à l’autre. Pour le contrat champ par champ implémenté par les deux extrémités — paramètres, deltas de diffusion, tool_calls, objet usage et tableau de parité avec la surface v1 d’Ollama — consultez la référence /v1/chat/completions et sa section sur la compatibilité OpenAI d’Ollama.
Découvrir les modèles à l’exécution
Comme le /api/tags d’Ollama, Kunavo expose un catalogue au format OpenAI. Résolvez les slugs à l’exécution plutôt que de les coder en dur :
# Discover every enabled model (OpenAI-shaped, like Ollama's /api/tags)
curl https://api.kunavo.com/v1/models \
-H "Authorization: Bearer $KUNAVO_API_KEY"Au-delà du chat
La même clé permet d’atteindre les endpoints d’image (/v1/images/generations), de vidéo (/v1/video/generations) et d’audio — tous au format OpenAI. Consultez le guide de l’IA multimodale et la comparaison avec OpenRouter pour comprendre les différences entre Kunavo et les autres passerelles.
Une surface dépasse la définition habituelle de « compatible » et mérite d’être connue : POST /v1/responses. Codex CLI n’accepte un fournisseur personnalisé que via l’API Responses, raison pour laquelle la plupart des passerelles compatibles avec OpenAI ne peuvent pas le piloter — le coût de Codex par token explique comment y parvenir avec un bloc de configuration opérationnel. Pour calculer le prix d’une charge GPT incluant les entrées mises en cache, le calculateur de tarifs de l’API OpenAI utilise vos propres nombres de tokens.
Questions fréquentes
Qu’est-ce qu’une API compatible avec OpenAI ?
Une API qui utilise le même format filaire que /v1/chat/completions d’OpenAI — même corps de requête, même forme de réponse, même diffusion en continu. Tout SDK ou outil OpenAI fonctionne avec elle en modifiant uniquement base_url et api_key. Ollama en expose une pour les modèles locaux ; Kunavo en expose une pour les modèles de pointe hébergés.
Existe-t-il une API compatible avec OpenAI pour les modèles hébergés, comme Ollama le fait pour les modèles locaux ?
Oui. Le endpoint compatible avec OpenAI d’Ollama exécute des modèles locaux sur votre machine ; celui de Kunavo exécute Claude, GPT ainsi que des modèles d’image, de vidéo et d’audio hébergés derrière un seul base_url (https://api.kunavo.com/v1) et un seul jeton bearer. Le code d’appel est identique.
Puis-je conserver Ollama en local et utiliser Kunavo en production ?
Oui — c’est un schéma courant. Comme les deux sont compatibles avec OpenAI, vous changez d’environnement en remplaçant base_url et model : Ollama sur localhost pour le développement hors ligne, Kunavo pour la qualité des modèles de pointe hébergés en production. Aucun changement de SDK.
Quels modèles puis-je appeler via le endpoint compatible avec OpenAI ?
Tous les modèles activés — Claude, GPT et d’autres pour le chat, ainsi que l’image, la vidéo et l’audio sur leurs propres endpoints au format OpenAI. GET /v1/models renvoie la liste actuelle ; résolvez les slugs à l’exécution plutôt que de les coder en dur. Consultez le catalogue des modèles.
Qu’en est-il des limites de débit ?
Chaque fournisseur applique ses propres plafonds, et une erreur 429 signifie que vous en avez franchi un — consultez les limites de débit de l’API OpenAI pour identifier la limite déclenchée et le backoff approprié, ainsi que l’erreur 429 rate_limit_error de l’API Claude pour l’équivalent chez Anthropic.