Límites de uso
La API de Turbodato admite 60 llamadas por minuto por key. Qué headers informan el cupo, qué pasa con un 429 y cómo paginar sin gastar de más.
60 llamadas por minuto por API key. Todas cuentan igual, sin importar el endpoint ni cuántas filas devuelva. No hay límite diario.
El límite no está para cuidar capacidad: está para frenar un cron descontrolado o una key filtrada. Una integración normal queda muy por debajo. Si la tuya necesita más, escribinos con el caso de uso y te lo subimos para esa key.
Headers
Las respuestas autenticadas traen el estado del contador, no sólo el 429, así que podés
regularte antes de chocar:
RateLimit-Limit: 60
RateLimit-Remaining: 52
RateLimit-Reset: 42
RateLimit-Policy: 60;w=60| Header | Qué dice |
|---|---|
RateLimit-Limit | Llamadas por minuto de esta key. |
RateLimit-Remaining | Cuántas te quedan en la ventana. Es una estimación: tomalo como guía, no como cuenta exacta. |
RateLimit-Reset | Segundos hasta que arranca la ventana siguiente. |
RateLimit-Policy | El límite y el largo de la ventana en segundos. |
La ventana es el minuto calendario (de :00 a :59), no los últimos sesenta segundos. Un 401 no
trae estos headers: sin una key válida no hay contador que informar.
Cuando lo pasás
HTTP/1.1 429 Too Many Requests
Retry-After: 42
Content-Type: application/json
{ "error": "Rate limit exceeded" }Esperá los segundos que dice Retry-After y reintentá. Mientras tanto, cualquier llamada con esa
key vuelve a rebotar, así que reintentar antes sólo alarga la espera de tu proceso.
async function get(url) {
for (let intento = 0; intento < 5; intento++) {
const res = await fetch(url, { headers: { "X-API-Key": process.env.TURBODATO_API_KEY } });
if (res.status !== 429) return res;
const espera = Number(res.headers.get("Retry-After") ?? 60);
await new Promise((r) => setTimeout(r, espera * 1000));
}
throw new Error("Seguimos limitados después de 5 intentos");
}Gastar menos llamadas
- Sondeá
/statusantes de bajar todo. Son tres números; si no cambiaron, no hay nada nuevo. Ver la receta. - Pedí páginas grandes.
limit=200en/datarecorre un catálogo de 2.000 productos en diez llamadas, contra cien con el default de 20. - Sumá
stats=falseal paginar. No cambia cuántas llamadas hacés, pero cada una responde más rápido. - Para el catálogo entero,
/export. Una sola llamada, sin paginar. - No pidas más de una vez cada cinco minutos lo que no cambia tan seguido:
/status,/filters,/datesy/semaphorese recalculan como mucho cada cinco minutos.