## Quotas by plan

| Plan | Requests / month | API keys | Log retention |
|------|-----------------|----------|---------------|
| **Free** | 100 | 1 | 24 hours |
| **Starter** | 1,000 | 5 | 30 days |
| **Pro** | 10,000 | 10 | 60 days |
| **Business** | 100,000 | 10 | 90 days |

Quotas reset on the **1st of each month at 00:00 UTC**.

## When the quota is exceeded

The API returns a `429` status with a `reset_at` field indicating the exact reset time:

```json
{
  "error": "quota_exceeded",
  "message": "Monthly quota reached. Upgrade your plan or wait for the reset.",
  "detail": null,
  "reset_at": "2026-04-01T00:00:00Z"
}
```

:::caution[Fail open on 429]
Never block a user because your quota is exceeded. Treat `429` the same as a network error — let the user through. Your integration should never depend on Syvel being available to allow a sign-up.
:::

## Log retention

Logs are the record of past API requests visible in your dashboard. Retention varies by plan (see table above). Logs older than the retention window are automatically deleted and cannot be recovered.

## Upgrading

To increase your quota or key limit, upgrade your plan from the [dashboard](https://dashboard.syvel.io/billing).