Skip to main content
The ShipPeek API enforces rate limits per endpoint to ensure reliability for all users.

Limits by endpoint

EndpointLimit
Authentication5 requests/minute
Rate shopping (/rates)30 requests/minute
Booking (/book)20 requests/minute
Tracking (/track)120 requests/minute

Response headers

Every response includes rate limit headers:
HeaderDescription
X-RateLimit-LimitMaximum requests allowed per window
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetSeconds until the limit resets

Handling rate limits

When you exceed the limit, the API returns 429 Too Many Requests. Use the X-RateLimit-Reset header to determine when to retry.
async function fetchWithRetry(url, options) {
  const response = await fetch(url, options);

  if (response.status === 429) {
    const resetSeconds = parseInt(response.headers.get('X-RateLimit-Reset'), 10);
    await new Promise(resolve => setTimeout(resolve, resetSeconds * 1000));
    return fetch(url, options);
  }

  return response;
}

Recommendations

  • Cache rate quotes — Use the quote ID to retrieve rates later instead of making repeated rate requests.
  • Use streaming — The /rates/ltl/stream endpoint returns rates as they arrive via SSE, reducing the need for polling.
  • Batch operations — Group related items into a single rate request rather than making separate requests per item.