Cookbook · receitas de integração
Snippets prontos pros frameworks/ferramentas mais usados. Tokia é OpenAI-compatible, então qualquer SDK que aceite custom base_url funciona — basta trocar 2 linhas.
openrouter/openai/gpt-4o-mini como modelo. Troque por qualquer ID em /docs/models.LangChain (Python)
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
llm = ChatOpenAI(
api_key="sk-tokia-...",
base_url="https://api.usetokia.com/v1",
model="openrouter/openai/gpt-4o-mini",
temperature=0.3,
)
response = llm.invoke([
SystemMessage(content="Responda em pt-BR, 1 frase."),
HumanMessage(content="Qual a capital da França?"),
])
print(response.content) # "Paris é a capital da França."LangChain streaming
for chunk in llm.stream("Liste 5 frutas tropicais"):
print(chunk.content, end="", flush=True)Vercel AI SDK (Next.js)
// app/api/chat/route.ts
import { createOpenAI } from "@ai-sdk/openai";
import { streamText } from "ai";
const tokia = createOpenAI({
apiKey: process.env.TOKIA_KEY,
baseURL: "https://api.usetokia.com/v1",
});
export async function POST(req: Request) {
const { messages } = await req.json();
const result = streamText({
model: tokia("openrouter/openai/gpt-4o-mini"),
messages,
});
return result.toDataStreamResponse();
}useChat hook (cliente)
"use client";
import { useChat } from "ai/react";
export default function Chat() {
const { messages, input, handleInputChange, handleSubmit } = useChat({ api: "/api/chat" });
return (
<form onSubmit={handleSubmit}>
{messages.map((m) => <div key={m.id}>{m.role}: {m.content}</div>)}
<input value={input} onChange={handleInputChange} />
</form>
);
}LlamaIndex (RAG)
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.llms.openai_like import OpenAILike
from llama_index.embeddings.openai import OpenAIEmbedding
Settings.llm = OpenAILike(
api_base="https://api.usetokia.com/v1",
api_key="sk-tokia-...",
model="openrouter/openai/gpt-4o-mini",
is_chat_model=True,
)
Settings.embed_model = OpenAIEmbedding(
api_base="https://api.usetokia.com/v1",
api_key="sk-tokia-...",
model="openrouter/openai/text-embedding-3-small",
)
# Index local docs
docs = SimpleDirectoryReader("./meus-docs").load_data()
index = VectorStoreIndex.from_documents(docs)
# Pergunta com RAG
response = index.as_query_engine().query("O que diz sobre LGPD?")
print(response)continue.dev (VS Code)
Adicione ao ~/.continue/config.json:
{
"models": [
{
"title": "Tokia — Claude Sonnet 4.6",
"provider": "openai",
"model": "anthropic/claude-sonnet-4-6",
"apiKey": "sk-tokia-...",
"apiBase": "https://api.usetokia.com/v1"
},
{
"title": "Tokia — GPT-4o mini (barato)",
"provider": "openai",
"model": "openrouter/openai/gpt-4o-mini",
"apiKey": "sk-tokia-...",
"apiBase": "https://api.usetokia.com/v1"
}
]
}Use Ctrl/Cmd + Shift + L pra selecionar código e perguntar; troque de modelo no dropdown da sidebar. Cobrado em BRL no seu saldo Tokia.
n8n (no-code workflows)
Em qualquer node "OpenAI" do n8n:
- Credentials: tipo OpenAI API → marque Override base URL
- Base URL:
https://api.usetokia.com/v1 - API Key:
sk-tokia-… - Model: qualquer ID do catálogo (ex:
openrouter/openai/gpt-4o-mini)
cURL puro (debug)
# Chat completion mais simples
curl https://api.usetokia.com/v1/chat/completions \
-H "Authorization: Bearer $TOKIA_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openrouter/openai/gpt-4o-mini",
"messages": [{"role": "user", "content": "Diga oi"}]
}'
# Streaming
curl https://api.usetokia.com/v1/chat/completions \
-H "Authorization: Bearer $TOKIA_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "openrouter/openai/gpt-4o-mini","messages":[{"role":"user","content":"contar"}],"stream":true}'LiteLLM Proxy SDK (Python)
Se você já usa LiteLLM em produção e quer roteá-lo via Tokia (pra ter billing BRL + observability + fallback automático), aponte o OPENAI_API_BASE pro endpoint Tokia:
from litellm import completion
response = completion(
model="openai/openrouter/openai/gpt-4o-mini",
messages=[{"role": "user", "content": "explique inflação BR em 1 frase"}],
api_base="https://api.usetokia.com/v1",
api_key="sk-tokia-...",
custom_llm_provider="openai", # força adapter OpenAI-compatible
)
print(response.choices[0].message.content)Modo proxy server (LiteLLM proxy → Tokia):
# litellm-config.yaml
model_list:
- model_name: tokia-gpt-4o-mini
litellm_params:
model: openai/openrouter/openai/gpt-4o-mini
api_base: https://api.usetokia.com/v1
api_key: sk-tokia-...
router_settings:
fallbacks:
- tokia-gpt-4o-mini:
- openai/gpt-4o-mini # se Tokia cair (improvável), fallback direto OpenAIMistral AI direto via Tokia
Tokia já roteia GPT/Claude/DeepSeek via OpenRouter. Pra modelos Mistral via Tokia, mesmo padrão OpenAI-compatible:
from openai import OpenAI
client = OpenAI(
api_key="sk-tokia-...",
base_url="https://api.usetokia.com/v1",
)
# Mistral Large via OpenRouter
response = client.chat.completions.create(
model="openrouter/mistralai/mistral-large",
messages=[
{"role": "system", "content": "Você é especialista em direito tributário BR."},
{"role": "user", "content": "ICMS pode incidir sobre frete?"},
],
)
print(response.choices[0].message.content)Pra modelos Mistral hospedados na Europa (compliance GDPR/LGPD com dados no exterior controlado):
openrouter/mistralai/mistral-small-3— barato, rápidoopenrouter/mistralai/mistral-large— qualidade Claude Sonnetopenrouter/mistralai/codestral— code-tuned
Ollama local → Tokia bridge
Se você roda Ollama local (Llama/Qwen/Phi gratuito no seu hardware) mas quer fallback Tokia quando o modelo local não consegue responder ou a máquina está sobrecarregada:
import requests
from openai import OpenAI
def chat_with_fallback(messages: list, prefer_local: bool = True):
"""Tenta Ollama local primeiro; se falhar/timeout, cai pra Tokia."""
if prefer_local:
try:
r = requests.post(
"http://localhost:11434/v1/chat/completions",
json={"model": "llama3:8b", "messages": messages},
timeout=10,
)
if r.ok:
return r.json()["choices"][0]["message"]["content"]
except (requests.Timeout, requests.ConnectionError):
pass # local falhou → cai pra Tokia
# Fallback Tokia
client = OpenAI(
api_key="sk-tokia-...",
base_url="https://api.usetokia.com/v1",
)
response = client.chat.completions.create(
model="openrouter/meta-llama/llama-3.3-70b-instruct",
messages=messages,
)
return response.choices[0].message.contentHybrid local/cloud pattern: economiza créditos Tokia em queries triviais (resolvidos por modelo 8B local) e usa qualidade superior 70B cloud só pra queries difíceis. Detecção automática:
# Roteia por complexidade da query
def smart_route(query: str, messages: list):
is_complex = (
len(query) > 500 # query longa
or "raciocínio" in query.lower()
or "analise" in query.lower()
or any(c.isdigit() for c in query) # tem números (cálculo?)
)
return chat_with_fallback(messages, prefer_local=not is_complex)Zapier (Code by Zapier)
Zapier não tem node nativo "Tokia" mas o action "Code by Zapier" (Run JavaScript ou Run Python) faz chamada HTTP custom. Útil pra automatizar "quando nova linha em Sheets, gerar resumo IA, append na coluna B".
Run JavaScript
// Input: inputData.texto (string)
const response = await fetch("https://api.usetokia.com/v1/chat/completions", {
method: "POST",
headers: {
"Authorization": "Bearer sk-tokia-...",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "gpt-4o-mini",
messages: [
{ role: "system", content: "Resuma em 1 frase, máximo 50 palavras." },
{ role: "user", content: inputData.texto },
],
max_tokens: 100,
}),
});
const data = await response.json();
output = { resumo: data.choices[0].message.content };Make.com (Integromat)
Concorrente do Zapier com melhor preço pra alto volume. Tem módulo HTTP nativo:
Módulo "HTTP > Make a request":
URL: https://api.usetokia.com/v1/chat/completions
Method: POST
Headers:
Authorization: Bearer sk-tokia-...
Content-Type: application/json
Body type: Raw (JSON)
Body:
{
"model": "gpt-4o-mini",
"messages": [
{"role": "user", "content": "{{1.text_input}}"}
]
}
Parse response: Yes (JSON)
Output: 1.choices[0].message.contentCursor IDE (alternativa continue.dev)
Cursor (cursor.sh) aceita custom API endpoint OpenAI-compatible nas configurações:
- Settings → Models → "Override OpenAI Base URL" →
https://api.usetokia.com/v1 - API Key → sua
sk-tokia-... - Models field:
gpt-4o-mini,claude-sonnet-46,gemini-flash(separados por vírgula — Cursor tenta cada um) - Disable "Use OpenAI's API key" toggle pra forçar custom endpoint
Próximos
- Troubleshooting — debug de erros comuns
- Pricing calculator — estime custo BRL/mês
- Referência API — todos os parâmetros suportados