Download OpenAPI specification:
The REST API allows you to control and extend Wekan with ease.
If you are an end-user and not a dev or a tester, create an issue to request new APIs.
All API calls in the documentation are made using
curl. However, you are free to use Java / Python / PHP / Golang / Ruby / Swift / Objective-C / Rust / Scala / C# or any other programming languages.
When calling a production Wekan server, ensure it is running via HTTPS and has a valid SSL Certificate. The login method requires you to post your username and password in plaintext, which is why we highly suggest only calling the REST login api over HTTPS. Also, few things to note:
If user is already logged-in, pass loginToken as param "authToken": '/api/boards/:boardId/attachments/:attachmentId/export?authToken=:token'
| board required | string the ID of the board we are exporting |
| attachment required | string the ID of the attachment we are exporting |
If user is already logged-in, pass loginToken as param "authToken": '/api/boards/:boardId/export?authToken=:token'
See https://blog.kayla.com.au/server-side-route-authentication-in-meteor/ for detailed explanations
| board required | string the ID of the board we are exporting |
If user is already logged-in, pass loginToken as param
See https://blog.kayla.com.au/server-side-route-authentication-in-meteor/ for detailed explanations
| board required | string the ID of the board we are exporting |
If user is already logged-in, pass loginToken as param "authToken": '/api/boards/:boardId/exportExcel?authToken=:token'
See https://blog.kayla.com.au/server-side-route-authentication-in-meteor/ for detailed explanations
| board required | string the ID of the board we are exporting |
If user is already logged-in, pass loginToken as param "authToken": '/api/boards/:boardId/exportExcel?authToken=:token'
See https://blog.kayla.com.au/server-side-route-authentication-in-meteor/ for detailed explanations
| board required | string the ID of the board we are exporting |
| list required | string the list value |
| card required | string the card value |
Accepts a WeKan board export JSON (the body returned by
GET /api/boards/:boardId/export) and recreates the board — including its
rules / triggers / actions (workflows) and other data — in the
authenticated user's account. Combined with the export endpoint, this allows
migrating all boards (and their workflows) from another WeKan instance over the
REST API: list the remote boards, export each, then POST each here. An optional
membersMapping ({ sourceUserId: localUserId }) maps members; unmapped members
are simply not added.
| board required | object the WeKan board export object |
| membersMapping | object map of source user id -> local user id |
{- "_id": "string"
}Accepts a WeKan board export JSON (the body returned by
GET /api/boards/:boardId/export) and recreates the board — including its
rules / triggers / actions (workflows) and other data — in the
authenticated user's account. Combined with the export endpoint, this allows
migrating all boards (and their workflows) from another WeKan instance over the
REST API: list the remote boards, export each, then POST each here. An optional
membersMapping ({ sourceUserId: localUserId }) maps members; unmapped members
are simply not added.
| board required | object the WeKan board export object |
| membersMapping | object map of source user id -> local user id |
{- "_id": "string"
}Generalized import: :source is one of trello, wekan, csv,
jira, kanboard, excel, deck (NextCloud Deck), openproject, github,
gitlab, gitea, forgejo, asana, zenkit. The request body is that
tool's export JSON (sent directly, or wrapped as { "board": <export> });
an optional membersMapping maps members. Reuses the same import engine as
the UI.
| source required | string the import source |
{- "_id": "string"
}Generalized import: :source is one of trello, wekan, csv,
jira, kanboard, excel, deck (NextCloud Deck), openproject, github,
gitlab, gitea, forgejo, asana, zenkit. The request body is that
tool's export JSON (sent directly, or wrapped as { "board": <export> });
an optional membersMapping maps members. Reuses the same import engine as
the UI.
| source required | string the import source |
{- "_id": "string"
}Boolean keys (the allows* display toggles and cardAging) accept true/false.
Numeric keys cardAgingDays1, cardAgingDays2, cardAgingDays3 set the
three card-aging fade-tier day thresholds (default 7 / 14 / 28).
| boardId required | string |
| cardAging | boolean Enable visual card aging on the board |
| cardAgingDays1 | integer Idle days for the first (lightest) fade tier |
| cardAgingDays2 | integer Idle days for the second fade tier |
| cardAgingDays3 | integer Idle days for the third (heaviest) fade tier |
{- "cardAging": true,
- "cardAgingDays1": 0,
- "cardAgingDays2": 0,
- "cardAgingDays3": 0
}The target card must be on the same board. If the dependency already exists, its type/color/icon are updated.
| board required | string the board ID |
| card required | string the source card ID |
| cardId required | string the source card ID |
| dependsOn required | string the dependsOn value |
| type | string relation type: related-to | blocks | is-blocked-by | fixes | is-fixed-by |
| color | string line/badge color, any CSS color e.g. "#eb144c" |
| icon | string FontAwesome icon name without the "fa-" prefix |
{- "_id": "string",
- "cardId": "string",
- "type": "string",
- "color": "string",
- "icon": "string"
}| board required | string the board ID |
| card required | string the source card ID |
| target required | string the target card ID of the dependency |
| type | string relation type: related-to | blocks | is-blocked-by | fixes | is-fixed-by |
| key required | string the key value |
{- "_id": "string"
}| board required | string the board ID |
[- {
- "from": "string",
- "fromTitle": "string",
- "fromCardNumber": 0,
- "to": "string",
- "toTitle": "string",
- "toCardNumber": 0,
- "type": "string",
- "color": "string",
- "icon": "string"
}
]| board required | string the board value |
| list required | string the list value |
| linkedId required | string the linkedId value |
| members required | string the members value |
| assignees required | string the assignees value |
| board required | string the board value |
| list required | string the list value |
| card required | string the card value |
| newBoardId required | string the newBoardId value |
| newSwimlaneId required | string the newSwimlaneId value |
| newListId required | string the newListId value |
| title required | string the title value |
| sort required | string the sort value |
| parentId required | string the parentId value |
| description required | string the description value |
| color required | string the color value |
| vote required | string the vote value |
| poker required | string the poker value |
| labelIds required | string the labelIds value |
| requestedBy required | string the requestedBy value |
| assignedBy required | string the assignedBy value |
| spentTime required | string the spentTime value |
| isOverTime required | string the isOverTime value |
| customFields required | string the customFields value |
| members required | string the members value |
| assignees required | string the assignees value |
| swimlaneId required | string the swimlaneId value |
| listId required | string the listId value |
| archive required | string the archive value |
| stickers required | string the stickers value |
| locations required | string the locations value |
| board required | string the board value |
| list required | string the list value |
| card required | string the card value |
| toBoardId required | string the toBoardId value |
| toSwimlaneId required | string the toSwimlaneId value |
| toListId required | string the toListId value |
| position required | string the position value |
| board required | string the board value |
| list required | string the list value |
| card required | string the card value |
| customField required | string the customField value |
| value required | string the value value |
If user is already logged-in, pass loginToken as param "authToken": '/api/boards/:boardId/lists/:listId/cards/:cardId/exportExcel?authToken=:token'
Optional query param "fields" is a comma-separated list of sections to include. Valid values: people, board-info, dates, description, checklists, subtasks, comments Omitting "fields" includes all sections.
| board required | string the ID of the board |
| list required | string the ID of the list |
| card required | string the ID of the card to export |
| board required | string the board value |
| customField required | string the customField value |
| dropdownItem required | string the dropdownItem value |
| name required | string the name value |
The trigger and action are embedded inline. See the Rules documentation for the available trigger activityTypes and action actionTypes.
| board required | string the board ID |
| title required | string the rule title |
| trigger required | object the trigger document (must include activityType) |
| action required | object the action document (must include actionType) |
{- "_id": "string",
- "triggerId": "string",
- "actionId": "string"
}The trigger and action are embedded inline. See the Rules documentation for the available trigger activityTypes and action actionTypes.
| board required | string the board ID |
| title required | string the rule title |
| trigger required | object the trigger document (must include activityType) |
| action required | object the action document (must include actionType) |
{- "_id": "string",
- "triggerId": "string",
- "actionId": "string"
}Any of title, trigger and action may be supplied; the trigger and action documents are replaced ($set) when present.
| board required | string the board ID |
| rule required | string the rule ID |
| title | string the new rule title |
| trigger | object the new trigger document |
| action | object the new action document |
{- "_id": "string"
}Any of title, trigger and action may be supplied; the trigger and action documents are replaced ($set) when present.
| board required | string the board ID |
| rule required | string the rule ID |
| title | string the new rule title |
| trigger | object the new trigger document |
| action | object the new action document |
{- "_id": "string"
}Upload a file to a card. The file content is sent base64-encoded in the
JSON body. The maximum size is bounded by the admin Attachment Storage
Settings (apiUploadMaxBytes) and a hard server safety cap (64 MB).
Permissions: requires a valid auth token, write access to the target board (read-only / comment-only / worker members are rejected), and the board must allow attachments.
| boardId required | string ID of the board the card belongs to |
| swimlaneId required | string ID of the card's swimlane (must match the card) |
| listId required | string ID of the card's list (must match the card) |
| cardId required | string ID of the card to attach the file to |
| fileName required | string Name to store the file under |
| fileType | string MIME type of the file (optional) |
| fileData required | string Base64-encoded file contents |
{- "boardId": "string",
- "swimlaneId": "string",
- "listId": "string",
- "cardId": "string",
- "fileName": "string",
- "fileType": "string",
- "fileData": "string"
}Upload an image and set it as the board's active background. The file content is sent base64-encoded in the JSON body and stored using the current Admin Panel / Attachments / Default Storage backend (the same storage used by card attachment uploads). Board-admin is required.
| boardId required | string ID of the board |
| fileName required | string Name to store the image under |
| fileType | string MIME type of the image (optional, defaults to image/png) |
| fileData required | string Base64-encoded image contents |
{- "boardId": "string",
- "fileName": "string",
- "fileType": "string",
- "fileData": "string"
}Returns the attachment metadata together with the file contents
base64-encoded in base64Data. The maximum size is bounded by the admin
Attachment Storage Settings (apiDownloadMaxBytes).
Permissions: requires active membership of the attachment's board.
| attachmentId required | string ID of the attachment to download |
Returns attachment metadata (name, size, type, storage backend, board / swimlane / list / card IDs and available versions) without the file contents.
Permissions: requires active membership of the attachment's board.
| attachmentId required | string ID of the attachment |
List attachments filtered down to one card. The card must belong to the given board.
Permissions: requires active membership of the board.
| boardId required | string |
| swimlaneId required | string |
| listId required | string |
| cardId required | string |
Copy an existing attachment to a target card, creating a new attachment.
Permissions: requires membership of the source board (to read it) and write access to the target board, which must allow attachments. Honours the admin API upload limits.
| attachmentId required | string ID of the source attachment |
| targetBoardId required | string |
| targetSwimlaneId required | string |
| targetListId required | string |
| targetCardId required | string |
{- "attachmentId": "string",
- "targetBoardId": "string",
- "targetSwimlaneId": "string",
- "targetListId": "string",
- "targetCardId": "string"
}Move an existing attachment to a target card by updating its metadata.
Permissions: requires write access to both the source board (the attachment is removed from it) and the target board, which must allow attachments.
| attachmentId required | string ID of the attachment to move |
| targetBoardId required | string |
| targetSwimlaneId required | string |
| targetListId required | string |
| targetCardId required | string |
{- "attachmentId": "string",
- "targetBoardId": "string",
- "targetSwimlaneId": "string",
- "targetListId": "string",
- "targetCardId": "string"
}