Pular para o conteúdo principal

Como Funciona

A API First Answer aplica limites de requisições por projeto em uma janela deslizante por minuto. Todas as chaves de API dentro do mesmo projeto compartilham o mesmo contador de limite de requisições. O limite de requisições do seu projeto é determinado pelo seu plano.

Cabeçalhos de Limite de Requisições

Toda resposta da API inclui cabeçalhos para ajudá-lo a acompanhar seu uso:
CabeçalhoDescrição
X-RateLimit-LimitMáximo de requisições permitidas por minuto
X-RateLimit-RemainingRequisições restantes na janela atual
Retry-AfterSegundos para esperar antes de fazer outra requisição (apenas em respostas 429)

Excedendo o Limite

Quando você excede seu limite de requisições, a API retorna uma resposta 429 Too Many Requests:
429
{
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Rate limit exceeded.",
    "retry_after_seconds": 23
  }
}
O campo retry_after_seconds indica exatamente quantos segundos esperar antes de tentar novamente.

Lidando com Limites de Requisições

Tentar Novamente com Backoff

A abordagem mais simples é respeitar o valor de retry_after_seconds:
import time
import requests

API_KEY = "SUA_CHAVE_API"
BASE_URL = "https://api.firstanswer.ai/v1"

def api_request(endpoint):
    response = requests.get(
        f"{BASE_URL}{endpoint}",
        headers={"api-key": API_KEY},
    )

    if response.status_code == 429:
        retry_after = response.json()["error"]["retry_after_seconds"]
        print(f"Limite excedido. Tentando novamente em {retry_after}s...")
        time.sleep(retry_after)
        return api_request(endpoint)

    return response.json()

Distribuir Requisições ao Longo do Tempo

Se você precisa fazer muitas requisições, distribua-as uniformemente dentro da janela de limite em vez de enviá-las em rajadas:
import time
import requests

API_KEY = "SUA_CHAVE_API"
BASE_URL = "https://api.firstanswer.ai/v1"
RATE_LIMIT = 10  # requisições por minuto
DELAY = 60 / RATE_LIMIT  # 6 segundos entre requisições

endpoints = [
    "/brands/",
    "/monitored-prompts/",
    "/cited-sources/",
    "/monitored-competitors/",
    "/dashboard/",
]

for endpoint in endpoints:
    response = requests.get(
        f"{BASE_URL}{endpoint}",
        headers={"api-key": API_KEY},
    )
    print(f"{endpoint}: {response.status_code}")
    time.sleep(DELAY)

Boas Práticas

Cache de respostas

Armazene respostas da API localmente e reutilize-as quando os dados não tiverem mudado. A maioria dos dados de monitoramento é atualizada diária ou semanalmente.

Use paginação com sabedoria

Cada página retorna até 100 itens por padrão. Use os parâmetros page e per_page para controlar o tamanho da página e iterar pelos resultados eficientemente.

Solicite apenas o necessário

Direcione endpoints e recursos específicos em vez de buscar tudo em cada sincronização.

Monitore seu uso

Acompanhe respostas 429 nos logs da sua aplicação para identificar quando você está se aproximando dos seus limites.

Precisa de Limites Maiores?

Se sua integração requer um limite de requisições maior, entre em contato com nossa equipe para discutir planos Enterprise com limites personalizados.