API de FlavosoFundamentosLímites de solicitudes
Límites de solicitudes
120 solicitudes por minuto y conexión. Cada respuesta indica cuántas quedan; si las superas, recibes 429 con Retry-After.
El límite
Cada conexión puede hacer 120 solicitudes por minuto. El límite se aplica por conexión, es decir, por negocio: una app con muchos negocios tiene un cupo propio para cada uno. La ventana dura 60 segundos y empieza con la primera solicitud. GET /me indica el límite en rate_limit.
Si consultas los pedidos cada diez segundos y entre medias actualizas estados, nunca te acercarás al límite.
Cabeceras
| Cabecera | Significado |
|---|---|
RateLimit-Limit | Solicitudes por ventana: 120. |
RateLimit-Remaining | Solicitudes que quedan en la ventana actual. |
RateLimit-Reset | Segundos hasta que empieza una ventana nueva. |
Retry-After | Solo en un 429: segundos hasta el siguiente intento. |
HTTP/1.1 200 OK
RateLimit-Limit: 120
RateLimit-Remaining: 3
RateLimit-Reset: 17Esperar antes de reintentar
Ante un 429 rate_limited, espera Retry-After segundos y vuelve a enviar la misma solicitud. Si RateLimit-Remaining está en 0, espera hasta RateLimit-Reset antes de la siguiente solicitud. Controla la espera por conexión, no para toda tu app.
// One queue per connection: the limit counts per connection (= per restaurant).
const pausedUntil = new Map(); // connection id → time
export async function send(conn, request) {
const wait = (pausedUntil.get(conn.id) ?? 0) - Date.now();
if (wait > 0) await new Promise((r) => setTimeout(r, wait));
const res = await request();
const remaining = Number(res.headers.get("ratelimit-remaining"));
const reset = Number(res.headers.get("ratelimit-reset"));
if (res.status === 429) {
pausedUntil.set(conn.id, Date.now() + Number(res.headers.get("retry-after") ?? 1) * 1000);
return send(conn, request); // the same request again, after the pause
}
if (remaining === 0 && reset > 0) pausedUntil.set(conn.id, Date.now() + reset * 1000);
return res;
}Ahorrar solicitudes
- Webhooks o GET /events en lugar de consultas constantes.
updated_sinceen lugar de volver a pedir la lista entera.PUT /menuyPOST /menu/availability(hasta 500 entradas) en lugar de cientos dePATCHsueltos.- Leer la carta una vez y después seguir los eventos
menu.*.
Autenticaciones fallidas
Las solicitudes con un token que Flavoso no conoce, o sin token, se cuentan además por dirección IP. Si llegan más de 30 por minuto desde una dirección, Flavoso responde con 429 en lugar de 401. Un token tuyo caducado o revocado no cuenta: siempre recibe 401, para que puedas renovarlo, incluso para muchos negocios a la vez. Si atiendes muchos negocios desde un servidor, marca una conexión como desconectada en cuanto a un 401 le siga invalid_grant al renovar, en lugar de seguir intentándolo.
El endpoint de token tiene sus propios límites; allí la respuesta es 429 temporarily_unavailable con Retry-After.
¿Algo no ha quedado claro? Escribe a support@flavoso.com e indica el identificador de X-Request-Id. Así podremos encontrar tu solicitud en el registro.