> ## Documentation Index
> Fetch the complete documentation index at: https://docs.enrow.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Limites de Taxa

> Limites de taxa da API da Enrow por chave de API, a resposta 429 e como lidar com o throttling usando backoff e endpoints em lote

A API da Enrow aplica limites de taxa para garantir o uso justo e manter a qualidade do serviço. O limite é o mesmo em todos os endpoints e todos os planos, é aplicado **por chave de API** e é medido em **requisições por segundo (RPS)**. Esta página explica os limites padrão, o que acontece quando você os excede e como permanecer dentro da cota ao escalar.

## Quais são os limites de taxa padrão?

Todo endpoint POST permite **10 requisições por segundo** por chave de API. O limite é idêntico em todos os endpoints e todos os planos:

| Endpoint                    | Limite de Taxa |
| --------------------------- | -------------- |
| `POST /email/find/single`   | 10 req/s       |
| `POST /email/find/bulk`     | 10 req/s       |
| `POST /email/verify/single` | 10 req/s       |
| `POST /email/verify/bulk`   | 10 req/s       |
| `POST /phone/single`        | 10 req/s       |
| `POST /phone/bulk`          | 10 req/s       |

Os endpoints GET não têm limite de taxa, portanto, recuperar resultados — por exemplo, o [resultado de email único](/pt/api-reference/email-finder/get-single-result) ou os [resultados em lote](/pt/api-reference/email-finder/get-bulk-results) — não conta para a sua cota.

<Note>
  Os limites de taxa são **por chave de API** e medidos em **requisições por segundo** (RPS). Cada [chave de API](/pt/authentication) tem sua própria cota independente.
</Note>

## O que acontece quando excedo o limite de taxa?

Quando você excede o limite de taxa, a API retorna uma resposta `429 Too Many Requests`:

```json theme={null}
{
  "message": "Too Many Requests"
}
```

A maneira recomendada de lidar com um `429` é implementar backoff exponencial — aguardar um atraso progressivamente maior antes de cada nova tentativa, para que a chave de API tenha tempo de voltar a ficar abaixo do limite:

```javascript theme={null}
async function requestWithRetry(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const response = await fetch(url, options);

    if (response.status === 429) {
      const delay = Math.pow(2, attempt) * 1000;
      await new Promise(resolve => setTimeout(resolve, delay));
      continue;
    }

    return response;
  }

  throw new Error('Max retries exceeded');
}
```

Para a lista completa de códigos de resposta e como lidar com eles, consulte [Códigos de status](/pt/status-codes) e [Tratamento de erros](/pt/error-handling).

## Como posso evitar atingir o limite de taxa?

A maneira mais eficaz de permanecer dentro da cota é enviar requisições menos numerosas e maiores, e receber resultados por meio de webhooks em vez de polling.

<AccordionGroup>
  <Accordion title="Use endpoints em lote">
    Em vez de fazer 100 requisições únicas, faça 1 requisição em lote (até 5.000 itens para email, 3.000 para telefone). Um único POST em lote conta como 1 requisição no seu limite de taxa.

    ```javascript theme={null}
    // ❌ 100 requests = 10 seconds at 10 RPS
    for (const contact of contacts) {
      await findEmail(contact);
    }

    // ✅ 1 request
    await findEmailsBulk(contacts);
    ```

    Consulte [Encontrar Emails](/pt/api-reference/email-finder/find-bulk) e [Verificar Emails](/pt/api-reference/email-verifier/verify-bulk) para começar.
  </Accordion>

  <Accordion title="Use webhooks em vez de polling">
    Fazer polling no endpoint GET desperdiça a cota do seu limite de taxa. Use [webhooks](/pt/how-webhooks-work) para receber resultados automaticamente assim que uma busca ou verificação for concluída.
  </Accordion>

  <Accordion title="Armazene resultados em cache">
    Armazene resultados para evitar chamadas de API redundantes para o mesmo contato, o que também economiza [créditos](/pt/credits-billing).
  </Accordion>
</AccordionGroup>

## Posso obter limites de taxa maiores?

Sim. A Enrow pode aumentar seu RPS caso a caso. Entre em contato conosco em [api@enrow.io](mailto:api@enrow.io) com seu caso de uso e volume esperado.

## FAQ

<AccordionGroup>
  <Accordion title="Os limites de taxa são compartilhados entre endpoints?">
    Não. O limite de 10 req/s se aplica de forma independente a cada endpoint POST, e a cota é monitorada **por chave de API** em vez de por conta.
  </Accordion>

  <Accordion title="As requisições GET contam para o limite de taxa?">
    Não. Os endpoints GET não têm limite de taxa, portanto, fazer polling para obter resultados não consome sua cota de RPS. Dito isso, os webhooks ainda são preferíveis ao polling frequente.
  </Accordion>

  <Accordion title="Uma requisição em lote conta como uma requisição?">
    Sim. Um único POST em lote conta como 1 requisição no seu limite de taxa, mesmo que possa conter até 5.000 itens para email ou 3.000 para telefone.
  </Accordion>

  <Accordion title="Qual código de status sinaliza um erro de limite de taxa?">
    Uma resposta `429 Too Many Requests` com o corpo `{ "message": "Too Many Requests" }`. Tente novamente com backoff exponencial. Consulte [Tratamento de erros](/pt/error-handling) para mais detalhes.
  </Accordion>
</AccordionGroup>

## Próximos passos

<CardGroup cols={2}>
  <Card title="Encontrar emails em lote" icon="layer-group" href="/pt/api-reference/email-finder/find-bulk">
    Execute até 5.000 buscas de email em uma única requisição para economizar a cota do limite de taxa.
  </Card>

  <Card title="Webhooks" icon="bell" href="/pt/how-webhooks-work">
    Receba resultados automaticamente em vez de fazer polling nos endpoints GET.
  </Card>

  <Card title="Tratamento de erros" icon="triangle-exclamation" href="/pt/error-handling">
    Lide com 429 e outras respostas de forma elegante na sua integração.
  </Card>

  <Card title="Créditos e cobrança" icon="coins" href="/pt/credits-billing">
    Veja como os créditos são consumidos para cada endpoint.
  </Card>
</CardGroup>
