Límites de uso y cuota
Dos cifras, y solo una rechaza
Un volumen mensual es lo que incluye tu plan, y un límite de ráfaga limita las peticiones por segundo para que un cliente no desplace a los demás.
Solo el límite de ráfaga rechaza una petición. Pasarte del volumen incluido no te corta el acceso: tu integración sigue funcionando, y un tráfico que se asienta bastante por encima de lo que pagas es una conversación sobre subir de plan en tu siguiente renovación, no un 429 a las tres de la mañana. Escribe tu cliente contra el límite de ráfaga; la cifra mensual es el tamaño del plan que compraste.
Ambos los fija tu plan. El consumo actual está en la
página de claves y en GET /v1/api/me; las cifras de cada plan están en la
página para empresas.
Cabeceras
Todas las respuestas llevan tu situación actual, para que un cliente que se porte bien pueda ir más despacio antes de que le rechacen y no después.
RateLimit-Limit: 100000
RateLimit-Remaining: 58796
RateLimit-Reset: 1725148800
RateLimit-Policy: 100000;w=2592000, 20;w=1| Cabecera | Significado |
|---|---|
RateLimit-Limit | Peticiones permitidas en la ventana actual. |
RateLimit-Remaining | Peticiones que quedan. Mira esto en lugar de contar tus propias llamadas. |
RateLimit-Reset | Marca de tiempo Unix en la que la ventana se renueva. |
Retry-After | Se envía solo con un 429. Segundos que esperar, y es la autoridad: prefiérela a cualquier espera que calcules tú. |
Esperar correctamente entre reintentos
async function call(request, attempts = 5) {
for (let attempt = 0; attempt < attempts; attempt++) {
const response = await fetch(request);
if (response.status !== 429 && response.status < 500) {
return response;
}
// El servidor sabe cuándo te va a dejar entrar otra vez. Créele.
const retryAfter = Number(response.headers.get("Retry-After") ?? 0);
const backoff = retryAfter > 0
? retryAfter * 1000
: Math.min(2 ** attempt * 250, 30_000);
// Sin margen aleatorio, una flota de procesos reintenta a la vez y
// recrea el pico que provocó el 429 en primer lugar.
await sleep(backoff + Math.random() * 500);
}
throw new Error("Exhausted retry budget");
}Gastar menos cuota
- Usa webhooks. Una entrega no cuesta cuota. Consultar un mercado cada cinco minutos para pillar un cambio que ocurre dos veces al día es la fuente más común de peticiones desperdiciadas.
- Pide solo lo que ha cambiado.
updated_sinceconvierte una relectura completa en un puñado de fichas. - Envía If-None-Match. Un 304 no cuenta contra tu cuota.
- Pagina más grande. Una petición de 200 fichas cuesta una petición; cuatro de 50 cuestan cuatro.
- Expande en lugar de seguir enlaces.
expand=imagesevita una petición extra por inmueble. - Prueba con claves de pruebas. Una clave
sk_test_no consume tu cuota de producción, así que una batería de CI ruidosa no cuesta nada.
Si necesitas más
Cuéntanos qué estás construyendo en lugar de esquivar el límite. Un volumen alto sostenido suele servirse mejor con una exportación que con un rastreo más rápido, y preferimos subirte una cuota antes que verte redescubrir el límite de ráfaga en producción.