Action API v2 Reference
Reference for the Public API v2 — an action-based (RPC-over-HTTP) API. Every call is a POST to a named operation, with cURL, Python, and TypeScript examples.
The Public API v2 is an action-based API: every operation is a POST to a named endpoint (/listSpaces, /promptAgent, /createProject), with a JSON body. It is not RESTful — there are no GET /workspaces or PUT /tasks/{id} style routes. (The only REST-style exceptions: media/bundle downloads and the webhook registration routes.)
The live OpenAPI spec is published at taskade.com/api/documentation/v2.
Table of Contents
Which API should I use?
Taskade ships two public HTTP APIs. They share the same authentication.
REST API v1
Action API v2
Base URL
https://www.taskade.com/api/v1
https://www.taskade.com/api/v2
Style
RESTful (GET/POST/PUT/DELETE)
Action / RPC (POST /{operation})
Status
Stable (GA)
Beta (2.0.0-beta)
Task create / update / delete
✅ Full CRUD
❌ Read-only (listTasks, listBlocks)
Task assignees / dates / notes / fields
✅
❌
Project update
✅
❌ (create / complete / restore / copy only)
Prompt an agent
❌
✅ promptAgent
Agent lifecycle (create/update/delete)
Partial
✅
Bundles (export/import Taskade Genesis apps)
❌
✅
Signed webhook registration
❌
✅ POST /webhooks
Rule of thumb: reach for v1 when you need to write tasks or manage task metadata; reach for v2 for agent prompting, agent lifecycle, bundles, and simpler list/read flows.
Base URL & Authentication
All v2 operations live under:
Authenticate with a Personal Access Token from taskade.com/settings/api, or an OAuth 2.0 access token for apps that act on behalf of other users:
See the Authentication guide for personal tokens vs. OAuth 2.0 (PKCE) details.
Calling convention
Every v2 call is a POST to an operation name, with a JSON body and a JSON response. Successful responses are wrapped in { "ok": true, ... }.
Here is a single Action API v2 call, from authentication to JSON response.
A typical response:
Endpoints
List spaces (workspaces)
POST /listSpaces — every integration's entry point. Body is optional.
Filter with { "filterBy": { "name": { "operator": "contains", "value": "Marketing" } } }.
List folders in a space
POST /listFolders
List projects in a space
POST /listProjects
Get a project
POST /getProject — returns { ok, item: { id, name } }.
Create a project
POST /createProject — seed a project from Markdown.
List tasks (read-only)
POST /listTasks — paginated with after / before cursors. Each task is { id, text, parentId?, completed }.
Prompt an agent
POST /promptAgent — send a single prompt to a workspace agent and get a synchronous text response. This capability is v2-only.
Response:
To review past conversations, use POST /listConversations ({ agentId, limit?, page? }) and POST /getConversation ({ agentId, convoId, includeTranscript? }). Pass "includeTranscript": true to get a Markdown transcript of the conversation in the response.
Manage agents
POST /listAgents
{ spaceId, filterBy? }
POST /getAgent
{ agentId }
POST /createAgent
{ folderId, name, data }
POST /updateAgent
{ agentId, name?, data? }
POST /deleteAgent
{ agentId }
POST /generateAgent
{ folderId, text } — generate an agent from a description
POST /enablePublicAgentAccess
{ agentId } → { ok, publicUrl }
Attach knowledge to an agent
POST /addKnowledgeProject grounds an agent in a project. (removeKnowledgeProject, addKnowledgeMedia, removeKnowledgeMedia mirror it.)
Export / import a bundle
POST /exportBundle returns a portable Genesis app bundle; POST /importBundle installs one. See Bundles & App Kits for the full schema and the binary .tsk variants.
Full operation list
Workspaces & structure:
listSpaces,listFolders,listMyProjects,listTemplates,listMedia.Projects:
listProjects,getProject,createProject,createProjectFromTemplate,copyProject,completeProject,restoreProject,listTasks,listBlocks,listFields,listProjectMembers,getShareLink,enableShareLink.Agents:
listAgents,getAgent,createAgent,updateAgent,deleteAgent,promptAgent,generateAgent,listConversations,getConversation,addKnowledgeProject,removeKnowledgeProject,addKnowledgeMedia,removeKnowledgeMedia,enablePublicAgentAccess,getPublicAgent,updatePublicAgent.Media:
uploadMedia,getMedia,deleteMedia, plusGET /media/{mediaId}/contentandGET /media/spaces/{spaceId}/contentfor downloads.Bundles:
exportBundle,importBundle,importBundleZip, plusGET /bundles/{spaceId}/export/zip.Webhooks:
POST /webhooks,GET /webhooks,GET /webhooks/{id},DELETE /webhooks/{id}(signed — see Webhooks);subscribeWebhookandunsubscribeWebhookare deprecated.
The authoritative, always-current list is the live v2 spec.
Pagination
List operations that can return many rows use cursor pagination with after / before (tasks, blocks) or page / limit (members, conversations).
Rate Limits
Requests are rate-limited per token.
429 Too Many Requests
Rate limit exceeded
Respect Retry-After, back off exponentially
Error Handling
All error responses share this shape:
400
Bad request
No
Check the request body
401
Invalid / missing token
No
Regenerate or refresh the token
402
Out of credits, or the operation needs a higher plan (e.g. webhook registration requires Pro)
No
Top up credits or upgrade your plan
403
Insufficient permission
No
Use a token with access to the resource
404
Not found
No
Verify the ID and your workspace access
429
Rate limited
Yes
Exponential backoff
5xx
Server error
Yes
Retry up to 3 times with backoff
Never retry on 400, 401, 403, or 404. Fix the request first.
Security Best Practices
Never commit tokens. Use environment variables or a secret manager.
Use OAuth, not personal tokens, for multi-user applications.
Rotate personal tokens periodically; you can hold up to 5 at a time.
Encrypt refresh tokens at rest — they're long-lived.
Related
REST API v1 ReferenceAuthenticationWebhooksBundles & App KitsLast updated
Was this helpful?