# Limits and quotas

The Meteor API applies two kinds of limit per **API key**: a **rate limit** (how many requests per minute) and a **quota** (how many requests per month). Both protect the platform and both are visible in every response — you never have to guess how much you have left.

## Rate limit (requests per minute)

Each key has its own budget of requests per minute, independent of the rest of your workspace's traffic. The default is **100 requests per minute**; your plan may assign the key a higher limit when you issue it.

The limit is counted per key — not per IP, not per workspace — so two keys in the same workspace never compete with each other.

## Headers on every response

Every public API response carries the state of your rate limit, so you can pace yourself without hitting the wall:

| Header | What it says |
|---|---|
| `X-RateLimit-Limit` | The request ceiling for the current window (reflects your key's limit). |
| `X-RateLimit-Remaining` | How many requests you have left in the window. |
| `X-RateLimit-Reset` | Seconds until the window resets. |

```bash
curl -i https://api.met.meteor.com.co/api/v1/runs \
  -H "Authorization: Bearer met_live_your_key"
# ...
# HTTP/2 200
# x-ratelimit-limit: 100
# x-ratelimit-remaining: 99
# x-ratelimit-reset: 60
```

## When you go over: 429 + `Retry-After`

If you exceed the rate limit, the API answers **429** with a `Retry-After` header (seconds to wait) and the standard error body:

```json
{
  "error": {
    "type": "rate_limit_error",
    "code": "rate_limited",
    "message": "Too many requests."
  }
}
```

The **official SDKs retry on their own**, honoring `Retry-After` with backoff, so in most cases you don't have to handle the 429 by hand. If you integrate the API directly, wait the seconds `Retry-After` indicates before retrying.

## Monthly quota

On top of the per-minute rate limit, your plan defines a **monthly quota** of requests. Once you pass it, the API answers **429** with `code: "quota_exceeded"`. The quota depends on your plan; this month's usage and the alerts (80% / 100%) are in the Workbench, under **Settings → Developers → Activity → Health** — the same place that shows daily volume, p95 latency and [every request searchable by `request_id`](errors-and-idempotency.html#when-something-fails-look-at-your-own-requests).

> The Developer plan and the paid plans have different quotas and rate limits. Your plan's exact values are applied to the key when it is issued and are reflected in `X-RateLimit-Limit`.

## In short

- Watch `X-RateLimit-Remaining` to pace yourself.
- A **429** with `rate_limited` is transient → retry after `Retry-After` (the SDKs do it for you).
- A **429** with `quota_exceeded` is your monthly quota → upgrade your plan or wait for the monthly reset.
