Limite de requisições da API do Instagram
Como funciona o rate limit da API do Instagram e como evitar bater nele em produção.
A API do Instagram aplica dois limites diferentes, e confundir os dois é a causa mais comum de um cliente reportar "a integração parou de funcionar" quando na verdade o problema é volume: um limite de chamadas de API e um limite separado de posts efetivamente publicados.
O limite de chamadas de API
A Meta aplica o que chama de limite Business Use Case: por conta do Instagram conectada ao seu app, você tem direito a um número de chamadas dentro de uma janela rolante de uma hora — não um reset fixo à meia-noite. Esse número escala conforme a base de contas conectadas ao seu app: quanto mais contas o seu app atende, maior a capacidade total, mas o limite por conta continua o mesmo.
Como esse valor por conta e a forma de calcular a capacidade agregada do app variam conforme a documentação da Meta é atualizada, trate o número exato como algo a confirmar direto na página oficial de rate limiting da Graph API em vez de fixar uma constante no seu código a partir de um post de terceiros.
O limite de posts publicados
Separado do limite de chamadas, existe um teto para quantos posts uma conta pode efetivamente publicar via API dentro de uma janela móvel de 24 horas — não um dia de calendário. Segundo a documentação atual da Meta sobre publicação de conteúdo no Instagram, esse teto é de 100 posts publicados via API em uma janela de 24 horas, e um carrossel conta como um único post para esse limite.
Esse número já apareceu documentado de forma diferente no passado — algumas fontes mais antigas ainda citam 25 posts por 24 horas — então, antes de assumir qualquer valor fixo em produção, confirme o consumo real de uma conta específica consultando o endpoint de limite de publicação dela na Graph API em vez de confiar em um número hard-coded.
Como o PostGate expõe isso
Quando qualquer um desses limites é atingido, o PostGate traduz a resposta da Meta para o mesmo envelope estruturado de erro de toda a API: um código rate_limited, a flag retryable: true e o request_id para correlacionar com o log de entrega.
{
"error": {
"code": "rate_limited",
"message": "Instagram rate limit exceeded.",
"platform": "instagram",
"retryable": true,
"request_id": "req_01JXYZ"
}
}Boas práticas em produção
Trate rate_limited como um sinal de espera, não de falha: aplique backoff exponencial com jitter e reenvie usando a mesma Idempotency-Key — o PostGate já lida com as tentativas de entrega junto ao provedor internamente, então a nova tentativa do seu lado é só sobre o transporte da requisição em si. Para contas que publicam em volume, distribuir os horários de publicação ao longo do dia evita concentrar chamadas na mesma janela de uma hora.
