Limits
Every limit an agent can meet, with the error it returns (error codes). Plan values come from Carnival's plans table; only the public plans are listed.
Sites
| Limit | Free plan | When exceeded |
|---|---|---|
| Live sites per account | 3 | LIVE_SITE_LIMIT_REACHED |
| Site lifetime | 7 days from the first publish; updates keep it | — |
| Files per site | 250 | TOO_MANY_FILES |
| Site size | 25 MiB (26,214,400 bytes) | SITE_TOO_LARGE |
| File size (decoded) | 4 MiB (4,194,304 bytes) | FILE_TOO_LARGE |
Site traffic is subject to fair use.
Each carnival_deploy call
| Limit | Free plan | When exceeded |
|---|---|---|
| Decoded file bytes per call | 4 MiB (4,194,304 bytes) | PAYLOAD_TOO_LARGE |
Files with content in a call with finalize=false ({path, sha256} entries not counted) |
72 | TOO_MANY_FILES_IN_CALL |
Entries in a call with finalize=true ({path, sha256} entries counted) |
30 | TOO_MANY_FILES_IN_CALL |
files entries |
250 | schema validation (uncoded Input validation error text) |
delete_paths entries |
250 | schema validation (uncoded Input validation error text) |
Pieces of one file (parts) |
2–128 | schema validation (uncoded Input validation error text) |
| Path length | 200 characters | schema validation (uncoded Input validation error text) |
title length |
80 characters | schema validation (uncoded Input validation error text) |
Staged upload (deploy_id) lifetime |
60 minutes from its first call | DEPLOY_EXPIRED |
A request to /mcp carries at most 8 MiB (8,388,608 bytes); a larger body gets HTTP 413. On Muse, keep each call's arguments under about 90 KB: send files over several calls with finalize=false.
Rates
| Limit | Free plan | When exceeded |
|---|---|---|
| Publishes per UTC hour (the dashboard's Redeploy included) | 20 | RATE_LIMITED (finalizes_per_hour) |
| Publishes per UTC day | 100 | RATE_LIMITED (deploys_per_day) |
| New sites per UTC day (fewer for new and restricted accounts) | 10 | RATE_LIMITED (new_sites_per_day) |
| Content rejections before publishing pauses | 5 per UTC day, then paused for 24 hours | REJECTION_COOLDOWN |
Request rates (every plan; approximate, counted per Cloudflare location):
| Limit | Rate | When exceeded |
|---|---|---|
carnival_deploy calls |
30 per minute | RATE_LIMITED (calls_per_minute) |
carnival_status and carnival_logs calls (counted apart from deploys) |
30 per minute | RATE_LIMITED (calls_per_minute) |
Requests to /mcp with a body over 1 MiB (1,048,576 bytes), or with no Content-Length (counted apart) |
30 per minute | HTTP 429 (Retry-After: 60) |
Client registrations (POST https://carnival-staging.dev/register), per IP address |
10 per minute | HTTP 429 |
| Sign-in and consent pages, per IP address | 30 per minute | HTTP 429 |
A limit result carries error.retry_after_seconds: wait that long, never retry in a loop.