> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cicini.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Rate limits

> Honest guidance on Public API v1 throughput and plan catalog limits

# Rate limits

## What is enforced today

**Public v1 route handlers do not currently emit rate-limit headers** (`X-RateLimit-*`, `Retry-After`) and do not implement a dedicated per-key throttle in those handlers.

That means:

* You should still design clients for **reasonable volume** (batch with pagination, cache where appropriate).
* Platform-level abuse protection (edge / infrastructure) may still reject pathological traffic.
* Do **not** assume unlimited parallel polling is supported.

## Plan catalog (reference only)

`lib/pricing/plan-core.ts` includes an `apiRateLimit` field that maps to **`apiRateLimitRpm`** (requests per minute) in the plan registry:

| Plan         | Catalog `apiRateLimit` (RPM) |
| ------------ | ---------------------------- |
| Free         | `0` (API access off)         |
| Starter      | `0` (API access off)         |
| Professional | `1000`                       |
| Enterprise   | `10000`                      |

Treat these as **product catalog limits**, not a guarantee that public v1 already returns `429` when exceeded. When enforcement ships in the public handlers, this page and OpenAPI will be updated.

## Recommended client behavior

1. Prefer **incremental sync** (filter appointments by `startDate` / `endDate`) over full-table pulls every minute.
2. Cap concurrency (for example 1–2 parallel requests per key).
3. On unexpected `5xx` or connection errors, use exponential backoff with jitter.
4. Cache customer lists when your job only needs appointments.

## If you need higher volume

Contact sales / support for Enterprise. Do not scrape dashboard HTML or call session-authenticated `/api/*` routes from an integration — those are **not** the public contract.
