L'URL de base est la partie la plus simple lorsqu'on change de fournisseur ; ce sont les chemins d'échec qui rendent les migrations complexes. Pour migrer d'OpenAI vers TokenLab, vous devez modifier deux valeurs dans votre client SDK OpenAI : base_url et api_key. Le reste de ce guide couvre les points à vérifier autour de ce changement. Cela inclut l'ID du modèle que vous envoyez, son prix actuel, le streaming, les appels d'outils, la gestion des erreurs, les délais d'attente (timeouts) et la facturation. Les faits ci-dessous proviennent de la documentation de TokenLab et de l'API des modèles en direct, chacun avec sa date d'observation.
Points clés à retenir
- Le changement principal concerne deux valeurs : l'URL de base de TokenLab
https://api.tokenlab.sh/v1et une clé API TokenLab (elles commencent parsk-). - TokenLab documente la prise en charge du SDK OpenAI pour les Chat Completions et les Responses. Les paramètres optionnels, les options d'outils et les champs spécifiques aux Responses dépendent toujours du modèle sélectionné.
- Consultez le prix de votre modèle via l'API en direct avant de prendre toute décision. Au 03/10/2026,
gpt-5.5était listé à 1,50 $ pour 1 million de tokens en entrée et 9,00 $ pour 1 million de tokens en sortie. - Suivez la liste de contrôle à la fin avant de basculer le trafic de production. La plupart des surprises se cachent dans la gestion des erreurs, les timeouts et la facturation, et non dans le chemin nominal.
Le changement des deux valeurs pour migrer d'OpenAI vers TokenLab
Commencez par la clé. Selon le Quickstart (observé le 03/10/2026), vous créez un compte, générez une clé API et enregistrez immédiatement la valeur complète. Elle n'est affichée qu'une seule fois, et le préfixe dans la liste des clés ne peut pas authentifier les requêtes. Vérifiez votre solde avant le premier appel, car les requêtes sont facturées au prix actuel du modèle sélectionné.
Ensuite, modifiez le client. Le guide de migration (observé le 03/10/2026) décrit la procédure comme suit : définissez base_url / baseURL sur https://api.tokenlab.sh/v1, remplacez la clé et choisissez un ID de modèle via GET /v1/models.
Par exemple, imaginez un service qui contient la chaîne gpt-5.5 dans sa configuration. Après le changement des deux valeurs, cette même chaîne constitue une requête valide, mais nous devrions tout de même confirmer l'ID au préalable. GET /v1/models et GET /v1/models/{model} sont des points de terminaison de découverte publics qui fonctionnent sans clé.
Python
import os
from openai import OpenAI
# Avant : client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
client = OpenAI(
api_key=os.environ["TOKENLAB_API_KEY"],
base_url="https://api.tokenlab.sh/v1",
timeout=30.0,
max_retries=0,
)
response = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "Hello, world!"}],
)
print(response.choices[0].message.content)
Node.js
import OpenAI from 'openai';
// Avant : new OpenAI({ apiKey: process.env.OPENAI_API_KEY })
const client = new OpenAI({
apiKey: process.env.TOKENLAB_API_KEY,
baseURL: 'https://api.tokenlab.sh/v1',
timeout: 30_000,
maxRetries: 0,
});
const completion = await client.chat.completions.create({
model: 'gpt-5.5',
messages: [{ role: 'user', content: 'Hello' }],
});
console.log(completion.choices[0].message.content);
cURL
curl https://api.tokenlab.sh/v1/chat/completions \
-H "Authorization: Bearer $TOKENLAB_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-5.5","messages":[{"role":"user","content":"Say hello"}]}'
Les paramètres de timeout et de nouvelle tentative (retry) dans les deux premiers exemples reflètent les exemples du Quickstart (observé le 03/10/2026), qui utilisent un timeout de 30 secondes et aucune nouvelle tentative automatique du SDK. Nous maintenons les retries à zéro pendant les tests afin qu'une requête échouée soit visible au lieu d'être retentée silencieusement.
Passez l'URL de base explicitement dans la configuration du client. Le guide des SDK (observé le 03/10/2026) recommande cette approche plutôt que de s'appuyer sur d'anciens alias de variables d'environnement. Gardez la clé sur le serveur et dans un gestionnaire de secrets, jamais dans le code côté client.
Choisir l'ID du modèle et consulter son prix
Une migration ne doit pas supposer un ID de modèle ou un prix. Les deux se trouvent dans l'API des modèles. Nous avons consulté https://api.tokenlab.sh/v1/models/gpt-5.5 et https://api.tokenlab.sh/v1/models/laguna-s-2.1 le 03/10/2026. La tarification pour les deux a été mise à jour pour la dernière fois le 02/10/2026 à 16:53:30.068Z.
| Champ | gpt-5.5 |
laguna-s-2.1 |
|---|---|---|
| Cycle de vie | active | active |
| Max tokens entrée / sortie | 1 000 000 / 128 000 | 1 048 576 / 131 072 |
| Formats de requête acceptés | openai_chat_completions, openai_responses |
openai_chat_completions |
| Capacités listées | coding, json-mode, prompt-cache, reasoning, tool-use, vision | tool-use |
| Entrée, USD par 1M tokens | 1.5 | 0.1 |
| Sortie, USD par 1M tokens | 9 | 0.2 |
| Lecture cache, USD par 1M tokens | 0.15 | 0.01 |
Sources : gpt-5.5 et laguna-s-2.1, tous deux observés le 03/10/2026.
Pour convertir ces tarifs en un montant, voici une estimation avec le détail du calcul. Prenons un travail avec 1 million de tokens en entrée et 100 000 tokens en sortie, sans succès de cache.
gpt-5.5: 1 × 1,50 $ + 0,1 × 9,00 $ = 1,50 $ + 0,90 $ = 2,40 $.laguna-s-2.1: 1 × 0,10 $ + 0,1 × 0,20 $ = 0,10 $ + 0,02 $ = 0,12 $.
Il s'agit d'estimations basées sur les tarifs par token listés. Votre facture finale correspondra à l'enregistrement d'utilisation (Usage record). La tokenisation diffère selon le modèle, donc le même texte produit des nombres de tokens différents sur des modèles différents.
Nous ne prétendons pas réaliser d'économies ici. Pour comparer avec ce que vous payez aujourd'hui, placez les tarifs de TokenLab à côté de votre facture OpenAI actuelle, ou de la page de tarification d'OpenAI, le jour où vous effectuez le changement. Les prix changent, et le guide de facturation (observé le 03/10/2026) déconseille de coder en dur une table de prix copiée. Il renvoie vers GET /v1/models/:model/pricing pour obtenir les valeurs actuelles.
Les autres ID de modèles suivent le même schéma. Les exemples de la documentation utilisent gpt-5.6-terra et gpt-5.6-luna pour les Chat Completions, et claude-sonnet-5 ainsi que gemini-3.5-flash sur leurs propres routes. Lisez les formats acceptés de chaque modèle avant d'y diriger du trafic. Pour des comparaisons plus larges, consultez le répertoire des modèles, la comparaison OpenRouter vs TokenLab et le classement des modèles. Les équipes travaillant sur l'image et la vidéo peuvent commencer par les meilleures API de modèles d'IA pour l'image 2026 et les meilleures API de modèles d'IA pour la vidéo 2026. Pour les tâches de code, voir les meilleurs modèles d'IA pour le codage.
Ce qu'il faut vérifier ensuite lors de la migration d'OpenAI vers TokenLab
TokenLab documente le SDK OpenAI comme fonctionnant avec les Chat Completions et les Responses. Il s'agit d'une compatibilité avec le format de requête et de réponse, et non d'une promesse que chaque modèle se comportera de la même manière. Le guide des formats d'API (observé le 03/10/2026) indique que les paramètres optionnels dépendent du modèle. Il précise également qu'un modèle n'accepte pas nécessairement les quatre formats d'API, et tokenlab.accepted_request_formats indique ceux qu'il accepte. Traitez chaque point ci-dessous comme un élément à tester avec votre trafic réel.
Streaming
stream: true envoie des deltas de messages partiels sous forme d'événements envoyés par le serveur (SSE). Définissez stream_options avec include_usage: true pour recevoir l'utilisation des tokens dans les morceaux de flux, comme le documente la référence Create Chat Completion (observée le 03/10/2026).
stream = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "Count to five."}],
stream=True,
stream_options={"include_usage": True},
)
for chunk in stream:
if chunk.choices:
print(chunk.choices[0].delta.content or "", end="")
Deux comportements à prévoir. Si un flux est interrompu après l'arrivée d'une sortie, ne le traitez pas comme une réponse complète. Le guide de gestion des erreurs (observé le 03/10/2026) avertit que le répéter peut produire une sortie différente ou une seconde facturation. De plus, le streaming peut se terminer avant la facturation, donc l'ID de facturation peut être absent.
Appels d'outils
La référence Chat Completions liste tools, tool_choice et parallel_tool_calls. Elle indique que les appels parallèles fonctionnent « lorsque le modèle sélectionné le prend en charge ». L'appel de fonction est documenté comme étant « pris en charge par le modèle sélectionné », vérifiez donc la liste des capacités. Dans le tableau ci-dessus, gpt-5.5 et laguna-s-2.1 listent tous deux l'utilisation d'outils, mais seul gpt-5.5 liste le mode JSON et la vision. Envoyez vos schémas d'outils réels, pas un exemple simplifié, et vérifiez que les arguments renvoyés sont correctement analysés.
Si vous prévoyez d'appeler des modèles Claude, notez la règle du guide de migration. Les appels d'outils Claude, les blocs de réflexion (thinking blocks) et les champs de message Anthropic appartiennent à /v1/messages, et les Chat Completions ne les garantissent pas.
Formes d'erreurs
Les Chat Completions et Responses renvoient un objet error de style OpenAI. Selon le guide de gestion des erreurs, seuls message et type sont toujours présents. Des champs tels que code, param, retryable et retry_after apparaissent lorsqu'ils sont pertinents. Basez votre logique sur le statut HTTP et le code, et non sur le texte du message, et faites en sorte que votre analyseur tolère les champs manquants. Les messages Anthropic et Gemini conservent leurs propres formats d'erreur, donc un seul analyseur ne couvrira pas toutes les routes.
| Statut | Code | Signification |
|---|---|---|
| 401 | invalid_api_key |
La clé est manquante, invalide, inactive ou révoquée |
| 401 | expired_api_key |
La clé a expiré |
| 402 | insufficient_balance |
Le solde du compte ne peut pas couvrir la requête |
| 402 | quota_exceeded |
La limite d'utilisation de la clé a été atteinte |
| 403 | model_not_allowed |
Cette clé ne peut pas utiliser le modèle demandé |
| 429 | rate_limit_exceeded |
Trop de requêtes ; attendez selon Retry-After |
Sources : Authentification et gestion des erreurs, observées le 03/10/2026.
Ce tableau corrige une hypothèse courante. Un solde vide est une erreur 402, pas 401. Si votre code actuel traite chaque 4xx comme une mauvaise clé, mettez-le à jour.
Délais d'attente et nouvelles tentatives
Le guide de migration indique que le code existant de nouvelle tentative, de timeout et de streaming peut généralement être conservé. Examinez-le par rapport aux règles de nouvelle tentative documentées.
- Ne répétez pas les réponses 400, 401, 402, 403, 404 ou 413 sans modification.
- Réessayez après une erreur 429 selon le délai fourni par le serveur.
- Réessayez les erreurs 500–504 uniquement lorsque
retryableesttrue, et respectezretry_after. - Une erreur
503 all_channels_failedpeut revenir avecretryable: false. Dans ce cas, l'opération n'a pas de disponibilité dans le niveau de livraison sélectionné, donc la répéter ne servira à rien.
Enregistrez l'ID de requête (Request ID) provenant des en-têtes de réponse avec le modèle et votre propre ID de travail. C'est ce dont vous aurez besoin pour une enquête.
Facturation
Un seul solde fonctionne sur tous les modèles, sans abonnement ni dépense minimale, selon le guide de facturation. Chaque requête terminée est facturée une fois, pour l'option de livraison qui l'a produite. Les options sont TokenLab Verified, Official et Auto ; Auto essaie d'abord Verified, puis Official. Définissez une limite de dépenses sur chaque clé API si vous souhaitez un arrêt strict. Lorsque la limite est atteinte, les requêtes avec cette clé renvoient 402.
Les réponses compatibles OpenAI sans streaming incluent billing_transaction_id lorsque la facturation se termine avant l'envoi de la réponse. Il peut également apparaître dans l'en-tête X-Billing-Transaction-ID. Stockez-le et réconciliez-le avec la page Usage plutôt qu'avec vos propres calculs de tokens.
Liste de contrôle de vérification après la migration d'OpenAI vers TokenLab
Exécutez ces étapes dans l'ordre avec une clé de staging avant de déplacer le trafic de production. Chaque ligne correspond à un comportement documenté ci-dessus.
| Étape | Action | Résultat attendu |
|---|---|---|
| 1. Découverte du modèle | GET /v1/models/gpt-5.5 (aucune clé requise) |
Cycle de vie active et les formats acceptés que vous prévoyez d'utiliser |
| 2. Requête authentifiée | L'exemple Python ou cURL ci-dessus | Une réponse non vide ; la requête apparaît dans la vue Requests avec le modèle, le statut et l'utilisation |
| 3. Champs d'utilisation | Lire usage sur une réponse sans streaming |
prompt_tokens, completion_tokens, total_tokens |
| 4. Streaming | stream: true avec include_usage: true |
Morceaux SSE, puis l'utilisation ; un flux interrompu est traité comme incomplet |
| 5. Appels d'outils | Vos tools et tool_choice réels |
Les arguments sont analysés et correspondent à votre schéma |
| 6. Vision ou mode JSON | Uniquement si le modèle liste vision ou json-mode |
Sortie attendue ; ignorez le test si la capacité n'est pas listée |
| 7. Mauvaise clé | Requête avec une clé supprimée ou erronée | 401 invalid_api_key |
| 8. Pas de solde ou limite de clé | Utiliser une clé avec une limite basse ou un espace de travail vide | 402 insufficient_balance ou quota_exceeded |
| 9. Restriction de modèle | Restreindre la liste des modèles d'une clé, puis demander un autre modèle | 403 model_not_allowed |
| 10. Timeout et retry | Forcer un timeout en staging | Votre code réessaie uniquement selon retryable et retry_after |
| 11. Facturation | Comparer billing_transaction_id et l'Usage avec votre estimation |
La charge correspond au prix actuel du modèle et aux tokens enregistrés |
Une fois le tableau validé, modifiez votre configuration de production et déployez. Gardez l'ancienne clé OpenAI active jusqu'à ce que l'Usage confirme que le nouveau chemin est stable.
Questions fréquemment posées
Dois-je changer les noms de mes modèles lorsque je quitte OpenAI ?
Pas nécessairement, mais confirmez chacun d'eux. Les ID de modèles TokenLab sont des chaînes exactes, vérifiez-les donc avec GET /v1/models ou GET /v1/models/{model}. Au 03/10/2026, l'API en direct listait gpt-5.5 comme actif. Si une requête renvoie model_not_found, l'ID est inconnu ou indisponible. Lisez la liste des modèles et utilisez un ID actuel.
Le streaming et les appels d'outils se comporteront-ils exactement comme l'API d'OpenAI ?
TokenLab documente le streaming via SSE et l'appel de fonction via le format de requête compatible OpenAI. La documentation indique également que les options prises en charge dépendent du modèle sélectionné. Nous traitons donc le résultat comme compatible, et non identique. Testez le streaming, tools, tool_choice et tout response_format que vous utilisez avec le modèle spécifique que vous prévoyez d'exécuter.
Quel code de statut est renvoyé lorsque mon solde est épuisé ?
Vous obtenez un HTTP 402 avec le code insufficient_balance. Une clé qui a atteint sa propre limite de dépenses renvoie également 402, avec quota_exceeded. Une clé manquante, invalide ou révoquée renvoie 401. Ne réessayez aucune de ces erreurs sans modification. Rechargez le solde, augmentez la limite de la clé ou remplacez la clé.
Puis-je appeler des modèles Claude ou Gemini depuis le même client OpenAI ?
Le catalogue de modèles liste claude-sonnet-5 et gemini-3.5-flash avec openai_chat_completions parmi leurs formats de requête. Le chat de base peut donc passer par le même client. Les champs spécifiques à Claude tels que les blocs de réflexion et l'utilisation d'outils Claude appartiennent à /v1/messages. Les champs natifs de Gemini restent sur la route /v1beta. Gardez un format d'API par conversation.
Commencez à construire sur TokenLab
Créez une clé sur TokenLab, définissez l'URL de base sur https://api.tokenlab.sh/v1 et exécutez la requête du Quickstart avant de toucher à la production.
Sources
Prix observé le 2026-10-03
- TokenLab Docs: QuickstartObservé le 2026-10-03
- TokenLab Docs: AuthenticationObservé le 2026-10-03
- TokenLab Docs: Migration GuidesObservé le 2026-10-03
- TokenLab Docs: SDKs & LibrariesObservé le 2026-10-03
- TokenLab Docs: API formatsObservé le 2026-10-03
- TokenLab Docs: Handle API errorsObservé le 2026-10-03
- TokenLab Docs: Billing and pricingObservé le 2026-10-03
- TokenLab Docs: Create Chat CompletionObservé le 2026-10-03



