Pular para o conteúdo principal
Dois mecanismos distintos controlam o tráfego:
  1. Quota mensal — teto por Organização, alinhado ao seu período de billing contratual.
  2. Rate limit — limite de burst por chave em janela curta.
Ambos aparecem como 429 em formato RFC 7807, com type URIs e semântica de recuperação diferentes.

Quota mensal

Contada em requests bilháveis desde o início do período de billing atual. Os limites do período vêm do seu contrato — tipicamente o dia do mês em que você assinou. Quando excede:
HTTP/1.1 429 Too Many Requests
Content-Type: application/problem+json
Retry-After: 1209600
X-RateLimit-Limit: 10000
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1715040000

{
  "type":     "https://errors.attestly.io/quota-exceeded",
  "title":    "Quota Exceeded",
  "status":   429,
  "detail":   "Monthly quota of 10000 requests exceeded for this billing period.",
  "instance": "/v1/evaluate",
  "quota": {
    "limit": 10000,
    "used":  10000,
    "period_started_at": "2026-04-15T00:00:00Z",
    "period_ends_at":   "2026-05-15T00:00:00Z"
  }
}
O bloco quota é uma extension member do RFC 7807. Headers:
  • Retry-After — segundos até period_ends_at.
  • X-RateLimit-Limit — o teto mensal.
  • X-RateLimit-Remaining0 enquanto sobre o teto.
  • X-RateLimit-Reset — timestamp Unix igual a period_ends_at.
Recuperação: aguarde até period_ends_at, ou nos contate para aumentar o teto.

Rate limit

Proteção de burst por API key. Janela curta — tipicamente dezenas de requests por segundo.
HTTP/1.1 429 Too Many Requests
Content-Type: application/problem+json
Retry-After: 1
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 0

{
  "type":     "https://errors.attestly.io/rate-limit-exceeded",
  "title":    "Rate Limit Exceeded",
  "status":   429,
  "detail":   "Rate limit exceeded.",
  "instance": "/v1/evaluate"
}
Recuperação: faça backoff por Retry-After segundos e tente de novo. Use exponential backoff com jitter em 429s persistentes.

O que conta como request bilhável

ContaNão conta
POST /v1/evaluateGET /v1/sources
POST /v1/intersectionsGET /v1/rulesets (list/get)
POST /v1/distancePOST /v1/rulesets (create)
POST /v1/subjects
Leituras do catálogo e escrita de rulesets não consomem quota.