diff --git a/CHANGELOG.md b/CHANGELOG.md index ff38df9b2..ef3875869 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,15 +18,18 @@ Note: [How to upgrade WeKan](https://github.com/wekan/wekan/issues/4585) -# Upcoming v7.00 WeKan ® release - -This version number and and some before it is reserved for upcoming PR from mfilser. +# v7.00 2023-07-19 WeKan ® release This release adds the following new features: -- Speed improvements to Board and List loading. +- [Speed improvements to Board and List loading](https://github.com/wekan/wekan/pull/5014). Thanks to mfilser. +and adds the following updates: + +- [Forked meteor-globals and meteor-reactive-cache to @wekanteam/meteor-globals and @wekanteam/meteor-reactive-cache to update to newest dependencies](https://github.com/wekan/wekan/commit/1c5857f0646658b121d7612b6176ec5e09c68592). + Thanks to xet7. + Thanks to above GitHub users for their contributions and translators for their translations. # v6.99.9 2023-07-18 WeKan ® release diff --git a/Stackerfile.yml b/Stackerfile.yml index bcd693d4d..398e71955 100644 --- a/Stackerfile.yml +++ b/Stackerfile.yml @@ -1,5 +1,5 @@ appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928 -appVersion: "v6.99.9" +appVersion: "v7.00" files: userUploads: - README.md diff --git a/package-lock.json b/package-lock.json index 5bc241faf..b4063e9c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v6.99.9", + "version": "v7.00", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index ea726167d..3b05afab1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wekan", - "version": "v6.99.9", + "version": "v7.00", "description": "Open-Source kanban", "private": true, "repository": { diff --git a/public/api/wekan.html b/public/api/wekan.html index f95008fdb..d7e369907 100644 --- a/public/api/wekan.html +++ b/public/api/wekan.html @@ -7,7 +7,7 @@ - Wekan REST API v6.99.9 + Wekan REST API v7.00 @@ -1485,16 +1485,6 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc - - - - - - - - - - @@ -1558,7 +1548,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc @@ -2176,7 +2057,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
-

Wekan REST API v6.99.9

+

Wekan REST API v7.00

Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

@@ -16162,2592 +16043,6 @@ The list is not put in the recycle bin.

To perform this operation, you must be authenticated by means of one of the following methods: UserSecurity -

Users

-

add_board_member

-

-
-

Code samples

-
-
# You can also use wget
-curl -X POST /api/boards/{board}/members/{user}/add \
-  -H 'Content-Type: multipart/form-data' \
-  -H 'Accept: application/json' \
-  -H 'Authorization: API_KEY'
-
-
-
POST /api/boards/{board}/members/{user}/add HTTP/1.1
-
-Content-Type: multipart/form-data
-Accept: application/json
-
-
-
const inputBody = '{
-  "action": "string",
-  "isAdmin": true,
-  "isNoComments": true,
-  "isCommentOnly": true,
-  "isWorker": true
-}';
-const headers = {
-  'Content-Type':'multipart/form-data',
-  'Accept':'application/json',
-  'Authorization':'API_KEY'
-};
-
-fetch('/api/boards/{board}/members/{user}/add',
-{
-  method: 'POST',
-  body: inputBody,
-  headers: headers
-})
-.then(function(res) {
-    return res.json();
-}).then(function(body) {
-    console.log(body);
-});
-
-
-
const fetch = require('node-fetch');
-const inputBody = {
-  "action": "string",
-  "isAdmin": true,
-  "isNoComments": true,
-  "isCommentOnly": true,
-  "isWorker": true
-};
-const headers = {
-  'Content-Type':'multipart/form-data',
-  'Accept':'application/json',
-  'Authorization':'API_KEY'
-};
-
-fetch('/api/boards/{board}/members/{user}/add',
-{
-  method: 'POST',
-  body: JSON.stringify(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/{board}/members/{user}/add',
-  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/{board}/members/{user}/add', headers = headers)
-
-print(r.json())
-
-
-
URL obj = new URL("/api/boards/{board}/members/{user}/add");
-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/{board}/members/{user}/add", data)
-    req.Header = headers
-
-    client := &http.Client{}
-    resp, err := client.Do(req)
-    // ...
-}
-
-
-
 'multipart/form-data',
-    'Accept' => 'application/json',
-    'Authorization' => 'API_KEY',
-);
-
-$client = new \GuzzleHttp\Client();
-
-// Define array of request body.
-$request_body = array();
-
-try {
-    $response = $client->request('POST','/api/boards/{board}/members/{user}/add', array(
-        'headers' => $headers,
-        'json' => $request_body,
-       )
-    );
-    print_r($response->getBody()->getContents());
- }
- catch (\GuzzleHttp\Exception\BadResponseException $e) {
-    // handle exception or api errors.
-    print_r($e->getMessage());
- }
-
- // ...
-
-
-

POST /api/boards/{board}/members/{user}/add

-

Add New Board Member with Role

-

Only the admin user (the first user) can call the REST API.

-

Note: see Boards.set_board_member_permission -to later change the permissions.

-
-

Body parameter

-
-
action: string
-isAdmin: true
-isNoComments: true
-isCommentOnly: true
-isWorker: true
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameInTypeRequiredDescription
boardpathstringtruethe board ID
userpathstringtruethe user ID
bodybodyobjecttruenone
» actionbodystringtruethe action (needs to be add)
» isAdminbodybooleantrueis the user an admin of the board
» isNoCommentsbodybooleantruedisable comments
» isCommentOnlybodybooleantrueonly enable comments
» isWorkerbodybooleantrueis the user a board worker
-

Detailed descriptions

-

board: the board ID

-

user: the user ID

-
-

Example responses

-
-
-

200 Response

-
-
{
-  "_id": "string",
-  "title": "string"
-}
-
-

Responses

- - - - - - - - - - - - - - - - - -
StatusMeaningDescriptionSchema
200OK200 responseInline
-

Response Schema

-

Status Code 200

- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeRequiredRestrictionsDescription
» _idstringfalsenonenone
» titlestringfalsenonenone
- -

remove_board_member

-

-
-

Code samples

-
-
# You can also use wget
-curl -X POST /api/boards/{board}/members/{user}/remove \
-  -H 'Content-Type: multipart/form-data' \
-  -H 'Accept: application/json' \
-  -H 'Authorization: API_KEY'
-
-
-
POST /api/boards/{board}/members/{user}/remove HTTP/1.1
-
-Content-Type: multipart/form-data
-Accept: application/json
-
-
-
const inputBody = '{
-  "action": "string"
-}';
-const headers = {
-  'Content-Type':'multipart/form-data',
-  'Accept':'application/json',
-  'Authorization':'API_KEY'
-};
-
-fetch('/api/boards/{board}/members/{user}/remove',
-{
-  method: 'POST',
-  body: inputBody,
-  headers: headers
-})
-.then(function(res) {
-    return res.json();
-}).then(function(body) {
-    console.log(body);
-});
-
-
-
const fetch = require('node-fetch');
-const inputBody = {
-  "action": "string"
-};
-const headers = {
-  'Content-Type':'multipart/form-data',
-  'Accept':'application/json',
-  'Authorization':'API_KEY'
-};
-
-fetch('/api/boards/{board}/members/{user}/remove',
-{
-  method: 'POST',
-  body: JSON.stringify(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/{board}/members/{user}/remove',
-  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/{board}/members/{user}/remove', headers = headers)
-
-print(r.json())
-
-
-
URL obj = new URL("/api/boards/{board}/members/{user}/remove");
-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/{board}/members/{user}/remove", data)
-    req.Header = headers
-
-    client := &http.Client{}
-    resp, err := client.Do(req)
-    // ...
-}
-
-
-
 'multipart/form-data',
-    'Accept' => 'application/json',
-    'Authorization' => 'API_KEY',
-);
-
-$client = new \GuzzleHttp\Client();
-
-// Define array of request body.
-$request_body = array();
-
-try {
-    $response = $client->request('POST','/api/boards/{board}/members/{user}/remove', array(
-        'headers' => $headers,
-        'json' => $request_body,
-       )
-    );
-    print_r($response->getBody()->getContents());
- }
- catch (\GuzzleHttp\Exception\BadResponseException $e) {
-    // handle exception or api errors.
-    print_r($e->getMessage());
- }
-
- // ...
-
-
-

POST /api/boards/{board}/members/{user}/remove

-

Remove Member from Board

-

Only the admin user (the first user) can call the REST API.

-
-

Body parameter

-
-
action: string
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameInTypeRequiredDescription
boardpathstringtruethe board ID
userpathstringtruethe user ID
bodybodyobjecttruenone
» actionbodystringtruethe action (needs to be remove)
-

Detailed descriptions

-

board: the board ID

-

user: the user ID

-
-

Example responses

-
-
-

200 Response

-
-
{
-  "_id": "string",
-  "title": "string"
-}
-
-

Responses

- - - - - - - - - - - - - - - - - -
StatusMeaningDescriptionSchema
200OK200 responseInline
-

Response Schema

-

Status Code 200

- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeRequiredRestrictionsDescription
» _idstringfalsenonenone
» titlestringfalsenonenone
- -

create_user_token

-

-
-

Code samples

-
-
# You can also use wget
-curl -X POST /api/createtoken/{user} \
-  -H 'Accept: application/json' \
-  -H 'Authorization: API_KEY'
-
-
-
POST /api/createtoken/{user} HTTP/1.1
-
-Accept: application/json
-
-
-

-const headers = {
-  'Accept':'application/json',
-  'Authorization':'API_KEY'
-};
-
-fetch('/api/createtoken/{user}',
-{
-  method: 'POST',
-
-  headers: headers
-})
-.then(function(res) {
-    return res.json();
-}).then(function(body) {
-    console.log(body);
-});
-
-
-
const fetch = require('node-fetch');
-
-const headers = {
-  'Accept':'application/json',
-  'Authorization':'API_KEY'
-};
-
-fetch('/api/createtoken/{user}',
-{
-  method: 'POST',
-
-  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.post '/api/createtoken/{user}',
-  params: {
-  }, headers: headers
-
-p JSON.parse(result)
-
-
-
import requests
-headers = {
-  'Accept': 'application/json',
-  'Authorization': 'API_KEY'
-}
-
-r = requests.post('/api/createtoken/{user}', headers = headers)
-
-print(r.json())
-
-
-
URL obj = new URL("/api/createtoken/{user}");
-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{
-        "Accept": []string{"application/json"},
-        "Authorization": []string{"API_KEY"},
-    }
-
-    data := bytes.NewBuffer([]byte{jsonReq})
-    req, err := http.NewRequest("POST", "/api/createtoken/{user}", data)
-    req.Header = headers
-
-    client := &http.Client{}
-    resp, err := client.Do(req)
-    // ...
-}
-
-
-
 'application/json',
-    'Authorization' => 'API_KEY',
-);
-
-$client = new \GuzzleHttp\Client();
-
-// Define array of request body.
-$request_body = array();
-
-try {
-    $response = $client->request('POST','/api/createtoken/{user}', array(
-        'headers' => $headers,
-        'json' => $request_body,
-       )
-    );
-    print_r($response->getBody()->getContents());
- }
- catch (\GuzzleHttp\Exception\BadResponseException $e) {
-    // handle exception or api errors.
-    print_r($e->getMessage());
- }
-
- // ...
-
-
-

POST /api/createtoken/{user}

-

Create a user token

-

Only the admin user (the first user) can call the REST API.

-

Parameters

- - - - - - - - - - - - - - - - - - - -
NameInTypeRequiredDescription
userpathstringtruethe ID of the user to create token for.
-

Detailed descriptions

-

user: the ID of the user to create token for.

-
-

Example responses

-
-
-

200 Response

-
-
{
-  "_id": "string"
-}
-
-

Responses

- - - - - - - - - - - - - - - - - -
StatusMeaningDescriptionSchema
200OK200 responseInline
-

Response Schema

-

Status Code 200

- - - - - - - - - - - - - - - - - - - -
NameTypeRequiredRestrictionsDescription
» _idstringfalsenonenone
- -

delete_user_token

-

-
-

Code samples

-
-
# You can also use wget
-curl -X POST /api/deletetoken \
-  -H 'Content-Type: multipart/form-data' \
-  -H 'Accept: application/json' \
-  -H 'Authorization: API_KEY'
-
-
-
POST /api/deletetoken HTTP/1.1
-
-Content-Type: multipart/form-data
-Accept: application/json
-
-
-
const inputBody = '{
-  "userId": "string",
-  "token": "string"
-}';
-const headers = {
-  'Content-Type':'multipart/form-data',
-  'Accept':'application/json',
-  'Authorization':'API_KEY'
-};
-
-fetch('/api/deletetoken',
-{
-  method: 'POST',
-  body: inputBody,
-  headers: headers
-})
-.then(function(res) {
-    return res.json();
-}).then(function(body) {
-    console.log(body);
-});
-
-
-
const fetch = require('node-fetch');
-const inputBody = {
-  "userId": "string",
-  "token": "string"
-};
-const headers = {
-  'Content-Type':'multipart/form-data',
-  'Accept':'application/json',
-  'Authorization':'API_KEY'
-};
-
-fetch('/api/deletetoken',
-{
-  method: 'POST',
-  body: JSON.stringify(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/deletetoken',
-  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/deletetoken', headers = headers)
-
-print(r.json())
-
-
-
URL obj = new URL("/api/deletetoken");
-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/deletetoken", data)
-    req.Header = headers
-
-    client := &http.Client{}
-    resp, err := client.Do(req)
-    // ...
-}
-
-
-
 'multipart/form-data',
-    'Accept' => 'application/json',
-    'Authorization' => 'API_KEY',
-);
-
-$client = new \GuzzleHttp\Client();
-
-// Define array of request body.
-$request_body = array();
-
-try {
-    $response = $client->request('POST','/api/deletetoken', array(
-        'headers' => $headers,
-        'json' => $request_body,
-       )
-    );
-    print_r($response->getBody()->getContents());
- }
- catch (\GuzzleHttp\Exception\BadResponseException $e) {
-    // handle exception or api errors.
-    print_r($e->getMessage());
- }
-
- // ...
-
-
-

POST /api/deletetoken

-

Delete one or all user token.

-

Only the admin user (the first user) can call the REST API.

-
-

Body parameter

-
-
userId: string
-token: string
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameInTypeRequiredDescription
bodybodyobjecttruenone
» userIdbodystringtruethe user ID
» tokenbodystringtruethe user hashedToken
-
-

Example responses

-
-
-

200 Response

-
-
{
-  "message": "string"
-}
-
-

Responses

- - - - - - - - - - - - - - - - - -
StatusMeaningDescriptionSchema
200OK200 responseInline
-

Response Schema

-

Status Code 200

- - - - - - - - - - - - - - - - - - - -
NameTypeRequiredRestrictionsDescription
» messagestringfalsenonenone
- -

get_current_user

-

-
-

Code samples

-
-
# You can also use wget
-curl -X GET /api/user \
-  -H 'Accept: application/json' \
-  -H 'Authorization: API_KEY'
-
-
-
GET /api/user HTTP/1.1
-
-Accept: application/json
-
-
-

-const headers = {
-  'Accept':'application/json',
-  'Authorization':'API_KEY'
-};
-
-fetch('/api/user',
-{
-  method: 'GET',
-
-  headers: headers
-})
-.then(function(res) {
-    return res.json();
-}).then(function(body) {
-    console.log(body);
-});
-
-
-
const fetch = require('node-fetch');
-
-const headers = {
-  'Accept':'application/json',
-  'Authorization':'API_KEY'
-};
-
-fetch('/api/user',
-{
-  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/user',
-  params: {
-  }, headers: headers
-
-p JSON.parse(result)
-
-
-
import requests
-headers = {
-  'Accept': 'application/json',
-  'Authorization': 'API_KEY'
-}
-
-r = requests.get('/api/user', headers = headers)
-
-print(r.json())
-
-
-
URL obj = new URL("/api/user");
-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/user", data)
-    req.Header = headers
-
-    client := &http.Client{}
-    resp, err := client.Do(req)
-    // ...
-}
-
-
-
 'application/json',
-    'Authorization' => 'API_KEY',
-);
-
-$client = new \GuzzleHttp\Client();
-
-// Define array of request body.
-$request_body = array();
-
-try {
-    $response = $client->request('GET','/api/user', array(
-        'headers' => $headers,
-        'json' => $request_body,
-       )
-    );
-    print_r($response->getBody()->getContents());
- }
- catch (\GuzzleHttp\Exception\BadResponseException $e) {
-    // handle exception or api errors.
-    print_r($e->getMessage());
- }
-
- // ...
-
-
-

GET /api/user

-

returns the current user

-
-

Example responses

-
-
-

200 Response

-
-
{
-  "username": "string",
-  "orgs": [
-    {
-      "orgId": "string",
-      "orgDisplayName": "string"
-    }
-  ],
-  "teams": [
-    {
-      "teamId": "string",
-      "teamDisplayName": "string"
-    }
-  ],
-  "emails": [
-    {
-      "address": "string",
-      "verified": true
-    }
-  ],
-  "createdAt": "string",
-  "modifiedAt": "string",
-  "profile": {
-    "avatarUrl": "string",
-    "emailBuffer": [
-      "string"
-    ],
-    "fullname": "string",
-    "showDesktopDragHandles": true,
-    "hideCheckedItems": true,
-    "cardMaximized": true,
-    "customFieldsGrid": true,
-    "hiddenSystemMessages": true,
-    "hiddenMinicardLabelText": true,
-    "initials": "string",
-    "invitedBoards": [
-      "string"
-    ],
-    "language": "string",
-    "moveAndCopyDialog": {},
-    "moveChecklistDialog": {},
-    "copyChecklistDialog": {},
-    "notifications": [
-      {
-        "activity": "string",
-        "read": "string"
-      }
-    ],
-    "rescueCardDescription": true,
-    "showCardsCountAt": 0,
-    "startDayOfWeek": 0,
-    "starredBoards": [
-      "string"
-    ],
-    "icode": "string",
-    "boardView": "board-view-swimlanes",
-    "listSortBy": "-modifiedat",
-    "templatesBoardId": "string",
-    "cardTemplatesSwimlaneId": "string",
-    "listTemplatesSwimlaneId": "string",
-    "boardTemplatesSwimlaneId": "string"
-  },
-  "services": {},
-  "heartbeat": "string",
-  "isAdmin": true,
-  "createdThroughApi": true,
-  "loginDisabled": true,
-  "authenticationMethod": "string",
-  "sessionData": {
-    "totalHits": 0
-  },
-  "importUsernames": [
-    "string"
-  ],
-  "lastConnectionDate": "string"
-}
-
-

Responses

- - - - - - - - - - - - - - - - - -
StatusMeaningDescriptionSchema
200OK200 responseUsers
- -

get_all_users

-

-
-

Code samples

-
-
# You can also use wget
-curl -X GET /api/users \
-  -H 'Accept: application/json' \
-  -H 'Authorization: API_KEY'
-
-
-
GET /api/users HTTP/1.1
-
-Accept: application/json
-
-
-

-const headers = {
-  'Accept':'application/json',
-  'Authorization':'API_KEY'
-};
-
-fetch('/api/users',
-{
-  method: 'GET',
-
-  headers: headers
-})
-.then(function(res) {
-    return res.json();
-}).then(function(body) {
-    console.log(body);
-});
-
-
-
const fetch = require('node-fetch');
-
-const headers = {
-  'Accept':'application/json',
-  'Authorization':'API_KEY'
-};
-
-fetch('/api/users',
-{
-  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',
-  params: {
-  }, headers: headers
-
-p JSON.parse(result)
-
-
-
import requests
-headers = {
-  'Accept': 'application/json',
-  'Authorization': 'API_KEY'
-}
-
-r = requests.get('/api/users', headers = headers)
-
-print(r.json())
-
-
-
URL obj = new URL("/api/users");
-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", data)
-    req.Header = headers
-
-    client := &http.Client{}
-    resp, err := client.Do(req)
-    // ...
-}
-
-
-
 'application/json',
-    'Authorization' => 'API_KEY',
-);
-
-$client = new \GuzzleHttp\Client();
-
-// Define array of request body.
-$request_body = array();
-
-try {
-    $response = $client->request('GET','/api/users', array(
-        'headers' => $headers,
-        'json' => $request_body,
-       )
-    );
-    print_r($response->getBody()->getContents());
- }
- catch (\GuzzleHttp\Exception\BadResponseException $e) {
-    // handle exception or api errors.
-    print_r($e->getMessage());
- }
-
- // ...
-
-
-

GET /api/users

-

return all the users

-

Only the admin user (the first user) can call the REST API.

-
-

Example responses

-
-
-

200 Response

-
-
[
-  {
-    "_id": "string",
-    "username": "string"
-  }
-]
-
-

Responses

- - - - - - - - - - - - - - - - - -
StatusMeaningDescriptionSchema
200OK200 responseInline
-

Response Schema

-

Status Code 200

- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeRequiredRestrictionsDescription
» _idstringfalsenonenone
» usernamestringfalsenonenone
- -

new_user

-

-
-

Code samples

-
-
# You can also use wget
-curl -X POST /api/users \
-  -H 'Content-Type: multipart/form-data' \
-  -H 'Accept: application/json' \
-  -H 'Authorization: API_KEY'
-
-
-
POST /api/users HTTP/1.1
-
-Content-Type: multipart/form-data
-Accept: application/json
-
-
-
const inputBody = '{
-  "username": "string",
-  "email": "string",
-  "password": "string"
-}';
-const headers = {
-  'Content-Type':'multipart/form-data',
-  'Accept':'application/json',
-  'Authorization':'API_KEY'
-};
-
-fetch('/api/users',
-{
-  method: 'POST',
-  body: inputBody,
-  headers: headers
-})
-.then(function(res) {
-    return res.json();
-}).then(function(body) {
-    console.log(body);
-});
-
-
-
const fetch = require('node-fetch');
-const inputBody = {
-  "username": "string",
-  "email": "string",
-  "password": "string"
-};
-const headers = {
-  'Content-Type':'multipart/form-data',
-  'Accept':'application/json',
-  'Authorization':'API_KEY'
-};
-
-fetch('/api/users',
-{
-  method: 'POST',
-  body: JSON.stringify(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/users',
-  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/users', headers = headers)
-
-print(r.json())
-
-
-
URL obj = new URL("/api/users");
-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/users", data)
-    req.Header = headers
-
-    client := &http.Client{}
-    resp, err := client.Do(req)
-    // ...
-}
-
-
-
 'multipart/form-data',
-    'Accept' => 'application/json',
-    'Authorization' => 'API_KEY',
-);
-
-$client = new \GuzzleHttp\Client();
-
-// Define array of request body.
-$request_body = array();
-
-try {
-    $response = $client->request('POST','/api/users', array(
-        'headers' => $headers,
-        'json' => $request_body,
-       )
-    );
-    print_r($response->getBody()->getContents());
- }
- catch (\GuzzleHttp\Exception\BadResponseException $e) {
-    // handle exception or api errors.
-    print_r($e->getMessage());
- }
-
- // ...
-
-
-

POST /api/users

-

Create a new user

-

Only the admin user (the first user) can call the REST API.

-
-

Body parameter

-
-
username: string
-email: string
-password: string
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameInTypeRequiredDescription
bodybodyobjecttruenone
» usernamebodystringtruethe new username
» emailbodystringtruethe email of the new user
» passwordbodystringtruethe password of the new user
-
-

Example responses

-
-
-

200 Response

-
-
{
-  "_id": "string"
-}
-
-

Responses

- - - - - - - - - - - - - - - - - -
StatusMeaningDescriptionSchema
200OK200 responseInline
-

Response Schema

-

Status Code 200

- - - - - - - - - - - - - - - - - - - -
NameTypeRequiredRestrictionsDescription
» _idstringfalsenonenone
- -

get_user

-

-
-

Code samples

-
-
# You can also use wget
-curl -X GET /api/users/{user} \
-  -H 'Accept: application/json' \
-  -H 'Authorization: API_KEY'
-
-
-
GET /api/users/{user} HTTP/1.1
-
-Accept: application/json
-
-
-

-const headers = {
-  'Accept':'application/json',
-  'Authorization':'API_KEY'
-};
-
-fetch('/api/users/{user}',
-{
-  method: 'GET',
-
-  headers: headers
-})
-.then(function(res) {
-    return res.json();
-}).then(function(body) {
-    console.log(body);
-});
-
-
-
const fetch = require('node-fetch');
-
-const headers = {
-  'Accept':'application/json',
-  'Authorization':'API_KEY'
-};
-
-fetch('/api/users/{user}',
-{
-  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}',
-  params: {
-  }, headers: headers
-
-p JSON.parse(result)
-
-
-
import requests
-headers = {
-  'Accept': 'application/json',
-  'Authorization': 'API_KEY'
-}
-
-r = requests.get('/api/users/{user}', headers = headers)
-
-print(r.json())
-
-
-
URL obj = new URL("/api/users/{user}");
-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}", data)
-    req.Header = headers
-
-    client := &http.Client{}
-    resp, err := client.Do(req)
-    // ...
-}
-
-
-
 'application/json',
