3Manual 3 de 6·3 minutos

Primeira chamada à API Tokia

Como fazer sua primeira chamada /v1/chat/completions com curl, Python e Node.js. Inclui validação que o evento apareceu em /dashboard/usage.

Você tem a key sk-tokia-... (do manual 02). Agora vamos testar com a chamada mais simples — pedindo um "oi" pro modelo Tokia Free Test (sem custo).

Versão curl (qualquer SO)

Cola no terminal. Substitui sk-tokia-... pela sua key:

curl https://api.usetokia.com/v1/chat/completions \
  -H "Authorization: Bearer sk-tokia-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "test-free",
    "messages": [{"role": "user", "content": "diga oi em 3 palavras"}],
    "max_tokens": 20
  }'

Resposta esperada (em ~3s):

{
  "id": "gen-...",
  "model": "openrouter/openai/gpt-oss-120b:free",
  "object": "chat.completion",
  "choices": [{
    "finish_reason": "stop",
    "message": {
      "content": "Olá tudo bem.",
      "role": "assistant"
    }
  }],
  "usage": {
    "completion_tokens": 6,
    "prompt_tokens": 12,
    "total_tokens": 18,
    "cost": 0
  }
}

Versão Python (SDK OpenAI)

from openai import OpenAI

client = OpenAI(
    base_url="https://api.usetokia.com/v1",
    api_key="sk-tokia-...",
)

response = client.chat.completions.create(
    model="test-free",
    messages=[{"role": "user", "content": "diga oi em 3 palavras"}],
    max_tokens=20,
)

print(response.choices[0].message.content)

Versão Node.js / TypeScript (SDK OpenAI)

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.usetokia.com/v1",
  apiKey: process.env.TOKIA_API_KEY,
});

const response = await client.chat.completions.create({
  model: "test-free",
  messages: [{ role: "user", content: "diga oi em 3 palavras" }],
  max_tokens: 20,
});

console.log(response.choices[0]?.message.content);

Modelos disponíveis

Use o ID Tokia (alias) ou o upstreamModelId (ID OpenRouter completo). Tokia traduz automaticamente o alias antes de chamar LiteLLM.

| Alias Tokia | upstream | Markup | Indicação | |---|---|---|---| | test-free | openrouter/openai/gpt-oss-120b:free | 1.0x | testes — custo R$ 0 | | gpt-4o-mini | openai/gpt-4o-mini | 2.0x | uso geral barato | | claude-sonnet-46 | anthropic/claude-sonnet-4.6 | 1.5x | qualidade premium | | deepseek-v3 | deepseek/deepseek-chat-v3 | 3.0x | OSS top-of-line | | gemini-flash | google/gemini-2.5-flash | 3.0x | rápido + multimodal | | llama-3-3-70b | meta-llama/llama-3.3-70b-instruct | 3.0x | OSS popular |

Validar evento em /dashboard/usage

Após a chamada, aguarde ~70 segundos (cron reconcile_spend roda a cada 60s). Acesse /dashboard/usage:

Dashboard usage com eventos

Você verá:

  • Chamadas: contador incrementado
  • Gasto total: R$ 0,00 (modelo free)
  • Por modelo: linha "Tokia Free Test (gpt-oss-120b)" com 1 chamada

Streaming SSE (chat completions)

Tokia suporta stream: true pra resposta em tempo real:

const stream = await client.chat.completions.create({
  model: "test-free",
  messages: [{ role: "user", content: "conta uma história curta" }],
  stream: true,
  stream_options: { include_usage: true },
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

Imagens (Flux Schnell ~4s)

curl https://api.usetokia.com/v1/images/generations \
  -H "Authorization: Bearer sk-tokia-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "flux-schnell",
    "prompt": "logo minimalista de café com fundo verde",
    "n": 1,
    "size": "1024x1024"
  }'

Erros mais comuns

  • 401 authentication_failed: key inválida, revogada, expirada ou suspensa (saldo zerado). Verifica /dashboard/keys.
  • 402 insufficient_balance: saldo zerou. Recarrega via PIX.
  • 404 model_not_found: typo no model ID. Use /v1/models pra ver lista atual.
  • 429 rate_limit: você passou do limite do provider upstream (raro pra modelos pagos). Tenta de novo em 10s.
  • 502 upstream_error: provider upstream caiu. Tokia loga internamente, Sentry alerta. Tenta de novo.

Próximo passo

Setup Auto Top-Up via cartão pra recarga automática quando saldo baixar.