Authorization: bearer, lowercase as Wrike’s own docs write it, against /api/v4.
- Three regional hosts. Wrike runs the same v4 API on
www.wrike.com,app-eu.wrike.comandapp-us2.wrike.com, and an account lives on exactly one. Nothing in a token says which, so passhost: 'eu'or'us2'; the default iswww. A test asserts the routing. - Both auth failures are a 401
not_authorized. TheerrorDescriptionis what separates them:Authorization method unknownmeans no header was sent at all, andAccess token is unknown or invalidmeans one was sent and is wrong. Both are auth errors, but the distinction tells you whether a credential was configured. - There is no account-level task create. A task always lives in a folder, so
tasks.createtakes afolderIdand posts to/folders/{folderId}/tasks. For the account root, use therootFolderIdthataccount.getreturns — it is a virtual folder, which is why reading the account once is worth doing. - Every response is
{ kind, data: [...] }. Even a single task comes back inside an array, so the output schemas unwrap by index rather than pretending a get returns one object. - Ids carry a prefix.
IEAA…is a task,IEA…a folder,KU…a contact,TL…a timelog. The prefix is part of the id and is never stripped or rewritten. - List filters are JSON arrays.
status,responsiblesandauthorsgo in the query string as JSON (status=["Active"]); Wrike refuses a comma-joined value as invalid, so the plugin encodes the array for you. Date filters take a date or astart,endrange. - Folder paging needs a filter. With no filter
folders.listreturns the whole folder tree, which Wrike does not page; setproject,titleorpermalinkto page withpageSizeandnextPageToken. Comments and contacts have no paging:comments.listtakes alimitinstead. - Dates go in one
datesobject. Wrike has no top-level start or due parameter, sostartDateanddueDateontasks.createandtasks.updateare folded intodates;dates: { type: 'Backlog' }clears a schedule. - A task delete is recoverable. Wrike moves it to the recycle bin, and
tasks.updatewithrestore: truebrings it back — which is why it is destructive but undoable. - A folder delete takes its contents with it. Wrike moves the folder and every folder and task inside it to the recycle bin unless they have parents outside the deleted folder. There is no flag that refuses a non-empty folder. Check
folders.tasksfirst if that matters. - A timelog needs
trackedDate,hoursandcomment. The date is the day the work belongs to, not when it was entered, andhoursis what every report totals. Wrike requires the comment, though it may be empty. - Comments are plain text. The plugin sends
plainText: true, so Wrike strips HTML tags instead of rendering them, and the text comes back as written. A comment can be edited only in the 5 minutes after it is posted. - No webhooks here. Wrike has REST routes for webhooks, but this plugin does not implement them.
- 23 typed API operations
Setup
1
Install
2
Add the plugin
corsair.ts
multiTenancy: true, scope calls with corsair.withTenant(id). See Quick start for KEK + Hub keys, and Multi-tenancy for account isolation.3
Choose authentication
- API Key (Recommended)
No setup required yet. When you make your first request as a tenant, Corsair prompts for the API key.More: API Key
4
Connect a tenant
Mint a connect link and send the tenant to it. Hub hosts the page and delivers the result to your app — see Connect / OAuth.
Example API calls
Page through active tasksWhat’s next
API reference
Every
wrike.api.* operation with input and output types.Connect / OAuth
createLink, Hub delivery, and tenant connect flows.
Use with agents
Expose this plugin’s operations as MCP tools.