PolarPOLAR

Rate Limits

Limites de taxa da API Polar. TPM e RPM por tier, headers de rate limit e estratégia de retry com backoff exponencial.

Visão Geral

A API Polar implementa rate limiting para garantir uso justo e estabilidade do serviço. Os limites são aplicados por API key e variam conforme o tier (plano) da conta.

Limites por Tier

TPM (Tokens Por Minuto)

TierTPMDescrição
Free10.000Contas com créditos gratuitos
Pro100.000Contas com saldo ativo
Enterprise1.000.000Contratos enterprise

RPM (Requisições Por Minuto)

TierRPMDescrição
Free20Contas com créditos gratuitos
Pro200Contas com saldo ativo
Enterprise2.000Contratos enterprise

Limites por Endpoint

Além dos limites globais, alguns endpoints possuem limites específicos:

EndpointFree RPMPro RPMEnterprise RPM
/v1/chat/completions202002.000
/v1/embeddings505005.000
/v1/jurisia/*101001.000
/v1/urso-eco/stream21050
/v1/batch/*550500

Headers de Rate Limit

Toda resposta da API inclui headers informativos sobre o rate limit:

HeaderTipoDescrição
X-RateLimit-LimitintegerLimite máximo de requisições no período
X-RateLimit-RemainingintegerRequisições restantes no período
X-RateLimit-ResetintegerTimestamp Unix de quando o limite reseta
X-RateLimit-Limit-TokensintegerLimite máximo de tokens no período
X-RateLimit-Remaining-TokensintegerTokens restantes no período

Exemplo de Headers

HTTP/1.1 200 OK
X-RateLimit-Limit: 200
X-RateLimit-Remaining: 195
X-RateLimit-Reset: 1710000060
X-RateLimit-Limit-Tokens: 100000
X-RateLimit-Remaining-Tokens: 98500

Resposta 429 (Rate Limited)

Quando o limite é excedido, a API retorna status 429:

{
  "error": {
    "message": "Rate limit excedido. Máximo de 200 requisições por minuto.",
    "type": "rate_limit_error",
    "code": "rate_limited"
  }
}

O header Retry-After indica em quantos segundos tentar novamente:

HTTP/1.1 429 Too Many Requests
Retry-After: 12
X-RateLimit-Limit: 200
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1710000060

Estratégia de Retry

Backoff Exponencial com Jitter

Implemente retry com backoff exponencial para lidar com rate limits:

import time
import random
import requests

def make_request_with_retry(url, headers, json_data, max_retries=5):
    for attempt in range(max_retries):
        response = requests.post(url, headers=headers, json=json_data)

        if response.status_code == 429:
            # Obter tempo de espera do header Retry-After
            retry_after = int(response.headers.get("Retry-After", 1))

            # Backoff exponencial: 1s, 2s, 4s, 8s, 16s
            base_delay = min(retry_after, 2 ** attempt)

            # Adicionar jitter (aleatoriedade)
            jitter = random.uniform(0, base_delay * 0.5)
            delay = base_delay + jitter

            print(f"Rate limited. Aguardando {delay:.1f}s (tentativa {attempt + 1})")
            time.sleep(delay)
            continue

        return response

    raise Exception(f"Falha após {max_retries} tentativas")

# Uso
response = make_request_with_retry(
    "https://api.polarai.com.br/v1/chat/completions",
    headers={"Authorization": "Bearer pk-sua-chave-aqui"},
    json_data={
        "model": "urso-mabe",
        "messages": [{"role": "user", "content": "Olá!"}]
    }
)

TypeScript

async function makeRequestWithRetry(
  url: string,
  options: RequestInit,
  maxRetries = 5
): Promise<Response> {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const response = await fetch(url, options);

    if (response.status === 429) {
      const retryAfter = parseInt(response.headers.get("Retry-After") || "1");
      const baseDelay = Math.min(retryAfter, Math.pow(2, attempt));
      const jitter = Math.random() * baseDelay * 0.5;
      const delay = baseDelay + jitter;

      console.log(`Rate limited. Waiting ${delay.toFixed(1)}s (attempt ${attempt + 1})`);
      await new Promise(resolve => setTimeout(resolve, delay * 1000));
      continue;
    }

    return response;
  }

  throw new Error(`Failed after ${maxRetries} attempts`);
}

Dicas para Otimizar Uso

  • Batch API: Use o endpoint de batch para processar muitas requisições com limites separados e 50% de desconto.
  • Cache: Armazene resultados em cache quando possível para evitar requisições duplicadas.
  • Streaming: Use streaming para respostas longas, pois a requisição conta como uma única RPM.
  • Modelos menores: Use urso-mabe para tarefas simples, economizando TPM.
  • Monitoramento: Acompanhe os headers de rate limit para ajustar a taxa de envio antes de ser limitado.

Solicitar Aumento de Limite

Para limites maiores, entre em contato:

  • Pro: Upgrade disponível automaticamente ao adicionar créditos
  • Enterprise: Contate vendas em enterprise@polar-ai.com para limites personalizados

On this page