Límites de solicitudes y cuotas
Cuántas solicitudes puedes hacer y qué pasa cuando alcanzas un límite.
Los límites dependen de tu plan y se cuentan por clave de API.
Solicitudes por minuto#
Una ventana deslizante de un minuto por clave. Cada respuesta exitosa incluye X-RateLimit-Remaining con las solicitudes que te quedan en la ventana actual. Si superas el límite, recibes 429 rateLimited con error.retryAfter en segundos.
X-RateLimit-Remaining: 59{
"error": {
"code": "rateLimited",
"message": "Rate limit exceeded",
"retryAfter": 12
}
}Cuota mensual#
Cada clave tiene una cuota mensual de solicitudes que se reinicia el día 1 de cada mes a las 00:00 UTC. Cuando se agota, las solicitudes devuelven 429 rateLimited con error.reason igual a quota hasta el mes siguiente.
{
"error": {
"code": "rateLimited",
"message": "Monthly quota exceeded",
"reason": "quota"
}
}Escaneos diarios#
Una llamada a POST /scans que realmente inicia un escaneo consume un escaneo del límite diario de tu plan, que se comparte con los escaneos que inicias en la app. Leer reportes y las llamadas de escaneo que devuelven un reporte vigente de la caché no consumen el límite de escaneos (aunque sí cuentan como solicitudes a la API).
Límites por plan#
| Plan | Solicitudes / minuto | Solicitudes / mes |
|---|---|---|
Pro | 60 | 100.000 |
Buenas prácticas#
- Guarda los reportes de tokens en tu propia caché; un reporte se mantiene vigente durante varios minutos.
- Ante un 429, espera
retryAftersegundos y luego reintenta con backoff exponencial y jitter. - Consulta el estado de los escaneos cada 3–5 segundos, no en un bucle sin pausas.
- Distribuye los trabajos por lotes en el tiempo en lugar de lanzarlos en paralelo.