SDKs · qualquer cliente OpenAI-compatible
Tokia é 100% OpenAI-compatible — qualquer SDK que aceite base_url customizado funciona sem refactor. Mostro exemplos minimum-viable nas 7 linguagens mais usadas.
✓Você pode usar qualquer SDK OpenAI-compatible sem precisar instalar nada da Tokia. Os SDKs oficiais OpenAI (Python, Node, Java, Go, .NET) ou Anthropic (Python, Node) já roteiam pra Tokia com 2 linhas de mudança.
SDK oficial Tokia (opcional, recomendado pra Node)
Pra quem quer ergonomia BR (auto-retry com backoff, helper de saldo, tipos pt-BR), publicamos o pacote oficial @tokia/sdk v0.3 no npm.
bash
npm install @tokia/sdk
# ou
pnpm add @tokia/sdkts
import { TokiaClient } from "@tokia/sdk";
const tokia = new TokiaClient({ apiKey: "sk-tokia-..." });
// Chat completion (mesmo signature do SDK OpenAI)
const r = await tokia.chat.completions.create({
model: "claude-sonnet-46",
messages: [{ role: "user", content: "Olá!" }],
});
// Helpers Tokia (não existe no SDK OpenAI):
const balance = await tokia.balance.get(); // R$ saldo atual
const models = await tokia.models.list("chat"); // filtra por categoria
const usage = await tokia.usage.summary({ days: 30 }); // resumoInclui auto-retry exponencial (Sprint 114) que respeita o header retry-after da Tokia (Sprint 177). Sem código extra do seu lado.
CLI oficial Tokia (terminal)
Pra usar Tokia direto do terminal sem escrever código, tem o @tokia/cli v0.3:
bash
npm install -g @tokia/cli
tokia login # configura sk-tokia-...
tokia balance # saldo atual
tokia chat "Resume em 1 frase: ..." # chat rápido
tokia models --category chat # lista modelos chat (Sprint 181)
tokia keys list # lista API keys
tokia usage --days 30 # resumo de uso 30d (Sprint 188)Python (SDK OpenAI oficial)
bash
pip install openaipython
from openai import OpenAI
client = OpenAI(
base_url="https://api.usetokia.com/v1",
api_key="sk-tokia-...",
)
response = client.chat.completions.create(
model="claude-sonnet-46",
messages=[{"role": "user", "content": "Olá!"}],
)
print(response.choices[0].message.content)Streaming
python
stream = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Conte uma história curta"}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="", flush=True)Node.js / TypeScript (SDK OpenAI oficial)
bash
npm install openaitypescript
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: "claude-sonnet-46",
messages: [{ role: "user", content: "Olá!" }],
});
console.log(response.choices[0]?.message.content);Go (sashabaranov/go-openai)
bash
go get github.com/sashabaranov/go-openaigo
package main
import (
"context"
"fmt"
openai "github.com/sashabaranov/go-openai"
)
func main() {
config := openai.DefaultConfig("sk-tokia-...")
config.BaseURL = "https://api.usetokia.com/v1"
client := openai.NewClientWithConfig(config)
resp, err := client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: "gpt-4o-mini",
Messages: []openai.ChatCompletionMessage{
{Role: openai.ChatMessageRoleUser, Content: "Olá!"},
},
},
)
if err != nil {
panic(err)
}
fmt.Println(resp.Choices[0].Message.Content)
}Rust (async-openai)
toml
# Cargo.toml
[dependencies]
async-openai = "0.27"
tokio = { version = "1", features = ["full"] }rust
use async_openai::{
config::OpenAIConfig,
types::{ChatCompletionRequestUserMessageArgs, CreateChatCompletionRequestArgs},
Client,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = OpenAIConfig::new()
.with_api_base("https://api.usetokia.com/v1")
.with_api_key("sk-tokia-...");
let client = Client::with_config(config);
let request = CreateChatCompletionRequestArgs::default()
.model("claude-sonnet-46")
.messages([
ChatCompletionRequestUserMessageArgs::default()
.content("Olá!")
.build()?
.into(),
])
.build()?;
let response = client.chat().create(request).await?;
println!("{}", response.choices[0].message.content.as_deref().unwrap_or(""));
Ok(())
}PHP (openai-php/client)
bash
composer require openai-php/clientphp
<?php
require_once __DIR__ . "/vendor/autoload.php";
$client = OpenAI::factory()
->withBaseUri("https://api.usetokia.com/v1")
->withApiKey("sk-tokia-...")
->make();
$response = $client->chat()->create([
"model" => "gpt-4o-mini",
"messages" => [
["role" => "user", "content" => "Olá!"],
],
]);
echo $response->choices[0]->message->content;Ruby (alexrudall/ruby-openai)
bash
gem install ruby-openairuby
require "openai"
client = OpenAI::Client.new(
access_token: "sk-tokia-...",
uri_base: "https://api.usetokia.com/v1",
)
response = client.chat(
parameters: {
model: "claude-sonnet-46",
messages: [{ role: "user", content: "Olá!" }],
},
)
puts response.dig("choices", 0, "message", "content")cURL (qualquer linguagem)
bash
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": "Olá!"}]
}'Anthropic SDK (Python/Node) — funciona também?
O SDK oficial da Anthropic (@anthropic-ai/sdk) é incompatível com endpoints OpenAI-style. Use o SDK da OpenAI mesmo quando o modelo for Claude — Tokia traduz internamente.
⚠Pra usar Claude via SDK Anthropic direto (sem Tokia), você precisaria conta Anthropic + cartão internacional. Tokia evita isso.
Variáveis de ambiente recomendadas
bash
# .env
TOKIA_API_KEY=sk-tokia-Igbws93hgs-7H8cuQDoGJA
TOKIA_BASE_URL=https://api.usetokia.com/v1
# uso no código (Python)
# client = OpenAI(base_url=os.environ["TOKIA_BASE_URL"], api_key=os.environ["TOKIA_API_KEY"])✓Adiciona
.env ao .gitignore. Pra dev local, use dotenv (Python) ou --env-file (Node 20+). Pra prod, sete env vars na plataforma (Vercel/Coolify/Heroku/etc).Próximos passos
- Cookbook — receitas pra LangChain, Vercel AI SDK, LlamaIndex, continue.dev, Zapier, Make, Cursor, n8n e Ollama bridge
- Referência API — parâmetros completos /v1/chat/completions
- Troubleshooting — erros comuns + fixes
- Calculadora — estime custo BRL/mês comparado a OpenAI direto