TurbodatoDocs

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:

Headers de respuesta
RateLimit-Limit: 60
RateLimit-Remaining: 52
RateLimit-Reset: 42
RateLimit-Policy: 60;w=60
HeaderQué dice
RateLimit-LimitLlamadas por minuto de esta key.
RateLimit-RemainingCuántas te quedan en la ventana. Es una estimación: tomalo como guía, no como cuenta exacta.
RateLimit-ResetSegundos hasta que arranca la ventana siguiente.
RateLimit-PolicyEl 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

Respuesta
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.

Reintento con Retry-After
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á /status antes de bajar todo. Son tres números; si no cambiaron, no hay nada nuevo. Ver la receta.
  • Pedí páginas grandes. limit=200 en /data recorre un catálogo de 2.000 productos en diez llamadas, contra cien con el default de 20.
  • Sumá stats=false al 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, /dates y /semaphore se recalculan como mucho cada cinco minutos.

En esta página