TokenAPIDocumentação da API
Referência da API

Integre em duas linhas: base URL e API key.

A TokenAPI fala os formatos Chat Completions e Responses da OpenAI e o formato Messages da Anthropic. Use os SDKs oficiais sem alterações e escolha um ID na lista de modelos.

Início rápido

Base URL

https://tokenapi.biz/v1

Todos os endpoints:

GET/v1/models

Listar modelos

IDs de modelo públicos com recursos, tamanho de contexto e preços.

GET/v1/models/{id}

Consultar um modelo

Um único objeto de modelo.

POST/v1/chat/completions

Chat Completions

Formato Chat Completions da OpenAI, com e sem streaming.

POST/v1/responses

Responses

Formato Responses da OpenAI (sem estado), com e sem streaming.

POST/v1/messages

Messages

Formato Messages da Anthropic, para o SDK da 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)
Autenticação

Envie sua key como token Bearer.

Authorization: Bearer sk-tk-…

O cabeçalho x-api-key no estilo Anthropic também é aceito. As keys começam com sk-tk-, são exibidas uma única vez na criação e podem ser limitadas individualmente (requisições por minuto, teto de gasto, modelos permitidos, expiração). Guarde as keys no servidor; nunca as coloque em código de navegador ou mobile. Para obter uma key, escreva para hello@tokenapi.biz.

Modelos

IDs de modelo estáveis.

Use o id retornado por GET /v1/models como parâmetro model. Um ID de modelo é um produto estável: podemos atualizar ou trocar o backend que o serve para manter a qualidade e a disponibilidade, sem nenhuma mudança do seu lado. As respostas sempre informam o ID chamado.

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 são USD por token (strings); input_per_million / output_per_million são USD por milhão de tokens.

POST /v1/chat/completions

Chat Completions

Requisição e resposta seguem o formato da OpenAI: messages com texto e imagens, tools / tool_choice, response_format, temperature, top_p, stop, max_tokens ou max_completion_tokens. Toda resposta traz o cabeçalho x-request-id; informe-o ao falar com o suporte.

Se você omitir max_tokens, vale o tamanho máximo de saída do modelo.

Streaming

Server-sent events

Defina stream: true. Os trechos chegam como linhas data: e o stream termina com data: [DONE]. Adicione stream_options.include_usage para receber o uso de tokens num último trecho.

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

Aceita input como string ou array, instructions, ferramentas de função, text.format (JSON Schema) e a sequência completa de eventos 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

Para código escrito com o SDK da Anthropic. Aceita system, blocos de texto e imagem, tools com tool_use / tool_result e eventos de streaming. Os erros seguem o formato da 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!" }],
});
Erros

Objetos de erro no estilo OpenAI

Exemplo
{
  "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 malformado, model/messages ausente ou parâmetro não suportado.

401invalid_api_key

API key ausente, incorreta, desativada ou expirada.

402insufficient_quota

O saldo não cobre o custo máximo desta requisição, ou o teto de gasto da key foi atingido. Recarregue ou reduza max_tokens.

403model_not_allowed

Esta key está restrita a outros modelos.

404model_not_found

ID de modelo desconhecido ou desativado. Consulte os IDs válidos com GET /v1/models.

429rate_limit_exceeded

Limite de requisições por minuto da key excedido. Tente de novo após o tempo indicado no cabeçalho Retry-After.

502upstream_unavailable

Todas as rotas de backend deste modelo falharam. É seguro tentar de novo.

Falhas do provedor são refeitas automaticamente em outra rota antes de você ver um erro. Um 502 significa que todas as rotas falharam e nada foi cobrado.

Cobrança e limites

Pré-pago, por token, sem saldo negativo.

  • Os preços são por modelo, em USD por milhão de tokens de entrada e de saída (veja Modelos).
  • Antes de uma requisição rodar, o custo máximo possível (prompt mais max_tokens) é reservado do seu saldo. Se o saldo não cobrir, você recebe um 402 e nada é enviado ao provedor.
  • Quando a requisição termina, são cobrados os tokens reais e o restante da reserva é liberado na hora.
  • Requisições que falham antes de o modelo começar a responder (qualquer resposta de erro 4xx/5xx) não são cobradas. Se um stream for cancelado ou interrompido no meio, só os tokens já gerados são cobrados.
  • Os limites de taxa são por API key, em requisições por minuto; ao excedê-los você recebe um 429 com Retry-After.
Compatibilidade

Ainda não suportado

  • /v1/responses: previous_response_id (envie a conversa completa), ferramentas nativas como web_search e entradas file_id.
  • /v1/messages: o thinking estendido e cache_control são ignorados.
  • n > 1 em Chat Completions.
Dúvidas? Fale com a gente