Documentação
⌘K

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.

LangChain (Python)

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

python
for chunk in llm.stream("Liste 5 frutas tropicais"):
    print(chunk.content, end="", flush=True)

Vercel AI SDK (Next.js)

typescript
// 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)

typescript
"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)

python
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:

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)

bash
# 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:

python
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):

yaml
# 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 OpenAI

Mistral AI direto via Tokia

Tokia já roteia GPT/Claude/DeepSeek pra você. Pra modelos Mistral via Tokia, mesmo padrão OpenAI-compatible:

python
from openai import OpenAI

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

# Mistral Large via Tokia
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ápido
  • openrouter/mistralai/mistral-large, qualidade Claude Sonnet
  • openrouter/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:

python
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.content

Hybrid 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:

python
# 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

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:

text
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.content

Cursor 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