Rate limiting
Helium MVNE rate-limits by (operator_id, environment_id). Sandbox traffic
never competes with live traffic.
Tiers
| Tier | Reads / min | Writes / min |
|---|---|---|
| Default | 600 | 120 |
| Elevated (contact us) | 3,000 | 600 |
These ceilings are applied per-environment. Burst is smoothed over a rolling 60-second window.
Response headers
Every response includes:
RateLimit-Limit: 600
RateLimit-Remaining: 583
RateLimit-Reset: 42
Reset is seconds until the window refills.
429 behaviour
A throttled request returns 429 Too Many Requests with a
Retry-After header (seconds). Honor it with exponential backoff
plus jitter.
import time, random, requests
def call_with_backoff(fn, max_attempts=5):
for attempt in range(max_attempts):
res = fn()
if res.status_code != 429:
return res
wait = int(res.headers.get("Retry-After", "1"))
time.sleep(wait + random.uniform(0, 0.25 * (2 ** attempt)))
return res
What not to do
- Don't pre-parallelize every bulk operation. 50 workers sharing one key will burn the budget immediately.
- Don't retry on 429 without backoff — you'll stay throttled.
- Don't treat
RateLimit-Remainingas a reservation. Two concurrent calls may both see it at 5.