Rate limits and allowances
Handle short burst limits and monthly product allowances without putting a broken image in front of an end user.
GymAssets applies two controls: a short-window burst limit and a monthly allowance per product. An image request and a server-side JSON request are refused in different ways.
Burst limits
A request that arrives too quickly returns 429 rate_limited with a retry-after
header. Retry after that delay and use exponential backoff if another refusal
arrives.
The limiter is best effort and protects short spikes. It is not the monthly usage ceiling.
Monthly allowances
Every request that reaches GymAssets counts, including repeated URLs and cache hits at the GymAssets edge. Allowances are separate by product. Musclegram usage does not draw on the Equipment allowance.
Exhausted allowances
Musclegram images continue rendering in a reduced form and include
x-quota-status: exhausted. The data API returns 402 quota_exceeded.
Equipment images remain available and unchanged. They do not use a customer palette.