Rate limits
A especificação OpenAPI não define limites de requisição para os endpoints públicos. Ainda assim, trate sua integração como se houvesse: cacheie, agrupe e implemente retentativas com backoff.
Proteções específicas de anúncios
Embora não seja um limite de taxa clássico, o endpoint de clique em anúncios aplica
deduplicação por IP: cliques repetidos do mesmo IP no mesmo anúncio dentro de
30 minutos são aceitos com 200, mas não incrementam
a métrica. Além disso, cada clickToken é de uso único (reuso retorna
409) e expira em 10 minutos. Veja
Anúncios · Delivery.
Boas práticas
- Cacheie conteúdo publicado. Posts, categorias e tags mudam pouco. Em sites estáticos/SSR, busque no build ou com revalidação por intervalo em vez de a cada visita.
- Prefira chamadas no servidor. Evite que cada visitante dispare uma requisição direta à API — isso concentra carga e expõe a chave.
- Implemente retentativas com backoff exponencial para erros transitórios (especialmente
5xx), com um teto de tentativas. - Respeite os limites de paginação (
limitaté 100 em posts, 50 na busca) e pagine em vez de pedir grandes volumes de uma vez. - Trate
429defensivamente, caso a plataforma passe a aplicá-lo: recue e tente de novo após um intervalo.
Retentativa com backoff
Um wrapper de fetch que repete em erros transitórios, pronto para reuso:
async function fetchComRetry(
url: string,
init: RequestInit,
tentativas = 3,
): Promise<Response> {
let ultimoErro: unknown;
for (let i = 0; i < tentativas; i++) {
try {
const res = await fetch(url, init);
// repete em 429 e 5xx; devolve o resto (inclui 200, 401, 404…)
if (res.status === 429 || res.status >= 500) {
await esperar(2 ** i * 300); // 300ms, 600ms, 1200ms…
continue;
}
return res;
} catch (err) {
ultimoErro = err;
await esperar(2 ** i * 300);
}
}
throw ultimoErro ?? new Error("Falha após retentativas");
}
const esperar = (ms: number) => new Promise((r) => setTimeout(r, ms));