Errors and limits
Status codes, the error format and the limits that apply to the API and MCP server.
Error format
Errors come back as JSON with a detail field that explains what went wrong:
422 response
{
"detail": "Add a reason before dismissing this violation."
} For invalid parameters, detail is a list that names each field and the problem.
Status codes
| Code | Meaning |
|---|---|
200, 201 | Success. |
401 | The API key or token is missing, invalid or expired. |
403 | The workspace isn’t on a plan with API access, or you aren’t allowed to do this. |
404 | The resource doesn’t exist in your workspace. IDs from other workspaces return 404 too. |
422 | A parameter or the request body is invalid, or the action isn’t allowed in the current state. |
5xx | Something went wrong on our side. Retry with a short backoff. |
On the MCP server, the same errors reach the assistant as a readable message, so it can tell you what to change.
Credits
Most calls are free. Two use workspace credits, just like in the app:
check_content(MCP): one AI check of a text.audit_assets(MCP): an audit of one or more assets. Large audits return an estimate first; confirm by repeating the call with theestimate_id.
Reading data and recording review decisions never uses credits. Check your balance with the get_credit_balance tool or in the app.
Limits
| Limit | Value |
|---|---|
| Credit-using MCP calls | 20 per minute and 3 at the same time, per workspace |
Text per check_content call | 60,000 characters |
Assets per audit_assets call | 10 |
| Violations per page | 50 (page_size) |
| Audits per list call | 100 (limit) |
| Comment length | 5,000 characters |
| Dismissal reason length | 2,000 characters |
Something unclear or missing? Tell us and we'll improve this page.