Platform

O que é limitação de requisições do API, e como lidar com um 429?

A limitação de requisições do API limita requisições dentro de uma janela de tempo; após um 429, aguarde o Retry-After antes de tentar novamente.

Um remetente com alto volume pode esgotar seu orçamento de requisições antes de todas as mensagens entrarem na fila. Ler a cota restante permite reduzir o ritmo antes que mais chamadas sejam recusadas.

Como o Bird decide meu limite?

O Bird aplica uma taxa base, qualquer aumento do plano e então qualquer override para o grupo relevante. Um override substitui os outros valores.

Endpoints relacionados compartilham um grupo. Esgotar um grupo de envio não esgota por si só os grupos separados usados para ler status ou gerenciar webhooks.

O escopo de cada orçamento depende da operação:

GrupoQuem compartilha o orçamento?
Envios de produtoTodas as credenciais da organização para aquele produto.
Leituras, listagens e escritas de gerenciamentoRequisições da mesma credencial atuante dentro da organização.
Login ou redefinição de senha não autenticadosRequisições do mesmo IP de cliente.

Limites não autenticados usam limiares fixos. Consulte o guia de limites de requisições para os grupos atribuídos a cada endpoint.

Limites de envio contam requisições, não destinatários. Uma requisição em lote pode enfileirar várias mensagens. Seu grupo pode ter uma cota diferente.

Compare as cotas em tempo real e o número de destinatários que você pode agrupar antes de trocar de endpoint. Um lote com apenas um destinatário pode não trazer ganho de throughput.

Como leio os headers de resposta?

Leia RateLimit-Policy para a cota e a janela, depois RateLimit para as requisições restantes e o tempo até o reset.

Por exemplo:

RateLimit-Policy: "email_send";q=1000;w=60
RateLimit: "email_send";r=842;t=35

Este exemplo permite 1.000 requisições por janela de 60 segundos. Restam 842 requisições, com 35 segundos até o reset.

Os números ilustram os headers. Eles não são uma cota garantida. Leia os valores retornados ao seu cliente.

CampoSignificado
Nome entre aspasO grupo ao qual a política se aplica.
qRequisições permitidas por janela.
wDuração da janela em segundos.
rRequisições restantes.
tSegundos até o reset, não um timestamp.

Uma resposta pode conter mais de uma política. Considere todas as políticas aplicáveis ao agendar a próxima requisição.

O que uma falha de limitação de requisições retorna?

Um limite API esgotado retorna 429 Too Many Requests com Retry-After em segundos. Os headers de limitação de requisições identificam o grupo esgotado. Sua cota restante é r=0.

A resposta de erro inclui estes campos:

{
  "error": {
    "type": "rate_limit_error",
    "code": "E01003",
    "name": "RateLimited"
  }
}

Use o type ou code no seu handler. A mensagem legível pode mudar sem alterar a ação de recuperação.

Como meu cliente deve lidar com um 429?

Aguarde Retry-After, depois tente novamente com uma política de backoff limitada. Mantenha a mesma chave de idempotência ao repetir a mesma escrita.

Coordene workers que usam o mesmo orçamento de grupo. A última resposta de um worker não reflete requisições que outros workers enviaram desde então.

Reduza o ritmo à medida que a cota restante diminui. Mantenha o caminho de retry para tráfego concorrente. O controle de ritmo reduz falhas, mas não garante que nenhuma chamada receba um 429.

Os SDKs do Bird lidam com retries de 429 e Retry-After. Eles não coordenam uma fila compartilhada entre todos os seus processos.

Se a cota permanecer baixa demais para a carga de trabalho, entre em contato com o Bird sobre um override. Criar mais chaves não aumenta o limite de envio da organização.

Uma requisição limitada executou algum trabalho?

O Bird rejeita uma requisição limitada antes de executar o trabalho solicitado. Essa rejeição não consome a chave de idempotência. Tente novamente com a mesma chave após aguardar.

O limitador permite a passagem de requisições se não conseguir avaliar o limite. Um problema ao avaliar cotas, portanto, não produz por si só um 429.

Mantenha o tratamento de idempotência para outras falhas também. Um erro de servidor ou resposta perdida pode ocorrer após o início de uma escrita.

Em resumo

  1. Leia a cota nas respostas.

    O limite aplicável depende do grupo, do plano e de qualquer override. Um número fixo pode ficar desatualizado.

  2. Coordene remetentes que compartilham uma cota.

    Limites de envio se aplicam a toda a organização, então chaves separadas não criam orçamentos de envio separados.

  3. Aguarde antes de tentar novamente após um 429.

    Retry-After informa o atraso em segundos. Limite suas tentativas. Preserve a chave de idempotência para a mesma escrita.

  4. Trate os headers como estado compartilhado.

    Requisições restantes podem ser consumidas por outros workers, então o controle de ritmo reduz falhas de limitação de requisições sem eliminá-las.

Coloque em prática.

Continue com a documentação, guias e exemplos sobre este tópico. Os recursos estão em inglês.

Obtenha um resumo de implementação

Construa na mesma rede.

Uma chave de API de teste é sua imediatamente. A produção é desbloqueada quando adicionar um método de pagamento e verificar um remetente.

Sua próxima ideia.
Pronta para conectar.