TokenAPIDocumentation de l'API
Référence de l'API

Intégrez en deux lignes : base URL et clé API.

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.

Démarrage rapide

Base URL

https://tokenapi.biz/v1

Tous les endpoints :

GET/v1/models

Lister les modèles

Identifiants publics avec capacités, longueur de contexte et prix.

GET/v1/models/{id}

Obtenir un modèle

Un objet modèle unique.

POST/v1/chat/completions

Chat Completions

Format Chat Completions d'OpenAI, avec ou sans streaming.

POST/v1/responses

Responses

Format Responses d'OpenAI (sans état), avec ou sans streaming.

POST/v1/messages

Messages

Format Messages d'Anthropic, pour le SDK Anthropic.

curl
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!" }]
  }'
Node.js · openai
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);
Python · openai
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)
Authentification

Envoyez votre clé en jeton Bearer.

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.

Modèles

Des identifiants de modèle stables.

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é.

GET /v1/models
{
  "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.

POST /v1/chat/completions

Chat Completions

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.

Streaming

Server-sent events

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.

Node.js
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 ?? "");
}
POST /v1/responses

Responses API

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, …).

Node.js
const res = await client.responses.create({
  model: "tokenapi-pro",
  instructions: "Answer in one sentence.",
  input: "What is a token?",
});
console.log(res.output_text);
POST /v1/messages

Anthropic Messages

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.

Node.js · @anthropic-ai/sdk
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!" }],
});
Erreurs

Objets d'erreur au format OpenAI

Exemple
{
  "error": {
    "message": "The model 'nope' does not exist or is disabled.",
    "type": "invalid_request_error",
    "code": "model_not_found",
    "param": null
  }
}
400invalid_request_error

JSON mal formé, model/messages manquant ou paramètre non pris en charge.

401invalid_api_key

Clé API absente, erronée, désactivée ou expirée.

402insufficient_quota

Le 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.

403model_not_allowed

Cette clé est limitée à d'autres modèles.

404model_not_found

Identifiant de modèle inconnu ou désactivé. Listez les identifiants valides avec GET /v1/models.

429rate_limit_exceeded

Limite 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.

502upstream_unavailable

Toutes 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é.

Facturation et limites

Prépayé, au token, jamais à découvert.

  • Les prix sont fixés par modèle, en USD par million de tokens d'entrée et de sortie (voir Modèles).
  • Avant l'exécution d'une requête, son coût maximal possible (prompt plus max_tokens) est réservé sur votre solde. Si le solde est insuffisant, vous recevez un 402 et rien n'est envoyé au fournisseur.
  • À la fin de la requête, les tokens réels sont facturés et le reste de la réservation est libéré immédiatement.
  • Les requêtes qui échouent avant que le modèle ne commence à répondre (toute réponse d'erreur 4xx/5xx) ne sont pas facturées. Si un flux est annulé ou interrompu en cours de route, seuls les tokens déjà générés sont facturés.
  • Les limites de débit s'appliquent par clé API, en requêtes par minute ; au-delà, vous recevez un 429 avec Retry-After.
Compatibilité

Pas encore pris en charge

  • /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.
Des questions ? Contactez-nous