Référence de l'API
SUB&SUB expose un relais multi-fournisseurs sur https://api.subnsub.com/v1. Les clients OpenAI appellent /v1/chat/completions ; les clients Anthropic appellent /v1/messages. La même clé sk-cf-... route les deux — choisis le modèle dans le corps de la requête et le relais choisit l'upstream.
Disponibilité du service
Démarrage rapide
Pour un compte existant autorisé à utiliser l’API, trois éléments sont nécessaires :
- URL de base :
https://api.subnsub.com/v1(clients OpenAI) ouhttps://api.subnsub.com(clients Anthropic — le SDK ajoute lui-même/v1/messages) - Clé API :
sk-cf-...émise depuis la console - Model : l'un des 16 modèles pris en charge — par ex.
gpt-5.4-miniouclaude-sonnet-5
Authentification
Chaque requête doit porter un en-tête Authorization: Bearer sk-cf-.... Les clés sont émises depuis la console et stockées sous forme de hachages SHA-256 — une fois que tu quittes l'écran de création, le texte clair est perdu pour toujours, alors enregistre-le immédiatement.
Endpoints
La surface publique stable est décrite ci-dessous et dans le document OpenAPI 3.1 lisible par machine. Les champs non répertoriés peuvent être transmis au fournisseur, mais ne font pas automatiquement partie du contrat de compatibilité de SUB&SUB.
POST /v1/chat/completions
Envoie une requête de complétion de chat. Le format de la requête correspond à l'API Chat Completions d'OpenAI — les SDK OpenAI fonctionnent sans modification.
| Paramètre | Type | Description |
|---|---|---|
| model | string | L'un des ID de modèles vérifiés. |
| messages | array | Historique de la conversation. Chaque élément : {role, content} avec role ∈ system / user / assistant. |
| stream | boolean | Si true, la réponse est envoyée sous forme de chunks SSE. Voir Streaming. |
| stream_options | object | Optionnel. Le relais force toujours {include_usage: true} vers l'upstream pour que le chunk final porte le bloc d'usage des tokens — le surcharger n'a aucun effet. |
| max_tokens | integer | Limite la longueur de la complétion. Par défaut, le maximum du modèle. |
| temperature | number | 0 – 2. Plus élevé = plus aléatoire. |
POST /v1/responses
OpenAI Responses API — la nouvelle forme de demande OpenAI (client.responses.create(...)). Fonctionne avec tous les modèles de catalogue : gpt-* nativement, claude-* via le même pont de compatibilité que le chat/les complétions. L'utilisation est mesurée de manière identique : jetons d'entrée/sortie au tarif de niveau du modèle.
| Paramètre | Type | Description |
|---|---|---|
| model | string | Tout modèle de catalogue ID. |
| input | string | array | L'invite - une chaîne simple ou la liste d'éléments structurés définie par Responses API. |
| max_output_tokens | integer | Limite la longueur de réponse (raisonnement + sortie visible combinés). |
| reasoning | object | {"effort": "..."} — les cinq mêmes valeurs que reasoning_effort. |
| stream | boolean | Si true, diffuse la séquence de réponses standard SSE : response.created, response.output_text.delta, …, response.completed. |
| background | boolean | Non pris en charge. background: true renvoie 400 unsupported_background_mode — le relais ne sert qu'à des courses synchrones. |
:online n'a aucun effet sur ce point de terminaison : le suffixe est supprimé mais aucun contexte de recherche n'est injecté (les requêtes sont extraites de messages, que les requêtes Responses ne transportent pas). Utilisez /v1/chat/completions ou /v1/messages pour recherche Web.
Exemple Responses exécutable :
curl https://api.subnsub.com/v1/responses \
-H "Authorization: Bearer sk-cf-xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.4-mini",
"input": "Explain exponential backoff in two sentences."
}'
POST /v1/messages
Endpoint Anthropic natif pour les modèles claude-* — le SDK Anthropic (anthropic-sdk-python, @anthropic-ai/sdk, claude-code) fonctionne sans modification sur ce chemin. Pointe ton URL de base vers https://api.subnsub.com et authentifie-toi via l'en-tête x-api-key (la forme Authorization-Bearer fonctionne aussi, si ton client la préfère).
| Paramètre | Type | Description |
|---|---|---|
| model | string | Un ID de modèle claude-* (voir Modèles disponibles). Passer un modèle OpenAI ici renvoie 400 invalid_request_error. |
| max_tokens | integer | Requis par Anthropic — limite la longueur de la réponse de l'assistant. |
| messages | array | Historique de la conversation, format Anthropic : {role, content} avec role ∈ user / assistant. |
| stream | boolean | Si true, renvoie la séquence d'événements SSE standard d'Anthropic : message_start, content_block_delta, message_delta, message_stop. |
| thinking | object | Transmis textuellement à Anthropic. Utilisez {"type":"adaptive"} là où il est pris en charge ; Fable 5 utilise toujours la pensée adaptative même lorsque ce champ est omis. Il n’existe pas d’ID de modèle synthétique -thinking. |
| cache_control | object | Le prompt-caching est pris en charge. Les tokens d'écriture de cache sont facturés à 1.25× et les tokens de lecture de cache à 0.10× du tarif d'entrée du tier. |
Exemple Anthropic Messages exécutable :
curl https://api.subnsub.com/v1/messages \
-H "x-api-key: sk-cf-xxxxxxxxxxxx" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-5",
"max_tokens": 256,
"messages": [{"role": "user", "content": "Hello"}]
}'
POST /v1/messages/count_tokens
Comptez un prompt au format Anthropic avant de l’envoyer. Utilisez les mêmes champs x-api-key, anthropic-version, model, system, messages et tools que pour /v1/messages. Ce point de terminaison n’est pas facturé. Le suffixe :online est retiré, mais aucun résultat de recherche n’est récupéré ni compté.
curl https://api.subnsub.com/v1/messages/count_tokens \
-H "x-api-key: sk-cf-xxxxxxxxxxxx" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-5",
"messages": [{"role": "user", "content": "Count this prompt."}]
}'
GET /v1/models
Listez les modèles que vous pouvez réellement utiliser. Le relais vérifie l'état des deux familles en amont et renvoie les 16 identifiants publics vérifiés - la même liste blanche que les points de terminaison POST appliquent, de sorte que la découverte n'annonce jamais un modèle qui serait 400. Si le catalogue en amont est inaccessible, le point de terminaison renvoie 502 models_unreachable plutôt qu'une liste vide trompeuse.
# sample response (truncated)
{
"object": "list",
"data": [
{ "id": "gpt-5.4-mini", "type": "model", ... },
{ "id": "gpt-5.4", "type": "model", ... },
{ "id": "claude-sonnet-5", "type": "model", ... },
{ "id": "claude-fable-5", "type": "model", ... },
...
]
}
Contrat de compatibilité
Compatible OpenAI ne signifie pas que tous les champs de tous les modèles upstream sont garantis sur chaque route. Trois niveaux de prise en charge s’appliquent :
| Statut | Détail |
|---|---|
| Documenté et stable | Génération de texte sur les quatre points de terminaison ci-dessus ; réponses synchrones et en streaming ; contrôles de raisonnement documentés ; cache de prompts Anthropic ; :online sur Chat Completions et Messages ; authentification, mesure et formats d’erreur documentés. |
| Transmission, selon le modèle | Appels d’outils/fonctions, outils stricts, sortie structurée / JSON Schema, contrôles d’échantillonnage, séquences d’arrêt, contenu multipartie (images ou documents compris) et limites de contexte/sortie. L’edge transmet ces champs sans validation locale, mais la prise en charge et la forme exacte de la réponse varient selon le modèle et le protocole. Testez précisément votre modèle et votre payload avant la production ; aucune normalisation entre fournisseurs n’est garantie. |
| Non proposé | Exécutions Responses en arrière-plan ; :online sur Responses ; API OpenAI de génération d’images, audio, Realtime, Batch, Files, Embeddings et Moderation ; alias Claude synthétiques en -thinking ; et effort de raisonnement OpenAI minimal. |
Modèles disponibles
Deux familles en amont. Les 7 modèles OpenAI mènent à des comptes partagés de niveau ChatGPT ; les 9 modèles Claude sont desservis par des comptes officiels Anthropic. Les tarifs par jeton dépendent du niveau (voir Pricing) — la même clé fonctionne pour les deux.
OpenAI
| ID du modèle | Famille | Tier | Notes |
|---|---|---|---|
| gpt-5.4-mini | GPT-5.4 | Mini | Rapide & économique. Défaut recommandé pour le chat & le coding. |
| gpt-5.4 | GPT-5.4 | Standard | GPT-5.4 pleine taille — plus lent, raisonnement plus solide. |
| gpt-5.4-2026-03-05 | GPT-5.4 | Standard | Instantané daté de gpt-5.4. |
| gpt-5.5 | GPT-5.5 | Premium | Nouveau modèle phare. |
| gpt-5.6-luna | GPT-5.6 | Luna | Léger GPT-5.6 — entre Mini et Standard. |
| gpt-5.6-terra | GPT-5.6 | Standard | Taille moyenne GPT-5.6 — même tarif que gpt-5.4. |
| gpt-5.6-sol | GPT-5.6 | Premium | Top GPT-5.6 — même tarif que gpt-5.5. |
Anthropic
| ID du modèle | Famille | Tier | Notes |
|---|---|---|---|
| claude-fable-5 | Fable 5 | Fable | Le modèle le plus performant de Anthropic largement diffusé ; la pensée adaptative est toujours active. |
| claude-haiku-4-5-20251001 | Haiku 4.5 | Mini | Le plus petit Claude — même tarif par token que gpt-5.4-mini. |
| claude-sonnet-4-5-20250929 | Sonnet 4.5 | Standard | Claude de milieu de gamme — même tarif par token que gpt-5.4. |
| claude-sonnet-4-6 | Sonnet 4.6 | Standard | Nouveau réglage de Sonnet — tier Standard, même tarif que sonnet-4.5. |
| claude-sonnet-5 | Sonnet 5 | Sonnet 5 Intro | Dernier Sonnet ; le prix de lancement s’applique jusqu’au 31 août 2026. |
| claude-opus-4-5-20251101 | Opus 4.5 | Ultra | Claude de pointe. Facturé au tarif public d'Anthropic — sans marge (voir Tarifs). |
| claude-opus-4-6 | Opus 4.6 | Ultra | Nouveau réglage d'Opus. |
| claude-opus-4-7 | Opus 4.7 | Ultra | Instantané d'Opus précédent. |
| claude-opus-4-8 | Opus 4.8 | Ultra | Dernier instantané d'Opus. |
200 avec stop_reason: "refusal" et un tableau de contenu vide. Les clients doivent se connecter au statut stop_reason, et non au statut HTTP uniquement, et réessayer la demande avec claude-opus-4-8. Grâce aux points de terminaison du protocole OpenAI, le même résultat est exposé sous la forme finish_reason: "content_filter" (discussion/achèvements) ou status: "incomplete" avec incomplete_details.reason: "content_filter" (réponses). Les refus rapides ne sont pas déduits de votre solde ; un refus à mi-parcours après une production partielle est normalement facturé.
gpt-5.2* et gpt-5.3-codex*), l'alias gpt-5.6 nu (utilisez les variantes nommées ci-dessus), les variantes OpenAI Pro/image/audio/realtime, les identifiants de notation par points (par exemple claude-sonnet-4.5) et les identifiants de modèle synthétiques -thinking ne sont pas disponibles. Utilisez les identifiants exacts ci-dessus et le champ thinking natif de Anthropic.
Effort de raisonnement
Chaque modèle OpenAI ci-dessus est un modèle de raisonnement — le backend peut dépenser plus ou moins de jetons de « réflexion » avant d'émettre une sortie visible. Définissez reasoning_effort sur le corps de la demande OpenAI /v1/chat/completions (ou reasoning: {"effort": ...} sur /v1/responses) pour contrôler le budget. Pour Claude, utilisez les champs Anthropic-natifs thinking et output_config.effort — voir la section /v1/messages. Les modèles OpenAI acceptent les mêmes cinq valeurs d'effort :
| Valeur | Comportement |
|---|---|
| none | Aucune réflexion — directement à la réponse. Le moins cher et le plus rapide. |
| low | Une courte passe de raisonnement. |
| medium | Défaut si tu ne passes pas le champ. Équilibré. |
| high | Raisonnement plus approfondi. Recommandé pour le coding non trivial / les problèmes à plusieurs étapes. |
| xhigh | Effort maximal. Le plus lent et le plus coûteux ; réserve-le aux analyses difficiles où tu en as vraiment besoin. |
# Two equivalent forms — pick whichever your SDK supports
{
"model": "gpt-5.4-mini",
"reasoning_effort": "high",
"messages": [ ... ]
}
{
"model": "gpt-5.5",
"reasoning": { "effort": "xhigh" },
"messages": [ ... ]
}
'minimal', mais les modèles de ce relais le rejettent : « 'minimal' is not supported with this model ». Tiens-t'en aux cinq valeurs ci-dessus.
Streaming
Définis "stream": true pour recevoir des Server-Sent Events. Le chunk final porte un bloc usage (nous forçons stream_options.include_usage en upstream pour que les comptes de tokens soient toujours émis), puis un data: [DONE] littéral ferme le flux.
# Streaming format (line by line)
data: {"id":"resp_...","choices":[{"delta":{"content":"Hi"}}]}
data: {"id":"resp_...","choices":[{"delta":{"content":"!"}}]}
data: {"id":"resp_...","choices":[],"usage":{"prompt_tokens":18,"completion_tokens":11,"total_tokens":29}}
data: [DONE]
Exemple Python de streaming exécutable :
from openai import OpenAI
client = OpenAI(
api_key="sk-cf-xxxxxxxxxxxx",
base_url="https://api.subnsub.com/v1",
)
stream = client.chat.completions.create(
model="gpt-5.4-mini",
messages=[{"role": "user", "content": "Hello"}],
stream=True,
)
for chunk in stream:
text = chunk.choices[0].delta.content if chunk.choices else None
if text:
print(text, end="", flush=True)
Recherche web
Ajoute :online à n'importe quel ID de modèle pris en charge par l'endpoint et le relais lancera une recherche web avant de transmettre au modèle, en préfixant la conversation avec les résultats pour que la réponse s'appuie sur des données fraîches. Le suffixe fonctionne sur /v1/chat/completions et /v1/messages (ce dernier exige toujours une base claude-*) ; aucun champ de requête spécifique à la recherche n'est requis.
# Same call as before — just :online on the model
curl https://api.subnsub.com/v1/chat/completions \
-H "Authorization: Bearer sk-cf-xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.4-mini:online",
"messages": [
{"role": "user", "content": "What did Anthropic ship this week?"}
]
}'
Comment ça marche : le relais retire :online, prend le message utilisateur le plus récent comme requête (limité à 400 caractères), appelle Tavily pour un maximum de 3 résultats avec le texte de page extrait lorsqu'il est disponible, plus un résumé optionnel généré par Tavily, puis les préfixe à ce même tour utilisateur sous forme de bloc <search_results> clairement délimité avant d'envoyer la requête à l'upstream. L'appel de recherche a un délai d'expiration de 8 secondes. Les résultats sont délibérément injectés dans le rôle utilisateur — jamais dans le prompt système — afin que des extraits non fiables ne puissent pas être élevés au rang d'instructions de priorité système.
Le bloc <search_results> ressemble à ceci. Il est précédé d'une instruction sur une ligne indiquant au modèle de traiter le bloc comme des données externes non fiables et de citer les éléments numérotés en ligne :
<search_results query="What did Anthropic ship this week?" retrieved="2026-05-21">
Summary: <short LLM-generated synthesis of the result set>
[1] Anthropic launches Opus 4.8
URL: https://www.anthropic.com/news/opus-4-8
<extracted page text, or short snippet if extraction failed — up to ~2000 chars>
[2] ...
</search_results>
| Comportement | Détail |
|---|---|
| Coût | Aucun supplément aujourd'hui — tu paies le tarif par token normal du modèle ; le relais absorbe l'appel de recherche. Le bloc <search_results> injecté compte bien comme des tokens d'entrée, alors attends-toi à une facture de tokens de prompt plus élevée que pour la même question sans :online. |
| Mode d'échec | Souple. Si Tavily expire ou échoue, la requête continue vers le modèle sans contexte de recherche (tu obtiens quand même une réponse, simplement non étayée). Le seul échec dur est 503 search_unavailable lorsque la recherche n'est pas du tout configurée sur le relais. |
| count_tokens | /v1/messages/count_tokens retire le suffixe mais n'appelle jamais Tavily — le compte reflète ton prompt original, pas le prompt augmenté. |
| Multi-tours | Seul le dernier tour utilisateur est interrogé & augmenté ; les tours précédents restent intacts. Pour rechercher à nouveau, envoie un nouveau message utilisateur avec :online toujours sur le modèle. |
Quand utiliser :online
Le relais effectue un seul appel Tavily par requête et injecte les résultats — ce n'est pas une boucle de recherche agentique. Le modèle ne décide pas de relancer une recherche en fonction de ce qu'il voit, comme le font Perplexity Sonar ou l'outil de navigation de ChatGPT. Planifie en tenant compte de cette limitation :
| Bon usage | Mauvais usage |
|---|---|
| Faits sensibles au temps (actualités, prix, numéros de version, dates de sortie) | Code privé ou collé qui n'est pas sur le web public — ajoute du bruit au prompt sans étayage |
| Localiser une doc ou une annonce officielle | Maths, raisonnement, traduction, écriture créative — rien à étayer |
| Tout ce que tu vérifierais autrement avec une recherche Google | Connaissances stables déjà présentes dans les données d'entraînement (« qu'est-ce qu'un arbre binaire ») |
Formule le dernier message utilisateur comme une requête de recherche autonome. La recherche s'effectue sur le texte littéral de ton tour utilisateur le plus récent (limité à 400 caractères), donc des relances conversationnelles comme « et qu'en est-il de la dernière version ? » deviennent des requêtes inutiles sans contexte. Dans un chat multi-tours, redonne le sujet quand tu ajoutes :online — par ex. « dernière version du SDK Python Anthropic » plutôt que « la dernière ».
Pour les questions nécessitant une synthèse en plusieurs étapes (comparaison, recherche approfondie), décompose-les en plusieurs tours et ajoute :online à chacun. Le modèle lira les résultats frais de chaque tour ; tu orientes manuellement la requête suivante. Note que le bloc <search_results> injecté n'est envoyé qu'à l'upstream — il n'est pas renvoyé à ton client et n'est pas conservé pour la requête suivante, donc si un tour ultérieur dépend de détails de sources antérieures, demande au modèle de les résumer dans sa réponse visible. Le mode recherche en une seule fois n'est pas pris en charge.
reasoning_effort: "high") pour que le modèle pèse réellement les sources retournées plutôt que de se reposer sur le premier résultat. L'instruction injectée demande au modèle de citer les sources numérotées sous la forme [1], [2] en ligne, donc la sortie portera généralement de telles citations — bien que le modèle ne soit pas strictement tenu de respecter ce format.
Erreurs
L'enveloppe dépend de l'endpoint que tu as appelé — le relais renvoie les erreurs dans le protocole correspondant au SDK de l'appelant, et les erreurs upstream sont transmises telles quelles.
Chemins OpenAI (/v1/chat/completions, /v1/responses, /v1/models) — enveloppe OpenAI :
{ "error": { "message": "...", "type": "...", "code": "..." } }
Chemins Anthropic (/v1/messages, /v1/messages/count_tokens) — enveloppe Anthropic :
{ "type": "error", "error": { "type": "...", "message": "..." } }
L'enveloppe Anthropic utilise un format différent — pas de champ code, et le discriminateur type: "error" est au niveau racine (avec l'error.type interne donnant la catégorie, par ex. authentication_error, invalid_request_error, permission_error, api_error). Les SDK Anthropic analysent déjà ce format ; les gestionnaires d'erreurs du SDK OpenAI standard ne le feront pas, alors appelle /v1/messages avec un SDK Anthropic (ou fais du HTTP brut).
Les codes de statut sont les codes HTTP canoniques dans les deux protocoles :
| Statut | OpenAI code / Anthropic error.type | Signification |
|---|---|---|
| 401 | invalid_api_key / authentication_error | Clé sk-cf-... manquante ou inconnue. |
| 402 | insufficient_balance / permission_error | Le solde du compte est négatif. Recharge dans l'onglet facturation de la console. |
| 403 | key_revoked / permission_error | La clé a été révoquée. |
| 403 | account_closed / permission_error | Le compte n'est pas activé pour l'accès API : les inscriptions après la date limite de service du 08/06/2026 n'incluent pas le service API. |
| 400 | model_not_available / invalid_request_error | Le model que tu as envoyé n'est pas dans le catalogue vérifié, ou est incorrect pour l'endpoint (par ex. un modèle OpenAI sur /v1/messages) — vérifie Modèles disponibles. |
| 400 | unsupported_background_mode / — | background: true sur /v1/responses — le relais ne dessert que les courses synchrones. Enveloppe OpenAI uniquement. |
| 429 | rate_limit_exceeded / rate_limit_error | La capacité upstream partagée est temporairement limitée. Respectez retry-after lorsqu’il est présent, puis réessayez avec un backoff exponentiel et du jitter. |
| 503 | — | Aucun compte upstream ne sert actuellement la requête — généralement une fenêtre de limitation de débit transitoire à l'échelle du pool. Réessaie après un court backoff. |
| 503 | search_unavailable / api_error | Tu as utilisé :online mais la recherche web n'est pas configurée sur ce relais. Voir Recherche web. |
| 502 | upstream_unreachable / api_error | Le relais n'a pas pu atteindre le backend. Réessaie après un court délai. |
| 500 | server_error / api_error | Le relais a échoué avant ou après le contact avec l’upstream. Ne réessayez que si l’opération peut être répétée sans risque ; sinon, consultez d’abord l’historique d’utilisation. |
Nouvelles tentatives et fiabilité
Limitez le nombre de tentatives. Le relais repose sur une capacité upstream partagée et les requêtes de génération ne sont pas idempotentes.
- Réessayer : les réponses
429,502,503et les500clairement transitoires. Respectezretry-after; sinon, utilisez un backoff exponentiel avec jitter (par exemple 1 s, 2 s, 4 s ; trois tentatives maximum). - Ne pas réessayer sans modification :
400,401,402ou403. Corrigez d’abord le payload, la clé, le solde ou l’état d’accès. - Risque de doublon : chaque génération réussie est une requête facturable distincte. SUB&SUB ne déduplique pas actuellement les POST de génération par clé d’idempotence ; conservez un identifiant d’opération côté application et ne réessayez pas après une réponse complète.
- Streaming : un flux SSE interrompu ne peut pas reprendre. Une reconnexion lance une nouvelle génération et peut entraîner une deuxième facturation.
Tarifs & facturation
Paiement à l'usage, facturé par token en microdollars (1 micro = $0.000001 = 1/10,000 de cent) pour que les requêtes inférieures au cent soient suivies précisément. Les tarifs sont par 1M tokens, par tier — voir le tableau des modèles pour savoir à quel tier chaque modèle correspond.
| Tier | Modèles | Entrée / 1M | Sortie / 1M |
|---|---|---|---|
| Mini | gpt-5.4-mini, claude-haiku-4-5-20251001 | $0.20 | $1.60 |
| Luna | gpt-5.6-luna | $0.30 | $2.40 |
| Standard | gpt-5.4, gpt-5.4-2026-03-05, gpt-5.6-terra, claude-sonnet-4-5-20250929, claude-sonnet-4-6 | $0.75 | $6.00 |
| Premium | gpt-5.5, gpt-5.6-sol | $1.10 | $8.80 |
| Sonnet 5 Intro | claude-sonnet-5 | $2.00 | $10.00 |
| Ultra | claude-opus-4-5-20251101, claude-opus-4-6, claude-opus-4-7, claude-opus-4-8 | $5.00 | $25.00 |
| Fable | claude-fable-5 | $10.00 | $50.00 |
Les tarifs Fable et Ultra correspondent aux prix catalogue publiés par Anthropic. Sonnet 5 utilise le tarif de lancement de 2 $/10 $ de Anthropic jusqu'au 31 août 2026 ; son prix standard publié après cette date est de 3 $/15 $. Les autres niveaux fonctionnent en dessous des tarifs en amont grâce au support d'abonnement mutualisé.
Les jetons de raisonnement (lorsque vous définissez reasoning_effort sur OpenAI, ou le champ thinking natif de Anthropic sur Claude) comptent comme des jetons output au taux de niveau du modèle - il n'y a pas de supplément distinct pour un effort élevé, mais une requête réfléchie peut facilement émettre 10 à 50 fois plus de jetons de sortie qu'un sans effort, donc le billet d'un dollar évolue avec lui.
Le prompt-caching Anthropic est facturé comme une ligne distincte : écritures de cache à 1.25× et lectures de cache à 0.10× du tarif d'entrée du tier. Ainsi, un cache hit haiku-4.5 coûte 0.20 × 0.10 = $0.02 per 1M tokens, et un cache hit sonnet-4.5 coûte 0.75 × 0.10 = $0.075 per 1M tokens. Les tokens de cache sont détaillés dans le relevé de facturation de chaque requête — la console affiche le détail.
Le solde est déduit en temps réel à mesure que chaque requête se termine — pour les requêtes en streaming, le règlement s'exécute après l'arrivée du chunk [DONE]. Consulte ton solde en direct et les règlements par requête sur /console#billing.
Limites de débit
Pas de limites de débit par clé aujourd'hui. La capacité upstream partagée et le throttling côté fournisseur s'appliquent toujours ; si tu les atteins, le relais renvoie 429 avec un en-tête retry-after. Les limites RPM / TPM par clé sont prévues.
État et assistance
- Les comptes connectés autorisés à utiliser l’API voient l’état des fournisseurs dans Console → État du service et les annonces opérationnelles dans Avis système.
- Pour toute aide relative au compte, à la facturation, à la confidentialité ou à la sécurité, écrivez à [email protected].
- Pour signaler une erreur API, indiquez l’horodatage UTC, le point de terminaison, le modèle, le statut HTTP et le préfixe visible de la clé. N’envoyez jamais la clé complète ni le contenu du prompt, sauf demande explicite d’une reproduction expurgée par l’assistance.
- Le service fonctionne au mieux de nos moyens et sans SLA. Consultez les Conditions d’utilisation, disponibles uniquement en anglais, pour la disponibilité et les remboursements, et la Politique de confidentialité pour le traitement des données.
Documentation révisée pour la dernière fois le 14 juillet 2026.