Démarrer
Compatibilité OpenAI et Anthropic
Ce que l'API Tukai reprend des API OpenAI et Anthropic, ce qu'elle ne reprend pas, et ce qu'il faut changer dans une intégration existante.
Vérifié le 4 octobre 2026Version MarkdownSignaler une erreur sur cette page
L'API Tukai imite quatre opérations des API OpenAI et Anthropic, pour que les SDK officiels fonctionnent sans être modifiés. Elle n'est pas une copie complète de ces API : toute opération absente de cette page n'existe pas chez Tukai.
Ce qui change dans votre intégration
| Réglage | SDK OpenAI | SDK Anthropic |
|---|---|---|
| URL de base | https://chat.tuk-ai.com/v1 | https://chat.tuk-ai.com (le SDK ajoute lui-même /v1) |
| Clé | tuk_sk_… dans apiKey | tuk_sk_… dans apiKey |
| Identifiant de modèle | Un identifiant Tukai, par exemple chat-anthropic-claude-haiku-4-5 | Le même identifiant Tukai |
Les identifiants de modèle sont ceux de Tukai, jamais ceux du fournisseur d'origine : gpt-… ou claude-… seuls sont refusés. La liste est sur la page Modèles.
Le reste du code (messages, max_tokens, lecture de la réponse) ne change pas pour un appel de texte simple.
Opérations disponibles
| Opération | Forme | État |
|---|---|---|
POST /v1/chat/completions | OpenAI | Pris en charge texte, avec ou sans stream |
POST /v1/messages | Anthropic | Pris en charge texte, avec ou sans stream ; max_tokens obligatoire |
POST /v1/messages/count_tokens | Anthropic | Pris en charge estimation locale, gratuite, sans appel au modèle |
GET /v1/models | Catalogue Tukai | Partiel public et sans clé ; les objets ont des champs Tukai (display_name, available…) en plus de id |
POST /v1/responses, embeddings, images, audio, files, batches, assistants | OpenAI | Non pris en charge |
GET /v1/models/{id}, Message Batches, Files | Anthropic | Non pris en charge |
Fonctions avancées
| Fonction | État | Précision |
|---|---|---|
| Streaming (SSE) | Partiel | Codé et couvert par les tests du dépôt ; pas encore exécuté contre la production dans le cadre de cette documentation. Côté OpenAI, le flux se termine par data: [DONE]. |
| Images ou audio en entrée | Non pris en charge | Les parties image_url ou input_audio sont ignorées : la requête répond quand même, à partir du seul texte. N'envoyez pas d'image en comptant sur une analyse. |
Outils (tools) côté OpenAI | Non pris en charge | La réponse chat.completion ne contient que du texte (message.content), jamais tool_calls. |
Outils (tools) côté Anthropic | Non testé | La traduction tool_use ↔ tool_calls existe dans le code ; elle n'a pas été vérifiée de bout en bout ici. |
finish_reason côté OpenAI | Partiel | Vaut toujours stop, même quand la sortie a été coupée par max_tokens. |
Sortie structurée (response_format, JSON schema) | Non pris en charge | Ignorée sans avertissement : seuls model, messages (texte) et max_tokens sont transmis au modèle. |
temperature, top_p, stop et autres réglages OpenAI | Non pris en charge | Acceptés par la validation mais ignorés sans avertissement. |
thinking, cache_control, outils côté serveur Anthropic | Non pris en charge | Non portés ; signalés comme avertissement côté serveur. |
| Appel direct depuis un navigateur | Non pris en charge | Usage non pris en charge : une clé ne doit jamais se trouver dans du code exécuté chez vos utilisateurs. |
En-têtes
| En-tête | Effet |
|---|---|
Authorization: Bearer tuk_sk_… | Forme canonique (SDK OpenAI). |
x-api-key: tuk_sk_… | Accepté (SDK Anthropic). Envoyez l'un ou l'autre, pas les deux : par l'URL publiée, seul Authorization est retenu quand les deux sont présents. |
anthropic-version, anthropic-beta | Acceptés, non transmis au fournisseur. |
x-request-id (réponse) | Identifiant de la requête, sur chaque réponse. Le SDK OpenAI l'expose (requestID en TypeScript) ; le SDK Anthropic ne le lit pas, il faut le relever dans les en-têtes HTTP. |
ratelimit-limit, ratelimit-remaining, ratelimit-reset (réponse) | État du débit de la clé. |
Erreurs
Les erreurs gardent l'enveloppe du fournisseur imité ({"error": {...}} pour OpenAI, {"type": "error", "error": {...}} pour Anthropic), pour que le SDK les lise normalement. Selon la cause, le message est en anglais ou en français : lisez le champ type. Détail des codes : Erreurs.
Versions vérifiées
Le 3 octobre 2026, contre la production, sans appel payant (clé volontairement invalide) :
openai7.27.0 (Node.js) :models.list()répond ;chat.completions.create()atteint la bonne route et lèveAuthenticationError(401).@anthropic-ai/sdk0.131.0 (Node.js) :messages.create()atteint la bonne route et lèveAuthenticationError(401).