-    'Authorization' => 'API_KEY',
-);
-
-$client = new \GuzzleHttp\Client();
-
-// Define array of request body.
-$request_body = array();
-
-try {
-    $response = $client->request('GET','/api/users/{user}', array(
-        'headers' => $headers,
-        'json' => $request_body,
-       )
-    );
-    print_r($response->getBody()->getContents());
- }
- catch (\GuzzleHttp\Exception\BadResponseException $e) {
-    // handle exception or api errors.
-    print_r($e->getMessage());
- }
-
- // ...
-
-
-

GET /api/users/{user}

-

get a given user

-

Only the admin user (the first user) can call the REST API.

-

Parameters

- - - - - - - - - - - - - - - - - - - -
NameInTypeRequiredDescription
userpathstringtruethe user ID or username
-

Detailed descriptions

-

user: the user ID or username

-
-

Example responses

-
-
-

200 Response

-
-
{
-  "username": "string",
-  "orgs": [
-    {
-      "orgId": "string",
-      "orgDisplayName": "string"
-    }
-  ],
-  "teams": [
-    {
-      "teamId": "string",
-      "teamDisplayName": "string"
-    }
-  ],
-  "emails": [
-    {
-      "address": "string",
-      "verified": true
-    }
-  ],
-  "createdAt": "string",
-  "modifiedAt": "string",
-  "profile": {
-    "avatarUrl": "string",
-    "emailBuffer": [
-      "string"
-    ],
-    "fullname": "string",
-    "showDesktopDragHandles": true,
-    "hideCheckedItems": true,
-    "cardMaximized": true,
-    "customFieldsGrid": true,
-    "hiddenSystemMessages": true,
-    "hiddenMinicardLabelText": true,
-    "initials": "string",
-    "invitedBoards": [
-      "string"
-    ],
-    "language": "string",
-    "moveAndCopyDialog": {},
-    "moveChecklistDialog": {},
-    "copyChecklistDialog": {},
-    "notifications": [
-      {
-        "activity": "string",
-        "read": "string"
-      }
-    ],
-    "rescueCardDescription": true,
-    "showCardsCountAt": 0,
-    "startDayOfWeek": 0,
-    "starredBoards": [
-      "string"
-    ],
-    "icode": "string",
-    "boardView": "board-view-swimlanes",
-    "listSortBy": "-modifiedat",
-    "templatesBoardId": "string",
-    "cardTemplatesSwimlaneId": "string",
-    "listTemplatesSwimlaneId": "string",
-    "boardTemplatesSwimlaneId": "string"
-  },
-  "services": {},
-  "heartbeat": "string",
-  "isAdmin": true,
-  "createdThroughApi": true,
-  "loginDisabled": true,
-  "authenticationMethod": "string",
-  "sessionData": {
-    "totalHits": 0
-  },
-  "importUsernames": [
-    "string"
-  ],
-  "lastConnectionDate": "string"
-}
-
-

