The Taskade API lets your code read and change workspaces, projects, tasks, AI agents, media, and app bundles over HTTPS. This page starts the Taskade API documentation: one first call, every API surface, and the path that fits your task.
Page type: Concept. Read it to learn what this is and when to use it.
TL;DR: Create a personal access token at taskade.com/settings/api. Send it as
Authorization: Bearer $TASKADE_TOKENtohttps://www.taskade.com/api/v1. For AI clients, connect to the hosted MCP server athttps://www.taskade.com/mcp.
Make your first call in 30 seconds
One token and one curl command return the workspaces that your account can use.
Warning: Keep the token out of source code and out of the browser. A personal access token has no scopes. It can do everything that your account can do.
- Open taskade.com/settings/api.
- Under Personal access tokens, click Create token. Type a name, then click Create.
- Copy the token. Taskade shows it one time only.
- Save the token in your terminal:
export TASKADE_TOKEN="tskdp_your_token_here"
- List your workspaces:
curl -s https://www.taskade.com/api/v1/workspaces \
-H "Authorization: Bearer $TASKADE_TOKEN"
The response lists each workspace with its id and name:
{
"ok": true,
"items": [
{ "id": "Wk3rT9pLmQ2vXa7c", "name": "My Workspace" }
]
}
You are done when the response holds "ok": true and the names of your workspaces. To create a project and add tasks next, follow the Quickstart.
Taskade API surfaces
Every surface below uses the workspaces that your Taskade account already has. Pick one by what calls what.
| Surface | What it does | Endpoint or package | Access | Start here |
|---|---|---|---|---|
| REST API v1 | Resources and HTTP verbs for workspaces, folders, projects, tasks, agents, media, and bundles | https://www.taskade.com/api/v1 |
Every plan. Personal access token or OAuth 2.0, with the permissions of the token owner. | REST API guide · Reference |
Action API v2 (beta, 2.0.0-beta) |
One verb for each operation, such as /listSpaces, /createTask, and /promptAgent. A good fit for AI tools. |
https://www.taskade.com/api/v2 |
Every plan. Same credentials as REST API v1. | Action API guide · Reference |
| Hosted MCP server | Lets Claude, Cursor, VS Code, ChatGPT, and other MCP clients read and change a workspace and edit Taskade Genesis app source | https://www.taskade.com/mcp |
OAuth 2.0 with PKCE or a personal access token. Every paid plan (Starter and above). | Hosted Taskade MCP |
| Workspace MCP (local) | Runs a local stdio server that wraps REST API v1 | npx -y @taskade/mcp-server |
Personal access token in TASKADE_API_KEY. Each call keeps its API access rules. |
Workspace MCP |
| Webhooks | Sends signed Taskade events to your endpoint, or starts an automation from an incoming HTTP call | POST https://www.taskade.com/api/v2/webhooks |
Pro plan and above | Webhooks |
| Public agent embed | Puts a public AI agent on your site as an iframe or a chat widget | The embed code from the agent's publish settings | Every plan. No token: the agent must be public. | Agent embeds |
| Bundles | Exports and imports a whole app or workspace as JSON, .zip, or .tsk |
/api/v1/bundles/… or /api/v2/exportBundle |
Export: Pro plan and above. Import: per-item plan limits. | Bundles & App Kits |
| MCP Client connector | Lets a Taskade automation call the tools of another MCP server | An automation step | Every plan, Free included | Which Taskade MCP do I want? |
| TypeScript SDK | A generated client for the Action API v2. It is in preview and not on npm yet. | @taskade/sdk (preview) |
Not available yet. Call the API over HTTPS. | TypeScript SDK |
Choose your path
Use REST API v1 for scripts and back-end jobs. Use the Action API v2 or MCP when an AI model calls Taskade. Use webhooks when Taskade must call you.
| If you want to | Use | Start here |
|---|---|---|
| Make your first call and create a project | REST API v1 | Quickstart |
| Sync tasks with another system | REST API v1 | REST API guide |
| Give an AI agent or LLM a set of Taskade tools | Action API v2 | Action API guide |
| Work on a workspace from Claude, Cursor, VS Code, or ChatGPT | Hosted MCP server | Hosted Taskade MCP |
| Get an event when data changes, instead of polling | Webhooks | Webhooks |
| Act for other Taskade users from your app | OAuth 2.0 | Authentication |
| Back up, move, or share a whole app | Bundles | Bundles & App Kits |
| Put an AI agent on your website | Public agent embed | Agent embeds |
Base URL and authentication
Each API has one base URL. Every request carries a token in the Authorization header.
| API | Base URL | Spec version |
|---|---|---|
| REST API v1 | https://www.taskade.com/api/v1 |
1.0.0 |
| Action API v2 | https://www.taskade.com/api/v2 |
2.0.0-beta |
Send the token as a bearer token:
curl -s https://www.taskade.com/api/v1/me/projects \
-H "Authorization: Bearer $TASKADE_TOKEN"
A list call returns { "ok": true, "items": [...] }. A single-item call returns { "ok": true, "item": {...} }.
| Credential | Use it when | Get it |
|---|---|---|
| Personal access token | Your own scripts, back-end jobs, and local MCP servers. An account holds 5 active tokens maximum. | Personal access tokens |
| OAuth 2.0 access token | Your app acts for other Taskade users | Authentication |
Core API resources
The REST API v1 has one table for each resource. Each path links to its generated reference page, with the full parameters and responses. Paths are relative to https://www.taskade.com/api/v1.
Note: The generated REST catalog and Actions catalog come from the committed OpenAPI specs. If a hand-written example differs from a catalog page, the catalog page is correct.
Workspaces
Workspaces hold your folders and projects.
| Method | Path | What it does |
|---|---|---|
GET |
/workspaces |
List the workspaces that your account can use |
GET |
/workspaces/{workspaceId}/folders |
List the folders in a workspace |
POST |
/workspaces/{workspaceId}/projects |
Create a project in a workspace |
Folders
Folders (subspaces) hold projects, agents, and media inside a workspace.
| Method | Path | What it does |
|---|---|---|
GET |
/folders/{folderId}/projects |
List the projects in a folder |
GET |
/folders/{folderId}/agents |
List the agents in a folder |
POST |
/folders/{folderId}/agents |
Create an agent in a folder |
POST |
/folders/{folderId}/agent-generate |
Generate an agent from a description |
GET |
/folders/{folderId}/medias |
List the media files in a folder |
GET |
/folders/{folderId}/project-templates |
List the project templates in a folder |
Projects
A project holds tasks, notes, and structured data.
| Method | Path | What it does |
|---|---|---|
GET |
/projects/{projectId} |
Get one project |
POST |
/projects |
Create a project |
POST |
/projects/from-template |
Create a project from a template |
POST |
/projects/{projectId}/copy |
Copy a project to a folder |
POST |
/projects/{projectId}/complete |
Mark a project complete |
POST |
/projects/{projectId}/restore |
Restore a completed project |
GET |
/projects/{projectId}/members |
List the project members |
GET |
/projects/{projectId}/fields |
List the custom fields |
GET |
/projects/{projectId}/shareLink |
Get the share link |
PUT |
/projects/{projectId}/shareLink |
Turn on the share link |
GET |
/projects/{projectId}/blocks |
List the top-level blocks |
GET |
/projects/{projectId}/tasks |
List the tasks |
Tasks
A task is one item in a project. It can carry assignees, a date, a note, and field values.
AI Agents
An AI agent answers chats and runs work with its own instructions and knowledge.
| Method | Path | What it does |
|---|---|---|
GET |
/agents/{agentId} |
Get an agent |
PATCH |
/agents/{agentId} |
Update an agent |
DELETE |
/agents/{agentId} |
Delete an agent |
PUT |
/agents/{agentId}/publicAccess |
Make an agent public |
GET |
/agents/{agentId}/public-agent |
Get the public agent settings |
PATCH |
/agents/{agentId}/public-agent |
Update the public agent settings |
GET |
/public-agents/{publicAgentId} |
Get a public agent by its public ID |
POST |
/agents/{agentId}/knowledge/project |
Add a project to the agent knowledge |
POST |
/agents/{agentId}/knowledge/media |
Add a media file to the agent knowledge |
DELETE |
/agents/{agentId}/knowledge/project/{projectId} |
Remove a project from the knowledge |
DELETE |
/agents/{agentId}/knowledge/media/{mediaId} |
Remove a media file from the knowledge |
GET |
/agents/{agentId}/convos/ |
List the agent conversations |
GET |
/agents/{agentId}/convos/{convoId} |
Get one conversation |
Media
Media files are the uploads in a workspace.
| Method | Path | What it does |
|---|---|---|
GET |
/medias/{mediaId} |
Get the media details |
DELETE |
/medias/{mediaId} |
Delete a media file |
GET |
/medias/{mediaId}/download |
Download one media file |
GET |
/medias/spaces/{spaceId}/download |
Download the media of a space |
POST |
/medias/spaces/{spaceId}/upload |
Upload a file (raw body, ?filename=) |
Bundles
A bundle is a portable copy of a whole app or workspace. See Bundles & App Kits.
| Method | Path | What it does |
|---|---|---|
GET |
/bundles/{spaceId}/export |
Export a space as JSON |
GET |
/bundles/{spaceId}/export/zip |
Export a space as a .zip or .tsk file |
POST |
/bundles/{workspaceId}/import |
Import a JSON bundle |
POST |
/bundles/{workspaceId}/import/zip |
Import a .zip or .tsk file |
User projects
Your own recent projects, across workspaces.
| Method | Path | What it does |
|---|---|---|
GET |
/me/projects |
List the projects of the current user |
Errors
Every error returns "ok": false and an upper-case code. Branch on ok and code. Do not parse message.
HTTP status codes
| Status | Meaning |
|---|---|
200 OK |
The request succeeded |
400 Bad Request |
A parameter or a field is not valid |
401 Unauthorized |
The token is missing or not valid |
402 Payment Required |
The operation needs a higher plan, or the account has no credits left |
403 Forbidden |
Your account does not have permission |
404 Not Found |
The item does not exist, or your account cannot see it |
429 Too Many Requests |
You hit a rate limit |
Other 4XX |
Another client error. Read the response body. |
Error response format
Every error carries ok, message, code, and statusMessage. A missing token returns 401:
{
"ok": false,
"message": "Unauthorized",
"code": "UNAUTHORIZED",
"statusMessage": "Unauthorized"
}
A plan error can also carry featureId, the plan feature that the call needs. The bundle export returns "featureId": "space.bundle.export" with its 402.
Fix common errors
Match the code in the response to a fix.
| What you see | Cause | Fix |
|---|---|---|
"code": "UNAUTHORIZED" |
The token is missing, wrong, or revoked | Send Authorization: Bearer $TASKADE_TOKEN. Make sure that the variable is set in the same terminal. |
"code": "FST_ERR_VALIDATION" |
A field or parameter does not match the schema | Read message. It names each field that failed, then the reason. |
"code": "PAYMENT_REQUIRED" |
The workspace plan does not include the operation | Read featureId if it is present. Upgrade the workspace, or use a workspace on a higher plan. |
"code": "NOT_FOUND" |
The ID is wrong, or your account cannot see the item | Check the ID and your workspace access. |
"code": "TOO_MANY_REQUESTS" |
You hit a rate limit | Wait for the number of seconds in the Retry-After header, then send the request again. |
Code examples
The same calls in three runtimes. Each example reads the token from the TASKADE_TOKEN environment variable.
JavaScript (Node.js 18 or later)
const API_BASE = 'https://www.taskade.com/api/v1';
const headers = {
Authorization: `Bearer ${process.env.TASKADE_TOKEN}`,
'Content-Type': 'application/json',
};
// Get all workspaces
async function getWorkspaces() {
const response = await fetch(`${API_BASE}/workspaces`, { headers });
return response.json();
}
// Get project tasks
async function getProjectTasks(projectId) {
const response = await fetch(`${API_BASE}/projects/${projectId}/tasks`, { headers });
return response.json();
}
// Create a task at the end of a project
async function createTask(projectId, content) {
const response = await fetch(`${API_BASE}/projects/${projectId}/tasks/`, {
method: 'POST',
headers,
body: JSON.stringify({
tasks: [{ contentType: 'text/markdown', content, placement: 'beforeend' }],
}),
});
return response.json();
}
Python
Python 3 with the requests package.
import os
import requests
API_BASE = 'https://www.taskade.com/api/v1'
headers = {
'Authorization': f"Bearer {os.environ['TASKADE_TOKEN']}",
'Content-Type': 'application/json',
}
# Get all workspaces
def get_workspaces():
response = requests.get(f'{API_BASE}/workspaces', headers=headers)
return response.json()
# Get project tasks
def get_project_tasks(project_id):
response = requests.get(f'{API_BASE}/projects/{project_id}/tasks', headers=headers)
return response.json()
# Complete a task
def complete_task(project_id, task_id):
response = requests.post(
f'{API_BASE}/projects/{project_id}/tasks/{task_id}/complete',
headers=headers,
)
return response.json()
cURL
Save the IDs that you use, then send the requests:
export FOLDER_ID="your_folder_id"
export AGENT_ID="your_agent_id"
# Get projects in a folder
curl -s "https://www.taskade.com/api/v1/folders/$FOLDER_ID/projects" \
-H "Authorization: Bearer $TASKADE_TOKEN"
# Get an agent
curl -s "https://www.taskade.com/api/v1/agents/$AGENT_ID" \
-H "Authorization: Bearer $TASKADE_TOKEN"
A list call returns { "ok": true, "items": [...] }. A single-item call returns { "ok": true, "item": {...} }.
Best practices
Follow these rules to keep an integration safe, fast, and correct.
Security
- Store tokens in environment variables or a secret manager.
- Never put a token in client-side code or in a public repository.
- Use one token for each integration, so that you can revoke one without the others.
- Handle every error response.
Performance
- Page through large lists. Tasks and blocks use cursor pagination.
- Cache responses when the data permits it.
- Retry a
429after the number of seconds in itsRetry-Afterheader.
Data management
- Validate data before you send it to the API.
- Record partial failures, and retry only the calls that failed.
Next steps
- Make a full first integration: Quickstart creates a project and adds tasks in about five minutes.
- Look up an endpoint: REST API reference lists every v1 endpoint with its parameters and responses.
- Build AI tools: Action API guide gives one verb for each operation.
- Connect an AI client: Hosted Taskade MCP has the setup for Claude, Cursor, VS Code, and ChatGPT.
- Get help: search the Help Center, or email support@taskade.com.