Limits by endpoint
Tasks
| Endpoint | Limit |
|---|---|
task.create | 10 / min |
task.sendMessage | 10 / min |
task.detail | 100 / min |
task.list | 100 / min |
task.listMessages | 100 / min |
task.update | 40 / min |
task.stop | 40 / min |
task.delete | 40 / min |
task.confirmAction | 40 / min |
Projects
| Endpoint | Limit |
|---|---|
project.create | 40 / min |
project.list | 100 / min |
Skills
| Endpoint | Limit |
|---|---|
skill.list | 100 / min |
Agents
| Endpoint | Limit |
|---|---|
agent.list | 100 / min |
agent.detail | 100 / min |
agent.update | 40 / min |
Files
| Endpoint | Limit |
|---|---|
file.upload | 40 / min |
file.detail | 100 / min |
file.delete | 40 / min |
Webhooks
| Endpoint | Limit |
|---|---|
webhook.create | 40 / min |
webhook.list | 100 / min |
webhook.delete | 40 / min |
Usage
| Endpoint | Limit |
|---|---|
usage.list | 600 / min |
usage.teamStatistic | 600 / min |
usage.teamLog | 600 / min |
Connectors
| Endpoint | Limit |
|---|---|
connector.list | 100 / min |
Browser
| Endpoint | Limit |
|---|---|
browser.onlineList | 100 / min |
Error response
Requests that exceed the limit return HTTP429 with the rate_limited error code:
Best practices
- Back off on 429 with exponential delay plus jitter; don’t retry immediately in a tight loop.
- Prefer webhooks over polling for task progress — see Webhooks. Each
task.listMessagespoll counts against the 100 / min limit for that endpoint. - Use cursor pagination (
cursor+next_cursor) on list endpoints so a single logical read can span minutes without a burst. - Cache stable values such as the public key returned by
webhook.publicKey— it rarely changes.