Action API
POST/listProjectsAPI v2

List projects

3 min readProjectsView as Markdown

POST /listProjects

List projects in a workspace

Base URL: https://www.taskade.com/api/v2

Authentication

Send a personal access token or an OAuth 2.0 access token as a bearer token. Create a personal access token at taskade.com/settings/api.

Http
Authorization: Bearer tskdp_your_token_here

Request body

application/json

Field Type Required Description
spaceId string Yes The workspace/space ID to list projects for
completed boolean No Set false to list only projects that are not marked complete, or true to list only completed ones. Leave it out to list both.

Example request

Bash
curl -X POST "https://www.taskade.com/api/v2/listProjects" \
  -H "Authorization: Bearer $TASKADE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"spaceId":"<spaceId>"}'

Responses

200 — Default response

Field Type Required Description
ok boolean Yes —
items object[] Yes —
items[].id string Yes Unique identifier for the project
items[].name string No The project's name or title
items[].icon object No The project's emoji icon, when one is set. Null when the project has no icon.
items[].icon.type string Yes Allowed values: emoji.
items[].icon.value string Yes —
items[].completed boolean No True when the project itself is marked complete. This flag does not track task progress, and it is unrelated to archiving.
items[].archived boolean No True when the project is archived. completeProject archives a project and restoreProject restores it. listProjects leaves archived projects out.
items[].color string No The color of the workspace or folder that holds the project. A project has no color of its own.
items[].tags string[] No The tag names on the project. Empty when the caller is not a member of its workspace.

A nested field marked Yes is required whenever its parent object is present.

Errors

Errors return an ok: false envelope. Rate limiting returns 429 with x-rate-limit-limit, x-rate-limit-remaining and x-rate-limit-reset headers. x-rate-limit-reset is the number of seconds until the window reopens. Retry-After is not sent, so schedule retries from x-rate-limit-reset; retrying sooner will fail again.

Json
{ "ok": false, "message": "Unauthorized", "code": "UNAUTHORIZED" }

Rate limits for this version: enforced per endpoint; ceilings are not published and can change without notice. A 429 response carries x-rate-limit-limit, x-rate-limit-remaining, and x-rate-limit-reset (seconds until the window reopens). Back off from those headers rather than hardcoding numbers. If you need sustained throughput, prefer batching (operations like /createTask accept arrays) over tightening polling loops. See Rate limits.