Solicitudes generales
Cuenta las operaciones autenticadas. Se aplica al conjunto del cliente y también a cada credencial.
Operar · Cuotas
El Conector aplica ventanas fijas de un minuto para proteger el servicio y los transportistas. Los valores pueden variar por cliente, credencial, ambiente y tipo de operación.
Cuenta las operaciones autenticadas. Se aplica al conjunto del cliente y también a cada credencial.
Añade un límite específico a POST /v1/shipments para proteger altas y posibles cargos.
La petición se rechaza antes de llegar al caso de uso o al transportista cuando cualquiera de los contadores aplicables está agotado.
RateLimit-LimitRateLimit-RemainingRateLimit-ResetRetry-AfterHTTP/1.1 200 OK
RateLimit-Limit: 600
RateLimit-Remaining: 524
RateLimit-Reset: 1789059660
X-Correlation-ID: eb56f36d-75f8-4187-9041-fced87ab21edLos números anteriores son ilustrativos; no constituyen una cuota comercial comprometida.
Detén nuevas solicitudes del mismo flujo, respetaRetry-After y añade variación aleatoria al backoff si varios workers comparten la credencial.
HTTP/1.1 429 Too Many Requests
Content-Type: application/problem+json
RateLimit-Limit: 60
RateLimit-Remaining: 0
RateLimit-Reset: 1789059660
Retry-After: 17
X-Correlation-ID: eb56f36d-75f8-4187-9041-fced87ab21ed
{
"type": "https://docs.sendingbay.com/problems/rate_limit_exceeded",
"title": "Límite de solicitudes superado",
"status": 429,
"detail": "Se alcanzó la cuota de esta credencial",
"code": "rate_limit_exceeded",
"correlation_id": "eb56f36d-75f8-4187-9041-fced87ab21ed"
}async function requestWithQuotaRetry(
request: Request,
): Promise<Response> {
const retryRequest = request.clone();
const response = await fetch(request);
if (response.status !== 429) return response;
const retryAfter = Number(response.headers.get("Retry-After") ?? "1");
await new Promise((resolve) => setTimeout(resolve, retryAfter * 1000));
// Conserva Idempotency-Key y el mismo cuerpo si era un alta de envío.
return fetch(retryRequest);
}