Saltar al contenido principal
Dos mecanismos distintos controlan el tráfico:
  1. Quota mensual — tope por Organización, alineado a tu periodo de billing contractual.
  2. Rate limit — límite de burst por clave en ventana corta.
Ambos aparecen como 429 en formato RFC 7807, con type URIs y semántica de recuperación distintos.

Quota mensual

Contada en requests facturables desde el inicio del periodo de billing actual. Los límites del periodo vienen de tu contrato — típicamente el día del mes en que firmaste. Cuando se 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"
  }
}
El bloque quota es una extension member de RFC 7807. Headers:
  • Retry-After — segundos hasta period_ends_at.
  • X-RateLimit-Limit — el tope mensual.
  • X-RateLimit-Remaining0 mientras estés sobre el tope.
  • X-RateLimit-Reset — timestamp Unix igual a period_ends_at.
Recuperación: espera hasta period_ends_at, o contáctanos para subir el tope.

Rate limit

Protección de burst por API key. Ventana corta — típicamente decenas 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"
}
Recuperación: haz backoff por Retry-After segundos y reintenta. Usa exponential backoff con jitter en 429s persistentes.

Qué cuenta como request facturable

CuentaNo cuenta
POST /v1/evaluateGET /v1/sources
POST /v1/intersectionsGET /v1/rulesets (list/get)
POST /v1/distancePOST /v1/rulesets (create)
POST /v1/subjects
Las lecturas del catálogo y la escritura de rulesets no consumen quota.