Si votre application communique déjà avec l’API OpenAI, passer à Kunavo prend environ dix minutes — la majeure partie étant consacrée à l’inscription. Ce guide présente les quatre formes d’intégration les plus courantes et la modification d’une ligne nécessaire pour chacune.
Étape 0 — Obtenir une clé (2 minutes)
- Inscrivez-vous sur kunavo.com/app/signup. Rechargez à partir de 10 $, payez à la consommation et votre solde n’expire jamais.
- Rendez-vous sur /app/keys et créez une clé. Elle commence par
sk-kn-. - Définissez la variable d’environnement :
export KUNAVO_API_KEY=sk-kn-....
Étape 1 — Changer de SDK (1 minute)
Python (package openai)
# Before — pointing at OpenAI directly
from openai import OpenAI
client = OpenAI(
api_key=os.environ["OPENAI_API_KEY"],
)
# After — pointing at Kunavo. Everything else stays the same.
from openai import OpenAI
client = OpenAI(
api_key=os.environ["KUNAVO_API_KEY"],
base_url="https://api.kunavo.com/v1",
)Node / TypeScript
// Before
import OpenAI from "openai";
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
// After
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.KUNAVO_API_KEY,
baseURL: "https://api.kunavo.com/v1",
});LangChain
LangChain utilise en interne le même client OpenAI ; la modification est donc identique. L’identifiant du modèle est désormais un slug Kunavo — consultez /models pour la liste à jour (essayez claude-sonnet-4-6, gpt-5-6-terra, claude-opus-4-7).
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="claude-sonnet-4-6", # switched the model
api_key=os.environ["KUNAVO_API_KEY"],
base_url="https://api.kunavo.com/v1",
)SDK IA Vercel
@ai-sdk/openai lit par défaut son URL de base et sa clé API dans les variables d’environnement. Définissez-les et c’est terminé — chaque aide du framework (streamText, generateObject, nouvelles tentatives, routage des outils) fonctionne sans modification.
import { openai } from "@ai-sdk/openai";
// @ai-sdk/openai reads OPENAI_BASE_URL automatically
process.env.OPENAI_BASE_URL = "https://api.kunavo.com/v1";
process.env.OPENAI_API_KEY = process.env.KUNAVO_API_KEY;
const model = openai("claude-sonnet-4-6");
// then use streamText / generateText / streamObject as beforeSDK Anthropic (si vous utilisez déjà Claude)
Kunavo expose également l’API Messages native d’Anthropic sur /v1/messages, en plus du format OpenAI — vous n’avez donc pas à changer de SDK.
from anthropic import Anthropic
# Before — Anthropic SDK against api.anthropic.com
client = Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
# After — same SDK, against Kunavo. Caching, thinking, tools all pass through.
client = Anthropic(
api_key=os.environ["KUNAVO_API_KEY"],
base_url="https://api.kunavo.com", # SDK appends /v1/messages
)Étape 2 — Tester le portefeuille (1 minute)
Avant de toucher au code de production, exécutez un test peu coûteux contre claude-haiku-4-5. S’il aboutit, votre clé fonctionne, la facturation fonctionne et la couche de routage est saine.
# Cheap, deterministic-ish smoke test for migration validation.
resp = client.chat.completions.create(
model="claude-haiku-4-5", # the cheapest Claude
messages=[{"role": "user", "content": "ping"}],
max_tokens=8,
temperature=0,
)
assert resp.choices[0].message.content, "empty response"
print("ok — Kunavo wallet works, total cost ~$0.0001")Étape 3 — Déplacer le trafic (5 minutes)
Le modèle sûr : deux variables d’environnement dans votre application — AI_BASE_URL et AI_API_KEY — sélectionnées par environnement. La production reste sur OpenAI ; la préproduction bascule sur Kunavo. Après 24 heures, basculez la production.
Si vous voulez connaître l’impact sur les coûts avant le basculement, le tableau de bord Kunavo affiche le coût par appel par rapport au tarif officiel en amont — il est facile de calculer les économies mensuelles prévues à partir de vos invites réelles.
Ce qui reste identique
- Votre SDK et votre base de code.
- Streaming, appels de fonctions, utilisation d’outils, vision, sorties structurées.
- Les schémas exacts des requêtes et réponses OpenAI.
- Format des erreurs (
error.message/error.type/error.code).
Ce qui change pour le mieux
- Tarification. Les prix et les remises disponibles varient selon le modèle — consultez les tarifs en vigueur sur /pricing.
- Modalités. Le même SDK atteint Claude (
claude-opus-4-7), GPT (gpt-5-6-sol), GPT-Image-2, Nano Banana, Veo 3 et Suno — voir /models. - Facturation. Portefeuille Stripe, tarifé en USD. Cartes partout ; Apple Pay, Google Pay et Link partout sauf en Inde ; ainsi que des moyens locaux selon le pays (Alipay et WeChat Pay en Chine, Cash App Pay, Klarna et ACH aux États-Unis, UPI en Inde, KakaoPay en Corée…) — la liste complète se trouve sur /docs/billing.
- Basculement. Basculement à chaud mult fournisseur avec réacheminement automatique dans la même requête lorsqu’un service en amont devient instable.
Notes sur les cas problématiques
- Points de terminaison propres à OpenAI que nous ne couvrons pas aujourd’hui :
/v1/responses(utilisez/v1/chat/completions),/v1/assistants(gérez l’état de votre côté ; nous sommes une passerelle sans état),/v1/realtime(prévu). - Certaines fonctionnalités propres à Claude —
cache_control,thinkingétendu — fonctionnent mieux via le point de terminaison natif /v1/messages, plutôt que via le format OpenAI.
Bloqué ? contact@kunavo.com — un humain répond sous un jour ouvré. Pour une migration importante, nous organiserons un appel.