API resources, IDs, pagination, and errors
Learn which v1 resources exist and how to use IDs, cursors, rate limits, and error responses.
The v1 API covers a set of Sydnee resources. It does not cover every feature in the app.
Which resources are available?
- Accounts: create, list, read, and archive client accounts.
- Account users: list account members, add a portal user, and remove account access.
- Task boards: list, create, archive, restore, and set a default board.
- Sections and tags: manage board sections, board-local tags, and their order.
- Tasks: list, create, read, move, update, archive, and manage supported subtasks, tags, reminders, assignees, collaborators, comments, attachments, and activity.
- Task templates: list templates and add one to an account or one account task board.
- Request templates: list templates and send one to a portal user.
- Files: list folders and files, read file details, versions, and comments, and get signed download URLs.
Public file routes are read-only. They do not upload, rename, delete, comment on, or add a version to a file.
The live API reference owns the full route and field list.
Which ID should I send?
Use the ID returned by the endpoint that listed or created the resource. Do not build an ID from a name, slug, URL, or database guess.
| Resource | ID used by current routes |
|---|---|
| Account | Public string ID, also called the account CUID |
| Task board, section, task, or tag | Public string ID returned by the API |
| Task template | Public string ID returned by the template list |
| Request template | Numeric template ID in the current contract |
| Account user or collaborator | Numeric account-membership ID returned by the account users route |
| Folder, file, file version, attachment, or reminder | Numeric ID returned by its parent route |
An account user's ID is not the same as the person's portal-user ID or email. A file's current ID can also differ from an older version ID. Follow the exact schema for the route you call.
How does pagination work?
Cursor pagination is used by supported list routes, including accounts, task activity, task comments, file lists, and file comments.
- Send the first request with an optional
limit. Supported paged routes return 50 items by default and allow 1 to 200. - Read
nextCursorfrom the response. - Send that exact value as the next request's
cursor. - Stop when
nextCursoris empty or missing.
Some responses also return a Link header with rel="next". A cursor is opaque. Do not decode, edit, or reuse it with another route or filter.
Not every list route uses a cursor. Check the endpoint in the live reference.
What are the rate limits?
Current /v1 limits are shared by the workspace:
- 300
GETrequests per minute; - 100 write requests per minute.
A limited request returns 429. Follow Retry-After. The response can also include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset.
What does an API error mean?
Errors use this basic shape:
{
"error": {
"code": "400",
"message": "Validation failed",
"issues": []
}
}codeis a string.messageexplains the main problem.issuescan point to invalid fields.detailscan hold a safe conflict code or current value.idcan appear as a support or error-trace value.agentHintcan tell an automated client how to report a server error.
Common status codes are:
| Status | Meaning |
|---|---|
400 | A path, query, or body value is invalid. Read issues. |
401 | The bearer header, key, or API subscription access is not valid. |
402 | The current public API does not intentionally return this status. Its API access check returns 401. Check the real status and error body before changing billing. |
403 | The key is valid, but this action is not allowed. |
404 | The route or resource was not found in this workspace. |
409 | Current data conflicts with the change, such as a stale version or product rule. |
429 | The workspace reached the request limit. Wait before retrying. |
500 | Sydnee could not finish the request. Save the error id if one is returned. |