Wrike API
Manage tasks, folders, projects, spaces, comments, timelogs, and workflows in Wrike via the REST API v4.
Official docs:
https://developers.wrike.com/overview/
When to Use
Use this skill when you need to:
- List and manage spaces, folders, and projects
- Create, update, delete, and search tasks
- Add and manage comments on tasks and folders
- Track time with timelogs
- Query contacts and workflows
Prerequisites
Go to vm0.ai Settings > Connectors and connect Wrike. vm0 will automatically inject the required WRIKE_TOKEN environment variable.
How to Use
All examples below assume you have WRIKE_TOKEN set.
Base URL: https://www.wrike.com/api/v4
Wrike uses alphanumeric IDs for all resources. The hierarchy is: Space > Folder/Project > Task. Projects are folders with additional properties (owners, start/end dates, status). All responses follow the format {"kind": "...", "data": [...]}.
Spaces
List All Spaces
curl -s "https://www.wrike.com/api/v4/spaces" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" | jq '.data[] | {id, title}'
Get Space by ID
curl -s "https://www.wrike.com/api/v4/spaces/<space_id>" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" | jq '.data[0]'
Create Space
Write to /tmp/wrike_request.json:
{
"title": "New Space"
}
curl -s -X POST "https://www.wrike.com/api/v4/spaces" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" --header "Content-Type: application/json" -d @/tmp/wrike_request.json | jq '.data[0] | {id, title}'
Delete Space
curl -s -X DELETE "https://www.wrike.com/api/v4/spaces/<space_id>" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)"
Folders & Projects
Get Folder Tree
curl -s "https://www.wrike.com/api/v4/folders" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" | jq '.data[] | {id, title, scope}'
Get Folders in a Space
curl -s "https://www.wrike.com/api/v4/spaces/<space_id>/folders" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" | jq '.data[] | {id, title, childIds}'
Get Subfolders
curl -s "https://www.wrike.com/api/v4/folders/<folder_id>/folders" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" | jq '.data[] | {id, title}'
Get Folder by ID
curl -s "https://www.wrike.com/api/v4/folders/<folder_id>" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" | jq '.data[0]'
Create Folder
Write to /tmp/wrike_request.json:
{
"title": "New Folder"
}
curl -s -X POST "https://www.wrike.com/api/v4/folders/<parent_folder_id>/folders" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" --header "Content-Type: application/json" -d @/tmp/wrike_request.json | jq '.data[0] | {id, title}'
Create Project
Write to /tmp/wrike_request.json:
{
"title": "New Project",
"project": {
"status": "Green",
"startDate": "2026-04-01",
"endDate": "2026-06-30"
}
}
curl -s -X POST "https://www.wrike.com/api/v4/folders/<parent_folder_id>/folders" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" --header "Content-Type: application/json" -d @/tmp/wrike_request.json | jq '.data[0] | {id, title, project}'
Update Folder
Write to /tmp/wrike_request.json:
{
"title": "Updated Folder Name"
}
curl -s -X PUT "https://www.wrike.com/api/v4/folders/<folder_id>" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" --header "Content-Type: application/json" -d @/tmp/wrike_request.json | jq '.data[0] | {id, title}'
Delete Folder
curl -s -X DELETE "https://www.wrike.com/api/v4/folders/<folder_id>" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)"
Tasks
List Tasks in a Folder
curl -s "https://www.wrike.com/api/v4/folders/<folder_id>/tasks" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" | jq '.data[] | {id, title, status, importance, dates}'
List Tasks in a Space
curl -s "https://www.wrike.com/api/v4/spaces/<space_id>/tasks" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" | jq '.data[] | {id, title, status, importance}'
Get Task by ID
curl -s "https://www.wrike.com/api/v4/tasks/<task_id>" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" | jq '.data[0] | {id, title, description, status, importance, dates, responsibleIds}'
Create Task
Write to /tmp/wrike_request.json:
{
"title": "New Task",
"description": "Task description here",
"status": "Active",
"importance": "Normal",
"dates": {
"start": "2026-04-01",
"due": "2026-04-15"
},
"responsibles": ["<contact_id>"]
}
curl -s -X POST "https://www.wrike.com/api/v4/folders/<folder_id>/tasks" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" --header "Content-Type: application/json" -d @/tmp/wrike_request.json | jq '.data[0] | {id, title, status}'
Update Task
Write to /tmp/wrike_request.json:
{
"title": "Updated Task Name",
"status": "Completed",
"importance": "High"
}
curl -s -X PUT "https://www.wrike.com/api/v4/tasks/<task_id>" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" --header "Content-Type: application/json" -d @/tmp/wrike_request.json | jq '.data[0] | {id, title, status}'
Delete Task
curl -s -X DELETE "https://www.wrike.com/api/v4/tasks/<task_id>" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)"
Comments
List Comments on a Task
curl -s "https://www.wrike.com/api/v4/tasks/<task_id>/comments" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" | jq '.data[] | {id, text, authorId, createdDate}'
List Comments on a Folder
curl -s "https://www.wrike.com/api/v4/folders/<folder_id>/comments" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" | jq '.data[] | {id, text, authorId, createdDate}'
Create Comment on a Task
Write to /tmp/wrike_request.json:
{
"text": "This is a comment on the task."
}
curl -s -X POST "https://www.wrike.com/api/v4/tasks/<task_id>/comments" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" --header "Content-Type: application/json" -d @/tmp/wrike_request.json | jq '.data[0]'
Update Comment
Write to /tmp/wrike_request.json:
{
"text": "Updated comment text."
}
curl -s -X PUT "https://www.wrike.com/api/v4/comments/<comment_id>" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" --header "Content-Type: application/json" -d @/tmp/wrike_request.json | jq '.data[0]'
Delete Comment
curl -s -X DELETE "https://www.wrike.com/api/v4/comments/<comment_id>" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)"
Contacts
List All Contacts
curl -s "https://www.wrike.com/api/v4/contacts" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" | jq '.data[] | {id, firstName, lastName, type, profiles}'
Get Contact by ID
curl -s "https://www.wrike.com/api/v4/contacts/<contact_id>" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" | jq '.data[0]'
Timelogs
List Timelogs for a Task
curl -s "https://www.wrike.com/api/v4/tasks/<task_id>/timelogs" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" | jq '.data[] | {id, taskId, hours, trackedDate, comment}'
Create Timelog
Write to /tmp/wrike_request.json:
{
"hours": 2.5,
"trackedDate": "2026-04-01",
"comment": "Working on implementation"
}
curl -s -X POST "https://www.wrike.com/api/v4/tasks/<task_id>/timelogs" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" --header "Content-Type: application/json" -d @/tmp/wrike_request.json | jq '.data[0] | {id, hours, trackedDate}'
Delete Timelog
curl -s -X DELETE "https://www.wrike.com/api/v4/timelogs/<timelog_id>" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)"
Workflows
List Workflows
curl -s "https://www.wrike.com/api/v4/workflows" --header "Authorization: Bearer $(printenv WRIKE_TOKEN)" | jq '.data[] | {id, name, customStatuses}'
Guidelines
- Wrike uses alphanumeric string IDs for all resources. Use
jqto extractidandtitlefields. - The resource hierarchy is: Space > Folder/Project > Task. Projects are folders with additional properties (owners, start/end dates, status).
- Task statuses include
Active,Completed,Deferred,Cancelled, and custom statuses defined in workflows. - Importance values:
High,Normal,Low. - Dates use
YYYY-MM-DDformat (e.g.,2026-04-01). - All responses follow the format
{"kind": "...", "data": [...]}. Thedatafield is always an array. - You can query up to 100 resources by ID in a single request using comma-separated IDs (e.g.,
/tasks/id1,id2,id3). - Write request bodies to
/tmp/wrike_request.jsonbefore sending. - Rate limits: Wrike allows 400 requests per minute per access token. Back off on 429 responses.
- Use
<placeholder>for dynamic IDs that the user must replace (e.g.,<task_id>,<folder_id>).