Rate limits
The rate limits on connections and API keys, and the other limits an integration meets.
Rate limits are counted per connection: an API key is one connection, and so is each AI app you connect. They are fixed windows, so a limit resets when its window ends. A call over a limit answers 429 with the outcome rate-limited, retryAfterSeconds in the body and a Retry-After header: wait that long, then call again.
Per connection
| Limit | At most | Counts |
|---|---|---|
connectionCalls | 120 in a minute | Every call: each HTTP API request, and each MCP request, counted before its body is read. |
connectionWrites | 30 in a minute | Every call to a write tool, on top of its call. |
connectionPersonas | 20 in a day | New personas saved with save_persona (each makes a paid headshot). |
spendConfirmations | 20 in an hour | Every confirm_spend call, repeats included. |
The limits Probably keeps on the organization apply on top, such as how many share links it makes a day, and so do spend caps and the organization's share of work in flight: a run beyond that share waits for a slot, and says so in get_video and the run.waiting_for_slot event.
Other limits
| Limit | Value |
|---|---|
| Active API keys | 10 per member in each organization |
| Webhook endpoints | 10 per organization |
| Request body | 64 KB at most |
| wait_for_video | Holds up to 50 seconds, then answers with the current state |
| Spend confirmations | Expire 15 minutes after they are prepared |
These numbers are read from the same configuration the API enforces, so this page changes when they do.