Skip to main content

Usage & Limits

Pagination​

List endpoints that return large result sets support pagination via the page, per_page, and offset query parameters. per_page controls how many items are returned per page (up to 100). Use page (1-based) or offset (0-based item skip count) to advance through the result set — do not use both in the same request. Iterate by incrementing page until a response returns fewer items than per_page.

Rate limits​

RM API keys are rate-limited to 60 requests per minute by default. Exceeding this limit returns 429 Too Many Requests. The limit resets on a rolling one-minute window.

Every response tells you where you stand, so you never have to guess or spend a request finding out:

HeaderMeaning
X-RateLimit-LimitRequests allowed per window for the key you used.
X-RateLimit-RemainingRequests still available in the current window. Never negative.
X-RateLimit-ResetUnix timestamp (seconds) when the window frees up.

The request carrying the headers is itself counted, so an idle key's first response reports one fewer than the limit.

A 429 carries the same three headers plus Retry-After, the number of seconds to wait. Prefer Retry-After over your own backoff schedule when it is present — it is the actual reset, not an estimate.

If you receive a 429 and no Retry-After, wait before retrying. The recommended strategy is exponential backoff: after the first failure wait 1 second, then double the delay on each subsequent retry (2 s, 4 s, 8 s, …), up to a reasonable maximum (e.g. 60 seconds). Adding a small random jitter (±10–20% of the wait time) prevents multiple concurrent clients from retrying in lockstep.

If your integration regularly reaches the limit, consider batching requests (e.g. using GET /preferences or PUT /preferences for multiple listings at once) or contact Wheelhouse to discuss a higher limit.

GET /usage reports volumes, error rates, and response times over a window of up to 7 days, broken down by day, by endpoint, and by API key. It is cached for a few minutes, so poll it on the order of minutes, not seconds, and read generated_at to see how fresh a response is. Live rate-limit headroom is on the X-RateLimit-* headers of any response — they are current as of that request and cost nothing extra.