Rate Limits
O Tokia aplica limites de taxa (rate limits) para garantir estabilidade e uso justo da plataforma. Os limites existem por chave de API, por modelo e por conta.
Tipos de limite
| Tipo | O que limita | Janela |
|---|---|---|
| RPM (Requests per Minute) | Número de requisições por chave | 1 minuto |
| TPM (Tokens per Minute) | Total de tokens processados por chave virtual no LiteLLM | 1 minuto |
| Concorrência | Requisições simultâneas por chave | Instantânea |
Limites padrão por nível
| Nível | Critério | RPM | TPM |
|---|---|---|---|
| Start | Conta nova | 60 | 200.000 |
| Plus | Saldo acumulado ≥ R$ 25 | 120 | 500.000 |
| Pro | Saldo acumulado ≥ R$ 50 | 300 | 1.000.000 |
| Max | Saldo acumulado ≥ R$ 100 | 600 | 2.000.000 |
O nível sobe automaticamente conforme o saldo acumulado (total já recarregado, não o saldo atual). O nível nunca desce.
Headers de rate limit
Cada resposta da API inclui headers indicando o estado do limite:
| Header | Descrição |
|---|---|
x-ratelimit-limit-requests | Limite máximo de requisições por minuto |
x-ratelimit-remaining-requests | Requisições restantes na janela atual |
x-ratelimit-limit-tokens | Limite máximo de tokens por minuto |
x-ratelimit-remaining-tokens | Tokens restantes na janela atual |
x-ratelimit-reset-requests | Tempo até o reset do limite de requisições (ex: 1s) |
x-ratelimit-reset-tokens | Tempo até o reset do limite de tokens |
retry-after | Segundos para aguardar antes de tentar novamente (presente apenas quando 429) |
Erro 429: Too Many Requests
Quando você excede o limite, a API retorna 429:
{
"error": {
"message": "Rate limit exceeded. Please retry after 2 seconds.",
"type": "rate_limit_error",
"code": "rate_limit_exceeded"
}
}O header retry-after indica quantos segundos esperar.
Estratégias de retry e backoff
Exponential backoff
A estratégia recomendada: esperar 1s, depois 2s, 4s, 8s... até um máximo. Os SDKs OpenAI já implementam isso automaticamente:
from openai import OpenAI
# O SDK OpenAI já faz retry com exponential backoff por padrão
# Basta configurar max_retries:
client = OpenAI(
api_key="sk-...",
base_url="https://api.usetokia.com/v1",
max_retries=3,
timeout=60,
)Retry manual (Python)
import time
from openai import OpenAI, RateLimitError
client = OpenAI(
api_key="sk-...",
base_url="https://api.usetokia.com/v1",
max_retries=0, # desligar retry automático para controlar manualmente
)
def call_with_backoff(messages, max_retries=5):
for attempt in range(max_retries):
try:
return client.chat.completions.create(
model="gpt-4o-mini",
messages=messages,
)
except RateLimitError as e:
if attempt == max_retries - 1:
raise
wait = 2 ** attempt # 1, 2, 4, 8, 16 segundos
print(f"Rate limited, aguardando {wait}s...")
time.sleep(wait)
response = call_with_backoff([{"role": "user", "content": "Olá"}])Retry (TypeScript)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.TOKIA_KEY,
baseURL: "https://api.usetokia.com/v1",
maxRetries: 3,
timeout: 60_000,
});Dicas para evitar rate limiting
- Use batch quando possível: uma chamada com 5 mensagens é melhor que 5 chamadas separadas (1 RPM vs 5 RPM)
- Cache respostas: se a mesma pergunta vai ser feita várias vezes, cache o resultado
- Distribua carga: se possível, use múltiplas API keys para distribuir requisições
- Modelos menores:
gpt-4o-minitem limites mais generosos quegpt-4oporque consome menos TPM - Monitore os headers: verifique
x-ratelimit-remaining-*e reduza a velocidade antes de bater o limite
Rate limit vs saldo insuficiente
Não confunda os dois erros:
| Código | Significado | O que fazer |
|---|---|---|
429 | Rate limit excedido (muitas requisições) | Esperar e tentar de novo (retry-after) |
402 | Saldo insuficiente | Recarregar saldo no dashboard |
Precisa de limites maiores?
Se os limites padrão não atendem a sua aplicação, entre em contato pelo contato@usetokia.com com o volume estimado (RPM e TPM) para avaliar um limite personalizado.
Próximos passos
- Códigos de erro — referência completa de erros da API
- Preços e markup — como o preço por modelo funciona
- Quickstart — primeira chamada em 3 minutos