Skip to main content
To keep the platform fast and fair for everyone, the Metal API enforces rate limits. Limits are applied per organization and depend on your plan.

What to expect

When you exceed your rate limit, the API responds with:
HTTP/1.1 429 Too Many Requests
{ "error": "rate limit exceeded" }
Requests are throttled at the organization level, so all keys belonging to your organization share the same budget.

Handling 429 responses

Treat 429 as a signal to slow down, not as a failure. Retry the request after a short delay, increasing the delay on repeated 429s (exponential backoff).
import time
import requests

def get_with_backoff(url, headers, max_retries=5):
    delay = 1
    for _ in range(max_retries):
        res = requests.get(url, headers=headers)
        if res.status_code != 429:
            return res
        time.sleep(delay)
        delay *= 2  # exponential backoff
    return res

Best practices

Back off exponentially

Double the wait time after each consecutive 429 to let the limit recover.

Add jitter

Randomize backoff slightly so retries from multiple workers don’t align.

Batch where possible

Use list-based bulk operations instead of many single-record calls.

Cache reads

Avoid re-fetching data that rarely changes within a short window.
If your integration consistently needs higher throughput, contact support@metal.ai to discuss limits for your plan.