/v1/modelsLister les modèles
Identifiants publics avec capacités, longueur de contexte et prix.
TokenAPI prend en charge les formats Chat Completions et Responses d'OpenAI et le format Messages d'Anthropic. Utilisez les SDK officiels tels quels et choisissez un identifiant dans la liste des modèles.
https://tokenapi.biz/v1
Tous les endpoints :
/v1/modelsIdentifiants publics avec capacités, longueur de contexte et prix.
/v1/models/{id}Un objet modèle unique.
/v1/chat/completionsFormat Chat Completions d'OpenAI, avec ou sans streaming.
/v1/responsesFormat Responses d'OpenAI (sans état), avec ou sans streaming.
/v1/messagesFormat Messages d'Anthropic, pour le SDK Anthropic.
curl https://tokenapi.biz/v1/chat/completions \
-H "Authorization: Bearer $TOKENAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "tokenapi-pro",
"messages": [{ "role": "user", "content": "Hello!" }]
}'import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://tokenapi.biz/v1",
apiKey: process.env.TOKENAPI_KEY,
});
const res = await client.chat.completions.create({
model: "tokenapi-pro",
messages: [{ role: "user", content: "Hello!" }],
});
console.log(res.choices[0].message.content);import os
from openai import OpenAI
client = OpenAI(base_url="https://tokenapi.biz/v1", api_key=os.environ["TOKENAPI_KEY"])
res = client.chat.completions.create(
model="tokenapi-pro",
messages=[{"role": "user", "content": "Hello!"}],
)
print(res.choices[0].message.content)Authorization: Bearer sk-tk-…
L'en-tête x-api-key façon Anthropic est aussi accepté. Les clés commencent par sk-tk-, ne sont affichées qu'une fois à la création et peuvent être limitées individuellement (requêtes par minute, plafond de dépense, modèles autorisés, expiration). Gardez vos clés côté serveur ; ne les intégrez jamais dans du code navigateur ou mobile. Pour obtenir une clé, écrivez à hello@tokenapi.biz.
Utilisez l'id renvoyé par GET /v1/models comme paramètre model. Un identifiant de modèle est un produit stable : nous pouvons améliorer ou changer le backend qui le sert pour garantir qualité et disponibilité, sans aucun changement de votre côté. Les réponses indiquent toujours l'identifiant appelé.
{
"object": "list",
"data": [
{
"id": "tokenapi-pro",
"object": "model",
"owned_by": "tokenapi",
"display_name": "TokenAPI Pro",
"capabilities": ["streaming", "tools", "json_output"],
"context_length": 131072,
"pricing": {
"currency": "USD",
"prompt": "0.0000015",
"completion": "0.000006",
"input_per_million": 1.5,
"output_per_million": 6
}
}
]
}pricing.prompt / pricing.completion sont en USD par token (chaînes) ; input_per_million / output_per_million sont en USD par million de tokens.
Requête et réponse suivent le format OpenAI : messages avec texte et images, tools / tool_choice, response_format, temperature, top_p, stop, max_tokens ou max_completion_tokens. Chaque réponse porte un en-tête x-request-id ; indiquez-le lorsque vous contactez le support.
Si vous omettez max_tokens, la longueur de sortie maximale du modèle s'applique.
Indiquez stream: true. Les fragments arrivent sous forme de lignes data: et le flux se termine par data: [DONE]. Ajoutez stream_options.include_usage pour recevoir la consommation de tokens dans un dernier fragment.
const stream = await client.chat.completions.create({
model: "tokenapi-pro",
messages: [{ role: "user", content: "Write a haiku." }],
stream: true,
stream_options: { include_usage: true }, // final chunk carries usage
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}Prend en charge un input chaîne ou tableau, instructions, les outils de fonction, text.format (JSON Schema) et la séquence complète d'événements de streaming (response.output_text.delta, response.completed, …).
const res = await client.responses.create({
model: "tokenapi-pro",
instructions: "Answer in one sentence.",
input: "What is a token?",
});
console.log(res.output_text);Pour le code écrit avec le SDK Anthropic. Prend en charge system, les blocs texte et image, tools avec tool_use / tool_result et les événements de streaming. Les erreurs suivent le format Anthropic.
import Anthropic from "@anthropic-ai/sdk";
const anthropic = new Anthropic({
baseURL: "https://tokenapi.biz", // SDK appends /v1/messages
apiKey: process.env.TOKENAPI_KEY,
});
const msg = await anthropic.messages.create({
model: "tokenapi-pro",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello!" }],
});{
"error": {
"message": "The model 'nope' does not exist or is disabled.",
"type": "invalid_request_error",
"code": "model_not_found",
"param": null
}
}invalid_request_errorJSON mal formé, model/messages manquant ou paramètre non pris en charge.
invalid_api_keyClé API absente, erronée, désactivée ou expirée.
insufficient_quotaLe solde ne couvre pas le coût maximal de cette requête, ou le plafond de dépense de la clé est atteint. Rechargez ou réduisez max_tokens.
model_not_allowedCette clé est limitée à d'autres modèles.
model_not_foundIdentifiant de modèle inconnu ou désactivé. Listez les identifiants valides avec GET /v1/models.
rate_limit_exceededLimite de requêtes par minute de la clé dépassée. Réessayez après le délai indiqué par l'en-tête Retry-After.
upstream_unavailableToutes les routes de backend de ce modèle ont échoué. Vous pouvez réessayer sans risque.
Les échecs du fournisseur sont automatiquement relancés sur une autre route avant que vous ne voyiez une erreur. Un 502 signifie que toutes les routes ont échoué et que rien ne vous a été facturé.
max_tokens) est réservé sur votre solde. Si le solde est insuffisant, vous recevez un 402 et rien n'est envoyé au fournisseur.Retry-After./v1/responses : previous_response_id (envoyez plutôt la conversation complète), les outils intégrés comme web_search et les entrées file_id./v1/messages : le thinking étendu et cache_control sont ignorés.n > 1 sur Chat Completions.