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

CabeceraSignificado
RateLimit-LimitSolicitudes por ventana: 120.
RateLimit-RemainingSolicitudes que quedan en la ventana actual.
RateLimit-ResetSegundos hasta que empieza una ventana nueva.
Retry-AfterSolo en un 429: segundos hasta el siguiente intento.
HTTP/1.1 200 OK
RateLimit-Limit: 120
RateLimit-Remaining: 3
RateLimit-Reset: 17

Esperar 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_since en lugar de volver a pedir la lista entera.
  • PUT /menu y POST /menu/availability (hasta 500 entradas) en lugar de cientos de PATCH sueltos.
  • 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.