Rate limits
- Every call: 120 a minute per key, over every interface together (the CLI and Python call REST).
- Heavier calls: 20 a minute, on top of that, for calls that search widely or start work:
datasets search,datasets aggregate,datasets estimate,datasets profile,maps files export,requests create,requests gaps file,webhooks test, andfeeds subscriptions create,update,previewandmanifest. - Maps: a workspace may make 20 maps an hour.
429 rate_limited with a Retry-After header in seconds. The CLI’s downloads wait it out on their own.
Read limits
- Each read stops after 30 seconds, and a sorted read can page up to 50,000 rows in.
- Each key runs at most 4 reads at once, and reads at most 300,000 rows, 500 MB and 120 seconds of query time a minute.
- For more than a few pages, download the dataset.
Other limits
Errors
A refusal is JSON with a code, a message and links:rate_limited, which it can retry after Retry-After seconds. Codes you will meet:
Data Feeds has a few codes of its own, such as
not_subscribed and expired, explained on its pages.
In each interface:
- CLI: prints the message and its links and exits with status 1.
- Python: raises
ploti.PlotiErrorwithcode,message,linksand, for a rate limit,retry_afterin seconds. - REST: the JSON above, with the HTTP status.
- MCP: the tool result is marked as an error, with the same message for the assistant to act on.