Request failed with status code 429

Olá, pessoa. Boa tarde!

Estou com o retorno abaixo quando tento fazer processos sequenciais para atualização da Empresa:
{
response: “Request failed with status code 429”,
status: undefined,
options: undefined,
message: “Request failed with status code 429”,
name: “HttpException”,
}

Os processos que envio são na seguinte sequencia:

  • Alterar empresa
  • Upload de certificado
  • Enviar logo
  • Alterar configuração de NF-e
  • Alterar configuração de NFC-e
  • Alterar configuração de NFS-e

Quando debugo a aplicação na maioria das vezes não ocorre erro. Por isso testei aguardando 2 segundos entre um processo e outro e sem o debug o 429 é retornado, inclusive de forma aleatória entre os processos. As vezes sem o debug não ocorre erro.

Poderiam me ajudar?

Obrigado!

O status code 429 indica que você está fazendo muitas requisições à API em um curto espaço de tempo, acima do limite permitido.

Você está cadastrando várias empresas na seqüência? Qual é exatamente o endpoint que está retornando 429?

Olá @wlandgraf .

Os endpoints são os relacionados a cada um dos processos mencionados e estou fazendo com uma única empresa, mas executo todos na sequencia abaixo. Não tem um endpoint específico que retorna o 429 e o erro é retornado de forma aleatória, ou seja, as vezes é no primeiro processo (envio), as vezes no terceiro e assim sucessivamente. Seguem os processos e endpoints utilizados:

Seria necessário aguardar um tempo maior que 2 segundos entre a execução de um processo e outro?

No momento sim, pois para esses endpoints de configuração, o rate limite é de 4 requisições por segundo. Então, se realmente você faz essas 6 requisições dentro de um segundo acaba chegando no limite.

Como alternativa, no momento, sugiro colocar um tempo de 500 ms entre as requisições, isso deve evitar que se chegue no limite.

Boa noite, @danny.

No processo de atualização da Empresa, você sempre chama todos esses endpoints em sequência, mesmo que os dados não tenham sido alterados? O usuário alterando apenas o ambiente de NFS-e, ou apenas a inscrição estadual, mesmo assim todas as requisições acima são enviadas para a API?

Caso isso esteja ocorrendo, então seria interessante também você alterar o fluxo da sua aplicação para não utilizar de forma desnecessária a API.

Olá, pessoal. Bom dia!

@arimateia , sim sempre que o usuário altera a empresa enviamos para todos esses endpoits, pois os dados da empresa estão em uma única tela e fazem parte de um único registro. Mas estarei vendo a possibilidade de identificar isoladamente de modo que não seja consumido todos os endpoints.

Muito obrigado pelo retorno!

Bom dia, @danny.

A título de exemplo, você pode dar uma conferida no cadastro de Empresa em nosso Console Web. Nele, todas essas operações são feitas de forma isolada, apenas quando requisitada pelo usuário.

Legal, boa dica! Valeu!

Só uma dúvida, observei que no console não tem a possibilidade de visualizar o logo.

Realmente não tem esta opção? Somente através da API?

Correto. Ainda não está disponível no Console Web, apenas via API.

Olá, @wlandgraf . Boa tarde!

Estou retomando essa questão e coloquei um intervalo de 1000 ms entre as requisições e mesmo assim tenho o retorno do 429.

Será que poderia me ajudar a identificar?

Ressalto que estou construindo uma API que poderá ser compartilhada entre várias contas, ou seja, pode ocorrer de várias empresas enviar requisições à Nuvem Fiscal em um curto prazo de tempo. As limitações poderá gerar um grande problema para este caso de uso.

Boa tarde, @danny.

Em qual endpoint você está recebendo código de retorno 429?

De forma aleatória @arimateia , mas principalmente no Upload de certificado https://api.nuvemfiscal.com.br/empresas/{cpf_cnpj}/certificado/upload

Testando outro local do sistema acabei de ter o 429 no GET https://api.nuvemfiscal.com.br/empresas//{cpf_cnpj}/nfse

Estou disponível caso queira que eu faça um teste neste momento.

Obrigado!

@danny

Favor nos informar o IP público que está recebendo o código 429 para que possamos rastrear a causa exata do problema (pode ser via mensagem privada).

189.79.145.197

Estou rodando local, mas quando subir o backend para microservico será outro IP.

@danny

Você está fazendo muitas requisições de obtenção de token de acesso em um curto intervalo de tempo:

O recomendado é que você gere o token apenas uma vez, armazene-o e utilize-o em todas as requisições subsequentes. Somente quando estiver próximo da data de expiração é que um novo token deve ser gerado.

Segue a nossa documentação sobre autenticação:

Pode ser isso mesmo!

Isso realmente acontece. Vou corrigir e retorno sobre o resultado.

Muito obrigado por enquanto!