Rate limits

To keep the API fast and fair for everyone, requests are rate-limited per partner. The exact quota depends on your agreement — contact your account manager or support@heygrand.com for your limits.

When you exceed the limit

If you send requests faster than your quota allows, the API responds with:

HTTP/1.1 429 Too Many Requests

A 429 is safe to retry — wait briefly, then try again.

Staying within your limits

Reuse a token for its full hour instead of requesting a new one per call. Token requests count toward your usage. See Authentication. On a 429, retry with exponential backoff and a sensible cap — don't hammer the API in a tight loop.

Exponential backoff

A simple, well-behaved retry loop doubles the wait after each failed attempt and gives up after a few tries:

import time, requests

def get_with_retry(url, headers, max_attempts=5):
    delay = 1.0  # seconds
    for attempt in range(max_attempts):
        resp = requests.get(url, headers=headers)
        if resp.status_code != 429:
            return resp
        time.sleep(delay)
        delay *= 2  # 1s, 2s, 4s, 8s, ...
    resp.raise_for_status()
    return resp

Only back off and retry on 429 and 5xx responses. A 400, 401, or 404 won't succeed on retry without changing the request — see Errors & status codes.

Need a higher limit?

If your integration is hitting its ceiling, get in touch — we're happy to discuss quotas that fit your use case. Contact support.

Grand Public API