> For the complete documentation index, see [llms.txt](https://docs.tryterra.co/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tryterra.co/help-center/help-topics/data-api-sdk/historical-data-and-backfill/provider-rate-limits-backfill.md).

# Why am I hitting rate limits during a backfill?

A 424 with "request failed due to a provider rate limit issue" means the provider has rate limited the requests, per user or per developer app depending on the provider.

A `424` with `request failed due to a provider rate limit issue` means **the provider has rate limited the requests**. Depending on the provider, that limit applies to each user or to the whole developer app your users connect through.

Provider quotas vary:

* **Fitbit** is the most restrictive, at roughly 150 requests per user per hour.
* **Withings** is also restrictive.
* **Apple Health** has no provider-side request limit.
* **WHOOP** limits each developer app, by default to 100 requests a minute and 10,000 a day ([WHOOP rate limiting](https://developer.whoop.com/docs/developing/rate-limiting)). Every request for every user on your WHOOP app counts towards it, and one Terra request can take several WHOOP calls: activity reads WHOOP's workouts, sleep reads sleeps and recoveries, and daily reads cycles, recoveries and workouts plus a sleep lookup for each recovery. Webhook-triggered fetches count too.

To mitigate:

* Prefer **webhooks over polling**.
* Avoid concurrent or repeated requests for the same user, and retry only after the window resets.
* Use `to_webhook=true` for large requests. A `504` is expected on large synchronous transfers because of a 30s cutoff.

For **Strava**, Terra has no direct partnership, so limits are tied to the credentials you obtained from Strava yourself. **Request an increase directly from Strava**, which they often grant.

## WHOOP users fail after consent

When WHOOP is rate limiting your app, a user can approve access on WHOOP's screen and still land on your failure page, with the error code `rate_limited`. Completing a connection needs a WHOOP profile request after consent, and WHOOP refuses it while the limit is in force. REST pulls for existing users return the `424` above for the same reason.

Reduce concurrent and retried requests through your WHOOP app, and if you regularly reach the limit, ask WHOOP for an increase: open your app in the [WHOOP Developer Dashboard](https://developer-dashboard.whoop.com/), click **Open Request** and choose **Rate limit increase**.
