---
title: "Rate limits and quota"
description: "Tapetide plan quotas, the per-minute burst cap, the headers that report them, and /v1/me/usage."
canonical: "https://developers.tapetide.com/rate-limits/"
---

# Rate limits and quota

Two limits apply to every token. Both are shared between the REST API and the MCP server.

| Limit | Free plan | Paid plans | Error when reached |
| --- | --- | --- | --- |
| Plan quota | 50 successful requests per IST day, no monthly cap | Higher daily and monthly caps, see [pricing](https://tapetide.com/pricing) | `429 quota_exhausted` |
| Burst cap | 60 requests per minute | 60 requests per minute | `429 rate_limited` |

-   Only a `200` counts against the plan quota. Errors are refunded.
-   Days and months reset on IST (Asia/Kolkata) boundaries: midnight IST and the first of the month IST.
-   `/v1/me/usage` and `/v1/openapi.json` are free.

## Headers

| Header | On  | Meaning |
| --- | --- | --- |
| `X-RateLimit-Reset` | Every `200` and `429` | Unix seconds when the binding window resets. |
| `Retry-After` | Every `429` and `503` | Seconds to wait before retrying. |

## Check your position

```bash
curl -s -H "Authorization: Bearer $TAPETIDE_TOKEN" https://api.tapetide.com/v1/me/usage
```

```json
{
  "data": {
    "plan": "free",
    "day":   { "period": "2026-10-16", "used": 12, "limit": 50, "remaining": 38, "resets_at": "2026-10-16T18:30:00.000Z" },
    "month": { "period": "2026-10", "used": 212, "limit": null, "remaining": null, "resets_at": "2026-10-31T18:30:00.000Z" }
  },
  "meta": { "as_of": "2026-10-16T06:01:12.418Z", "route": "getMyUsage" }
}
```

A `limit` of `null` means unlimited for that window.

## Spending fewer units

-   Use `/v1/quotes?symbols=A,B,C` for up to 20 quotes in one unit.
-   Ask for the widest page you need: `limit` up to the endpoint maximum, `days=2000` on price history.
-   Cache reference data such as holidays and financial statements; they change on a schedule, not by the minute.
