Migrar da OpenAI direta pra Tokia em 5 minutos (zero refactor)
Tutorial step-by-step pra trocar BASE_URL do SDK OpenAI/Anthropic. Mesma key estrutura, mesmas chamadas, billing BRL. Inclui código Python, Node, LangChain e Vercel AI SDK.
A migração da Tokia foi desenhada pra não exigir refactor. Se seu código já usa SDK OpenAI/Anthropic em qualquer linguagem, trocar 2 linhas já bota tudo funcionando contra Tokia. Vou mostrar 4 stacks comuns.
O que você precisa antes
- Conta Tokia (usetokia.com/dashboard)
- R$ 10 de saldo via PIX (recarga mínima)
- Uma API key
sk-tokia-...(/docs/manual/02-criar-api-key)
Total: ~3 minutos.
Stack 1 — Python (SDK OpenAI oficial)
Antes (OpenAI direta):
from openai import OpenAI
client = OpenAI(api_key="sk-proj-...")
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "oi"}],
)
print(response.choices[0].message.content)
Depois (Tokia — 2 linhas mudam):
from openai import OpenAI
client = OpenAI(
base_url="https://api.usetokia.com/v1", # ← adiciona
api_key="sk-tokia-...", # ← troca
)
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "oi"}],
)
print(response.choices[0].message.content)
Resto idêntico. Streaming, function calling, response format JSON, embeddings — tudo funciona igual.
Stack 2 — Node.js / TypeScript (SDK OpenAI oficial)
import OpenAI from "openai";
const tokia = new OpenAI({
baseURL: "https://api.usetokia.com/v1",
apiKey: process.env.TOKIA_API_KEY,
});
const response = await tokia.chat.completions.create({
model: "claude-sonnet-46",
messages: [{ role: "user", content: "oi" }],
});
console.log(response.choices[0]?.message.content);
Stack 3 — LangChain
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="claude-sonnet-46",
base_url="https://api.usetokia.com/v1",
api_key="sk-tokia-...",
)
result = llm.invoke("Resuma IA em 1 frase")
print(result.content)
Funciona com tools, structured output, callbacks — LangChain trata Tokia como se fosse OpenAI direto.
Stack 4 — Vercel AI SDK
import { createOpenAI } from "@ai-sdk/openai";
import { generateText } from "ai";
const tokia = createOpenAI({
baseURL: "https://api.usetokia.com/v1",
apiKey: process.env.TOKIA_API_KEY,
});
const { text } = await generateText({
model: tokia("gpt-4o-mini"),
prompt: "oi",
});
Streaming SSE funciona out-of-the-box — streamText em vez de
generateText.
Stack 5 — curl puro (qualquer linguagem)
curl https://api.usetokia.com/v1/chat/completions \
-H "Authorization: Bearer sk-tokia-..." \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "oi"}]
}'
O que NÃO precisa mudar
- Estrutura de request/response — JSON é OpenAI-compatible literalmente
- Streaming SSE — formato idêntico (
data: {"choices":[{"delta":...}]}) - Function calling — passa
tools: [...], recebetool_calls - Response format JSON —
response_format: { type: "json_object" } - Embeddings —
/v1/embeddingsmesmo formato - Imagens —
/v1/images/generationsmesmo formato
O que muda (ganhos)
- Cobrança BRL — fatura mensal em real, NF de serviço dedutível
- Multi-provider — mesma key acessa OpenRouter (300+ modelos), Anthropic, Fal.ai, Google
- Budget cap per-key — limita gasto de cada key
- Dashboard de uso — gráficos por modelo + por key
- Webhooks outbound — eventos quando saldo baixa, key suspendeu, top-up confirmou
- Markup decrescente — Llama/DeepSeek 3x, GPT-4o-mini 2x, Claude 1.5x
E se eu já tiver código complexo?
Não tem regra "tem que migrar tudo". Comum é:
- Fase 1: pega 1 endpoint do seu SaaS (ex: chatbot atendimento), troca pra Tokia, mede 1 semana
- Fase 2: se OK, migra rotas que dependem dele
- Fase 3: deixa OpenAI direto pra casos específicos (ex: legacy integration com tooling proprietary)
Tokia tem ID Tokia (alias curto) e ID upstream completo. Pra fazer A/B test em uma rota só, basta:
import random
# 50% Tokia, 50% OpenAI direto
if random.random() < 0.5:
response = tokia_client.chat.completions.create(...)
else:
response = openai_client.chat.completions.create(...)
Loga ambos os custos e compara depois de 1 semana.
Erros comuns na migração
| Sintoma | Causa | Fix |
|---|---|---|
| 401 authentication_failed | Key sk-tokia-... revogada/expirada | Cria nova em /dashboard/keys |
| 402 insufficient_balance | Saldo zerado | Recarrega PIX |
| 404 model_not_found | Typo no model. GET /v1/models pra lista atual | Use test-free, gpt-4o-mini, claude-sonnet-46, etc |
| 502 upstream_error | Provider upstream (OpenAI/Anthropic/etc) caiu | Tenta de novo em ~30s. Sentry alerta Tokia |
| Latência maior que OpenAI direto | Tokia adiciona ~100ms (proxy + log) | Pra workload latency-critical mantém OpenAI direto |
Conclusão
Pra 95% dos casos a migração é trocar 2 linhas. O outro 5% (rate limiting custom, headers proprietários, beta features OpenAI) você pode rodar híbrido — Tokia pra produção, OpenAI direto pra integrações específicas.
Cria conta com R$ 10 PIX e testa →
Posts relacionados:
Quer testar Tokia com R$ 10 via PIX?
Criar conta grátis →