Pular para o conteúdo principal

Limitações da API

Para garantir a qualidade do serviço para todos os usuários, nossa API possui algumas limitações de uso.

Rate Limiting

Limites Padrão

PlanoRequisições/minutoRequisições/diaRequisições/mês
Starter601.00030.000
Professional30010.000300.000
EnterpriseIlimitadoIlimitadoIlimitado

Headers de Controle

Cada resposta inclui headers informativos sobre seu consumo:

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1640995200
HeaderDescrição
X-RateLimit-LimitLimite total de requisições no período
X-RateLimit-RemainingRequisições restantes no período
X-RateLimit-ResetTimestamp Unix de quando o limite será resetado

Quando Você Excede o Limite

Se você exceder o limite de requisições, receberá um erro 429:

{
"statusCode": 429,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Try again in 60 seconds.",
"retryAfter": 60
}
}

Headers de Retry

HTTP/1.1 429 Too Many Requests
Retry-After: 60

Limites de Consultas em Lote

RecursoLimite
Tamanho máximo do arquivo10 MB
Itens por arquivo10.000
Consultas simultâneas3
Arquivos em processamento5

Limites de Payload

TipoLimite
Tamanho máximo do body1 MB
Tamanho máximo de resposta10 MB
Timeout de requisição30 segundos
Timeout de consulta60 segundos

Retry com Backoff Exponencial

async function fetchWithRetry(url, options, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
try {
const response = await fetch(url, options);

if (response.status === 429) {
const retryAfter = response.headers.get('Retry-After') || Math.pow(2, attempt);
console.log(`Rate limited. Retrying in ${retryAfter}s...`);
await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
continue;
}

if (response.status === 503) {
const waitTime = Math.pow(2, attempt) * 1000;
console.log(`Service unavailable. Retrying in ${waitTime}ms...`);
await new Promise(resolve => setTimeout(resolve, waitTime));
continue;
}

return response;
} catch (error) {
if (attempt === maxRetries - 1) throw error;
const waitTime = Math.pow(2, attempt) * 1000;
await new Promise(resolve => setTimeout(resolve, waitTime));
}
}
}

Melhores Práticas

⚡ Otimize suas Requisições

  1. Implemente cache local: Armazene resultados de consultas recentes
  2. Use retry com backoff: Implemente retry exponencial para erros temporários
  3. Monitore uso nos headers: Acompanhe seu consumo através dos headers
  4. Faça requisições apenas quando necessário: Evite consultas duplicadas

📊 Monitore seu Consumo

// Monitore os headers de rate limit
async function monitoredFetch(url, options) {
const response = await fetch(url, options);

const limit = response.headers.get('X-RateLimit-Limit');
const remaining = response.headers.get('X-RateLimit-Remaining');
const reset = response.headers.get('X-RateLimit-Reset');

console.log(`Rate Limit: ${remaining}/${limit}`);

if (remaining < 10) {
console.warn('⚠️ Approaching rate limit!');
}

return response;
}

🔄 Cache Inteligente

const cache = new Map();
const CACHE_TTL = 5 * 60 * 1000; // 5 minutos

async function cachedQuery(plate) {
const cached = cache.get(plate);

if (cached && Date.now() - cached.timestamp < CACHE_TTL) {
console.log('Using cached result');
return cached.data;
}

const result = await queryVehicle(plate);
cache.set(plate, { data: result, timestamp: Date.now() });

return result;
}

Limites Customizados

Precisa de limites maiores? Entre em contato com nossa equipe:

Planos Enterprise

BenefícioDescrição
Rate limit ilimitadoSem restrições de requisições
Suporte prioritárioAtendimento em até 1 hora
SLA garantido99.9% de uptime
IP dedicadoIP exclusivo para sua conta
Webhook customizadoNotificações em tempo real

Estatísticas da API

  • 99.9% de uptime garantido
  • < 200ms tempo médio de resposta
  • 1M+ consultas processadas mensalmente
  • 24/7 suporte técnico especializado

Segurança e Confiabilidade

Todos os dados são tratados com máxima segurança:

  • ✅ Criptografia TLS 1.3
  • ✅ Tokens JWT para autenticação
  • ✅ Rate limiting inteligente
  • ✅ Logs auditáveis de acesso
  • ✅ Conformidade com LGPD

Próximos Passos