# Plans, limits & credits

> Crius API plans (Free, Starter, Pro, Business, Enterprise), monthly credits, requests per second, WebSocket limits, credit cost per endpoint and the rate-limit response headers.

Source: https://crius.sh/docs/plans-and-limits/

Every plan has a **rate limit** (requests per second, with a burst of twice that), a **monthly credit quota**, WebSocket limits and a set of endpoints. Each request costs a number of **credits** depending on the endpoint; cheap calls such as prices cost 1.

## Plans

| Plan | Price | Credits / month | Requests / s | WebSockets | Subscriptions |
|---|---|---|---|---|---|
| Anonymous (no key) | free | n/a, per IP | 2 | none | none |
| **Free** | $0 | 1,000,000 | 10 | 1 | 10 |
| **Starter** | $19 / month | 10,000,000 | 25 | 3 | 100 |
| **Pro** | $79 / month | 50,000,000 | 75 | 10 | 1,000 |
| **Business** | $249 / month | 200,000,000 | 200 | 50 | 10,000 |
| **Enterprise** | custom | custom | custom | custom | custom |

Paying for 6 months gives 10% off, and 12 months 20% off. Plans are paid on-chain on Robinhood Chain in USDG, ETH or WETH; see [Billing & payments](https://crius.sh/docs/reference/billing/). Credits reset at the start of each UTC month and are shared by all of an account's keys.

## Endpoints by plan

| Plan needed | Endpoints | Credits per call |
|---|---|---|
| Anonymous | token profile, price, batch prices, batch profiles, pools, pool, token lists, search, stats, volume, launchpads, security (cached), status, chains | 1 |
| Anonymous | trades, candles | 2 |
| Free | holders, launch, activity feed, hooks, hook detail | 2 |
| Free | holder snapshot, top traders, liquidity & locks, developer profile | 5 |
| Free | WebSocket stream (per connection) | 1 |
| Starter | wallet profile, wallet trades, fees & claims | 5 |
| Starter | holder cohort, holder history, bundles, bubble map, wallet connections | 10 |
| Starter | fresh security simulation (`/security?fresh=1`) | 20 |
| Enterprise | `firehose:trades` stream channel (every trade on chain) | |

Each endpoint page in the [API reference](https://crius.sh/docs/reference/tokens/) shows its plan and cost. Calls to the Account API (`/v1/account/*`) are **free** and don't count against your credits.

## Rate-limit headers

Every data response carries:

| Header | Meaning |
|---|---|
| `x-ratelimit-limit` | Your requests-per-second limit for this key |
| `x-ratelimit-remaining` | Requests left in the current burst |
| `x-ratelimit-reset` | Milliseconds until the bucket refills (1000) |
| `x-credits-cost` | Credits this request cost |
| `x-quota-remaining` | Credits left this month (after this request) |

When you go over the rate limit you get **`429 rate_limited`** with a `retry-after` header (seconds). When the month's credits run out you get **`429 quota_exceeded`** until the next month, or until you upgrade.

## Handling 429 well

```js
async function crius(path, tries = 4) {
  for (let i = 0; i < tries; i++) {
    const res = await fetch(`https://api.crius.sh${path}`, {
      headers: { "x-api-key": process.env.CRIUS_API_KEY },
    });
    if (res.status !== 429) return res.json();
    const body = await res.json();
    if (body.error?.code === "quota_exceeded") throw new Error("monthly credits used up");
    const wait = Number(res.headers.get("retry-after") ?? 1) * 1000;
    await new Promise((r) => setTimeout(r, wait + Math.random() * 250));
  }
  throw new Error("still rate limited");
}
```

> **Save credits:**
> Use batch endpoints (`/prices` and `/tokens/batch` take up to 100 tokens per call), use the WebSocket stream instead
> of polling, and cache responses for the time you can tolerate: `meta.block` tells you whether anything changed.

## Usage and alerts

The dashboard shows usage per day and per endpoint, and `GET /v1/account/usage` returns the same data. We email you when you reach 50%, 80%, 90% and 100% of your monthly credits.
