Saltar para o conteúdo principal
A Vendaze API aplica limites de taxa por aplicativo (client_id) por minuto para garantir uso justo e proteger a disponibilidade do serviço.

Limites por método HTTP

MétodoLimiteAplica-se a
GET1.000 req/minTodos os endpoints /v1/*
POST200 req/minTodos os endpoints /v1/*
PATCH200 req/minTodos os endpoints /v1/*
DELETE100 req/minTodos os endpoints /v1/*
Endpoints OAuth têm limites mais restritos por IP:
EndpointLimite
POST /oauth/token20 req/min por IP
POST /oauth/revoke20 req/min por IP
GET /oauth/authorize20 req/min por IP
POST /v1/auth/register-app10 req/hora por IP
POST /v1/auth/rotate-app10 req/hora por IP

Headers de controle

Toda resposta inclui headers com seu consumo atual:
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 847
X-RateLimit-Reset: 1748000060
HeaderDescrição
X-RateLimit-LimitLimite total da janela atual.
X-RateLimit-RemainingRequisições restantes na janela.
X-RateLimit-ResetUnix timestamp de quando a janela reinicia.

Quando o limite é excedido

HTTP/1.1 429 Too Many Requests
Retry-After: 60
{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Rate limit exceeded. Try again in 60 seconds.",
    "request_id": "uuid"
  }
}
Use backoff exponencial com jitter ao receber um 429:
async function withRetry(fn, maxAttempts = 3) {
  for (let attempt = 0; attempt < maxAttempts; attempt++) {
    const res = await fn();
    if (res.status !== 429) return res;

    const retryAfter = parseInt(res.headers.get('Retry-After') ?? '60');
    const jitter = Math.random() * 1000;
    await new Promise((r) => setTimeout(r, retryAfter * 1000 + jitter));
  }
  throw new Error('Max retry attempts exceeded');
}