Limits
What the platform enforces, and what to do when you reach it. Everything here is a current operating limit, not a plan feature — plan limits are on the pricing page.
Rate limits#
Server endpoints are limited per API key, not per IP, so one busy customer backend is never throttled by traffic from anyone else.
| Endpoints | Limit | Window |
|---|---|---|
POST /v1/token | 600 requests | per minute, per API key |
Other API-key endpoints (/rooms, /gifts, /streams) | 1200 requests | per minute, per API key |
| Dashboard and sign-in endpoints | 100 requests | per 15 minutes, per IP |
Every response carries standard rate-limit headers, so you can back off before being refused:
ratelimit-limit: 600ratelimit-remaining: 597ratelimit-reset: 60
Exceeding a limit returns 429 with { "error": "Too many token requests, please try again later." }. Retry after the window resets, with jitter.
Cache tokens instead of re-issuing them
A token is valid for six hours. If your app requests a fresh token on every screen change, you are paying a round trip and burning rate limit for nothing. Issue once per session and reuse it.
Channels and participants#
| Limit | Value | Notes |
|---|---|---|
| Participants per channel | 500 | A hard ceiling. Practical limits depend on how many of them publish video — see below. |
| Publishing participants | ~200 audio, fewer with video | Everyone publishing HD video at once is the expensive case. For large audiences use the audience role, which subscribes without publishing. |
| Channel name | 1–64 characters | Must match [a-zA-Z0-9_-]{1,64}. |
| Participant identity | 1–128 characters | Must be unique in the channel. A second connection with the same identity replaces the first. |
| Empty channel lifetime | 60 seconds | A channel closes automatically once the last participant leaves. |
Tokens#
| Limit | Value | Notes |
|---|---|---|
| Token lifetime | 6 hours | Authorises joining. A call already in progress continues past expiry. |
| Metadata size | 2 KB | Embedded in the token and broadcast to every participant in the channel. |
| Metadata type | JSON object | Not a string or an array. Server-owned fields cannot be overridden. |
Streaming#
| Limit | Value |
|---|---|
| RTMP push destinations | Up to 3 per channel |
| Ingest protocols | RTMP and WHIP |
Gifting#
| Limit | Value |
|---|---|
| Gift quantity per send | 1 to 9999 |
| Gift name | 1–64 characters |
| Gift image URL | Must be https:// |
Usage#
Monthly participant-minutes are set by your plan. At the limit, new tokens are refused with 429 and code QUOTA_EXCEEDED; calls already in progress are not cut off, and no overage is charged without an explicit upgrade.
- A warning email is sent once per month at 80% of the quota.
- Usage is visible in the console under Billing.
- See Usage and quotas for how minutes are counted.
Raising a limit#
Rate limits and channel ceilings can be raised for a specific project. Email sales@applooma.dev with your App ID and the shape of the traffic you expect.