Error Responses
| Code | Meaning |
|---|---|
PERMISSION_DENIED | Write/delete blocked by a policy ACL. Includes the policy name and rule. |
STORAGE_LIMIT | Workspace storage cap reached. Includes current usage and upgrade URL. |
RATE_LIMITED | Daily or per-minute op cap exceeded. Includes retry_after_seconds. You MUST wait the specified seconds before retrying — do not instantly retry. |
FILE_TOO_LARGE | File exceeds max size (10 MB Free/Pro, 100 MB Team; platform limit 256 MB). |
VERSION_EXPIRED | Requested version purged per retention policy. |
VERSION_NOT_FOUND | Invalid version ID for the specified file. |
WORKSPACE_NOT_FOUND | Workspace ID doesn’t match any active workspace. |
INTERNAL_ERROR | Server error. All committed writes are safe. |
FAQ & Behavior Details
What counts as an operation? Every MCP tool call counts as one operation.upload_session action: “append” counts as one op per chunk. list_files, search_files, and read_file each count as one op. WebSocket batch requests count as N ops (one per sub-request).
Do deleted versions count toward storage? Yes. All retained versions count toward your storage quota. Content is SHA-256 deduplicated within each workspace, so identical content only counts once regardless of how many versions reference it.
How do versions work across moves and deletes?
- After a move: A new version is created at the new path (operation:
"move", metadata:{ movedFrom: "old/path" }). A tombstone version is created at the old path (metadata:{ movedTo: "new/path" }). Calllist_versionson the new path to see the full history including the move event. - After a delete: A tombstone version is created at the file’s path (operation:
"delete"). Calllist_versionson the original path — the delete event and all prior versions remain visible. - Restoring a deleted file: Call
restore_versionwith the original path and a version ID from before the delete. This creates a new version (operation:"restore") — it does not revert or remove the delete record. Version history is append-only. - Restoring a moved file: Call
restore_versionwith the new path and the version ID you want to restore. You cannot restore across paths —restore_versionrequires the version ID to belong to the specified path’s history. - Version operations are always INSERT-only — no version record is ever modified or deleted. Every restore, move, or delete creates a new version entry, preserving the full audit trail.
restore_version re-run policy checks? Path ACLs are enforced (the restoring agent must have write access to the target path). Content moderation is not re-run on restored content. Secret scanning is not re-run — previously stored content is trusted. Extension rules and size limits are enforced against the restored content.
What does browser_url point to? An authenticated URL that requires an active session (login via the web dashboard). It points to the latest live version of the file and updates automatically after moves. After deletion, the URL shows a “file deleted” state with restore option.
Pagination limits: list_files returns up to 1,000 entries per call. search_files returns up to 100 matches. For larger workspaces, use path-scoped calls (e.g., list_files({ path: "subdir/" })) to stay within limits.
Compliance Documentation · Privacy Policy · Terms
Fast triage flow
- Capture error code and request context.
- Confirm auth header shape and workspace routing inputs.
- Verify scope/plan limits for the attempted operation.
- Retry only for transient classes (429/5xx/network).