Wekan REST API v4.89
+Wekan REST API v4.90
@@ -2568,6 +2623,1961 @@ System.out.println(response.toString()); +Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.
Boards
+get_public_boards
+ +++Code samples
+
# You can also use wget
+curl -X GET /api/boards \
+ -H 'Accept: application/json' \
+ -H 'Authorization: API_KEY'
+
+
+GET /api/boards HTTP/1.1
+
+Accept: application/json
+
+
+var headers = {
+ 'Accept':'application/json',
+ 'Authorization':'API_KEY'
+
+};
+
+$.ajax({
+ url: '/api/boards',
+ method: 'get',
+
+ headers: headers,
+ success: function(data) {
+ console.log(JSON.stringify(data));
+ }
+})
+
+
+const fetch = require('node-fetch');
+
+const headers = {
+ 'Accept':'application/json',
+ 'Authorization':'API_KEY'
+
+};
+
+fetch('/api/boards',
+{
+ method: 'GET',
+
+ headers: headers
+})
+.then(function(res) {
+ return res.json();
+}).then(function(body) {
+ console.log(body);
+});
+
+
+require 'rest-client'
+require 'json'
+
+headers = {
+ 'Accept' => 'application/json',
+ 'Authorization' => 'API_KEY'
+}
+
+result = RestClient.get '/api/boards',
+ params: {
+ }, headers: headers
+
+p JSON.parse(result)
+
+
+import requests
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'API_KEY'
+}
+
+r = requests.get('/api/boards', params={
+
+}, headers = headers)
+
+print r.json()
+
+
+URL obj = new URL("/api/boards");
+HttpURLConnection con = (HttpURLConnection) obj.openConnection();
+con.setRequestMethod("GET");
+int responseCode = con.getResponseCode();
+BufferedReader in = new BufferedReader(
+ new InputStreamReader(con.getInputStream()));
+String inputLine;
+StringBuffer response = new StringBuffer();
+while ((inputLine = in.readLine()) != null) {
+ response.append(inputLine);
+}
+in.close();
+System.out.println(response.toString());
+
+
+package main
+
+import (
+ "bytes"
+ "net/http"
+)
+
+func main() {
+
+ headers := map[string][]string{
+ "Accept": []string{"application/json"},
+ "Authorization": []string{"API_KEY"},
+
+ }
+
+ data := bytes.NewBuffer([]byte{jsonReq})
+ req, err := http.NewRequest("GET", "/api/boards", data)
+ req.Header = headers
+
+ client := &http.Client{}
+ resp, err := client.Do(req)
+ // ...
+}
+
+
+GET /api/boards
Get all public boards
+++Example responses
+
++200 Response
+
[
+ {
+ "_id": "string",
+ "title": "string"
+ }
+]
+
+Responses
+| Status | +Meaning | +Description | +Schema | +
|---|---|---|---|
| 200 | +OK | +200 response | +Inline | +
Response Schema
+Status Code 200
+| Name | +Type | +Required | +Restrictions | +Description | +
|---|---|---|---|---|
| » _id | +string | +false | +none | +none | +
| » title | +string | +false | +none | +none | +
new_board
+ +++Code samples
+
# You can also use wget
+curl -X POST /api/boards \
+ -H 'Content-Type: multipart/form-data' \
+ -H 'Accept: application/json' \
+ -H 'Authorization: API_KEY'
+
+
+POST /api/boards HTTP/1.1
+
+Content-Type: multipart/form-data
+Accept: application/json
+
+
+var headers = {
+ 'Content-Type':'multipart/form-data',
+ 'Accept':'application/json',
+ 'Authorization':'API_KEY'
+
+};
+
+$.ajax({
+ url: '/api/boards',
+ method: 'post',
+
+ headers: headers,
+ success: function(data) {
+ console.log(JSON.stringify(data));
+ }
+})
+
+
+const fetch = require('node-fetch');
+const inputBody = '{
+ "title": "string",
+ "owner": "string",
+ "isAdmin": true,
+ "isActive": true,
+ "isNoComments": true,
+ "isCommentOnly": true,
+ "isWorker": true,
+ "permission": "string",
+ "color": "string"
+}';
+const headers = {
+ 'Content-Type':'multipart/form-data',
+ 'Accept':'application/json',
+ 'Authorization':'API_KEY'
+
+};
+
+fetch('/api/boards',
+{
+ method: 'POST',
+ body: inputBody,
+ headers: headers
+})
+.then(function(res) {
+ return res.json();
+}).then(function(body) {
+ console.log(body);
+});
+
+
+require 'rest-client'
+require 'json'
+
+headers = {
+ 'Content-Type' => 'multipart/form-data',
+ 'Accept' => 'application/json',
+ 'Authorization' => 'API_KEY'
+}
+
+result = RestClient.post '/api/boards',
+ params: {
+ }, headers: headers
+
+p JSON.parse(result)
+
+
+import requests
+headers = {
+ 'Content-Type': 'multipart/form-data',
+ 'Accept': 'application/json',
+ 'Authorization': 'API_KEY'
+}
+
+r = requests.post('/api/boards', params={
+
+}, headers = headers)
+
+print r.json()
+
+
+URL obj = new URL("/api/boards");
+HttpURLConnection con = (HttpURLConnection) obj.openConnection();
+con.setRequestMethod("POST");
+int responseCode = con.getResponseCode();
+BufferedReader in = new BufferedReader(
+ new InputStreamReader(con.getInputStream()));
+String inputLine;
+StringBuffer response = new StringBuffer();
+while ((inputLine = in.readLine()) != null) {
+ response.append(inputLine);
+}
+in.close();
+System.out.println(response.toString());
+
+
+package main
+
+import (
+ "bytes"
+ "net/http"
+)
+
+func main() {
+
+ headers := map[string][]string{
+ "Content-Type": []string{"multipart/form-data"},
+ "Accept": []string{"application/json"},
+ "Authorization": []string{"API_KEY"},
+
+ }
+
+ data := bytes.NewBuffer([]byte{jsonReq})
+ req, err := http.NewRequest("POST", "/api/boards", data)
+ req.Header = headers
+
+ client := &http.Client{}
+ resp, err := client.Do(req)
+ // ...
+}
+
+
+POST /api/boards
Create a board
+This allows to create a board.
+The color has to be chosen between belize, nephritis, pomegranate,
+pumpkin, wisteria, moderatepink, strongcyan,
+limegreen, midnight, dark, relax, corteza:
+++Body parameter
+
title: string
+owner: string
+isAdmin: true
+isActive: true
+isNoComments: true
+isCommentOnly: true
+isWorker: true
+permission: string
+color: string
+
+
+Parameters
+| Name | +In | +Type | +Required | +Description | +
|---|---|---|---|---|
| body | +body | +object | +false | +none | +
| » title | +body | +string | +true | +the new title of the board | +
| » owner | +body | +string | +true | +"ABCDE12345" <= User ID in Wekan. | +
| » isAdmin | +body | +boolean | +false | +is the owner an admin of the board (default true) | +
| » isActive | +body | +boolean | +false | +is the board active (default true) | +
| » isNoComments | +body | +boolean | +false | +disable comments (default false) | +
| » isCommentOnly | +body | +boolean | +false | +only enable comments (default false) | +
| » isWorker | +body | +boolean | +false | +only move cards, assign himself to card and comment (default false) | +
| » permission | +body | +string | +false | +"private" board <== Set to "public" if you | +
| » color | +body | +string | +false | +the color of the board | +
Detailed descriptions
+» owner: "ABCDE12345" <= User ID in Wekan. +(Not username or email)
+» permission: "private" board <== Set to "public" if you +want public Wekan board
+++Example responses
+
++200 Response
+
{
+ "_id": "string",
+ "defaultSwimlaneId": "string"
+}
+
+Responses
+| Status | +Meaning | +Description | +Schema | +
|---|---|---|---|
| 200 | +OK | +200 response | +Inline | +
Response Schema
+Status Code 200
+| Name | +Type | +Required | +Restrictions | +Description | +
|---|---|---|---|---|
| » _id | +string | +false | +none | +none | +
| » defaultSwimlaneId | +string | +false | +none | +none | +
get_board
+ +++Code samples
+
# You can also use wget
+curl -X GET /api/boards/{board} \
+ -H 'Accept: application/json' \
+ -H 'Authorization: API_KEY'
+
+
+GET /api/boards/{board} HTTP/1.1
+
+Accept: application/json
+
+
+var headers = {
+ 'Accept':'application/json',
+ 'Authorization':'API_KEY'
+
+};
+
+$.ajax({
+ url: '/api/boards/{board}',
+ method: 'get',
+
+ headers: headers,
+ success: function(data) {
+ console.log(JSON.stringify(data));
+ }
+})
+
+
+const fetch = require('node-fetch');
+
+const headers = {
+ 'Accept':'application/json',
+ 'Authorization':'API_KEY'
+
+};
+
+fetch('/api/boards/{board}',
+{
+ method: 'GET',
+
+ headers: headers
+})
+.then(function(res) {
+ return res.json();
+}).then(function(body) {
+ console.log(body);
+});
+
+
+require 'rest-client'
+require 'json'
+
+headers = {
+ 'Accept' => 'application/json',
+ 'Authorization' => 'API_KEY'
+}
+
+result = RestClient.get '/api/boards/{board}',
+ params: {
+ }, headers: headers
+
+p JSON.parse(result)
+
+
+import requests
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'API_KEY'
+}
+
+r = requests.get('/api/boards/{board}', params={
+
+}, headers = headers)
+
+print r.json()
+
+
+URL obj = new URL("/api/boards/{board}");
+HttpURLConnection con = (HttpURLConnection) obj.openConnection();
+con.setRequestMethod("GET");
+int responseCode = con.getResponseCode();
+BufferedReader in = new BufferedReader(
+ new InputStreamReader(con.getInputStream()));
+String inputLine;
+StringBuffer response = new StringBuffer();
+while ((inputLine = in.readLine()) != null) {
+ response.append(inputLine);
+}
+in.close();
+System.out.println(response.toString());
+
+
+package main
+
+import (
+ "bytes"
+ "net/http"
+)
+
+func main() {
+
+ headers := map[string][]string{
+ "Accept": []string{"application/json"},
+ "Authorization": []string{"API_KEY"},
+
+ }
+
+ data := bytes.NewBuffer([]byte{jsonReq})
+ req, err := http.NewRequest("GET", "/api/boards/{board}", data)
+ req.Header = headers
+
+ client := &http.Client{}
+ resp, err := client.Do(req)
+ // ...
+}
+
+
+GET /api/boards/{board}
Get the board with that particular ID
+Parameters
+| Name | +In | +Type | +Required | +Description | +
|---|---|---|---|---|
| board | +path | +string | +true | +the ID of the board to retrieve the data | +
Detailed descriptions
+board: the ID of the board to retrieve the data
+++Example responses
+
++200 Response
+
{
+ "title": "string",
+ "slug": "string",
+ "archived": true,
+ "createdAt": "string",
+ "modifiedAt": "string",
+ "stars": 0,
+ "labels": [
+ {
+ "_id": "string",
+ "name": "string",
+ "color": "green"
+ }
+ ],
+ "members": [
+ {
+ "userId": "string",
+ "isAdmin": true,
+ "isActive": true,
+ "isNoComments": true,
+ "isCommentOnly": true,
+ "isWorker": true
+ }
+ ],
+ "permission": "public",
+ "color": "belize",
+ "description": "string",
+ "subtasksDefaultBoardId": "string",
+ "subtasksDefaultListId": "string",
+ "dateSettingsDefaultBoardId": "string",
+ "dateSettingsDefaultListId": "string",
+ "allowsSubtasks": true,
+ "allowsAttachments": true,
+ "allowsChecklists": true,
+ "allowsComments": true,
+ "allowsDescriptionTitle": true,
+ "allowsDescriptionText": true,
+ "allowsActivities": true,
+ "allowsLabels": true,
+ "allowsAssignee": true,
+ "allowsMembers": true,
+ "allowsRequestedBy": true,
+ "allowsAssignedBy": true,
+ "allowsReceivedDate": true,
+ "allowsStartDate": true,
+ "allowsEndDate": true,
+ "allowsDueDate": true,
+ "presentParentTask": "prefix-with-full-path",
+ "startAt": "string",
+ "dueAt": "string",
+ "endAt": "string",
+ "spentTime": 0,
+ "isOvertime": true,
+ "type": "string",
+ "sort": 0
+}
+
+Responses
+| Status | +Meaning | +Description | +Schema | +
|---|---|---|---|
| 200 | +OK | +200 response | +Boards | +
delete_board
+ +++Code samples
+
# You can also use wget
+curl -X DELETE /api/boards/{board} \
+ -H 'Authorization: API_KEY'
+
+
+DELETE /api/boards/{board} HTTP/1.1
+
+
+var headers = {
+ 'Authorization':'API_KEY'
+
+};
+
+$.ajax({
+ url: '/api/boards/{board}',
+ method: 'delete',
+
+ headers: headers,
+ success: function(data) {
+ console.log(JSON.stringify(data));
+ }
+})
+
+
+const fetch = require('node-fetch');
+
+const headers = {
+ 'Authorization':'API_KEY'
+
+};
+
+fetch('/api/boards/{board}',
+{
+ method: 'DELETE',
+
+ headers: headers
+})
+.then(function(res) {
+ return res.json();
+}).then(function(body) {
+ console.log(body);
+});
+
+
+require 'rest-client'
+require 'json'
+
+headers = {
+ 'Authorization' => 'API_KEY'
+}
+
+result = RestClient.delete '/api/boards/{board}',
+ params: {
+ }, headers: headers
+
+p JSON.parse(result)
+
+
+import requests
+headers = {
+ 'Authorization': 'API_KEY'
+}
+
+r = requests.delete('/api/boards/{board}', params={
+
+}, headers = headers)
+
+print r.json()
+
+
+URL obj = new URL("/api/boards/{board}");
+HttpURLConnection con = (HttpURLConnection) obj.openConnection();
+con.setRequestMethod("DELETE");
+int responseCode = con.getResponseCode();
+BufferedReader in = new BufferedReader(
+ new InputStreamReader(con.getInputStream()));
+String inputLine;
+StringBuffer response = new StringBuffer();
+while ((inputLine = in.readLine()) != null) {
+ response.append(inputLine);
+}
+in.close();
+System.out.println(response.toString());
+
+
+package main
+
+import (
+ "bytes"
+ "net/http"
+)
+
+func main() {
+
+ headers := map[string][]string{
+ "Authorization": []string{"API_KEY"},
+
+ }
+
+ data := bytes.NewBuffer([]byte{jsonReq})
+ req, err := http.NewRequest("DELETE", "/api/boards/{board}", data)
+ req.Header = headers
+
+ client := &http.Client{}
+ resp, err := client.Do(req)
+ // ...
+}
+
+
+DELETE /api/boards/{board}
Delete a board
+Parameters
+| Name | +In | +Type | +Required | +Description | +
|---|---|---|---|---|
| board | +path | +string | +true | +the ID of the board | +
Detailed descriptions
+board: the ID of the board
+Responses
+| Status | +Meaning | +Description | +Schema | +
|---|---|---|---|
| 200 | +OK | +200 response | +None | +
get_board_attachments
+ +++Code samples
+
# You can also use wget
+curl -X GET /api/boards/{board}/attachments \
+ -H 'Accept: application/json' \
+ -H 'Authorization: API_KEY'
+
+
+GET /api/boards/{board}/attachments HTTP/1.1
+
+Accept: application/json
+
+
+var headers = {
+ 'Accept':'application/json',
+ 'Authorization':'API_KEY'
+
+};
+
+$.ajax({
+ url: '/api/boards/{board}/attachments',
+ method: 'get',
+
+ headers: headers,
+ success: function(data) {
+ console.log(JSON.stringify(data));
+ }
+})
+
+
+const fetch = require('node-fetch');
+
+const headers = {
+ 'Accept':'application/json',
+ 'Authorization':'API_KEY'
+
+};
+
+fetch('/api/boards/{board}/attachments',
+{
+ method: 'GET',
+
+ headers: headers
+})
+.then(function(res) {
+ return res.json();
+}).then(function(body) {
+ console.log(body);
+});
+
+
+require 'rest-client'
+require 'json'
+
+headers = {
+ 'Accept' => 'application/json',
+ 'Authorization' => 'API_KEY'
+}
+
+result = RestClient.get '/api/boards/{board}/attachments',
+ params: {
+ }, headers: headers
+
+p JSON.parse(result)
+
+
+import requests
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'API_KEY'
+}
+
+r = requests.get('/api/boards/{board}/attachments', params={
+
+}, headers = headers)
+
+print r.json()
+
+
+URL obj = new URL("/api/boards/{board}/attachments");
+HttpURLConnection con = (HttpURLConnection) obj.openConnection();
+con.setRequestMethod("GET");
+int responseCode = con.getResponseCode();
+BufferedReader in = new BufferedReader(
+ new InputStreamReader(con.getInputStream()));
+String inputLine;
+StringBuffer response = new StringBuffer();
+while ((inputLine = in.readLine()) != null) {
+ response.append(inputLine);
+}
+in.close();
+System.out.println(response.toString());
+
+
+package main
+
+import (
+ "bytes"
+ "net/http"
+)
+
+func main() {
+
+ headers := map[string][]string{
+ "Accept": []string{"application/json"},
+ "Authorization": []string{"API_KEY"},
+
+ }
+
+ data := bytes.NewBuffer([]byte{jsonReq})
+ req, err := http.NewRequest("GET", "/api/boards/{board}/attachments", data)
+ req.Header = headers
+
+ client := &http.Client{}
+ resp, err := client.Do(req)
+ // ...
+}
+
+
+GET /api/boards/{board}/attachments
Get the list of attachments of a board
+Parameters
+| Name | +In | +Type | +Required | +Description | +
|---|---|---|---|---|
| board | +path | +string | +true | +the board ID | +
Detailed descriptions
+board: the board ID
+++Example responses
+
++200 Response
+
[
+ {
+ "attachmentId": "string",
+ "attachmentName": "string",
+ "attachmentType": "string",
+ "cardId": "string",
+ "listId": "string",
+ "swimlaneId": "string"
+ }
+]
+
+Responses
+| Status | +Meaning | +Description | +Schema | +
|---|---|---|---|
| 200 | +OK | +200 response | +Inline | +
Response Schema
+Status Code 200
+| Name | +Type | +Required | +Restrictions | +Description | +
|---|---|---|---|---|
| » attachmentId | +string | +false | +none | +none | +
| » attachmentName | +string | +false | +none | +none | +
| » attachmentType | +string | +false | +none | +none | +
| » cardId | +string | +false | +none | +none | +
| » listId | +string | +false | +none | +none | +
| » swimlaneId | +string | +false | +none | +none | +
exportJson
+ +++Code samples
+
# You can also use wget
+curl -X GET /api/boards/{board}/export \
+ -H 'Authorization: API_KEY'
+
+
+GET /api/boards/{board}/export HTTP/1.1
+
+
+var headers = {
+ 'Authorization':'API_KEY'
+
+};
+
+$.ajax({
+ url: '/api/boards/{board}/export',
+ method: 'get',
+
+ headers: headers,
+ success: function(data) {
+ console.log(JSON.stringify(data));
+ }
+})
+
+
+const fetch = require('node-fetch');
+
+const headers = {
+ 'Authorization':'API_KEY'
+
+};
+
+fetch('/api/boards/{board}/export',
+{
+ method: 'GET',
+
+ headers: headers
+})
+.then(function(res) {
+ return res.json();
+}).then(function(body) {
+ console.log(body);
+});
+
+
+require 'rest-client'
+require 'json'
+
+headers = {
+ 'Authorization' => 'API_KEY'
+}
+
+result = RestClient.get '/api/boards/{board}/export',
+ params: {
+ }, headers: headers
+
+p JSON.parse(result)
+
+
+import requests
+headers = {
+ 'Authorization': 'API_KEY'
+}
+
+r = requests.get('/api/boards/{board}/export', params={
+
+}, headers = headers)
+
+print r.json()
+
+
+URL obj = new URL("/api/boards/{board}/export");
+HttpURLConnection con = (HttpURLConnection) obj.openConnection();
+con.setRequestMethod("GET");
+int responseCode = con.getResponseCode();
+BufferedReader in = new BufferedReader(
+ new InputStreamReader(con.getInputStream()));
+String inputLine;
+StringBuffer response = new StringBuffer();
+while ((inputLine = in.readLine()) != null) {
+ response.append(inputLine);
+}
+in.close();
+System.out.println(response.toString());
+
+
+package main
+
+import (
+ "bytes"
+ "net/http"
+)
+
+func main() {
+
+ headers := map[string][]string{
+ "Authorization": []string{"API_KEY"},
+
+ }
+
+ data := bytes.NewBuffer([]byte{jsonReq})
+ req, err := http.NewRequest("GET", "/api/boards/{board}/export", data)
+ req.Header = headers
+
+ client := &http.Client{}
+ resp, err := client.Do(req)
+ // ...
+}
+
+
+GET /api/boards/{board}/export
This route is used to export the board to a json file format.
+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
+Parameters
+| Name | +In | +Type | +Required | +Description | +
|---|---|---|---|---|
| board | +path | +string | +true | +the ID of the board we are exporting | +
Detailed descriptions
+board: the ID of the board we are exporting
+Responses
+| Status | +Meaning | +Description | +Schema | +
|---|---|---|---|
| 200 | +OK | +200 response | +None | +
add_board_label
+ +++Code samples
+
# You can also use wget
+curl -X PUT /api/boards/{board}/labels \
+ -H 'Content-Type: multipart/form-data' \
+ -H 'Accept: application/json' \
+ -H 'Authorization: API_KEY'
+
+
+PUT /api/boards/{board}/labels HTTP/1.1
+
+Content-Type: multipart/form-data
+Accept: application/json
+
+
+var headers = {
+ 'Content-Type':'multipart/form-data',
+ 'Accept':'application/json',
+ 'Authorization':'API_KEY'
+
+};
+
+$.ajax({
+ url: '/api/boards/{board}/labels',
+ method: 'put',
+
+ headers: headers,
+ success: function(data) {
+ console.log(JSON.stringify(data));
+ }
+})
+
+
+const fetch = require('node-fetch');
+const inputBody = '{
+ "label": "string"
+}';
+const headers = {
+ 'Content-Type':'multipart/form-data',
+ 'Accept':'application/json',
+ 'Authorization':'API_KEY'
+
+};
+
+fetch('/api/boards/{board}/labels',
+{
+ method: 'PUT',
+ body: inputBody,
+ headers: headers
+})
+.then(function(res) {
+ return res.json();
+}).then(function(body) {
+ console.log(body);
+});
+
+
+require 'rest-client'
+require 'json'
+
+headers = {
+ 'Content-Type' => 'multipart/form-data',
+ 'Accept' => 'application/json',
+ 'Authorization' => 'API_KEY'
+}
+
+result = RestClient.put '/api/boards/{board}/labels',
+ params: {
+ }, headers: headers
+
+p JSON.parse(result)
+
+
+import requests
+headers = {
+ 'Content-Type': 'multipart/form-data',
+ 'Accept': 'application/json',
+ 'Authorization': 'API_KEY'
+}
+
+r = requests.put('/api/boards/{board}/labels', params={
+
+}, headers = headers)
+
+print r.json()
+
+
+URL obj = new URL("/api/boards/{board}/labels");
+HttpURLConnection con = (HttpURLConnection) obj.openConnection();
+con.setRequestMethod("PUT");
+int responseCode = con.getResponseCode();
+BufferedReader in = new BufferedReader(
+ new InputStreamReader(con.getInputStream()));
+String inputLine;
+StringBuffer response = new StringBuffer();
+while ((inputLine = in.readLine()) != null) {
+ response.append(inputLine);
+}
+in.close();
+System.out.println(response.toString());
+
+
+package main
+
+import (
+ "bytes"
+ "net/http"
+)
+
+func main() {
+
+ headers := map[string][]string{
+ "Content-Type": []string{"multipart/form-data"},
+ "Accept": []string{"application/json"},
+ "Authorization": []string{"API_KEY"},
+
+ }
+
+ data := bytes.NewBuffer([]byte{jsonReq})
+ req, err := http.NewRequest("PUT", "/api/boards/{board}/labels", data)
+ req.Header = headers
+
+ client := &http.Client{}
+ resp, err := client.Do(req)
+ // ...
+}
+
+
+PUT /api/boards/{board}/labels
Add a label to a board
+If the board doesn't have the name/color label, this function +adds the label to the board.
+++Body parameter
+
label: string
+
+
+Parameters
+| Name | +In | +Type | +Required | +Description | +
|---|---|---|---|---|
| board | +path | +string | +true | +the board | +
| body | +body | +object | +false | +none | +
| » label | +body | +string | +true | +the label value | +
Detailed descriptions
+board: the board
+++Example responses
+
++200 Response
+
"string"
+
+Responses
+| Status | +Meaning | +Description | +Schema | +
|---|---|---|---|
| 200 | +OK | +200 response | +string | +
set_board_member_permission
+ +++Code samples
+
# You can also use wget
+curl -X POST /api/boards/{board}/members/{member} \
+ -H 'Content-Type: multipart/form-data' \
+ -H 'Authorization: API_KEY'
+
+
+POST /api/boards/{board}/members/{member} HTTP/1.1
+
+Content-Type: multipart/form-data
+
+
+var headers = {
+ 'Content-Type':'multipart/form-data',
+ 'Authorization':'API_KEY'
+
+};
+
+$.ajax({
+ url: '/api/boards/{board}/members/{member}',
+ method: 'post',
+
+ headers: headers,
+ success: function(data) {
+ console.log(JSON.stringify(data));
+ }
+})
+
+
+const fetch = require('node-fetch');
+const inputBody = '{
+ "isAdmin": true,
+ "isNoComments": true,
+ "isCommentOnly": true,
+ "isWorker": true
+}';
+const headers = {
+ 'Content-Type':'multipart/form-data',
+ 'Authorization':'API_KEY'
+
+};
+
+fetch('/api/boards/{board}/members/{member}',
+{
+ method: 'POST',
+ body: inputBody,
+ headers: headers
+})
+.then(function(res) {
+ return res.json();
+}).then(function(body) {
+ console.log(body);
+});
+
+
+require 'rest-client'
+require 'json'
+
+headers = {
+ 'Content-Type' => 'multipart/form-data',
+ 'Authorization' => 'API_KEY'
+}
+
+result = RestClient.post '/api/boards/{board}/members/{member}',
+ params: {
+ }, headers: headers
+
+p JSON.parse(result)
+
+
+import requests
+headers = {
+ 'Content-Type': 'multipart/form-data',
+ 'Authorization': 'API_KEY'
+}
+
+r = requests.post('/api/boards/{board}/members/{member}', params={
+
+}, headers = headers)
+
+print r.json()
+
+
+URL obj = new URL("/api/boards/{board}/members/{member}");
+HttpURLConnection con = (HttpURLConnection) obj.openConnection();
+con.setRequestMethod("POST");
+int responseCode = con.getResponseCode();
+BufferedReader in = new BufferedReader(
+ new InputStreamReader(con.getInputStream()));
+String inputLine;
+StringBuffer response = new StringBuffer();
+while ((inputLine = in.readLine()) != null) {
+ response.append(inputLine);
+}
+in.close();
+System.out.println(response.toString());
+
+
+package main
+
+import (
+ "bytes"
+ "net/http"
+)
+
+func main() {
+
+ headers := map[string][]string{
+ "Content-Type": []string{"multipart/form-data"},
+ "Authorization": []string{"API_KEY"},
+
+ }
+
+ data := bytes.NewBuffer([]byte{jsonReq})
+ req, err := http.NewRequest("POST", "/api/boards/{board}/members/{member}", data)
+ req.Header = headers
+
+ client := &http.Client{}
+ resp, err := client.Do(req)
+ // ...
+}
+
+
+POST /api/boards/{board}/members/{member}
Change the permission of a member of a board
+++Body parameter
+
isAdmin: true
+isNoComments: true
+isCommentOnly: true
+isWorker: true
+
+
+Parameters
+| Name | +In | +Type | +Required | +Description | +
|---|---|---|---|---|
| board | +path | +string | +true | +the ID of the board that we are changing | +
| member | +path | +string | +true | +the ID of the user to change permissions | +
| body | +body | +object | +false | +none | +
| » isAdmin | +body | +boolean | +true | +admin capability | +
| » isNoComments | +body | +boolean | +true | +NoComments capability | +
| » isCommentOnly | +body | +boolean | +true | +CommentsOnly capability | +
| » isWorker | +body | +boolean | +true | +Worker capability | +
Detailed descriptions
+board: the ID of the board that we are changing
+member: the ID of the user to change permissions
+Responses
+| Status | +Meaning | +Description | +Schema | +
|---|---|---|---|
| 200 | +OK | +200 response | +None | +
get_boards_from_user
+ +++Code samples
+
# You can also use wget
+curl -X GET /api/users/{user}/boards \
+ -H 'Accept: application/json' \
+ -H 'Authorization: API_KEY'
+
+
+GET /api/users/{user}/boards HTTP/1.1
+
+Accept: application/json
+
+
+var headers = {
+ 'Accept':'application/json',
+ 'Authorization':'API_KEY'
+
+};
+
+$.ajax({
+ url: '/api/users/{user}/boards',
+ method: 'get',
+
+ headers: headers,
+ success: function(data) {
+ console.log(JSON.stringify(data));
+ }
+})
+
+
+const fetch = require('node-fetch');
+
+const headers = {
+ 'Accept':'application/json',
+ 'Authorization':'API_KEY'
+
+};
+
+fetch('/api/users/{user}/boards',
+{
+ method: 'GET',
+
+ headers: headers
+})
+.then(function(res) {
+ return res.json();
+}).then(function(body) {
+ console.log(body);
+});
+
+
+require 'rest-client'
+require 'json'
+
+headers = {
+ 'Accept' => 'application/json',
+ 'Authorization' => 'API_KEY'
+}
+
+result = RestClient.get '/api/users/{user}/boards',
+ params: {
+ }, headers: headers
+
+p JSON.parse(result)
+
+
+import requests
+headers = {
+ 'Accept': 'application/json',
+ 'Authorization': 'API_KEY'
+}
+
+r = requests.get('/api/users/{user}/boards', params={
+
+}, headers = headers)
+
+print r.json()
+
+
+URL obj = new URL("/api/users/{user}/boards");
+HttpURLConnection con = (HttpURLConnection) obj.openConnection();
+con.setRequestMethod("GET");
+int responseCode = con.getResponseCode();
+BufferedReader in = new BufferedReader(
+ new InputStreamReader(con.getInputStream()));
+String inputLine;
+StringBuffer response = new StringBuffer();
+while ((inputLine = in.readLine()) != null) {
+ response.append(inputLine);
+}
+in.close();
+System.out.println(response.toString());
+
+
+package main
+
+import (
+ "bytes"
+ "net/http"
+)
+
+func main() {
+
+ headers := map[string][]string{
+ "Accept": []string{"application/json"},
+ "Authorization": []string{"API_KEY"},
+
+ }
+
+ data := bytes.NewBuffer([]byte{jsonReq})
+ req, err := http.NewRequest("GET", "/api/users/{user}/boards", data)
+ req.Header = headers
+
+ client := &http.Client{}
+ resp, err := client.Do(req)
+ // ...
+}
+
+
+GET /api/users/{user}/boards
Get all boards attached to a user
+Parameters
+| Name | +In | +Type | +Required | +Description | +
|---|---|---|---|---|
| user | +path | +string | +true | +the ID of the user to retrieve the data | +
Detailed descriptions
+user: the ID of the user to retrieve the data
+++Example responses
+
++200 Response
+
[
+ {
+ "_id": "string",
+ "title": "string"
+ }
+]
+
+Responses
+| Status | +Meaning | +Description | +Schema | +
|---|---|---|---|
| 200 | +OK | +200 response | +Inline | +
Response Schema
+Status Code 200
+| Name | +Type | +Required | +Restrictions | +Description | +
|---|---|---|---|---|
| » _id | +string | +false | +none | +none | +
| » title | +string | +false | +none | +none | +
Checklists
get_all_checklists
@@ -7945,173 +9955,6 @@ System.out.println(response.toString()); To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity -Boards
-exportJson
- ---Code samples
-
# You can also use wget
-curl -X GET /api/boards/{board}/export \
- -H 'Authorization: API_KEY'
-
-
-GET /api/boards/{board}/export HTTP/1.1
-
-
-var headers = {
- 'Authorization':'API_KEY'
-
-};
-
-$.ajax({
- url: '/api/boards/{board}/export',
- method: 'get',
-
- headers: headers,
- success: function(data) {
- console.log(JSON.stringify(data));
- }
-})
-
-
-const fetch = require('node-fetch');
-
-const headers = {
- 'Authorization':'API_KEY'
-
-};
-
-fetch('/api/boards/{board}/export',
-{
- method: 'GET',
-
- headers: headers
-})
-.then(function(res) {
- return res.json();
-}).then(function(body) {
- console.log(body);
-});
-
-
-require 'rest-client'
-require 'json'
-
-headers = {
- 'Authorization' => 'API_KEY'
-}
-
-result = RestClient.get '/api/boards/{board}/export',
- params: {
- }, headers: headers
-
-p JSON.parse(result)
-
-
-import requests
-headers = {
- 'Authorization': 'API_KEY'
-}
-
-r = requests.get('/api/boards/{board}/export', params={
-
-}, headers = headers)
-
-print r.json()
-
-
-URL obj = new URL("/api/boards/{board}/export");
-HttpURLConnection con = (HttpURLConnection) obj.openConnection();
-con.setRequestMethod("GET");
-int responseCode = con.getResponseCode();
-BufferedReader in = new BufferedReader(
- new InputStreamReader(con.getInputStream()));
-String inputLine;
-StringBuffer response = new StringBuffer();
-while ((inputLine = in.readLine()) != null) {
- response.append(inputLine);
-}
-in.close();
-System.out.println(response.toString());
-
-
-package main
-
-import (
- "bytes"
- "net/http"
-)
-
-func main() {
-
- headers := map[string][]string{
- "Authorization": []string{"API_KEY"},
-
- }
-
- data := bytes.NewBuffer([]byte{jsonReq})
- req, err := http.NewRequest("GET", "/api/boards/{board}/export", data)
- req.Header = headers
-
- client := &http.Client{}
- resp, err := client.Do(req)
- // ...
-}
-
-
-GET /api/boards/{board}/export
This route is used to export the board to a json file format.
-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
-Parameters
-| Name | -In | -Type | -Required | -Description | -
|---|---|---|---|---|
| board | -path | -string | -true | -the ID of the board we are exporting | -
Detailed descriptions
-board: the ID of the board we are exporting
-Responses
-| Status | -Meaning | -Description | -Schema | -
|---|---|---|---|
| 200 | -OK | -200 response | -None | -
Integrations
get_all_integrations
@@ -13293,6 +15136,676 @@ To perform this operation, you must be authenticated by means of one of the foll UserSecuritySchemas
+Boards
+ +{
+ "title": "string",
+ "slug": "string",
+ "archived": true,
+ "createdAt": "string",
+ "modifiedAt": "string",
+ "stars": 0,
+ "labels": [
+ {
+ "_id": "string",
+ "name": "string",
+ "color": "green"
+ }
+ ],
+ "members": [
+ {
+ "userId": "string",
+ "isAdmin": true,
+ "isActive": true,
+ "isNoComments": true,
+ "isCommentOnly": true,
+ "isWorker": true
+ }
+ ],
+ "permission": "public",
+ "color": "belize",
+ "description": "string",
+ "subtasksDefaultBoardId": "string",
+ "subtasksDefaultListId": "string",
+ "dateSettingsDefaultBoardId": "string",
+ "dateSettingsDefaultListId": "string",
+ "allowsSubtasks": true,
+ "allowsAttachments": true,
+ "allowsChecklists": true,
+ "allowsComments": true,
+ "allowsDescriptionTitle": true,
+ "allowsDescriptionText": true,
+ "allowsActivities": true,
+ "allowsLabels": true,
+ "allowsAssignee": true,
+ "allowsMembers": true,
+ "allowsRequestedBy": true,
+ "allowsAssignedBy": true,
+ "allowsReceivedDate": true,
+ "allowsStartDate": true,
+ "allowsEndDate": true,
+ "allowsDueDate": true,
+ "presentParentTask": "prefix-with-full-path",
+ "startAt": "string",
+ "dueAt": "string",
+ "endAt": "string",
+ "spentTime": 0,
+ "isOvertime": true,
+ "type": "string",
+ "sort": 0
+}
+
+
+This is a Board.
+Properties
+| Name | +Type | +Required | +Restrictions | +Description | +
|---|---|---|---|---|
| title | +string | +true | +none | +The title of the board | +
| slug | +string | +true | +none | +The title slugified. | +
| archived | +boolean | +true | +none | +Is the board archived? | +
| createdAt | +string | +true | +none | +Creation time of the board | +
| modifiedAt | +string|null | +false | +none | +Last modification time of the board | +
| stars | +number | +true | +none | +How many stars the board has | +
| labels | +[BoardsLabels] | +true | +none | +List of labels attached to a board | +
| members | +[BoardsMembers] | +true | +none | +List of members of a board | +
| permission | +string | +true | +none | +visibility of the board | +
| color | +string | +true | +none | +The color of the board. | +
| description | +string|null | +false | +none | +The description of the board | +
| subtasksDefaultBoardId | +string|null | +false | +none | +The default board ID assigned to subtasks. | +
| subtasksDefaultListId | +string|null | +false | +none | +The default List ID assigned to subtasks. | +
| dateSettingsDefaultBoardId | +string|null | +false | +none | +none | +
| dateSettingsDefaultListId | +string|null | +false | +none | +none | +
| allowsSubtasks | +boolean | +true | +none | +Does the board allows subtasks? | +
| allowsAttachments | +boolean | +true | +none | +Does the board allows attachments? | +
| allowsChecklists | +boolean | +true | +none | +Does the board allows checklists? | +
| allowsComments | +boolean | +true | +none | +Does the board allows comments? | +
| allowsDescriptionTitle | +boolean | +true | +none | +Does the board allows description title? | +
| allowsDescriptionText | +boolean | +true | +none | +Does the board allows description text? | +
| allowsActivities | +boolean | +true | +none | +Does the board allows comments? | +
| allowsLabels | +boolean | +true | +none | +Does the board allows labels? | +
| allowsAssignee | +boolean | +true | +none | +Does the board allows assignee? | +
| allowsMembers | +boolean | +true | +none | +Does the board allows members? | +
| allowsRequestedBy | +boolean | +true | +none | +Does the board allows requested by? | +
| allowsAssignedBy | +boolean | +true | +none | +Does the board allows requested by? | +
| allowsReceivedDate | +boolean | +true | +none | +Does the board allows received date? | +
| allowsStartDate | +boolean | +true | +none | +Does the board allows start date? | +
| allowsEndDate | +boolean | +true | +none | +Does the board allows end date? | +
| allowsDueDate | +boolean | +true | +none | +Does the board allows due date? | +
| presentParentTask | +string|null | +false | +none | +Controls how to present the parent task: - prefix-with-full-path: add a prefix with the full path - prefix-with-parent: add a prefisx with the parent name - subtext-with-full-path: add a subtext with the full path - subtext-with-parent: add a subtext with the parent name - no-parent: does not show the parent at all |
+
| startAt | +string|null | +false | +none | +Starting date of the board. | +
| dueAt | +string|null | +false | +none | +Due date of the board. | +
| endAt | +string|null | +false | +none | +End date of the board. | +
| spentTime | +number|null | +false | +none | +Time spent in the board. | +
| isOvertime | +boolean|null | +false | +none | +Is the board overtimed? | +
| type | +string | +true | +none | +The type of board | +
| sort | +number | +true | +none | +Sort value | +
Enumerated Values
+| Property | +Value | +
|---|---|
| permission | +public | +
| permission | +private | +
| color | +belize | +
| color | +nephritis | +
| color | +pomegranate | +
| color | +pumpkin | +
| color | +wisteria | +
| color | +moderatepink | +
| color | +strongcyan | +
| color | +limegreen | +
| color | +midnight | +
| color | +dark | +
| color | +relax | +
| color | +corteza | +
| color | +clearblue | +
| color | +natural | +
| color | +modern | +
| color | +moderndark | +
| presentParentTask | +prefix-with-full-path | +
| presentParentTask | +prefix-with-parent | +
| presentParentTask | +subtext-with-full-path | +
| presentParentTask | +subtext-with-parent | +
| presentParentTask | +no-parent | +
BoardsLabels
+ +{
+ "_id": "string",
+ "name": "string",
+ "color": "green"
+}
+
+
+Properties
+| Name | +Type | +Required | +Restrictions | +Description | +
|---|---|---|---|---|
| _id | +string | +true | +none | +Unique id of a label | +
| name | +string | +false | +none | +Name of a label | +
| color | +string | +true | +none | +color of a label. Can be amongst green, yellow, orange, red, purple, blue, sky, lime, pink, black, silver, peachpuff, crimson, plum, darkgreen, slateblue, magenta, gold, navy, gray, saddlebrown, paleturquoise, mistyrose, indigo |
+
Enumerated Values
+| Property | +Value | +
|---|---|
| color | +green | +
| color | +yellow | +
| color | +orange | +
| color | +red | +
| color | +purple | +
| color | +blue | +
| color | +sky | +
| color | +lime | +
| color | +pink | +
| color | +black | +
| color | +silver | +
| color | +peachpuff | +
| color | +crimson | +
| color | +plum | +
| color | +darkgreen | +
| color | +slateblue | +
| color | +magenta | +
| color | +gold | +
| color | +navy | +
| color | +gray | +
| color | +saddlebrown | +
| color | +paleturquoise | +
| color | +mistyrose | +
| color | +indigo | +
BoardsMembers
+ +{
+ "userId": "string",
+ "isAdmin": true,
+ "isActive": true,
+ "isNoComments": true,
+ "isCommentOnly": true,
+ "isWorker": true
+}
+
+
+Properties
+| Name | +Type | +Required | +Restrictions | +Description | +
|---|---|---|---|---|
| userId | +string | +true | +none | +The uniq ID of the member | +
| isAdmin | +boolean | +true | +none | +Is the member an admin of the board? | +
| isActive | +boolean | +true | +none | +Is the member active? | +
| isNoComments | +boolean | +false | +none | +Is the member not allowed to make comments | +
| isCommentOnly | +boolean | +false | +none | +Is the member only allowed to comment on the board | +
| isWorker | +boolean | +false | +none | +Is the member only allowed to move card, assign himself to card and comment | +
CardComments
{
diff --git a/public/api/wekan.yml b/public/api/wekan.yml
index 3595d7a66..994e47dca 100644
--- a/public/api/wekan.yml
+++ b/public/api/wekan.yml
@@ -1,7 +1,7 @@
swagger: '2.0'
info:
title: Wekan REST API
- version: v4.89
+ version: v4.90
description: |
The REST API allows you to control and extend Wekan with ease.
@@ -134,6 +134,198 @@ paths:
description: |
Error in registration
+ /api/boards:
+ get:
+ operationId: get_public_boards
+ summary: Get all public boards
+ tags:
+ - Boards
+ produces:
+ - application/json
+ security:
+ - UserSecurity: []
+ responses:
+ '200':
+ description: |-
+ 200 response
+ schema:
+ type: array
+ items:
+ type: object
+ properties:
+ _id:
+ type: string
+ title:
+ type: string
+ post:
+ operationId: new_board
+ summary: Create a board
+ description: |
+ This allows to create a board.
+
+ The color has to be chosen between `belize`, `nephritis`, `pomegranate`,
+ `pumpkin`, `wisteria`, `moderatepink`, `strongcyan`,
+ `limegreen`, `midnight`, `dark`, `relax`, `corteza`:
+
+
+ tags:
+ - Boards
+ consumes:
+ - multipart/form-data
+ - application/json
+ parameters:
+ - name: title
+ in: formData
+ description: |
+ the new title of the board
+ type: string
+ required: true
+ - name: owner
+ in: formData
+ description: |
+ "ABCDE12345" <= User ID in Wekan.
+ (Not username or email)
+ type: string
+ required: true
+ - name: isAdmin
+ in: formData
+ description: |
+ is the owner an admin of the board (default true)
+ type: boolean
+ required: false
+ - name: isActive
+ in: formData
+ description: |
+ is the board active (default true)
+ type: boolean
+ required: false
+ - name: isNoComments
+ in: formData
+ description: |
+ disable comments (default false)
+ type: boolean
+ required: false
+ - name: isCommentOnly
+ in: formData
+ description: |
+ only enable comments (default false)
+ type: boolean
+ required: false
+ - name: isWorker
+ in: formData
+ description: |
+ only move cards, assign himself to card and comment (default false)
+ type: boolean
+ required: false
+ - name: permission
+ in: formData
+ description: |
+ "private" board <== Set to "public" if you
+ want public Wekan board
+ type: string
+ required: false
+ - name: color
+ in: formData
+ description: |
+ the color of the board
+ type: string
+ required: false
+ produces:
+ - application/json
+ security:
+ - UserSecurity: []
+ responses:
+ '200':
+ description: |-
+ 200 response
+ schema:
+ type: object
+ properties:
+ _id:
+ type: string
+ defaultSwimlaneId:
+ type: string
+ /api/boards/{board}:
+ get:
+ operationId: get_board
+ summary: Get the board with that particular ID
+ tags:
+ - Boards
+ parameters:
+ - name: board
+ in: path
+ description: |
+ the ID of the board to retrieve the data
+ type: string
+ required: true
+ produces:
+ - application/json
+ security:
+ - UserSecurity: []
+ responses:
+ '200':
+ description: |-
+ 200 response
+ schema:
+ $ref: "#/definitions/Boards"
+ delete:
+ operationId: delete_board
+ summary: Delete a board
+ tags:
+ - Boards
+ parameters:
+ - name: board
+ in: path
+ description: |
+ the ID of the board
+ type: string
+ required: true
+ produces:
+ - application/json
+ security:
+ - UserSecurity: []
+ responses:
+ '200':
+ description: |-
+ 200 response
+ /api/boards/{board}/attachments:
+ get:
+ operationId: get_board_attachments
+ summary: Get the list of attachments of a board
+ tags:
+ - Boards
+ parameters:
+ - name: board
+ in: path
+ description: |
+ the board ID
+ type: string
+ required: true
+ produces:
+ - application/json
+ security:
+ - UserSecurity: []
+ responses:
+ '200':
+ description: |-
+ 200 response
+ schema:
+ type: array
+ items:
+ type: object
+ properties:
+ attachmentId:
+ type: string
+ attachmentName:
+ type: string
+ attachmentType:
+ type: string
+ cardId:
+ type: string
+ listId:
+ type: string
+ swimlaneId:
+ type: string
/api/boards/{board}/cards/{card}/checklists:
get:
operationId: get_all_checklists
@@ -1096,6 +1288,40 @@ paths:
200 response
schema:
$ref: "#/definitions/Integrations"
+ /api/boards/{board}/labels:
+ put:
+ operationId: add_board_label
+ summary: Add a label to a board
+ description: |
+ If the board doesn't have the name/color label, this function
+ adds the label to the board.
+ tags:
+ - Boards
+ consumes:
+ - multipart/form-data
+ - application/json
+ parameters:
+ - name: label
+ in: formData
+ description: the label value
+ type: string
+ required: true
+ - name: board
+ in: path
+ description: |
+ the board
+ type: string
+ required: true
+ produces:
+ - application/json
+ security:
+ - UserSecurity: []
+ responses:
+ '200':
+ description: |-
+ 200 response
+ schema:
+ type: string
/api/boards/{board}/lists:
get:
operationId: get_all_lists
@@ -1577,6 +1803,61 @@ paths:
properties:
_id:
type: string
+ /api/boards/{board}/members/{member}:
+ post:
+ operationId: set_board_member_permission
+ summary: Change the permission of a member of a board
+ tags:
+ - Boards
+ - Users
+ consumes:
+ - multipart/form-data
+ - application/json
+ parameters:
+ - name: isAdmin
+ in: formData
+ description: |
+ admin capability
+ type: boolean
+ required: true
+ - name: isNoComments
+ in: formData
+ description: |
+ NoComments capability
+ type: boolean
+ required: true
+ - name: isCommentOnly
+ in: formData
+ description: |
+ CommentsOnly capability
+ type: boolean
+ required: true
+ - name: isWorker
+ in: formData
+ description: |
+ Worker capability
+ type: boolean
+ required: true
+ - name: board
+ in: path
+ description: |
+ the ID of the board that we are changing
+ type: string
+ required: true
+ - name: member
+ in: path
+ description: |
+ the ID of the user to change permissions
+ type: string
+ required: true
+ produces:
+ - application/json
+ security:
+ - UserSecurity: []
+ responses:
+ '200':
+ description: |-
+ 200 response
/api/boards/{board}/members/{user}/add:
post:
operationId: add_board_member
@@ -2033,7 +2314,349 @@ paths:
properties:
_id:
type: string
+ /api/users/{user}/boards:
+ get:
+ operationId: get_boards_from_user
+ summary: Get all boards attached to a user
+ tags:
+ - Boards
+ parameters:
+ - name: user
+ in: path
+ description: |
+ the ID of the user to retrieve the data
+ type: string
+ required: true
+ produces:
+ - application/json
+ security:
+ - UserSecurity: []
+ responses:
+ '200':
+ description: |-
+ 200 response
+ schema:
+ type: array
+ items:
+ type: object
+ properties:
+ _id:
+ type: string
+ title:
+ type: string
definitions:
+ Boards:
+ type: object
+ description: This is a Board.
+ properties:
+ title:
+ description: |
+ The title of the board
+ type: string
+ slug:
+ description: |
+ The title slugified.
+ type: string
+ archived:
+ description: |
+ Is the board archived?
+ type: boolean
+ createdAt:
+ description: |
+ Creation time of the board
+ type: string
+ modifiedAt:
+ description: |
+ Last modification time of the board
+ type: string
+ x-nullable: true
+ stars:
+ description: |
+ How many stars the board has
+ type: number
+ labels:
+ description: |
+ List of labels attached to a board
+ type: array
+ items:
+ $ref: "#/definitions/BoardsLabels"
+ members:
+ description: |
+ List of members of a board
+ type: array
+ items:
+ $ref: "#/definitions/BoardsMembers"
+ permission:
+ description: |
+ visibility of the board
+ type: string
+ enum:
+ - public
+ - private
+ color:
+ description: |
+ The color of the board.
+ type: string
+ enum:
+ - belize
+ - nephritis
+ - pomegranate
+ - pumpkin
+ - wisteria
+ - moderatepink
+ - strongcyan
+ - limegreen
+ - midnight
+ - dark
+ - relax
+ - corteza
+ - clearblue
+ - natural
+ - modern
+ - moderndark
+ description:
+ description: |
+ The description of the board
+ type: string
+ x-nullable: true
+ subtasksDefaultBoardId:
+ description: |
+ The default board ID assigned to subtasks.
+ type: string
+ x-nullable: true
+ subtasksDefaultListId:
+ description: |
+ The default List ID assigned to subtasks.
+ type: string
+ x-nullable: true
+ dateSettingsDefaultBoardId:
+ type: string
+ x-nullable: true
+ dateSettingsDefaultListId:
+ type: string
+ x-nullable: true
+ allowsSubtasks:
+ description: |
+ Does the board allows subtasks?
+ type: boolean
+ allowsAttachments:
+ description: |
+ Does the board allows attachments?
+ type: boolean
+ allowsChecklists:
+ description: |
+ Does the board allows checklists?
+ type: boolean
+ allowsComments:
+ description: |
+ Does the board allows comments?
+ type: boolean
+ allowsDescriptionTitle:
+ description: |
+ Does the board allows description title?
+ type: boolean
+ allowsDescriptionText:
+ description: |
+ Does the board allows description text?
+ type: boolean
+ allowsActivities:
+ description: |
+ Does the board allows comments?
+ type: boolean
+ allowsLabels:
+ description: |
+ Does the board allows labels?
+ type: boolean
+ allowsAssignee:
+ description: |
+ Does the board allows assignee?
+ type: boolean
+ allowsMembers:
+ description: |
+ Does the board allows members?
+ type: boolean
+ allowsRequestedBy:
+ description: |
+ Does the board allows requested by?
+ type: boolean
+ allowsAssignedBy:
+ description: |
+ Does the board allows requested by?
+ type: boolean
+ allowsReceivedDate:
+ description: |
+ Does the board allows received date?
+ type: boolean
+ allowsStartDate:
+ description: |
+ Does the board allows start date?
+ type: boolean
+ allowsEndDate:
+ description: |
+ Does the board allows end date?
+ type: boolean
+ allowsDueDate:
+ description: |
+ Does the board allows due date?
+ type: boolean
+ presentParentTask:
+ description: |
+ Controls how to present the parent task:
+
+ - `prefix-with-full-path`: add a prefix with the full path
+ - `prefix-with-parent`: add a prefisx with the parent name
+ - `subtext-with-full-path`: add a subtext with the full path
+ - `subtext-with-parent`: add a subtext with the parent name
+ - `no-parent`: does not show the parent at all
+ type: string
+ enum:
+ - prefix-with-full-path
+ - prefix-with-parent
+ - subtext-with-full-path
+ - subtext-with-parent
+ - no-parent
+ x-nullable: true
+ startAt:
+ description: |
+ Starting date of the board.
+ type: string
+ x-nullable: true
+ dueAt:
+ description: |
+ Due date of the board.
+ type: string
+ x-nullable: true
+ endAt:
+ description: |
+ End date of the board.
+ type: string
+ x-nullable: true
+ spentTime:
+ description: |
+ Time spent in the board.
+ type: number
+ x-nullable: true
+ isOvertime:
+ description: |
+ Is the board overtimed?
+ type: boolean
+ x-nullable: true
+ type:
+ description: |
+ The type of board
+ type: string
+ sort:
+ description: |
+ Sort value
+ type: number
+ required:
+ - title
+ - slug
+ - archived
+ - createdAt
+ - stars
+ - labels
+ - members
+ - permission
+ - color
+ - allowsSubtasks
+ - allowsAttachments
+ - allowsChecklists
+ - allowsComments
+ - allowsDescriptionTitle
+ - allowsDescriptionText
+ - allowsActivities
+ - allowsLabels
+ - allowsAssignee
+ - allowsMembers
+ - allowsRequestedBy
+ - allowsAssignedBy
+ - allowsReceivedDate
+ - allowsStartDate
+ - allowsEndDate
+ - allowsDueDate
+ - type
+ - sort
+ BoardsLabels:
+ type: object
+ properties:
+ _id:
+ description: |
+ Unique id of a label
+ type: string
+ name:
+ description: |
+ Name of a label
+ type: string
+ color:
+ description: |
+ color of a label.
+
+ Can be amongst `green`, `yellow`, `orange`, `red`, `purple`,
+ `blue`, `sky`, `lime`, `pink`, `black`,
+ `silver`, `peachpuff`, `crimson`, `plum`, `darkgreen`,
+ `slateblue`, `magenta`, `gold`, `navy`, `gray`,
+ `saddlebrown`, `paleturquoise`, `mistyrose`, `indigo`
+ type: string
+ enum:
+ - green
+ - yellow
+ - orange
+ - red
+ - purple
+ - blue
+ - sky
+ - lime
+ - pink
+ - black
+ - silver
+ - peachpuff
+ - crimson
+ - plum
+ - darkgreen
+ - slateblue
+ - magenta
+ - gold
+ - navy
+ - gray
+ - saddlebrown
+ - paleturquoise
+ - mistyrose
+ - indigo
+ required:
+ - _id
+ - color
+ BoardsMembers:
+ type: object
+ properties:
+ userId:
+ description: |
+ The uniq ID of the member
+ type: string
+ isAdmin:
+ description: |
+ Is the member an admin of the board?
+ type: boolean
+ isActive:
+ description: |
+ Is the member active?
+ type: boolean
+ isNoComments:
+ description: |
+ Is the member not allowed to make comments
+ type: boolean
+ isCommentOnly:
+ description: |
+ Is the member only allowed to comment on the board
+ type: boolean
+ isWorker:
+ description: |
+ Is the member only allowed to move card, assign himself to card and comment
+ type: boolean
+ required:
+ - userId
+ - isAdmin
+ - isActive
CardComments:
type: object
description: A comment on a card
diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp
index 0715a884d..2c7053122 100644
--- a/sandstorm-pkgdef.capnp
+++ b/sandstorm-pkgdef.capnp
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Wekan"),
# The name of the app as it is displayed to the user.
- appVersion = 489,
+ appVersion = 490,
# Increment this for every release.
- appMarketingVersion = (defaultText = "4.89.0~2021-01-28"),
+ appMarketingVersion = (defaultText = "4.90.0~2021-01-28"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,