Responses

- - - - - - - - - - - - - - - - - -
StatusMeaningDescriptionSchema
200OK200 responseUsers
- -

edit_user

-

-
-

Code samples

-
-
# You can also use wget
-curl -X PUT /api/users/{user} \
-  -H 'Content-Type: multipart/form-data' \
-  -H 'Accept: application/json' \
-  -H 'Authorization: API_KEY'
-
-
-
PUT /api/users/{user} HTTP/1.1
-
-Content-Type: multipart/form-data
-Accept: application/json
-
-
-
const inputBody = '{
-  "action": "string"
-}';
-const headers = {
-  'Content-Type':'multipart/form-data',
-  'Accept':'application/json',
-  'Authorization':'API_KEY'
-};
-
-fetch('/api/users/{user}',
-{
-  method: 'PUT',
-  body: inputBody,
-  headers: headers
-})
-.then(function(res) {
-    return res.json();
-}).then(function(body) {
-    console.log(body);
-});
-
-
-
const fetch = require('node-fetch');
-const inputBody = {
-  "action": "string"
-};
-const headers = {
-  'Content-Type':'multipart/form-data',
-  'Accept':'application/json',
-  'Authorization':'API_KEY'
-};
-
-fetch('/api/users/{user}',
-{
-  method: 'PUT',
-  body: JSON.stringify(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/users/{user}',
-  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/users/{user}', headers = headers)
-
-print(r.json())
-
-
-
URL obj = new URL("/api/users/{user}");
-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/users/{user}", data)
-    req.Header = headers
-
-    client := &http.Client{}
-    resp, err := client.Do(req)
-    // ...
-}
-
-
-
 'multipart/form-data',
-    'Accept' => 'application/json',
-    'Authorization' => 'API_KEY',
-);
-
-$client = new \GuzzleHttp\Client();
-
-// Define array of request body.
-$request_body = array();
-
-try {
-    $response = $client->request('PUT','/api/users/{user}', array(
-        'headers' => $headers,
-        'json' => $request_body,
-       )
-    );
-    print_r($response->getBody()->getContents());
- }
- catch (\GuzzleHttp\Exception\BadResponseException $e) {
-    // handle exception or api errors.
-    print_r($e->getMessage());
- }
-
- // ...
-
-
-

PUT /api/users/{user}

-

edit a given user

-

Only the admin user (the first user) can call the REST API.

-

Possible values for action:

- -
-

Body parameter

-
-
action: string
-
-
-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameInTypeRequiredDescription
userpathstringtruethe user ID
bodybodyobjecttruenone
» actionbodystringtruethe action
-

Detailed descriptions

-

user: the user ID

-
-

Example responses

-
-
-

200 Response

-
-
{
-  "_id": "string",
-  "title": "string"
-}
-
-

Responses

- - - - - - - - - - - - - - - - - -
StatusMeaningDescriptionSchema
200OK200 responseInline
-

Response Schema

-

Status Code 200

- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeRequiredRestrictionsDescription
» _idstringfalsenonenone
» titlestringfalsenonenone
- -

delete_user

-

-
-

Code samples

-
-
# You can also use wget
-curl -X DELETE /api/users/{user} \
-  -H 'Accept: application/json' \
-  -H 'Authorization: API_KEY'
-
-
-
DELETE /api/users/{user} HTTP/1.1
-
-Accept: application/json
-
-
-

-const headers = {
-  'Accept':'application/json',
-  'Authorization':'API_KEY'
-};
-
-fetch('/api/users/{user}',
-{
-  method: 'DELETE',
-
-  headers: headers
-})
-.then(function(res) {
-    return res.json();
-}).then(function(body) {
-    console.log(body);
-});
-
-
-
const fetch = require('node-fetch');
-
-const headers = {
-  'Accept':'application/json',
-  'Authorization':'API_KEY'
-};
-
-fetch('/api/users/{user}',
-{
-  method: 'DELETE',
-
-  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.delete '/api/users/{user}',
-  params: {
-  }, headers: headers
-
-p JSON.parse(result)
-
-
-
import requests
-headers = {
-  'Accept': 'application/json',
-  'Authorization': 'API_KEY'
-}
-
-r = requests.delete('/api/users/{user}', headers = headers)
-
-print(r.json())
-
-
-
URL obj = new URL("/api/users/{user}");
-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{
-        "Accept": []string{"application/json"},
-        "Authorization": []string{"API_KEY"},
-    }
-
-    data := bytes.NewBuffer([]byte{jsonReq})
-    req, err := http.NewRequest("DELETE", "/api/users/{user}", data)
-    req.Header = headers
-
-    client := &http.Client{}
-    resp, err := client.Do(req)
-    // ...
-}
-
-
-
 'application/json',
-    'Authorization' => 'API_KEY',
-);
-
-$client = new \GuzzleHttp\Client();
-
-// Define array of request body.
-$request_body = array();
-
-try {
-    $response = $client->request('DELETE','/api/users/{user}', array(
-        'headers' => $headers,
-        'json' => $request_body,
-       )
-    );
-    print_r($response->getBody()->getContents());
- }
- catch (\GuzzleHttp\Exception\BadResponseException $e) {
-    // handle exception or api errors.
-    print_r($e->getMessage());
- }
-
- // ...
-
-
-

DELETE /api/users/{user}

-

Delete a user

-

Only the admin user (the first user) can call the REST API.

-

Parameters

- - - - - - - - - - - - - - - - - - - -
NameInTypeRequiredDescription
userpathstringtruethe ID of the user to delete
-

Detailed descriptions

-

user: the ID of the user to delete

-
-

Example responses

-
-
-

200 Response

-
-
{
-  "_id": "string"
-}
-
-

Responses

- - - - - - - - - - - - - - - - - -
StatusMeaningDescriptionSchema
200OK200 responseInline
-

Response Schema

-

Status Code 200

- - - - - - - - - - - - - - - - - - - -
NameTypeRequiredRestrictionsDescription
» _idstringfalsenonenone
-

Swimlanes

get_all_swimlanes

@@ -18917,7 +16212,7 @@ System.out.println(response.toString()); -

Detailed descriptions

+

Detailed descriptions

board: the ID of the board

Example responses

@@ -19184,7 +16479,7 @@ System.out.println(response.toString()); -

Detailed descriptions

+

Detailed descriptions

board: the ID of the board

Example responses

@@ -19416,7 +16711,7 @@ System.out.println(response.toString()); -

Detailed descriptions

+

Detailed descriptions

board: the ID of the board

swimlane: the ID of the swimlane

@@ -19668,7 +16963,7 @@ System.out.println(response.toString()); -

Detailed descriptions

+

Detailed descriptions

board: the ID of the board

swimlane: the ID of the swimlane to edit

@@ -19902,7 +17197,7 @@ System.out.println(response.toString()); -

Detailed descriptions

+

Detailed descriptions

board: the ID of the board

swimlane: the ID of the swimlane

@@ -22686,857 +19981,6 @@ UserSecurity -

Users

-

- - -

-
{
-  "username": "string",
-  "orgs": [
-    {
-      "orgId": "string",
-      "orgDisplayName": "string"
-    }
-  ],
-  "teams": [
-    {
-      "teamId": "string",
-      "teamDisplayName": "string"
-    }
-  ],
-  "emails": [
-    {
-      "address": "string",
-      "verified": true
-    }
-  ],
-  "createdAt": "string",
-  "modifiedAt": "string",
-  "profile": {
-    "avatarUrl": "string",
-    "emailBuffer": [
-      "string"
-    ],
-    "fullname": "string",
-    "showDesktopDragHandles": true,
-    "hideCheckedItems": true,
-    "cardMaximized": true,
-    "customFieldsGrid": true,
-    "hiddenSystemMessages": true,
-    "hiddenMinicardLabelText": true,
-    "initials": "string",
-    "invitedBoards": [
-      "string"
-    ],
-    "language": "string",
-    "moveAndCopyDialog": {},
-    "moveChecklistDialog": {},
-    "copyChecklistDialog": {},
-    "notifications": [
-      {
-        "activity": "string",
-        "read": "string"
-      }
-    ],
-    "rescueCardDescription": true,
-    "showCardsCountAt": 0,
-    "startDayOfWeek": 0,
-    "starredBoards": [
-      "string"
-    ],
-    "icode": "string",
-    "boardView": "board-view-swimlanes",
-    "listSortBy": "-modifiedat",
-    "templatesBoardId": "string",
-    "cardTemplatesSwimlaneId": "string",
-    "listTemplatesSwimlaneId": "string",
-    "boardTemplatesSwimlaneId": "string"
-  },
-  "services": {},
-  "heartbeat": "string",
-  "isAdmin": true,
-  "createdThroughApi": true,
-  "loginDisabled": true,
-  "authenticationMethod": "string",
-  "sessionData": {
-    "totalHits": 0
-  },
-  "importUsernames": [
-    "string"
-  ],
-  "lastConnectionDate": "string"
-}
-
-
-

A User in wekan

-

Properties

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeRequiredRestrictionsDescription
usernamestring¦nullfalsenonethe username of the user
orgs[UsersOrgs]¦nullfalsenonethe list of organizations that a user belongs to
teams[UsersTeams]¦nullfalsenonethe list of teams that a user belongs to
emails[UsersEmails]¦nullfalsenonethe list of emails attached to a user
createdAtstringtruenonecreation date of the user
modifiedAtstringtruenonenone
profileUsersProfilefalsenonenone
servicesobject¦nullfalsenoneservices field of the user
heartbeatstring¦nullfalsenonelast time the user has been seen
isAdminboolean¦nullfalsenoneis the user an admin of the board?
createdThroughApiboolean¦nullfalsenonewas the user created through the API?
loginDisabledboolean¦nullfalsenoneloginDisabled field of the user
authenticationMethodstringtruenoneauthentication method of the user
sessionDataUsersSessiondatafalsenonenone
importUsernames[string]¦nullfalsenoneusername for imported
lastConnectionDatestring¦nullfalsenonenone
-

UsersProfile

-

- - -

-
{
-  "avatarUrl": "string",
-  "emailBuffer": [
-    "string"
-  ],
-  "fullname": "string",
-  "showDesktopDragHandles": true,
-  "hideCheckedItems": true,
-  "cardMaximized": true,
-  "customFieldsGrid": true,
-  "hiddenSystemMessages": true,
-  "hiddenMinicardLabelText": true,
-  "initials": "string",
-  "invitedBoards": [
-    "string"
-  ],
-  "language": "string",
-  "moveAndCopyDialog": {},
-  "moveChecklistDialog": {},
-  "copyChecklistDialog": {},
-  "notifications": [
-    {
-      "activity": "string",
-      "read": "string"
-    }
-  ],
-  "rescueCardDescription": true,
-  "showCardsCountAt": 0,
-  "startDayOfWeek": 0,
-  "starredBoards": [
-    "string"
-  ],
-  "icode": "string",
-  "boardView": "board-view-swimlanes",
-  "listSortBy": "-modifiedat",
-  "templatesBoardId": "string",
-  "cardTemplatesSwimlaneId": "string",
-  "listTemplatesSwimlaneId": "string",
-  "boardTemplatesSwimlaneId": "string"
-}
-
-
-

Properties

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeRequiredRestrictionsDescription
avatarUrlstringfalsenoneURL of the avatar of the user
emailBuffer[string]falsenonelist of email buffers of the user
fullnamestringfalsenonefull name of the user
showDesktopDragHandlesbooleanfalsenonedoes the user want to show desktop drag handles?
hideCheckedItemsbooleanfalsenonedoes the user want to hide checked checklist items?
cardMaximizedbooleanfalsenonehas user clicked maximize card?
customFieldsGridbooleanfalsenonehas user at card Custom Fields have Grid (false) or one per row (true) layout?
hiddenSystemMessagesbooleanfalsenonedoes the user want to hide system messages?
hiddenMinicardLabelTextbooleanfalsenonedoes the user want to hide minicard label texts?
initialsstringfalsenoneinitials of the user
invitedBoards[string]falsenoneboard IDs the user has been invited to
languagestringfalsenonelanguage of the user
moveAndCopyDialogobjectfalsenonemove and copy card dialog
moveChecklistDialogobjectfalsenonemove checklist dialog
copyChecklistDialogobjectfalsenonecopy checklist dialog
notifications[UsersProfileNotifications]falsenoneenabled notifications for the user
rescueCardDescriptionbooleanfalsenoneshow dialog for saving card description on unintentional card closing
showCardsCountAtnumberfalsenoneshowCardCountAt field of the user
startDayOfWeeknumberfalsenonestartDayOfWeek field of the user
starredBoards[string]falsenonelist of starred board IDs
icodestringfalsenoneicode
boardViewstringfalsenoneboardView field of the user
listSortBystringfalsenonedefault sort list for user
templatesBoardIdstringtruenoneReference to the templates board
cardTemplatesSwimlaneIdstringtruenoneReference to the card templates swimlane Id
listTemplatesSwimlaneIdstringtruenoneReference to the list templates swimlane Id
boardTemplatesSwimlaneIdstringtruenoneReference to the board templates swimlane Id
-

Enumerated Values

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyValue
boardViewboard-view-swimlanes
boardViewboard-view-lists
boardViewboard-view-cal
listSortBy-modifiedat
listSortBymodifiedat
listSortBy-title
listSortBytitle
listSortBy-sort
listSortBysort
-

UsersSessiondata

-

- - -

-
{
-  "totalHits": 0
-}
-
-
-

Properties

- - - - - - - - - - - - - - - - - - - -
NameTypeRequiredRestrictionsDescription
totalHitsnumberfalsenoneTotal hits from last searchquery['members.userId'] = Meteor.userId();
last hit that was returned
-

UsersOrgs

-

- - -

-
{
-  "orgId": "string",
-  "orgDisplayName": "string"
-}
-
-
-

Properties

- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeRequiredRestrictionsDescription
orgIdstringtruenoneThe uniq ID of the organization
orgDisplayNamestringtruenoneThe display name of the organization
-

UsersTeams

-

- - -

-
{
-  "teamId": "string",
-  "teamDisplayName": "string"
-}
-
-
-

Properties

- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeRequiredRestrictionsDescription
teamIdstringtruenoneThe uniq ID of the team
teamDisplayNamestringtruenoneThe display name of the team
-

UsersEmails

-

- - -

-
{
-  "address": "string",
-  "verified": true
-}
-
-
-

Properties

- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeRequiredRestrictionsDescription
addressstringtruenoneThe email address
verifiedbooleantruenoneHas the email been verified
-

UsersProfileMoveandcopydialog

-

- - -

-
{
-  "boardId": "string",
-  "swimlaneId": "string",
-  "listId": "string"
-}
-
-
-

Properties

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeRequiredRestrictionsDescription
boardIdstringtruenonelast selected board id
swimlaneIdstringtruenonelast selected swimlane id
listIdstringtruenonelast selected list id
-

UsersProfileMovechecklistdialog

-

- - -

-
{
-  "boardId": "string",
-  "swimlaneId": "string",
-  "listId": "string",
-  "cardId": "string"
-}
-
-
-

Properties

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeRequiredRestrictionsDescription
boardIdstringtruenonelast selected board id
swimlaneIdstringtruenonelast selected swimlane id
listIdstringtruenonelast selected list id
cardIdstringtruenonelast selected card id
-

UsersProfileCopychecklistdialog

-

- - -

-
{
-  "boardId": "string",
-  "swimlaneId": "string",
-  "listId": "string",
-  "cardId": "string"
-}
-
-
-

Properties

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeRequiredRestrictionsDescription
boardIdstringtruenonelast selected board id
swimlaneIdstringtruenonelast selected swimlane id
listIdstringtruenonelast selected list id
cardIdstringtruenonelast selected card id
-

UsersProfileNotifications

-

- - -

-
{
-  "activity": "string",
-  "read": "string"
-}
-
-
-

Properties

- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeRequiredRestrictionsDescription
activitystringtruenoneThe id of the activity this notification references
readstringfalsenonethe date on which this notification was read
@@ -23557,16 +20001,6 @@ UserSecurity - - - - - - - - - -
diff --git a/public/api/wekan.yml b/public/api/wekan.yml index 9f1162a9a..a6eb14f6c 100644 --- a/public/api/wekan.yml +++ b/public/api/wekan.yml @@ -1,7 +1,7 @@ swagger: '2.0' info: title: Wekan REST API - version: v6.99.9 + version: v7.00 description: | The REST API allows you to control and extend Wekan with ease. @@ -2277,125 +2277,6 @@ paths: '200': description: |- 200 response - /api/boards/{board}/members/{user}/add: - post: - operationId: add_board_member - summary: Add New Board Member with Role - description: | - Only the admin user (the first user) can call the REST API. - - **Note**: see [Boards.set_board_member_permission](#set_board_member_permission) - to later change the permissions. - tags: - - Users - - Boards - consumes: - - multipart/form-data - - application/json - parameters: - - name: action - in: formData - description: | - the action (needs to be `add`) - type: string - required: true - - name: isAdmin - in: formData - description: | - is the user an admin of the board - type: boolean - required: true - - name: isNoComments - in: formData - description: | - disable comments - type: boolean - required: true - - name: isCommentOnly - in: formData - description: | - only enable comments - type: boolean - required: true - - name: isWorker - in: formData - description: | - is the user a board worker - type: boolean - required: true - - name: board - in: path - description: | - the board ID - type: string - required: true - - name: user - in: path - description: | - the user ID - type: string - required: true - produces: - - application/json - security: - - UserSecurity: [] - responses: - '200': - description: |- - 200 response - schema: - type: object - properties: - _id: - type: string - title: - type: string - /api/boards/{board}/members/{user}/remove: - post: - operationId: remove_board_member - summary: Remove Member from Board - description: | - Only the admin user (the first user) can call the REST API. - tags: - - Users - - Boards - consumes: - - multipart/form-data - - application/json - parameters: - - name: action - in: formData - description: | - the action (needs to be `remove`) - type: string - required: true - - name: board - in: path - description: | - the board ID - type: string - required: true - - name: user - in: path - description: | - the user ID - type: string - required: true - produces: - - application/json - security: - - UserSecurity: [] - responses: - '200': - description: |- - 200 response - schema: - type: object - properties: - _id: - type: string - title: - type: string /api/boards/{board}/swimlanes: get: operationId: get_all_swimlanes @@ -2623,252 +2504,6 @@ paths: type: integer public: type: integer - /api/createtoken/{user}: - post: - operationId: create_user_token - summary: Create a user token - description: | - Only the admin user (the first user) can call the REST API. - tags: - - Users - consumes: - - multipart/form-data - - application/json - parameters: - - name: user - in: path - description: | - the ID of the user to create token for. - type: string - required: true - produces: - - application/json - security: - - UserSecurity: [] - responses: - '200': - description: |- - 200 response - schema: - type: object - properties: - _id: - type: string - /api/deletetoken: - post: - operationId: delete_user_token - summary: Delete one or all user token. - description: | - Only the admin user (the first user) can call the REST API. - tags: - - Users - consumes: - - multipart/form-data - - application/json - parameters: - - name: userId - in: formData - description: | - the user ID - type: string - required: true - - name: token - in: formData - description: | - the user hashedToken - type: string - required: true - produces: - - application/json - security: - - UserSecurity: [] - responses: - '200': - description: |- - 200 response - schema: - type: object - properties: - message: - type: string - /api/user: - get: - operationId: get_current_user - summary: returns the current user - tags: - - Users - produces: - - application/json - security: - - UserSecurity: [] - responses: - '200': - description: |- - 200 response - schema: - $ref: "#/definitions/Users" - /api/users: - get: - operationId: get_all_users - summary: return all the users - description: | - Only the admin user (the first user) can call the REST API. - tags: - - Users - produces: - - application/json - security: - - UserSecurity: [] - responses: - '200': - description: |- - 200 response - schema: - type: array - items: - type: object - properties: - _id: - type: string - username: - type: string - post: - operationId: new_user - summary: Create a new user - description: | - Only the admin user (the first user) can call the REST API. - tags: - - Users - consumes: - - multipart/form-data - - application/json - parameters: - - name: username - in: formData - description: | - the new username - type: string - required: true - - name: email - in: formData - description: | - the email of the new user - type: string - required: true - - name: password - in: formData - description: | - the password of the new user - type: string - required: true - produces: - - application/json - security: - - UserSecurity: [] - responses: - '200': - description: |- - 200 response - schema: - type: object - properties: - _id: - type: string - /api/users/{user}: - get: - operationId: get_user - summary: get a given user - description: | - Only the admin user (the first user) can call the REST API. - tags: - - Users - parameters: - - name: user - in: path - description: | - the user ID or username - type: string - required: true - produces: - - application/json - security: - - UserSecurity: [] - responses: - '200': - description: |- - 200 response - schema: - $ref: "#/definitions/Users" - put: - operationId: edit_user - summary: edit a given user - description: | - Only the admin user (the first user) can call the REST API. - - Possible values for *action*: - - `takeOwnership`: The admin takes the ownership of ALL boards of the user (archived and not archived) where the user is admin on. - - `disableLogin`: Disable a user (the user is not allowed to login and his login tokens are purged) - - `enableLogin`: Enable a user - tags: - - Users - consumes: - - multipart/form-data - - application/json - parameters: - - name: action - in: formData - description: | - the action - type: string - required: true - - name: user - in: path - description: | - the user ID - type: string - required: true - produces: - - application/json - security: - - UserSecurity: [] - responses: - '200': - description: |- - 200 response - schema: - type: object - properties: - _id: - type: string - title: - type: string - delete: - operationId: delete_user - summary: Delete a user - description: | - Only the admin user (the first user) can call the REST API. - tags: - - Users - parameters: - - name: user - in: path - description: | - the ID of the user to delete - type: string - required: true - produces: - - application/json - security: - - UserSecurity: [] - responses: - '200': - description: |- - 200 response - schema: - type: object - properties: - _id: - type: string /api/users/{user}/boards: get: operationId: get_boards_from_user @@ -4122,361 +3757,3 @@ definitions: - createdAt - modifiedAt - type - Users: - type: object - description: A User in wekan - properties: - username: - description: | - the username of the user - type: string - x-nullable: true - orgs: - description: | - the list of organizations that a user belongs to - type: array - items: - $ref: "#/definitions/UsersOrgs" - x-nullable: true - teams: - description: | - the list of teams that a user belongs to - type: array - items: - $ref: "#/definitions/UsersTeams" - x-nullable: true - emails: - description: | - the list of emails attached to a user - type: array - items: - $ref: "#/definitions/UsersEmails" - x-nullable: true - createdAt: - description: | - creation date of the user - type: string - modifiedAt: - type: string - profile: - description: | - profile settings - $ref: "#/definitions/UsersProfile" - x-nullable: true - services: - description: | - services field of the user - type: object - x-nullable: true - heartbeat: - description: | - last time the user has been seen - type: string - x-nullable: true - isAdmin: - description: | - is the user an admin of the board? - type: boolean - x-nullable: true - createdThroughApi: - description: | - was the user created through the API? - type: boolean - x-nullable: true - loginDisabled: - description: | - loginDisabled field of the user - type: boolean - x-nullable: true - authenticationMethod: - description: | - authentication method of the user - type: string - sessionData: - description: | - profile settings - $ref: "#/definitions/UsersSessiondata" - x-nullable: true - importUsernames: - description: | - username for imported - type: array - items: - type: string - x-nullable: true - x-nullable: true - lastConnectionDate: - type: string - x-nullable: true - required: - - createdAt - - modifiedAt - - authenticationMethod - UsersProfile: - type: object - properties: - avatarUrl: - description: | - URL of the avatar of the user - type: string - emailBuffer: - description: | - list of email buffers of the user - type: array - items: - type: string - x-nullable: true - fullname: - description: | - full name of the user - type: string - showDesktopDragHandles: - description: | - does the user want to show desktop drag handles? - type: boolean - hideCheckedItems: - description: | - does the user want to hide checked checklist items? - type: boolean - cardMaximized: - description: | - has user clicked maximize card? - type: boolean - customFieldsGrid: - description: | - has user at card Custom Fields have Grid (false) or one per row (true) layout? - type: boolean - hiddenSystemMessages: - description: | - does the user want to hide system messages? - type: boolean - hiddenMinicardLabelText: - description: | - does the user want to hide minicard label texts? - type: boolean - initials: - description: | - initials of the user - type: string - invitedBoards: - description: | - board IDs the user has been invited to - type: array - items: - type: string - x-nullable: true - language: - description: | - language of the user - type: string - moveAndCopyDialog: - description: | - move and copy card dialog - type: object - moveChecklistDialog: - description: | - move checklist dialog - type: object - copyChecklistDialog: - description: | - copy checklist dialog - type: object - notifications: - description: | - enabled notifications for the user - type: array - items: - $ref: "#/definitions/UsersProfileNotifications" - rescueCardDescription: - description: | - show dialog for saving card description on unintentional card closing - type: boolean - showCardsCountAt: - description: | - showCardCountAt field of the user - type: number - startDayOfWeek: - description: | - startDayOfWeek field of the user - type: number - starredBoards: - description: | - list of starred board IDs - type: array - items: - type: string - x-nullable: true - icode: - description: | - icode - type: string - boardView: - description: | - boardView field of the user - type: string - enum: - - board-view-swimlanes - - board-view-lists - - board-view-cal - listSortBy: - description: | - default sort list for user - type: string - enum: - - -modifiedat - - modifiedat - - -title - - title - - -sort - - sort - templatesBoardId: - description: | - Reference to the templates board - type: string - cardTemplatesSwimlaneId: - description: | - Reference to the card templates swimlane Id - type: string - listTemplatesSwimlaneId: - description: | - Reference to the list templates swimlane Id - type: string - boardTemplatesSwimlaneId: - description: | - Reference to the board templates swimlane Id - type: string - required: - - templatesBoardId - - cardTemplatesSwimlaneId - - listTemplatesSwimlaneId - - boardTemplatesSwimlaneId - UsersSessiondata: - type: object - properties: - totalHits: - description: | - Total hits from last searchquery['members.userId'] = Meteor.userId(); - last hit that was returned - type: number - UsersOrgs: - type: object - properties: - orgId: - description: | - The uniq ID of the organization - type: string - orgDisplayName: - description: | - The display name of the organization - type: string - required: - - orgId - - orgDisplayName - UsersTeams: - type: object - properties: - teamId: - description: | - The uniq ID of the team - type: string - teamDisplayName: - description: | - The display name of the team - type: string - required: - - teamId - - teamDisplayName - UsersEmails: - type: object - properties: - address: - description: | - The email address - type: string - verified: - description: | - Has the email been verified - type: boolean - required: - - address - - verified - UsersProfileMoveandcopydialog: - type: object - properties: - boardId: - description: | - last selected board id - type: string - swimlaneId: - description: | - last selected swimlane id - type: string - listId: - description: | - last selected list id - type: string - required: - - boardId - - swimlaneId - - listId - UsersProfileMovechecklistdialog: - type: object - properties: - boardId: - description: | - last selected board id - type: string - swimlaneId: - description: | - last selected swimlane id - type: string - listId: - description: | - last selected list id - type: string - cardId: - description: | - last selected card id - type: string - required: - - boardId - - swimlaneId - - listId - - cardId - UsersProfileCopychecklistdialog: - type: object - properties: - boardId: - description: | - last selected board id - type: string - swimlaneId: - description: | - last selected swimlane id - type: string - listId: - description: | - last selected list id - type: string - cardId: - description: | - last selected card id - type: string - required: - - boardId - - swimlaneId - - listId - - cardId - UsersProfileNotifications: - type: object - properties: - activity: - description: | - The id of the activity this notification references - type: string - read: - description: | - the date on which this notification was read - type: string - required: - - activity diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp index c3d8fb5e7..90154a33c 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 = 699, + appVersion = 700, # Increment this for every release. - appMarketingVersion = (defaultText = "6.99.9~2023-07-18"), + appMarketingVersion = (defaultText = "7.00~2023-07-19"), # Human-readable presentation of the app version. minUpgradableAppVersion = 0, diff --git a/snapcraft.yaml b/snapcraft.yaml index ee1284ac6..82325ba3c 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -1,5 +1,5 @@ name: wekan -version: '6.99.9' +version: '7.00' base: core20 summary: Open Source kanban description: | @@ -168,9 +168,9 @@ parts: # Cleanup mkdir .build cd .build - wget https://github.com/wekan/wekan/releases/download/v6.99.9/wekan-6.99.9-amd64.zip - unzip wekan-6.99.9-amd64.zip - rm wekan-6.99.9-amd64.zip + wget https://github.com/wekan/wekan/releases/download/v7.00/wekan-7.00-amd64.zip + unzip wekan-7.00-amd64.zip + rm wekan-7.00-amd64.zip cd .. ##cd .build/bundle ##find . -type d -name '*-garbage*' | xargs rm -rf