# Limits

Page: https://docs.sonecentral.com/en/limitler
Markdown: https://docs.sonecentral.com/en/limitler.md

> Request limits, automatic replies, conversations, messages, stored responses, files and keys.

## Request limits

| Key | Limit |
| --- | --- |
| Server key | 120 requests per minute per key, including reads |
| Publishable key | 30 requests per minute per visitor address, including reads; a total of 1,200 requests and a separate 20,000 reads per hour per key |

Reads are all `GET` requests: `GET /key`, `GET /models`, stored responses and input items, conversation state and messages, and `GET /chat/{id}/stream`. Sending messages (`POST /chat/completions`, `POST /responses`, `POST /chat`), `DELETE /responses/{id}` and `POST /responses/{id}/cancel` count toward the 1,200 hourly non-read limit.

The two hourly publishable-key limits are independent. Polling team replies does not consume the sending allowance and continues even if sending reaches its limit. One widget polling every five seconds makes 720 reads/hour, allowing about 27 simultaneous visitors waiting for team replies per key. Increase the interval for more visitors: [Polling frequency](https://docs.sonecentral.com/en/insan-devri.md#ne-siklikla-sormali).

A visitor address is an IPv4 address or an IPv6 /64 block. People sharing an address count as one visitor. Each publishable key serves at most 2,000 distinct visitor addresses per minute; this restriction delays only new visitors to that key.

Limits use sliding windows. Exceeding a limit returns `429 rate_limit_exceeded`; `Retry-After` specifies the wait in seconds. Every request except `GET /files/{id}` counts. Pause polling in background tabs.

## Automatic reply limit

API assistant replies are limited per workspace. Defaults are **60 turns/hour and 300/day**. All publishable keys together share at most **40 turns/hour and 200/day** within that total. The remaining capacity is reserved for server keys: even if the website uses its entire share, server requests retain at least 20 turns/hour and 100/day. Sonecentral may change these values; `GET /key` returns current `limits`.

These limits prevent abuse or a faulty loop from affecting your other channels. WhatsApp and other channels have separate reply limits. The publishable-key share prevents a public website key from consuming your server-key allowance.

When the workspace limit or publishable-key share is reached, the assistant does not reply. The request returns `429 ai_turn_ceiling`, `x-should-retry: false` and `Retry-After: 300`. In an existing conversation, the message still reaches your team with a note. Tell the visitor your team will reply. See [When the assistant cannot reply](https://docs.sonecentral.com/en/insan-devri.md#asistan-yanit-vermediginde).

## Conversations and messages

| Item | Limit |
| --- | --- |
| New visitor message | 4,000 characters |
| New visitor messages per request | 12 |
| Visitor messages per conversation | 200 |
| History imported into a new conversation | Last 40 messages, up to 4,000 characters each |
| Request body | 1 MB |
| Developer context | 2,000 characters; server keys only |
| `Idempotency-Key` | 200 characters; longer values are ignored |
| First-message retry lookup | 10 minutes |
| Concurrent turns in one conversation | One; a second returns `409 conversation_busy` |
| Conversation message page | Maximum 100, default 50 |

## Responses

| Item | Limit |
| --- | --- |
| Stored response lifetime | 30 days |
| `metadata` | 16 keys, key length 64 characters, string value length 512 characters, total JSON size 4 KB |
| `instructions` | 2,000 characters and 4 KB JSON; ignored and not stored for publishable keys |
| Stored input items | Only the request's own new messages, `item_reference` items and server-key `system`/`developer` messages. Up to 40 items and 8 KB JSON total. The newest item is truncated if needed; each item's text is limited to 4,000 characters. |

## Files

| Item | Limit |
| --- | --- |
| File shared by the assistant | 32 MB |
| Signed file URL lifetime | 7 days |
| Downloads per file ID (`file_…`) | 10/hour |
| Workspace daily file downloads | Default 2 GiB, reset at midnight UTC |
| Download requests from one address | 120/minute |

## Keys

| Item | Limit |
| --- | --- |
| Active keys per workspace | 50; revoked keys excluded |
| Allowed origins per publishable key | 20 |
| Key name | 80 characters |

## Plans and AI capacity

Assistant replies through this API do not consume your plan's message or AI-reply allowance. They are constrained by the workspace's automatic API reply limits and Sonecentral's AI capacity.

The workspace still needs a plan that permits assistant replies. `402 plan_required` means the plan does not allow them; `429 assistant_quota_exhausted` means Sonecentral's AI capacity is temporarily unavailable, not that your workspace used its plan allowance.

In an existing conversation, the visitor's message still reaches your team. A rejected first message opens no conversation and stores nothing. See [Errors](https://docs.sonecentral.com/en/hatalar.md#mesaj-nereye-gider).

API traffic has its own sending limits and cannot stop WhatsApp sending. Other channels continue even if API traffic exceeds its limits. Contact Sonecentral if you need higher limits.
