Límites de uso
Los límites se publican en cabeceras estándar, en todas las respuestas. Tu cliente no tiene que adivinar cuánto le queda ni cuánto esperar.
Las cabeceras
RateLimit-Limit: 100
RateLimit-Remaining: 87
RateLimit-Reset: 42
RateLimit: limit=100, remaining=87, reset=42
Reset son segundos hasta que puedas volver a pedir, no una marca
de tiempo absoluta: así no depende de que el reloj de tu servidor esté sincronizado con el
nuestro.
Y no es "cuándo caduca la petición más vieja" sino "cuándo el conteo baja del límite", que no es lo mismo cuando la ventana sigue registrando los intentos rechazados. Reportar lo primero diría "espera 3 segundos" cuando faltan cuarenta.
Si consumes la API desde un navegador, están expuestas vía CORS junto con
Belfort-Request-Id. Emitir cabeceras que el navegador no puede leer es emitirlas para
nadie.
Cuando te frenan
Recibes 429 con Retry-After. Pero no todos los 429 se
arreglan esperando, y tratarlos igual bloquea un worker para nada:
RATE_LIMITED |
Vas demasiado rápido. Espera lo que diga Retry-After y reintenta. |
PII_DECRYPT_CAP_REACHED |
Agotaste el presupuesto diario de revelado de datos personales. Se libera en ~24 horas: no es reintentable en ningún plazo razonable. Es un tope anti-exfiltración, puesto justo para que una key robada no pueda volcar el vault. |
TRIAL_LIMIT_REACHED |
Se acabó el cupo del periodo de prueba. Esperar no lo arregla. |
Recomendación concreta: topa el plazo que honras (30 segundos es razonable) y
trata los dos últimos como no reintentables. Un Retry-After honesto de 86 400 segundos
es correcto por nuestra parte y bloquearía tu worker un día entero si lo obedeces literalmente.
Cuáles son tus límites
Dependen de tu plan y del entorno, así que no se transcriben aquí: los publica la propia API en
GET /v1/compliance/limits,
que es la fuente única. Léelos en vez de copiarlos — cambian sin que cambie tu código.
Reintentos con cabeza
- Espera exponencialmente y añade una variación aleatoria: sin ella, todos tus workers reintentan a la vez y reproducen el pico que causó el freno.
- Usa
Idempotency-Keyen las escrituras. Reintentar sin ella es cómo se crean duplicados. - Los
503también traenRetry-After. Respétalo.