Cuotas y errores
Cada key puede tener una cuota diaria que se reinicia a medianoche en America/Santiago. Además, la política de uso limita el tráfico por IP a 10 requests por segundo, con ráfagas de hasta 20.
Headers de cuota
| Header | Significado |
|---|---|
X-RateLimit-Limit | Cuota diaria asignada a la key. |
X-RateLimit-Remaining | Requests disponibles después de la llamada. |
X-RateLimit-Reset | Timestamp Unix del próximo reinicio. |
Retry-After | Segundos a esperar antes de reintentar. Aparece en 429 y en algunos 503. |
Los cuatro headers están expuestos vía CORS, así que también son legibles desde el navegador.
Códigos de estado del middleware
401 Unauthorized: falta la key, es inválida o fue revocada. IncluyeWWW-Authenticate: Bearer.403 Forbidden: no forma parte del flujo de API key en los endpoints de datos. Hoy solo aparece en las rutas de cuenta cuando el origen no es confiable. No lo interpretes como cuota agotada.429 Too Many Requests: cuota diaria agotada o exceso de tasa. Cuando se agota la cuota, incluye los cuatro headers anteriores.5xx: falla transitoria o datos en actualización. La validación de keys y algunos resúmenes pueden responder503conRetry-After: 5.
Retry con backoff y jitter
async function requestWithRetry(url: string, apiKey: string) {
for (let attempt = 0; attempt < 4; attempt += 1) {
const response = await fetch(url, {
headers: { "X-Api-Key": apiKey },
});
if (response.ok || ![429, 500, 502, 503, 504].includes(response.status)) {
return response;
}
const retryAfterHeader = response.headers.get("Retry-After");
const retryAfterSeconds =
retryAfterHeader === null || retryAfterHeader.trim() === ""
? Number.NaN
: Number(retryAfterHeader);
const fallbackMs = 500 * 2 ** attempt + Math.random() * 250;
const waitMs = Number.isFinite(retryAfterSeconds) && retryAfterSeconds >= 0
? retryAfterSeconds * 1000
: fallbackMs;
await new Promise((resolve) => setTimeout(resolve, waitMs));
}
throw new Error("BuscaFondos no respondió después de 4 intentos");
}No reintentes 401 ni 403: corrige la autenticación primero. Antes de automatizar cargas grandes, lee la política de uso.