summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.markdown1
-rw-r--r--docs/api-json-rpc.markdown323
2 files changed, 324 insertions, 0 deletions
diff --git a/README.markdown b/README.markdown
index b19bd58c..72a6cf39 100644
--- a/README.markdown
+++ b/README.markdown
@@ -100,6 +100,7 @@ Documentation
#### Developers
+- [Json-RPC API](docs/api-json-rpc.markdown)
- [How to use Kanboard with Vagrant](docs/vagrant.markdown)
- [Webhooks](docs/webhooks.markdown)
diff --git a/docs/api-json-rpc.markdown b/docs/api-json-rpc.markdown
new file mode 100644
index 00000000..7b0b795c
--- /dev/null
+++ b/docs/api-json-rpc.markdown
@@ -0,0 +1,323 @@
+Json-RPC API
+============
+
+Protocol
+--------
+
+Kanboard use the protocol Json-RPC to interact with external programs.
+
+JSON-RPC is a remote procedure call protocol encoded in JSON.
+Almost the same thing as XML-RPC but with the JSON format.
+
+We use the [version 2 of the protocol](http://www.jsonrpc.org/specification).
+You must call the API with a `POST` HTTP request.
+
+Credentials
+-----------
+
+The API credentials are available on the settings page.
+
+- API end-point: `http://YOUR_SERVER/jsonrpc.php`
+- Username: `jsonrpc`
+- Password: Random token (API token on the settings page)
+
+The API use the [HTTP Basic Authentication Scheme described in the RFC2617](http://www.ietf.org/rfc/rfc2617.txt).
+If there is an authentication error, you got an HTTP status code `401 Not Authorized`.
+
+Examples
+--------
+
+### Example with cURL
+
+From the command line:
+
+```bash
+curl \
+-u "jsonrpc:19ffd9709d03ce50675c3a43d1c49c1ac207f4bc45f06c5b2701fbdf8929" \
+-d '{"jsonrpc": "2.0", "method": "getAllProjects", "id": 1}' \
+http://localhost/kanboard/jsonrpc.php
+```
+
+Response from the server:
+
+```json
+{
+ "jsonrpc":"2.0",
+ "id":1,
+ "result":[
+ {
+ "id":"1",
+ "name":"API test",
+ "is_active":"1",
+ "token":"6bd0932fe7f4b5e6e4bc3c72800bfdef36a2c5de2f38f756dfb5bd632ebf",
+ "last_modified":"1403392631"
+ }
+ ]
+}
+```
+
+### Example with a PHP client:
+
+I wrote a simple [Json-RPC Client/Server library in PHP](https://github.com/fguillot/JsonRPC), here an example:
+
+```php
+<?php
+
+$client = new JsonRPC\Client('http://localhost:8000/jsonrpc.php');
+$client->authentication('jsonrpc', '19ffd9709d03ce50675c3a43d1c49c1ac207f4bc45f06c5b2701fbdf8929');
+
+print_r($client->getAllProjects());
+
+```
+
+The response:
+
+```
+Array
+(
+ [0] => Array
+ (
+ [id] => 1
+ [name] => API test
+ [is_active] => 1
+ [token] => 6bd0932fe7f4b5e6e4bc3c72800bfdef36a2c5de2f38f756dfb5bd632ebf
+ [last_modified] => 1403392631
+ )
+
+)
+```
+
+Procedures
+----------
+
+### createProject
+
+- Purpose: **Create a new project**
+- Parameters: **name** (string)
+- Result on success: **true**
+- Result on failure: **false**
+
+### getProjectById
+
+- Purpose: **Get project information**
+- Parameters: **project_id** (integer)
+- Result on success: **project properties**
+- Result on failure: **null**
+
+### getProjectByName
+
+- Purpose: **Get project information**
+- Parameters: **name** (string)
+- Result on success: **project properties**
+- Result on failure: **null**
+
+### getAllProjects
+
+- Purpose: **Get all available projects**
+- Parameters: **none**
+- Result on success: **List of projects**
+- Result on failure: **false**
+
+### updateProject
+
+- Purpose: **Update a project**
+- Parameters: Key/value pair composed of the **id** (integer), **name** (string), **is_active** (integer, optional)
+- Result on success: **true**
+- Result on failure: **false**
+
+### removeProject
+
+- Purpose: **Remove a project**
+- Parameters: **project_id** (integer)
+- Result on success: **true**
+- Result on failure: **false**
+
+
+
+
+### createTask
+
+- Purpose: **Create a new task**
+- Parameters: Key/value pair composed of the **title** (string), **description** (string, optional), **color_id** (string), **project_id** (integer), **column_id** (integer), **owner_id** (integer, optional), **score** (integer, optional), **date_due** (integer, optional), **category_id** (integer, optional)
+- Result on success: **true**
+- Result on failure: **false**
+
+### getTask
+
+- Purpose: **Get task information**
+- Parameters: **task_id** (integer)
+- Result on success: **task properties**
+- Result on failure: **null**
+
+### getAllTasks
+
+- Purpose: **Get all available tasks**
+- Parameters: **project_id** (integer)
+- Result on success: **List of tasks**
+- Result on failure: **false**
+
+### updateTask
+
+- Purpose: **Update a task**
+- Parameters: Key/value pair composed of the **id** (integer), **title** (string), **description** (string, optional), **color_id** (string), **project_id** (integer), **column_id** (integer), **owner_id** (integer, optional), **score** (integer, optional), **date_due** (integer, optional), **category_id** (integer, optional)
+- Result on success: **true**
+- Result on failure: **false**
+
+### removeTask
+
+- Purpose: **Remove a task**
+- Parameters: **task_id** (integer)
+- Result on success: **true**
+- Result on failure: **false**
+
+
+
+
+### createUser
+
+- Purpose: **Create a new user**
+- Parameters: Key/value pair composed of the **username** (string), **password** (string), **confirmation** (string), **name** (string, optional), **email** (string, optional), is_admin (integer, optional), **default_project_id** (integer, optional)
+- Result on success: **true**
+- Result on failure: **false**
+
+### getUser
+
+- Purpose: **Get user information**
+- Parameters: **user_id** (integer)
+- Result on success: **user properties**
+- Result on failure: **null**
+
+### getAllUsers
+
+- Purpose: **Get all available users**
+- Parameters: **none**
+- Result on success: **List of users**
+- Result on failure: **false**
+
+### updateUser
+
+- Purpose: **Update a user**
+- Parameters: Key/value pair composed of the **id** (integer), **username** (string), **password** (string), **confirmation** (string), **name** (string, optional), **email** (string, optional), is_admin (integer, optional), **default_project_id** (integer, optional)
+- Result on success: **true**
+- Result on failure: **false**
+
+### removeUser
+
+- Purpose: **Remove a user**
+- Parameters: **user_id** (integer)
+- Result on success: **true**
+- Result on failure: **false**
+
+
+
+
+### createCategory
+
+- Purpose: **Create a new category**
+- Parameters: Key/value pair composed of the **name** (string), **project_id** (integer)
+- Result on success: **true**
+- Result on failure: **false**
+
+### getCategory
+
+- Purpose: **Get category information**
+- Parameters: **category_id** (integer)
+- Result on success: **category properties**
+- Result on failure: **null**
+
+### getAllCategories
+
+- Purpose: **Get all available categories**
+- Parameters: **project_id** (integer)
+- Result on success: **List of categories**
+- Result on failure: **false**
+
+### updateCategory
+
+- Purpose: **Update a category**
+- Parameters: Key/value pair composed of the **id** (integer), **name** (string), **project_id** (integer)
+- Result on success: **true**
+- Result on failure: **false**
+
+### removeCategory
+
+- Purpose: **Remove a category**
+- Parameters: **category_id** (integer)
+- Result on success: **true**
+- Result on failure: **false**
+
+
+
+
+### createComment
+
+- Purpose: **Create a new comment**
+- Parameters: Key/value pair composed of the **task_id** (integer), **user_id** (integer), **comment** (string)
+- Result on success: **true**
+- Result on failure: **false**
+
+### getComment
+
+- Purpose: **Get comment information**
+- Parameters: **comment_id** (integer)
+- Result on success: **comment properties**
+- Result on failure: **null**
+
+### getAllComments
+
+- Purpose: **Get all available comments**
+- Parameters: **none**
+- Result on success: **List of comments**
+- Result on failure: **false**
+
+### updateComment
+
+- Purpose: **Update a comment**
+- Parameters: Key/value pair composed of the **id** (integer), **task_id** (integer), **user_id** (integer), **comment** (string)
+- Result on success: **true**
+- Result on failure: **false**
+
+### removeComment
+
+- Purpose: **Remove a comment**
+- Parameters: **comment_id** (integer)
+- Result on success: **true**
+- Result on failure: **false**
+
+
+
+
+### createSubtask
+
+- Purpose: **Create a new subtask**
+- Parameters: Key/value pair composed of the **title** (integer), time_estimated (int, optional), task_id (int), user_id (int, optional)
+- Result on success: **true**
+- Result on failure: **false**
+
+### getSubtask
+
+- Purpose: **Get subtask information**
+- Parameters: **subtask_id** (integer)
+- Result on success: **subtask properties**
+- Result on failure: **null**
+
+### getAllSubtasks
+
+- Purpose: **Get all available subtasks**
+- Parameters: **none**
+- Result on success: **List of subtasks**
+- Result on failure: **false**
+
+### updateSubtask
+
+- Purpose: **Update a subtask**
+- Parameters: Key/value pair composed of the **id** (integer), **title** (integer), status (integer, optional) time_estimated (int, optional), time_spent (int, optional), task_id (int), user_id (int, optional)
+- Result on success: **true**
+- Result on failure: **false**
+
+### removeSubtask
+
+- Purpose: **Remove a subtask**
+- Parameters: **subtask_id** (integer)
+- Result on success: **true**
+- Result on failure: **false**