Table of Contents

1. General notes

Note
About Taiga instance and URLs used in this document

All API calls used in the documentation are refered to a local taiga instance API running on localhost:8000, so if you use another instance remember to change the url.

For example, if you want to perform the tests against our own instance, you should use https://api.taiga.io/api/v1 instead of http://localhost:8000/api/v1.

1.1. Authentication

1.1.1. Standard token authentication

To authenticate requests an http header called "Authorization" should be added. Its format should be:

Authorization: Bearer ${AUTH_TOKEN}

This token can be received through the login API

To provide an example, the following can be used within a Bash script running on Ubuntu - customise as appropriate for your system configuration.

  • Install jq (a command-line JSON processor):

$ sudo apt-get install jq
  • Bash snippet:

#!/bin/bash
# Request username and password for connecting to Taiga
read -p "Username or email: " USERNAME
read -r -s -p "Password: " PASSWORD

DATA=$(jq --null-input \
        --arg username "$USERNAME" \
        --arg password "$PASSWORD" \
        '{ type: "normal", username: $username, password: $password }')

# Get AUTH_TOKEN
USER_AUTH_DETAIL=$( curl -X POST \
  -H "Content-Type: application/json" \
  -d "$DATA" \
  https://api.taiga.io/api/v1/auth 2>/dev/null )

AUTH_TOKEN=$( echo ${USER_AUTH_DETAIL} | jq -r '.auth_token' )

# Exit if AUTH_TOKEN is not available
if [ -z ${AUTH_TOKEN} ]; then
    echo "Error: Incorrect username and/or password supplied"
    exit 1
else
    echo "auth_token is ${AUTH_TOKEN}"
fi

# Proceed to use API calls as desired
...
  • If unable to install jq, it is possible (but not recommended) to use grep and cut to extract the value of auth_token from the JSON user auth detail object - use the following line instead:

AUTH_TOKEN=$( echo ${USER_AUTH_DETAIL} | grep -Po '"auth_token":.*?[^\\]",' | cut -d\" -f4 )

1.1.2. Application token authentication

This kind of tokens are designed for allowing external apps use the Taiga API, they are associated to an existing user and an Application. They can be manually created via the django ADMIN or programatically created via API.

They work in the same way than standard Taiga authentication tokens but the "Authorization" header change slightly. Its format should be:

Authorization: Application ${AUTH_TOKEN}

The process for obtaining a valid token consists in:

Checking if there is an existing application token for the requesting user

A GET request must be done to the applications resource including the application id in the url and specifying the token endpoint:

curl -X GET \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer {AUTH_TOKEN}" \
    https://api.taiga.io/api/v1/applications/5c8515c2-4fc4-11e5-9a5e-68f72800aadd/token

The API will answer with info about the application and the token:

{
    "user": 4,
    "id": null,
    "application": {
        "id": "a60c3208-5234-11e5-96df-68f72800aadd",
        "name": "Testing application",
        "web": "http://taiga.io",
        "description": "Testing external app",
        "icon_url": "https://tree.taiga.io/images/beta.png"
    },
    "auth_code": null,
    "next_url": "http://tree.taiga.io/redirect?auth_code=None"
}

If id and auth_code are null it means there is no application token generated and you need to authorize one. If they are not null you can jump to the validation step.

Requesting an authorization code for the requesting user if it doesn’t exist yet

The request should include:

  • application: the application id for the requested token

  • state: an unguessable random string. It is used to protect against cross-site request forgery attacks. The API will include this value when the validation process is completed so the final app can verify it matches the original one.

curl -X POST \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer eyJ1c2VyX2F1dGhlbnRpY2F0aW9uX2lkIjo0fQ:1ZX33b:QnAN3EcuChLoRVf3CdybWEi2OEg" \
    -d '{
    	  "application": "a60c3208-5234-11e5-96df-68f72800aadd",
    	  "state": "random-state"
      }' \
    https://api.taiga.io/api/v1/application-tokens/authorize

The API answer will be something like:

{
    "auth_code": "c8bfacba-5236-11e5-b8f6-68f72800aadd",
    "state": "random-state",
    "next_url": "asd?auth_code=c8bfacba-5236-11e5-b8f6-68f72800aadd"
}

The obtained auth_code must be validated as described in the validation step.

Validating the authorization code to obtain the final token

Now the external app must validate the auth_code obtained in the previous steps with a request including:

  • application: the application id for the requested token

  • state: an unguessable random string. It is used to protect against cross-site request forgery attacks. The API will include this value when the validation process is completed so the final app can verify it matches the original one.

  • auth_code: the authorization code received on previous the steps.

curl -X POST \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer eyJ1c2VyX2F1dGhlbnRpY2F0aW9uX2lkIjo0fQ:1ZX33b:QnAN3EcuChLoRVf3CdybWEi2OEg" \
    -d '{
    	  "application": "a60c3208-5234-11e5-96df-68f72800aadd",
    	  "auth_code": "21ce08c4-5237-11e5-a8a3-68f72800aadd",
    	  "state": "random-state"
      }' \
https://api.taiga.io/api/v1/application-tokens/validate

The API answer will be something like:

{
    "cyphered_token": "eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiQTEyOEtXIn0.E-Ee1cRgG0JEd90yJu-Dgl_vwKHTHdPy2YHRbCsMvfiJx0OvR12E8g.kGwJPnWQJecFPEae.ebQtpRNPbKh6FBS-LSUhw1xNARl0Q5loCO4fAk00LHFqcDpAwba7LHeR3MPx9T9LfA.KM-Id_041g8OdWaseGyV8g"
}
Decyphering the token

The token is cyphered using JWE with A128KW as algorythm and A256GCM as encryption. Both parts (Taiga and the external application requesting the token) must know about the encryption key used in the process (in Taiga it’s an attribute of the application model).

  • A python snippet for decyphering the token:

from jwkest.jwk import SYMKey
from jwkest.jwe import JWE
key ="this-is-the-secret-key"
cyphered_token="eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiQTEyOEtXIn0.H5jWzzXQISSh_QPCO5mWhT0EI9RRV45xA7vbWoxeBIjiCL3qwAmlzg.bBWVKwGTkta5y99c.ArycfFtrlmWgyZ4lwXw_JiSVmkn9YF6Xwlh8nVDku0BLW8kvaxNy3XRbbb17MtZ7mg.pDkpgDwffCyCy4sYNQI6zA"
sym_key = SYMKey(key=key, alg="A128KW")
token=JWE().decrypt(cyphered_token, keys=[sym_key])
print(token)

When decyphering it correctly you will obtain a json containing the application token that can be used in the Authorization headers

{
    "token": "95db1710-5238-11e5-a86e-68f72800aadd"
}

1.2. OCC - Optimistic concurrency control

In taiga multiple operations can be happening at the same time for an element so every modifying request should include a valid version parameter. You can think about two different users updating the same user story, there are two possible scenarios here:

  • They are updating the same attributes on the element. In this situation the API will accept the first request and deny the second one because the version parameter will be considered as invalid.

  • They are updating different attributes on the element. In this situation the API is smart enough for accepting both requests, the second one would have an invalid version but the changes are not affecting modified attributes so they can be applied safely

The version parameter is considered valid if it contains the current version for the element, it will be incremented automatically if the modification is successful.

1.3. Pagination

By default the API will always return paginated results and includes the following headers in the response:

  • x-paginated: boolean indicating if pagination is being used for the request

  • x-paginated-by: number of results per page

  • x-pagination-count: total number of results

  • x-pagination-current: current page

  • x-pagination-next: next results

  • x-pagination-prev: previous results

Disabling pagination can be accomplished by setting an extra http header:

x-disable-pagination: True

1.4. Internationalization

The API returns some content translated, you can specify the language with an extra http header:

Accept-Language: {LanguageId}

The LanguageId can be chosen from the value list of available languages. You can get them using the locales API.

1.5. Throttling

If the api is configured with throttling you have to take care on responses with 429 (Too many requests) status code, that mean you reach the throttling limit.

1.6. Read only fields

All the fields ending in _extra_info (assigned_to_extra_info, is_private_extra_info, owner_extra_info, project_extra_info, status_extra_info, status_extra_info, user_story_extra_info…​) are read only fields

2. Endpoints Summary

2.1. Auth

URL Method Functionality

/api/v1/auth

POST

Login

/api/v1/auth/register

POST

Register user

2.2. Applications

URL Method Functionality

/api/v1/applications/{applicationId}

GET

Get application

/api/v1/applications/{applicationId}/token

GET

Get application token

2.3. Application Tokens

URL Method Functionality

/api/v1/application-tokens

GET

List application tokens

/api/v1/application-tokens/{applicationTokenId}

GET

Get application token

/api/v1/application-tokens/{applicationTokenId}

DELETE

Delete application token

/api/v1/application-tokens/authorize

POST

Authorize application token

/api/v1/application-tokens/validate

POST

Validate application token

2.4. Resolver

URL Method Functionality

/api/v1/resolver

GET

Resolve references and slugs

2.5. Searches

URL Method Functionality

/api/v1/search

GET

Search in a project

2.6. User storage

URL Method Functionality

/api/v1/user-storage

GET

List user storage data

/api/v1/user-storage

POST

Create user storage data

/api/v1/user-storage/{key}

GET

Get user storage data

/api/v1/user-storage/{key}

PUT

Modify user storage data

/api/v1/user-storage/{key}

PATCH

Modify partially an user storage data

/api/v1/user-storage/{key}

DELETE

Delete user storage data

2.7. Project templates

URL Method Functionality

/api/v1/project-templates

GET

List project templates

/api/v1/project-templates

POST

Create project template

/api/v1/project-templates/{projectTemplateId}

GET

Get project template

/api/v1/project-templates/{projectTemplateId}

PUT

Modify project template

/api/v1/project-templates/{projectTemplateId}

PATCH

Modify partially an project template

/api/v1/project-templates/{projectTemplateId}

DELETE

Delete an project template

2.8. Projects

URL Method Functionality

/api/v1/projects

GET

List projects

/api/v1/projects

POST

Create project

/api/v1/projects/{projectId}

GET

Get project

/api/v1/projects/by_slug?slug={projectSlug}

GET

Get project

/api/v1/projects/{projectId}

PUT

Modify project

/api/v1/projects/{projectId}

PATCH

Modify partially a project

/api/v1/projects/{projectId}

DELETE

Delete a project

/api/v1/projects/bulk_update_order

POST

Update projects order for logged in user

/api/v1/projects/{projectId}/modules

GET

Get project modules configuration

/api/v1/projects/{projectId}/modules

PATCH

Modify partially a project modules configuration

/api/v1/projects/{projectId}/stats

GET

Get project stats

/api/v1/projects/{projectId}/issues_stats

GET

Get project issue stats

/api/v1/projects/{projectId}/tags_colors

GET

Get project tags colors

/api/v1/projects/{projectId}/create_tag

POST

Create project tag

/api/v1/projects/{projectId}/edit_tag

POST

Edit project tag

/api/v1/projects/{projectId}/delete_tag

POST

Delete project tag

/api/v1/projects/{projectId}/mix_tags

POST

Mix project tags

/api/v1/projects/{projectId}/like

POST

Like a project

/api/v1/projects/{projectId}/unlike

POST

Unlike a project

/api/v1/projects/{projectId}/fans

GET

Get project fans

/api/v1/projects/{projectId}/watch

POST

Watch a project

/api/v1/projects/{projectId}/unwatch

POST

Unwatch a project

/api/v1/projects/{projectId}/watchers

GET

Get project watchers

/api/v1/projects/{projectId}/create_template

POST

Create project template

/api/v1/projects/{projectId}/leave

POST

Leave project

/api/v1/projects/{projectId}/change_logo

POST

Change logo

/api/v1/projects/{projectId}/remove_logo

POST

Remove logo

/api/v1/projects/{projectId}/transfer_validate_token

POST

Transfer validate token

/api/v1/projects/{projectId}/transfer_request

POST

Transfer request

/api/v1/projects/{projectId}/transfer_start

POST

Transfer start

/api/v1/projects/{projectId}/transfer_accept

POST

Transfer accept

/api/v1/projects/{projectId}/transfer_reject

POST

Transfer reject

/api/v1/projects/{projectId}/duplicate

POST

Duplicate project

2.9. Memberships/Invitations

URL Method Functionality

/api/v1/memberships

GET

List memberships

/api/v1/memberships

POST

Create membership

/api/v1/memberships/bulk_create

POST

Create a bulk of memberships

/api/v1/memberships/{membershipId}

GET

Get membership

/api/v1/memberships/{membershipId}

PUT

Modify membership

/api/v1/memberships/{membershipId}

PATCH

Modify partially a membership

/api/v1/memberships/{membershipId}

DELETE

Delete a membership

/api/v1/memberships/{membershipId}/resend_invitation

POST

Resend invitation

/api/v1/invitations/{invitationUuid}

POST

Get invitation by anonymous user

2.10. Milestones

URL Method Functionality

/api/v1/milestones

GET

List milestones

/api/v1/milestones

POST

Create milestone

/api/v1/milestones/{milestoneId}

GET

Get milestone

/api/v1/milestones/{milestoneId}

PUT

Modify milestone

/api/v1/milestones/{milestoneId}

PATCH

Modify partially a milestone

/api/v1/milestones/{milestoneId}

DELETE

Delete a milestone

/api/v1/milestones/{milestoneId}/stats

GET

Get a milestone stats

/api/v1/milestones/{milestoneId}/watch

POST

Watch a milestone

/api/v1/milestones/{milestoneId}/unwatch

POST

Stop watching a milestone

/api/v1/milestones/{milestoneId}/watchers

GET

Get milestone watchers

2.11. Epics

URL Method Functionality

/api/v1/epics

GET

List epics

/api/v1/epics

POST

Create epic

/api/v1/epics/{epicId}

GET

Get epic

/api/v1/epics/by_ref?ref={epicRef}&project={projectId}

GET

Get epic

/api/v1/epics/{epicId}

PUT

Modify epic

/api/v1/epics/{epicId}

PATCH

Modify partially an epic

/api/v1/epics/{epicId}

DELETE

Delete an epic

/api/v1/epics/{epicId}/related_userstories

GET

List epic related userstories

/api/v1/epics/{epicId}/related_userstories

POST

Create epic related user story

/api/v1/epics/{epicId}/related_userstories/{userStoryId}

GET

Get epic related userstory

/api/v1/epics/{epicId}/related_userstories/{userStoryId}

PUT

Modify epic related user story

/api/v1/epics/{epicId}/related_userstories/{userStoryId}

PATCH

Modify partially an epic related user story

/api/v1/epics/{epicId}/related_userstories/{userStoryId}

DELETE

Delete an epic related user story

/api/v1/epics/{epicId}/related_userstories/bulk_create

POST

Create epic related user stories on bulk mode

/api/v1/epics/bulk_create

POST

Create epics on bulk mode

/api/v1/epics/filters_data?project={projectId}

GET

Get filters data

/api/v1/epics/{epicId}/upvote

POST

Add star to an epic

/api/v1/epics/{epicId}/downvote

POST

Remove star from epic

/api/v1/epics/{epicId}/voters

GET

Get epic voters

/api/v1/epics/{epicId}/watch

POST

Watch an epic

/api/v1/epics/{epicId}/unwatch

POST

Unwatch an epic

/api/v1/epics/{epicId}/watchers

GET

Get epic watchers

/api/v1/epics/attachments

GET

List epic attachments

/api/v1/epics/attachments

POST

Create epic attachments

/api/v1/epics/attachments/{epicAttachmentId}

GET

Get epic attachments

/api/v1/epics/attachments/{epicAttachmentId}

PUT

Modify epic attachments

/api/v1/epics/attachments/{epicAttachmentId}

PATCH

Modify partially an epic attachments

/api/v1/epics/attachments/{epicAttachmentId}

DELETE

Delete an epic attachments

2.12. Epic status

URL Method Functionality

/api/v1/epic-statuses

GET

List epic statuses

/api/v1/epic-statuses

POST

Create epic status

/api/v1/epic-statuses/{epicStatusId}

GET

Get epic status

/api/v1/epic-statuses/{epicStatusId}

PUT

Modify epic status

/api/v1/epic-statuses/{epicStatusId}

PATCH

Modify partially an epic status

/api/v1/epic-statuses/{epicStatusId}

DELETE

Delete an epic status

/api/v1/epic-statuses/bulk_update_order

POST

Update epic statuses order in bulk mode

2.13. Epic custom attribute

URL Method Functionality

/api/v1/epic-custom-attributes

GET

List epic custom attributes

/api/v1/epic-custom-attributes

POST

Create epic custom attribute

/api/v1/epic-custom-attributes/{epicCustomAttributeId}

GET

Get epic custom attribute

/api/v1/epic-custom-attributes/{epicCustomAttributeId}

PUT

Modify epic custom attribute

/api/v1/epic-custom-attributes/{epicCustomAttributeId}

PATCH

Modify partially an epic custom attribute

/api/v1/epic-custom-attributes/{epicCustomAttributeId}

DELETE

Delete an epic custom attribute

/api/v1/epic-custom-attributes/bulk_update_order

POST

Update epic custom attributes order in bulk mode

2.14. Epic custom attributes values

URL Method Functionality

/api/v1/epics/custom-attributes-values/{epicId}

GET

Get epic custom attributes values

/api/v1/epics/custom-attributes-values/{epicId}

PUT

Modify epic custom attributes values

/api/v1/epics/custom-attributes-values/{epicId}

PATCH

Modify partially an epic custom attributes values

2.15. User stories

URL Method Functionality

/api/v1/userstories

GET

List user stories

/api/v1/userstories

POST

Create user story

/api/v1/userstories/{userStoryId}

GET

Get user story

/api/v1/userstories/by_ref?ref={userStoryRef}&project={userStoryId}

GET

Get user story

/api/v1/userstories/{userStoryId}

PUT

Modify user story

/api/v1/userstories/{userStoryId}

PATCH

Modify partially a user story

/api/v1/userstories/{userStoryId}

DELETE

Delete a user story

/api/v1/userstories/bulk_create

POST

Create user stories un bulk mode

/api/v1/userstories/bulk_update_backlog_order

POST

Update user stories order for backlog in bulk mode

/api/v1/userstories/bulk_update_kanban_order

POST

Update user stories order for kanban in bulk mode

/api/v1/userstories/bulk_update_sprint_order

POST

Update user stories order for sprint in bulk mode

/api/v1/userstories/bulk_update_milestone

POST

Update user stories sprint in bulk mode

/api/v1/userstories/filters_data?project={projectId}

GET

Get filters data

/api/v1/userstories/{userStoryId}/upvote

POST

Add star to a user story

/api/v1/userstories/{userStoryId}/downvote

POST

Remove star from user story

/api/v1/userstories/{userStoryId}/voters

GET

Get user story voters

/api/v1/userstories/{userStoryId}/watch

POST

Watch a user story

/api/v1/userstories/{userStoryId}/unwatch

POST

Unwatch a user story

/api/v1/userstories/{userStoryId}/watchers

GET

Get user story watchers

/api/v1/userstories/attachments

GET

List user story attachments

/api/v1/userstories/attachments

POST

Create user story attachments

/api/v1/userstories/attachments/{userStoryAttachmentId}

GET

Get user story attachments

/api/v1/userstories/attachments/{userStoryAttachmentId}

PUT

Modify user story attachments

/api/v1/userstories/attachments/{userStoryAttachmentId}

PATCH

Modify partially a user story attachments

/api/v1/userstories/attachments/{userStoryAttachmentId}

DELETE

Delete a user story attachments

2.16. User story status

URL Method Functionality

/api/v1/userstory-statuses

GET

List user story status

/api/v1/userstory-statuses

POST

Create user story status

/api/v1/userstory-statuses/{userStoryStatusId}

GET

Get user story status

/api/v1/userstory-statuses/{userStoryStatusId}

PUT

Modify user story status

/api/v1/userstory-statuses/{userStoryStatusId}

PATCH

Modify partially a user story status

/api/v1/userstory-statuses/{userStoryStatusId}

DELETE

Delete a user story status

/api/v1/userstory-statuses/bulk_update_order

POST

Update user story statuses order in bulk mode

2.17. Points

URL Method Functionality

/api/v1/points

GET

List points

/api/v1/points

POST

Create point

/api/v1/points/{pointId}

GET

Get point

/api/v1/points/{pointId}

PUT

Modify point

/api/v1/points/{pointId}

PATCH

Modify partially a point

/api/v1/points/{pointId}

DELETE

Delete a point

/api/v1/points/bulk_update_order

POST

Update points order in bulk mode

2.18. User story custom attribute

URL Method Functionality

/api/v1/userstory-custom-attributes

GET

List user story custom attributes

/api/v1/userstory-custom-attributes

POST

Create user story custom attribute

/api/v1/userstory-custom-attributes/{userStoryCustomAttributeId}

GET

Get user story custom attribute

/api/v1/userstory-custom-attributes/{userStoryCustomAttributeId}

PUT

Modify user story custom attribute

/api/v1/userstory-custom-attributes/{userStoryCustomAttributeId}

PATCH

Modify partially a user story custom attribute

/api/v1/userstory-custom-attributes/{userStoryCustomAttributeId}

DELETE

Delete a user story custom attribute

/api/v1/userstory-custom-attributes/bulk_update_order

POST

Update user story custom attributes order in bulk mode

2.19. User story custom attributes values

URL Method Functionality

/api/v1/userstories/custom-attributes-values/{userStoryId}

GET

Get user story custom attributes values

/api/v1/userstories/custom-attributes-values/{userStoryId}

PUT

Modify user story custom attributes values

/api/v1/userstories/custom-attributes-values/{userStoryId}

PATCH

Modify partially a user story custom attributes values

2.20. Tasks

URL Method Functionality

/api/v1/tasks

GET

List tasks

/api/v1/tasks

POST

Create task

/api/v1/tasks/{taskId}

GET

Get task

/api/v1/tasks/by_ref?ref={taskRef}&project={projectId}

GET

Get task

/api/v1/tasks/{taskId}

PUT

Modify task

/api/v1/tasks/{taskId}

PATCH

Modify partially a task

/api/v1/tasks/{taskId}

DELETE

Delete a task

/api/v1/tasks/bulk_create

POST

Create tasks on bulk mode

/api/v1/tasks/filters_data?project={projectId}

GET

Get filters data

/api/v1/tasks/{taskId}/upvote

POST

Add star to a task

/api/v1/tasks/{taskId}/downvote

POST

Remove star from task

/api/v1/tasks/{taskId}/voters

GET

Get task voters

/api/v1/tasks/{taskId}/watch

POST

Watch a task

/api/v1/tasks/{taskId}/unwatch

POST

Unwatch a task

/api/v1/tasks/{taskId}/watchers

GET

Get task watchers

/api/v1/tasks/attachments

GET

List task attachments

/api/v1/tasks/attachments

POST

Create task attachments

/api/v1/tasks/attachments/{taskAttachmentId}

GET

Get task attachments

/api/v1/tasks/attachments/{taskAttachmentId}

PUT

Modify task attachments

/api/v1/tasks/attachments/{taskAttachmentId}

PATCH

Modify partially a task attachments

/api/v1/tasks/attachments/{taskAttachmentId}

DELETE

Delete a task attachments

2.21. Task status

URL Method Functionality

/api/v1/task-statuses

GET

List task statuses

/api/v1/task-statuses

POST

Create task status

/api/v1/task-statuses/{taskStatusId}

GET

Get task status

/api/v1/task-statuses/{taskStatusId}

PUT

Modify task status

/api/v1/task-statuses/{taskStatusId}

PATCH

Modify partially a task status

/api/v1/task-statuses/{taskStatusId}

DELETE

Delete a task status

/api/v1/task-statuses/bulk_update_order

POST

Update task statuses order in bulk mode

2.22. Task custom attribute

URL Method Functionality

/api/v1/task-custom-attributes

GET

List task custom attributes

/api/v1/task-custom-attributes

POST

Create task custom attribute

/api/v1/task-custom-attributes/{taskCustomAttributeId}

GET

Get task custom attribute

/api/v1/task-custom-attributes/{taskCustomAttributeId}

PUT

Modify task custom attribute

/api/v1/task-custom-attributes/{taskCustomAttributeId}

PATCH

Modify partially a task custom attribute

/api/v1/task-custom-attributes/{taskCustomAttributeId}

DELETE

Delete a task custom attribute

/api/v1/task-custom-attributes/bulk_update_order

POST

Update task custom attributes order in bulk mode

2.23. Task custom attributes values

URL Method Functionality

/api/v1/tasks/custom-attributes-values/{taskId}

GET

Get task custom attributes values

/api/v1/tasks/custom-attributes-values/{taskId}

PUT

Modify task custom attributes values

/api/v1/tasks/custom-attributes-values/{taskId}

PATCH

Modify partially a task custom attributes values

2.24. Issues

URL Method Functionality

/api/v1/issues

GET

List issues

/api/v1/issues

POST

Create issue

/api/v1/issues/{issueId}

GET

Get issue

/api/v1/issues/by_ref?ref={issueRef}&project={projectId}

GET

Get issue

/api/v1/issues/{issueId}

PUT

Modify issue

/api/v1/issues/{issueId}

PATCH

Modify partially an issue

/api/v1/issues/{issueId}

DELETE

Delete an issue

/api/v1/issues/bulk_create

POST

Create issues un bulk mode

/api/v1/issues/filters_data?project={projectId}

GET

Get filters data

/api/v1/issues/{issueId}/upvote

POST

Add a vote to an issue

/api/v1/issues/{issueId}/downvote

POST

Remove your vote to an issue

/api/v1/issues/{issueId}/voters

GET

Get issue voters list

/api/v1/issues/{issueId}/watch

POST

Watch an issue

/api/v1/issues/{issueId}/unwatch

POST

Unwatch an issue

/api/v1/issues/{issueId}/watchers

GET

Get issue watchers

/api/v1/issues/attachments

GET

List issue attachments

/api/v1/issues/attachments

POST

Create issue attachments

/api/v1/issues/attachments/{issueAttachmentId}

GET

Get issue attachments

/api/v1/issues/attachments/{issueAttachmentId}

PUT

Modify issue attachments

/api/v1/issues/attachments/{issueAttachmentId}

PATCH

Modify partially an issue attachments

/api/v1/issues/attachments/{issueAttachmentId}

DELETE

Delete an issue attachments

2.25. Issue status

URL Method Functionality

/api/v1/issue-statuses

GET

List issue statuses

/api/v1/issue-statuses

POST

Create issue status

/api/v1/issue-statuses/{issueStatusId}

GET

Get issue status

/api/v1/issue-statuses/{issueStatusId}

PUT

Modify issue status

/api/v1/issue-statuses/{issueStatusId}

PATCH

Modify partially a issue status

/api/v1/issue-statuses/{issueStatusId}

DELETE

Delete a issue status

/api/v1/issue-statuses/bulk_update_order

POST

Update issue statuses order in bulk mode

2.26. Issue types

URL Method Functionality

/api/v1/issue-types

GET

List issue types

/api/v1/issue-types

POST

Create issue type

/api/v1/issue-types/{issueTypeId}

GET

Get issue type

/api/v1/issue-types/{issueTypeId}

PUT

Modify issue type

/api/v1/issue-types/{issueTypeId}

PATCH

Modify partially a issue type

/api/v1/issue-types/{issueTypeId}

DELETE

Delete a issue type

/api/v1/issue-types/bulk_update_order

POST

Update issue types order in bulk mode

2.27. Priorities

URL Method Functionality

/api/v1/priorities

GET

List priorities

/api/v1/priorities

POST

Create priority

/api/v1/priorities/{priorityId}

GET

Get priority

/api/v1/priorities/{priorityId}

PUT

Modify priority

/api/v1/priorities/{priorityId}

PATCH

Modify partially a priority

/api/v1/priorities/{priorityId}

DELETE

Delete a priority

/api/v1/priorities/bulk_update_order

POST

Update priorities order in bulk mode

2.28. Severities

URL Method Functionality

/api/v1/severities

GET

List severities

/api/v1/severities

POST

Create severity

/api/v1/severities/{severityId}

GET

Get severity

/api/v1/severities/{severityId}

PUT

Modify severity

/api/v1/severities/{severityId}

PATCH

Modify partially a severity

/api/v1/severities/{severityId}

DELETE

Delete a severity

/api/v1/severities/bulk_update_order

POST

Update severities order in bulk mode

2.29. Issue custom attribute

URL Method Functionality

/api/v1/issue-custom-attributes

GET

List issue custom attributes

/api/v1/issue-custom-attributes

POST

Create issue custom attribute

/api/v1/issue-custom-attributes/{issueCustomAttributeId}

GET

Get issue custom attribute

/api/v1/issue-custom-attributes/{issueCustomAttributeId}

PUT

Modify issue custom attribute

/api/v1/issue-custom-attributes/{issueCustomAttributeId}

PATCH

Modify partially a issue custom attribute

/api/v1/issue-custom-attributes/{issueCustomAttributeId}

DELETE

Delete a issue custom attribute

/api/v1/issue-custom-attributes/bulk_update_order

POST

Update issue custom attributes order in bulk mode

2.30. Issue custom attributes values

URL Method Functionality

/api/v1/issues/custom-attributes-values/{issueId}

GET

Get issue custom attributes values

/api/v1/issues/custom-attributes-values/{issueId}

PUT

Modify issue custom attributes values

/api/v1/issues/custom-attributes-values/{issueId}

PATCH

Modify partially a issue custom attributes values

2.31. Wiki pages

URL Method Functionality

/api/v1/wiki

GET

List wiki pages

/api/v1/wiki

POST

Create wiki page

/api/v1/wiki/{wikiId}

GET

Get wiki page

/api/v1/wiki/by_slug?slug={wikiPageSlug}&project={projectId}

GET

Get wiki page

/api/v1/wiki/{wikiPageId}

PUT

Modify wiki page

/api/v1/wiki/{wikiPageId}

PATCH

Modify partially an wiki page

/api/v1/wiki/{wikiPageId}

DELETE

Delete an wiki page

/api/v1/wiki/{wikiPageId}/watch

POST

Watch a wiki page

/api/v1/wiki/{wikiPageId}/unwatch

POST

Stop watching a wiki page

/api/v1/wiki/{wikiPageId}/watchers

GET

Get wiki page watchers

/api/v1/wiki/attachments

GET

List wiki page attachments

/api/v1/wiki/attachments

POST

Create wiki page attachments

/api/v1/wiki/attachments/{wikiPageAttachmentId}

GET

Get wiki page attachments

/api/v1/wiki/attachments/{wikiPageAttachmentId}

PUT

Modify wiki page attachments

/api/v1/wiki/attachments/{wikiPageAttachmentId}

PATCH

Modify partially an wiki page attachments

/api/v1/wiki/attachments/{wikiPageAttachmentId}

DELETE

Delete an wiki page attachments

URL Method Functionality

/api/v1/wiki-links

GET

List wiki links

/api/v1/wiki-links

POST

Create wiki link

/api/v1/wiki-links/{wikiLinkId}

GET

Get wiki link

/api/v1/wiki-links/{wikiLinkId}

PUT

Modify wiki link

/api/v1/wiki-links/{wikiLinkId}

PATCH

Modify partially an wiki link

/api/v1/wiki-links/{wikiLinkId}

DELETE

Delete an wiki link

2.33. History

URL Method Functionality

/api/v1/history/userstory/{usId}

GET

Get user story history

/api/v1/history/userstory/{usId}/commentVersions?id={commentId}

GET

Get user story comment versions

/api/v1/history/userstory/{usId}/edit_comment?id={commentId}

POST

Edit user story comment

/api/v1/history/userstory/{usId}/delete_comment?id={commentId}

POST

Delete user story comment

/api/v1/history/userstory/{usId}/undelete_comment?id={commentId}

POST

Undelete user story comment

/api/v1/history/issue/{issueId}

GET

Get issue history

/api/v1/history/issue/{issueId}/commentVersions?id={commentId}

POST

Get issue comment versions

/api/v1/history/issue/{issueId}/edit_comment?id={commentId}

POST

Edit issue comment

/api/v1/history/issue/{issueId}/delete_comment?id={commentId}

POST

Delete issue comment

/api/v1/history/issue/{issueId}/undelete_comment?id={commentId}

POST

Undelete issue comment

/api/v1/history/task/<taskId>

GET

Get task history

/api/v1/history/task/{taskId}/commentVersions?id={commentId}

POST

Get task comment versions

/api/v1/history/task/{taskId}/edit_comment?id={commentId}

POST

Edit task comment

/api/v1/history/task/{taskId}/delete_comment?id={commentId}

POST

Delete task comment

/api/v1/history/task/{taskId}/undelete_comment?id={commentId}

POST

Undelete task comment

/api/v1/history/wiki/{wikiId}

GET

Get wiki history

/api/v1/history/wiki/{wikiId}/commentVersions?id={commentId}

POST

Get wiki comment versions

/api/v1/history/wiki/{wikiId}/edit_comment?id={commentId}

POST

Edit wiki comment

/api/v1/history/wiki/{wikiId}/delete_comment?id={commentId}

POST

Delete wiki comment

/api/v1/history/wiki/{wikiId}/undelete_comment?id={commentId}

POST

Undelete wiki comment

2.34. Users

URL Method Functionality

/api/v1/users

GET

List users

/api/v1/users/{userId}

GET

Get user

/api/v1/users/me

GET

Get myself

/api/v1/users/{userId}

PUT

Modify user

/api/v1/users/{userId}

PATCH

Modify partially a user

/api/v1/users/{userId}/stats

GET

Get user stats

/api/v1/users/{userId}/watched

GET

Get user watched content

/api/v1/users/{userId}/liked

GET

Get user liked content

/api/v1/users/{userId}/voted

GET

Get user voted content

/api/v1/users/{userId}

DELETE

Delete a user

/api/v1/users/{userId}/contacts

GET

Get user contacts

/api/v1/users/cancel

POST

Cancel user

/api/v1/users/change_avatar

POST

Change avatar

/api/v1/users/remove_avatar

POST

Remove avatar

/api/v1/users/change_email

POST

Change email

/api/v1/users/change_password

POST

Change password

/api/v1/users/password_recovery

POST

Password recovery

/api/v1/users/change_password_from_recovery

POST

Change password from recovery

2.35. Notify policies

URL Method Functionality

/api/v1/notify-policies

GET

List notify policies

/api/v1/notify-policies/{policyId}

GET

Get notify policy

/api/v1/notify-policies/{policyId}

PUT

Modify notify policy

/api/v1/notify-policies/{policyId}

PATCH

Modify partially a notify policy

2.36. Contact

URL Method Functionality

/api/v1/contact

POST

Contact project

2.37. Feedback

URL Method Functionality

/api/v1/feedback

POST

Send feedback

2.38. Export/Import

URL Method Functionality

/api/v1/exporter/{projectId}

GET

Export a project dump

/api/v1/importer/load_dump

POST

Import a project dump

2.39. Webhooks

URL Method Functionality

/api/v1/webhooks

GET

List webhooks

/api/v1/webhooks

POST

Create webhook

/api/v1/webhooks/{webhookId}

GET

Get webhook

/api/v1/webhooks/{webhookId}

PUT

Modify webhook

/api/v1/webhooks/{webhookId}

PATCH

Modify partially an webhook

/api/v1/webhooks/{webhookId}

DELETE

Delete an webhook

/api/v1/webhooks/{webhookId}/test

POST

Test webhook

/api/v1/webhooklogs

GET

List webhooks logs

/api/v1/webhooklogs/{webhookLogId}

GET

Get webhook log

/api/v1/webhooklogs/{webhookLogId}/resend

POST

Resend webhook log request

2.40. Timelines

URL Method Functionality

/api/v1/timeline/user/{userId}

GET

List user timeline

/api/v1/timeline/profile/{userId}

GET

List profile timeline

/api/v1/timeline/project/{projectId}

GET

List project timeline

2.41. Locales

URL Method Functionality

/api/v1/locales

GET

List locales

2.42. Stats

URL Method Functionality

/api/v1/stats/discover

GET

Get discover stats

/api/v1/stats/system

GET

Get system stats

2.43. Importers

URL Method Functionality

/api/v1/importers/trello/auth_url

GET

Get the authorization url

/api/v1/importers/trello/authorize

POST

Obtain the authorization token

/api/v1/importers/trello/list_projects

POST

List the Trello boards

/api/v1/importers/trello/list_users

POST

List the users related to a Trello board

/api/v1/importers/trello/import_project

POST

Import the Trello project

/api/v1/importers/github/auth_url

GET

Get the authorization url

/api/v1/importers/github/authorize

POST

Obtain the authorization token

/api/v1/importers/github/list_projects

POST

List the Github boards

/api/v1/importers/github/list_users

POST

List the users related to a Github board

/api/v1/importers/github/import_project

POST

Import the Github project

/api/v1/importers/jira/auth_url

GET

Get the authorization url

/api/v1/importers/jira/authorize

POST

Obtain the authorization token

/api/v1/importers/jira/list_projects

POST

List the Jira boards

/api/v1/importers/jira/list_users

POST

List the users related to a Jira board

/api/v1/importers/jira/import_project

POST

Import the Jira project

/api/v1/importers/asana/auth_url

GET

Get the authorization url

/api/v1/importers/asana/authorize

POST

Obtain the authorization token

/api/v1/importers/asana/list_projects

POST

List the Asana boards

/api/v1/importers/asana/list_users

POST

List the users related to a Asana board

/api/v1/importers/asana/import_project

POST

Import the Asana project

3. Auth

3.1. Normal login

To login a user send a POST request containing the following data:

  • type with value "normal"

  • username (required): this field also supports the user email

  • password (required)

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "password": "password",
        "type": "normal",
        "username": "test-username"
    }' \
-s http://localhost:8000/api/v1/auth

When the login is successful, the HTTP response is a 200 OK and the response body is a JSON user auth detail object

3.2. Github login

To login a user via GitHub send a POST request containing the following data:

  • type with value "github"

  • code (required): your github authentication code

  • token: generated when creating a project’s membership (for accept invitations to projects)

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{
          "type": "github",
          "code": "'${GITHUB_CODE}'"
      }' \
  https://api.taiga.io/api/v1/auth

When the login is successful, the HTTP response is a 200 OK and the response body is a JSON user auth detail object

Note
Get GitHub autorized code

To get the GitHub code you have to follow the first step Redirect users to request GitHub access described in GitHub Documentation for Developers - API - OAuth - Web Application Flow.

Taiga needs privileges to get the user email from Github so you have to use the scope user:email.

3.3. Public registry

To register a user without invitation send a POST request containing the following data:

  • type with value "public"

  • username (required)

  • password (required)

  • email (required)

  • full_name (required)

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "email": "test-register2@email.com",
        "full_name": "test",
        "password": "password",
        "type": "public",
        "username": "test-username2"
    }' \
-s http://localhost:8000/api/v1/auth/register

When the registration is successful, the HTTP response is a 201 CREATED and the response body is a JSON user auth detail object

3.4. Private registry

To add a user into a project via invitation send a POST request containing the following data:

  • type with value "private"

  • existing (required): indicates if the user is member or not

  • token (required): generated when creating a project’s membership

  • username (required)

  • password (required)

  • email (required only if the user doesn’t exist in the platform)

  • full_name (required only if the user doesn’t exist in the platform)

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "email": "test-register@email.com",
        "existing": false,
        "full_name": "test",
        "password": "password",
        "token": "00000000-0000-0000-0000-000000000000",
        "type": "private",
        "username": "test-username"
    }' \
-s http://localhost:8000/api/v1/auth/register

When the registration is successful, the HTTP response is a 201 CREATED and the response body is a JSON user auth detail object

4. Applications

4.1. Get

To get an application send a GET request specifying the application id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/applications/00000000-0000-0000-0000-000000000000

The HTTP response is a 200 OK and the response body is a JSON application object

4.2. Get token

To get an application token send a GET request specifying the application id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/applications/00000000-0000-0000-0000-000000000000/token

The HTTP response is a 200 OK and the response body is a JSON application token object

5. Application tokens

5.1. List

To list the application tokens for an authenticated user send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/application-tokens

The HTTP response is a 200 OK and the response body is a JSON list of application token objects

5.2. Get

To get an application token send a GET request specifying the application token id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/application-tokens/1

The HTTP response is a 200 OK and the response body is a JSON application token object

5.3. Delete

To delete application tokens send a DELETE specifying the application token id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/application-tokens/2

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

5.4. Authorize

To request an authorization code send a POST request with the following data:

  • application: the application id for the requested token

  • state: an unguessable random string. It is used to protect against cross-site request forgery attacks. The API will include this value when the validation process is completed so the final app can verify it matches the original one.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "application": "00000000-0000-0000-0000-000000000000",
        "state": "random-state"
    }' \
-s http://localhost:8000/api/v1/application-tokens/authorize

When the creation is successful, the HTTP response is a 200 and the response body is a JSON authorization code object

5.5. Validate

To validate an authorization code send a POST request with the following data:

  • application: the application id for the requested token

  • state: an unguessable random string. It is used to protect against cross-site request forgery attacks. The API will include this value when the validation process is completed so the final app can verify it matches the original one.

  • auth_code: the authorization code received on previous the steps.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "application": "00000000-0000-0000-0000-000000000000",
        "auth_code": "00000000-0000-0000-0000-000000000002",
        "state": "random-state"
    }' \
-s http://localhost:8000/api/v1/application-tokens/validate

When the creation is successful, the HTTP response is a 200 and the response body is a JSON cyphered token object

6. Resolver

6.1. Projects

To resolve the id of a project send a GET request with the following parameters:

  • project (required): the project slug trying to be resolved

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/resolver?project=project-0

The response body is a JSON object containing the project id

{
    "project": 1
}

6.2. User stories

To resolve the id of a user story send a GET request with the following parameters:

  • project (required): the project slug trying to be resolved

  • us (required): the user story ref trying to be resolved

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/resolver?project=project-0\&us=1

The response body is a JSON object containing the project and the user story ids

{
    "project": 1,
    "us": 1
}

6.3. Issues

To resolve the id of an issue send a GET request with the following parameters:

  • project (required): the project slug trying to be resolved

  • issue (required): the issue ref trying to be resolved

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/resolver?project=project-0\&issue=62

The response body is a JSON object containing the project and the issue ids

{
    "issue": 21,
    "project": 1
}

6.4. Tasks

To resolve the id of a task send a GET request with the following parameters:

  • project (required): the project slug trying to be resolved

  • task (required): the task ref trying to be resolved

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/resolver?project=project-0\&task=2

The response body is a JSON object containing the project and the task ids

{
    "project": 1,
    "task": 1
}

6.5. Milestones

To resolve the id of a milestone send a GET request with the following parameters:

  • project (required): the project slug trying to be resolved

  • milestone (required): the milestone slug trying to be resolved

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/resolver?project=project-0\&milestone=sprint-2016-9-24

The response body is a JSON object containing the project and the milestone ids

{
    "milestone": 1,
    "project": 1
}

6.6. Wiki pages

To resolve the id of a wiki page send a GET request with the following parameters:

  • project (required): the project slug trying to be resolved

  • wikipage(required): the wiki-page slug trying to be resolved

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/resolver?project=project-0\&wikipage=home

The response body is a JSON object containing the project and the wiki page ids

{
    "project": 1,
    "wikipage": 1
}

6.7. Multiple resolution

To resolve the multiple ids you can send a GET mixing parameters from the previous examples:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/resolver?project=project-0\&task=2\&us=1\&wikipage=home

The response body is a JSON object containing the project and the task ids

{
    "project": 1,
    "task": 1,
    "us": 1,
    "wikipage": 1
}

6.8. By ref value

To resolve an object if we don’t know its type we have to use ref GET parameter:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/resolver?project=project-0\&ref=2

The response body is a JSON object containing the project and the story, task or issue id.

{
    "project": 1,
    "task": 1
}
Important
Incompatibility between GET params

Be careful because ref is inconpatible with us, task and issue parameters in requests with multiple resolutions.

7. Searches

To search send a GET request with the following get parameters:

  • project (required): project id

  • text: string

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/search?project=1\&text=quas

The HTTP response is a 200 OK and the response body is a JSON list of search results detail objects

8. User storage

8.1. List

To list user storage data send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/user-storage

The HTTP response is a 200 OK and the response body is a JSON list of user storage data objects

8.2. Create

To create user storage data send a POST request with the following data:

  • key: string

  • value: string

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "key": "favorite-forest",
        "value": "Taiga"
    }' \
-s http://localhost:8000/api/v1/user-storage

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON user storage data object

8.3. Get

To get a user storage data send a GET request specifying the user storage key in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/user-storage/favorite-forest

The HTTP response is a 200 OK and the response body is a JSON user storage data object

8.4. Edit

To edit user storage data send a PUT or a PATCH specifying the user storage key in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "value": "Russian Taiga"
    }' \
-s http://localhost:8000/api/v1/user-storage/favorite-forest

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON user storage data object

8.5. Delete

To delete user storage data send a DELETE specifying the user storage key in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/user-storage/favorite-forest

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

9. Project templates

9.1. List

To list project templates send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/project-templates

The HTTP response is a 200 OK and the response body is a JSON list of project template detail objects

9.2. Create

To create project templates send a POST request with the following data:

  • name (required): string

  • slug: slug

  • description (required): string

  • default_owner_role (required):

  • is_backlog_activated: boolean

  • is_kanban_activated: boolean

  • is_wiki_activated: boolean

  • is_issues_activated: boolean

  • videoconferences: (talky|appear-in)

  • videoconferences_extra_data: string

  • default_options: a json with a list of objects with:

    • points: slug

    • us_status: slug

    • task_status: slug

    • issue_status: slug

    • issue_type: slug

    • priority: slug

    • severity: slug

  • us_statuses: a json with a list of objects with:

    • name: string

    • slug: slug

    • is_closed: boolean

    • color: #rgb color

    • wip_limit: integer or none

    • order: integer

  • points: a json with a list of objects with:

    • name: string

    • value: integer or none

    • order: integer

  • task_statuses: a json with a list of objects with:

    • name: string

    • slug: slug

    • is_closed: boolean

    • color: #rgb color

    • order: integer

  • issue_statuses: a json with a list of objects with:

    • name: string

    • slug: slug

    • is_closed: boolean

    • color: #rgb color

    • order: integer

  • issue_types: a json with a list of objects with:

    • name: string

    • color: #rgb color

    • order: integer

  • priorities: a json with a list of objects with:

    • name: string

    • color: #rgb color

    • order: integer

  • severities: a json with a list of objects with:

    • name: string

    • color: #rgb color

    • order: integer

  • roles: a json with a list of objects with:

    • name: string

    • slug: slug

    • permissions: list of permissions

    • order: integer

    • computable: boolean

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${ADMIN_AUTH_TOKEN}" \
-d '{
        "default_options": {
            "issue_status": "New",
            "issue_type": "Bug",
            "points": "?",
            "priority": "Normal",
            "severity": "Normal",
            "task_status": "New",
            "us_status": "New"
        },
        "default_owner_role": "product-owner",
        "description": "Sample description",
        "id": 2,
        "is_backlog_activated": false,
        "is_issues_activated": false,
        "is_kanban_activated": true,
        "is_wiki_activated": false,
        "issue_statuses": [
            {
                "color": "#999999",
                "is_closed": false,
                "name": "New",
                "order": 1
            },
            {
                "color": "#729fcf",
                "is_closed": false,
                "name": "In progress",
                "order": 2
            },
            {
                "color": "#f57900",
                "is_closed": true,
                "name": "Ready for test",
                "order": 3
            },
            {
                "color": "#4e9a06",
                "is_closed": true,
                "name": "Closed",
                "order": 4
            },
            {
                "color": "#cc0000",
                "is_closed": false,
                "name": "Needs Info",
                "order": 5
            },
            {
                "color": "#d3d7cf",
                "is_closed": true,
                "name": "Rejected",
                "order": 6
            },
            {
                "color": "#75507b",
                "is_closed": false,
                "name": "Postponed",
                "order": 7
            }
        ],
        "issue_types": [
            {
                "color": "#cc0000",
                "name": "Bug",
                "order": 1
            },
            {
                "color": "#729fcf",
                "name": "Question",
                "order": 2
            },
            {
                "color": "#4e9a06",
                "name": "Enhancement",
                "order": 3
            }
        ],
        "name": "New Template",
        "points": [
            {
                "name": "?",
                "order": 1,
                "value": null
            },
            {
                "name": "0",
                "order": 2,
                "value": 0.0
            },
            {
                "name": "1/2",
                "order": 3,
                "value": 0.5
            },
            {
                "name": "1",
                "order": 4,
                "value": 1.0
            },
            {
                "name": "2",
                "order": 5,
                "value": 2.0
            },
            {
                "name": "3",
                "order": 6,
                "value": 3.0
            },
            {
                "name": "5",
                "order": 7,
                "value": 5.0
            },
            {
                "name": "8",
                "order": 8,
                "value": 8.0
            },
            {
                "name": "10",
                "order": 9,
                "value": 10.0
            },
            {
                "name": "15",
                "order": 10,
                "value": 15.0
            },
            {
                "name": "20",
                "order": 11,
                "value": 20.0
            },
            {
                "name": "40",
                "order": 12,
                "value": 40.0
            }
        ],
        "priorities": [
            {
                "color": "#999999",
                "name": "Low",
                "order": 1
            },
            {
                "color": "#4e9a06",
                "name": "Normal",
                "order": 3
            },
            {
                "color": "#CC0000",
                "name": "High",
                "order": 5
            }
        ],
        "roles": [
            {
                "computable": true,
                "name": "UX",
                "order": 10,
                "permissions": [
                    "add_issue",
                    "modify_issue",
                    "comment_issue",
                    "delete_issue",
                    "view_issues",
                    "add_milestone",
                    "modify_milestone",
                    "delete_milestone",
                    "view_milestones",
                    "view_project",
                    "add_task",
                    "modify_task",
                    "comment_task",
                    "delete_task",
                    "view_tasks",
                    "add_us",
                    "modify_us",
                    "comment_us",
                    "delete_us",
                    "view_us",
                    "add_wiki_page",
                    "modify_wiki_page",
                    "comment_wiki_page",
                    "delete_wiki_page",
                    "view_wiki_pages",
                    "add_wiki_link",
                    "delete_wiki_link",
                    "view_wiki_links"
                ],
                "slug": "ux"
            },
            {
                "computable": true,
                "name": "Design",
                "order": 20,
                "permissions": [
                    "add_issue",
                    "modify_issue",
                    "comment_issue",
                    "delete_issue",
                    "view_issues",
                    "add_milestone",
                    "modify_milestone",
                    "delete_milestone",
                    "view_milestones",
                    "view_project",
                    "add_task",
                    "modify_task",
                    "comment_task",
                    "delete_task",
                    "view_tasks",
                    "add_us",
                    "modify_us",
                    "comment_us",
                    "delete_us",
                    "view_us",
                    "add_wiki_page",
                    "modify_wiki_page",
                    "comment_wiki_page",
                    "delete_wiki_page",
                    "view_wiki_pages",
                    "add_wiki_link",
                    "delete_wiki_link",
                    "view_wiki_links"
                ],
                "slug": "design"
            },
            {
                "computable": true,
                "name": "Front",
                "order": 30,
                "permissions": [
                    "add_issue",
                    "modify_issue",
                    "comment_issue",
                    "delete_issue",
                    "view_issues",
                    "add_milestone",
                    "modify_milestone",
                    "delete_milestone",
                    "view_milestones",
                    "view_project",
                    "add_task",
                    "modify_task",
                    "comment_task",
                    "delete_task",
                    "view_tasks",
                    "add_us",
                    "modify_us",
                    "comment_us",
                    "delete_us",
                    "view_us",
                    "add_wiki_page",
                    "modify_wiki_page",
                    "comment_wiki_page",
                    "delete_wiki_page",
                    "view_wiki_pages",
                    "add_wiki_link",
                    "delete_wiki_link",
                    "view_wiki_links"
                ],
                "slug": "front"
            },
            {
                "computable": true,
                "name": "Back",
                "order": 40,
                "permissions": [
                    "add_issue",
                    "modify_issue",
                    "comment_issue",
                    "delete_issue",
                    "view_issues",
                    "add_milestone",
                    "modify_milestone",
                    "delete_milestone",
                    "view_milestones",
                    "view_project",
                    "add_task",
                    "modify_task",
                    "comment_task",
                    "delete_task",
                    "view_tasks",
                    "add_us",
                    "modify_us",
                    "comment_us",
                    "delete_us",
                    "view_us",
                    "add_wiki_page",
                    "modify_wiki_page",
                    "comment_wiki_page",
                    "delete_wiki_page",
                    "view_wiki_pages",
                    "add_wiki_link",
                    "delete_wiki_link",
                    "view_wiki_links"
                ],
                "slug": "back"
            },
            {
                "computable": false,
                "name": "Product Owner",
                "order": 50,
                "permissions": [
                    "add_issue",
                    "modify_issue",
                    "comment_issue",
                    "delete_issue",
                    "view_issues",
                    "add_milestone",
                    "modify_milestone",
                    "delete_milestone",
                    "view_milestones",
                    "view_project",
                    "add_task",
                    "modify_task",
                    "comment_task",
                    "delete_task",
                    "view_tasks",
                    "add_us",
                    "modify_us",
                    "comment_us",
                    "delete_us",
                    "view_us",
                    "add_wiki_page",
                    "modify_wiki_page",
                    "comment_wiki_page",
                    "delete_wiki_page",
                    "view_wiki_pages",
                    "add_wiki_link",
                    "delete_wiki_link",
                    "view_wiki_links"
                ],
                "slug": "product-owner"
            },
            {
                "computable": false,
                "name": "Stakeholder",
                "order": 60,
                "permissions": [
                    "add_issue",
                    "modify_issue",
                    "comment_issue",
                    "delete_issue",
                    "view_issues",
                    "view_milestones",
                    "view_project",
                    "view_tasks",
                    "view_us",
                    "modify_wiki_page",
                    "comment_wiki_page",
                    "view_wiki_pages",
                    "add_wiki_link",
                    "delete_wiki_link",
                    "view_wiki_links"
                ],
                "slug": "stakeholder"
            }
        ],
        "severities": [
            {
                "color": "#999999",
                "name": "Wishlist",
                "order": 1
            },
            {
                "color": "#729fcf",
                "name": "Minor",
                "order": 2
            },
            {
                "color": "#4e9a06",
                "name": "Normal",
                "order": 3
            },
            {
                "color": "#f57900",
                "name": "Important",
                "order": 4
            },
            {
                "color": "#CC0000",
                "name": "Critical",
                "order": 5
            }
        ],
        "slug": "new-template",
        "task_statuses": [
            {
                "color": "#999999",
                "is_closed": false,
                "name": "New",
                "order": 1
            },
            {
                "color": "#729fcf",
                "is_closed": false,
                "name": "In progress",
                "order": 2
            },
            {
                "color": "#f57900",
                "is_closed": true,
                "name": "Ready for test",
                "order": 3
            },
            {
                "color": "#4e9a06",
                "is_closed": true,
                "name": "Closed",
                "order": 4
            },
            {
                "color": "#cc0000",
                "is_closed": false,
                "name": "Needs Info",
                "order": 5
            }
        ],
        "us_statuses": [
            {
                "color": "#999999",
                "is_closed": false,
                "name": "New",
                "order": 1,
                "wip_limit": null
            },
            {
                "color": "#f57900",
                "is_closed": false,
                "name": "Ready",
                "order": 2,
                "wip_limit": null
            },
            {
                "color": "#729fcf",
                "is_closed": false,
                "name": "In progress",
                "order": 3,
                "wip_limit": null
            },
            {
                "color": "#4e9a06",
                "is_closed": false,
                "name": "Ready for test",
                "order": 4,
                "wip_limit": null
            },
            {
                "color": "#cc0000",
                "is_closed": true,
                "name": "Done",
                "order": 5,
                "wip_limit": null
            }
        ],
        "videoconferences": null,
        "videoconferences_extra_data": ""
    }' \
-s http://localhost:8000/api/v1/project-templates
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${ADMIN_AUTH_TOKEN}" \
-d '{
        "default_owner_role": "product-owner",
        "description": "Sample description",
        "name": "New simple template"
    }' \
-s http://localhost:8000/api/v1/project-templates

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON project template detail object

9.3. Get

To get a project template send a GET request specifying the project template id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/project-templates/1

The HTTP response is a 200 OK and the response body is a JSON project template detail object

9.4. Edit

To edit project templates send a PUT or a PATCH specifying the project template id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${ADMIN_AUTH_TOKEN}" \
-d '{
        "description": "New description"
    }' \
-s http://localhost:8000/api/v1/project-templates/1

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON project template detail object

9.5. Delete

To delete project template send a DELETE specifying the project template id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${ADMIN_AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/project-templates/1

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

10. Projects

10.1. List

To list projects send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/projects

The HTTP response is a 200 OK and the response body is a JSON list of project list entry objects

The results can be filtered using the following parameters:

  • member: member id

  • members: member ids

  • is_looking_for_people: the project is looking for new members

  • is_featured: the project has been highlighted by the instance staff

  • is_backlog_activated: backlog is active

  • is_kanban_activated: kanban is active

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/projects?member=1

The results can be ordered using the order_by parameter with the values:

  • memberships__user_order: the project order specified by the user

  • total_fans: total fans for the project

  • total_fans_last_week: number of new fans in the last week

  • total_fans_last_month: number of new fans in the last month

  • total_fans_last_year: number of new fans in the last year

  • total_activity: number of history entries for the project

  • total_activity_last_week: number of history entries generated in the last week

  • total_activity_last_month: number of history entries generated in the last month

  • total_activity_last_year: number of history entries generated in the last year

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/projects?member=1\&order_by=memberships__user_order

10.2. Create

To create projects send a POST request with the following data:

  • name (required)

  • description (required)

  • creation_template: base template for the project

  • is_backlog_activated

  • is_issues_activated

  • is_kanban_activated

  • is_private

  • is_wiki_activated

  • videoconferences: appear-in or talky, the third party used for meetups if enabled

  • videoconferences_extra_data: string used for the videoconference chat url generation

  • total_milestones

  • total_story_points

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "description": "Beta description",
        "name": "Beta project"
    }' \
-s http://localhost:8000/api/v1/projects
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "creation_template": 1,
        "description": "Taiga",
        "is_backlog_activated": false,
        "is_issues_activated": true,
        "is_kanban_activated": true,
        "is_private": false,
        "is_wiki_activated": true,
        "name": "Beta project",
        "total_milestones": 3,
        "total_story_points": 20.0,
        "videoconferences": "appear-in",
        "videoconferences_extra_data": null
    }' \
-s http://localhost:8000/api/v1/projects

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON project detail object

10.3. Get

To get a project send a GET request specifying the project id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/projects/1

The HTTP response is a 200 OK and the response body is a JSON project detail object

10.4. Get by slug

To get a project send a GET request specifying the project slug as parameter:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/projects/by_slug?slug=project-0

The HTTP response is a 200 OK and the response body is a JSON project detail object

10.5. Edit

To edit projects send a PUT or a PATCH specifying the project id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PUT \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "description": "Beta description",
        "name": "Beta project put"
    }' \
-s http://localhost:8000/api/v1/projects/1
curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "Beta project patch"
    }' \
-s http://localhost:8000/api/v1/projects/1

When the edit is successful, the HTTP response is a 200 OK and the response body is a JSON project detail object

10.6. Delete

To delete projects send a DELETE specifying the project id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/projects/1

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

10.7. Bulk update order

To update the projects order for the logged in user send a POST request with a json list where each element is a json object with two attributes, the project id and the new order

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '[
        {
            "order": 10,
            "project_id": 1
        },
        {
            "order": 15,
            "project_id": 2
        }
    ]' \
-s http://localhost:8000/api/v1/projects/bulk_update_order

When the update is successful, the HTTP response is a 200 OK and the response body is empty

10.8. Get modules configuration

To get a project modules configuration send a GET request specifying the project id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/projects/1/modules

The HTTP response is a 200 OK and the response body is a JSON project modules configuration object

10.9. Edit modules configuration

To edit a project modules configuration send a PATCH specifying the project id in the url.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "github": {
            "secret": "new_secret"
        }
    }' \
-s http://localhost:8000/api/v1/projects/1/modules

When edition succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

10.10. Stats

To get a project stats send a GET request specifying the project id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/projects/1/stats

The HTTP response is a 200 OK and the response body is a JSON project stats object

10.11. Issue stats

To get a project issue stats send a GET request specifying the project id in the url

{
    "closed_issues": 10,
    "issues_per_assigned_to": {
        "0": {
            "color": "black",
            "count": 9,
            "id": 0,
            "name": "No asignado",
            "username": "No asignado"
        },
        "10": {
            "color": "#2099DB",
            "count": 1,
            "id": 10,
            "name": "Enrique Crespo",
            "username": "user4"
        },
        "11": {
            "color": "#FFCC00",
            "count": 1,
            "id": 11,
            "name": "Angela Perez",
            "username": "user5"
        },
        "12": {
            "color": "#71A6D2",
            "count": 3,
            "id": 12,
            "name": "Vanesa Garcia",
            "username": "user6"
        },
        "14": {
            "color": "#002e33",
            "count": 2,
            "id": 14,
            "name": "Miguel Molina",
            "username": "user8"
        },
        "15": {
            "color": "#FFFF00",
            "count": 2,
            "id": 15,
            "name": "Virginia Castro",
            "username": "user9"
        },
        "6": {
            "color": "#40826D",
            "count": 3,
            "id": 6,
            "name": "Vanesa Torres",
            "username": "user2114747470430251528"
        },
        "8": {
            "color": "#71A6D2",
            "count": 1,
            "id": 8,
            "name": "Francisco Gil",
            "username": "user2"
        },
        "9": {
            "color": "#B6DA55",
            "count": 4,
            "id": 9,
            "name": "Catalina Fernandez",
            "username": "user3"
        }
    },
    "issues_per_owner": {
        "10": {
            "color": "#2099DB",
            "count": 6,
            "id": 10,
            "name": "Enrique Crespo",
            "username": "user4"
        },
        "13": {
            "color": "#B6DA55",
            "count": 3,
            "id": 13,
            "name": "Mohamed Ortega",
            "username": "user7"
        },
        "5": {
            "color": "",
            "count": 5,
            "id": 5,
            "name": "Administrator",
            "username": "admin"
        },
        "6": {
            "color": "#40826D",
            "count": 5,
            "id": 6,
            "name": "Vanesa Torres",
            "username": "user2114747470430251528"
        },
        "7": {
            "color": "#40826D",
            "count": 3,
            "id": 7,
            "name": "Bego\u00f1a Flores",
            "username": "user1"
        },
        "8": {
            "color": "#71A6D2",
            "count": 2,
            "id": 8,
            "name": "Francisco Gil",
            "username": "user2"
        },
        "9": {
            "color": "#B6DA55",
            "count": 2,
            "id": 9,
            "name": "Catalina Fernandez",
            "username": "user3"
        }
    },
    "issues_per_priority": {
        "1": {
            "color": "#666666",
            "count": 6,
            "id": 1,
            "name": "Patch name"
        },
        "2": {
            "color": "#669933",
            "count": 11,
            "id": 2,
            "name": "Normal"
        },
        "3": {
            "color": "#CC0000",
            "count": 9,
            "id": 3,
            "name": "High"
        }
    },
    "issues_per_severity": {
        "1": {
            "color": "#666666",
            "count": 4,
            "id": 1,
            "name": "Patch name"
        },
        "2": {
            "color": "#669933",
            "count": 5,
            "id": 2,
            "name": "Minor"
        },
        "3": {
            "color": "#0000FF",
            "count": 10,
            "id": 3,
            "name": "Normal"
        },
        "4": {
            "color": "#FFA500",
            "count": 3,
            "id": 4,
            "name": "Important"
        },
        "5": {
            "color": "#CC0000",
            "count": 4,
            "id": 5,
            "name": "Critical"
        }
    },
    "issues_per_status": {
        "1": {
            "color": "#8C2318",
            "count": 5,
            "id": 1,
            "name": "Patch status name"
        },
        "2": {
            "color": "#5E8C6A",
            "count": 2,
            "id": 2,
            "name": "In progress"
        },
        "3": {
            "color": "#88A65E",
            "count": 2,
            "id": 3,
            "name": "Ready for test"
        },
        "4": {
            "color": "#BFB35A",
            "count": 4,
            "id": 4,
            "name": "Closed"
        },
        "5": {
            "color": "#89BAB4",
            "count": 5,
            "id": 5,
            "name": "Needs Info"
        },
        "6": {
            "color": "#CC0000",
            "count": 4,
            "id": 6,
            "name": "Rejected"
        },
        "7": {
            "color": "#666666",
            "count": 4,
            "id": 7,
            "name": "Postponed"
        }
    },
    "issues_per_type": {
        "1": {
            "color": "#89BAB4",
            "count": 12,
            "id": 1,
            "name": "Bug"
        },
        "2": {
            "color": "#ba89a8",
            "count": 7,
            "id": 2,
            "name": "Question"
        },
        "3": {
            "color": "#89a8ba",
            "count": 7,
            "id": 3,
            "name": "Enhancement"
        }
    },
    "last_four_weeks_days": {
        "by_open_closed": {
            "closed": [
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                10
            ],
            "open": [
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                26
            ]
        },
        "by_priority": {
            "1": {
                "color": "#666666",
                "data": [
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    6
                ],
                "id": 1,
                "name": "Patch name"
            },
            "2": {
                "color": "#669933",
                "data": [
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    11
                ],
                "id": 2,
                "name": "Normal"
            },
            "3": {
                "color": "#CC0000",
                "data": [
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    9
                ],
                "id": 3,
                "name": "High"
            }
        },
        "by_severity": {
            "1": {
                "color": "#666666",
                "data": [
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    4
                ],
                "id": 1,
                "name": "Patch name"
            },
            "2": {
                "color": "#669933",
                "data": [
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    5
                ],
                "id": 2,
                "name": "Minor"
            },
            "3": {
                "color": "#0000FF",
                "data": [
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    10
                ],
                "id": 3,
                "name": "Normal"
            },
            "4": {
                "color": "#FFA500",
                "data": [
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    3
                ],
                "id": 4,
                "name": "Important"
            },
            "5": {
                "color": "#CC0000",
                "data": [
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    4
                ],
                "id": 5,
                "name": "Critical"
            }
        },
        "by_status": {}
    },
    "opened_issues": 16,
    "total_issues": 26
}

The HTTP response is a 200 OK and the response body is a JSON project issue stats object

10.12. Tag colors

To get a project tag colors stats send a GET request specifying the project id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/projects/1/tags_colors

The HTTP response is a 200 OK and the response body is a JSON project tag colors object

10.13. Create tag

To create tags send a POST request specifying the project id in the url with the following data:

  • tag (required)

  • color: HEX color

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "color": "#FC8EAC",
        "tag": "testing-tag"
    }' \
-s http://localhost:8000/api/v1/projects/1/create_tag

When the creation is successful, the HTTP response is a 200 OK with an empty body response

10.14. Edit tag

To edit a tag send a POST specifying the project id in the url.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "color": "#FFF8E7",
        "from_tag": "testing-tag",
        "to_tag": "testing-tag-updated"
    }' \
-s http://localhost:8000/api/v1/projects/1/edit_tag

When the edit is successful, the HTTP response is a 200 OK with an empty body response

10.15. Delete-tag

To delete a tag send a POST specifying the project id in the url.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "tag": "testing-tag-updated"
    }' \
-s http://localhost:8000/api/v1/projects/1/delete_tag

When the edit is successful, the HTTP response is a 200 OK with an empty body response

10.16. Mix tags

To mix tags send a POST specifying the project id in the url.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "from_tags": [
            "cum",
            "minus",
            "architecto",
            "amet"
        ],
        "to_tag": "cum"
    }' \
-s http://localhost:8000/api/v1/projects/1/mix_tags

When the edit is successful, the HTTP response is a 200 OK with an empty body response

10.17. Like a project

To like a project send a POST request specifying the project id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/projects/1/like

The HTTP response is a 200 OK with an empty body response

10.18. Unlike a project

To unlike a project send a POST request specifying the project id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/projects/1/unlike

The HTTP response is a 200 OK with an empty body response

10.19. List project fans

To get the list of fans from a project send a GET request specifying the project id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/projects/1/fans

The HTTP response is a 200 OK and the response body is a JSON list of project voter object

10.20. Watch a project

To watch a project send a POST request specifying the project id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "notify_level": 3
    }' \
-s http://localhost:8000/api/v1/projects/1/watch

The HTTP response is a 200 OK with an empty body response

10.21. Stop watching project

To stop watching a project send a POST request specifying the project id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/projects/1/unwatch

The HTTP response is a 200 OK with an empty body response

10.22. List project watchers

To get the list of watchers from a project send a GET request specifying the project id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/projects/1/watchers

The HTTP response is a 200 OK and the response body is a JSON list of project watcher object

10.23. Create template

To create a template from a selected project send a POST request specifying the project id in the url with the following parameters:

  • name (required)

  • description (required)

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${ADMIN_AUTH_TOKEN}" \
-d '{
        "template_description": "Beta template description",
        "template_name": "Beta template"
    }' \
-s http://localhost:8000/api/v1/projects/1/create_template

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON project template detail object

10.24. Leave

To leave a project send a POST request specifying the project id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/projects/2/leave

The HTTP response is a 200 OK with an empty body response

To change your project logo send a POST with the following data

curl -X POST \
-H "Content-Type: multipart/form-data" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-F logo=@test.png \
-s http://localhost:8000/api/v1/projects/1/change_logo

When the change is successful, the HTTP response is a 200 OK and the response body is a JSON project detail object

To remove your project logo send a POST with the following data

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/projects/1/remove_logo

When the change is successful, the HTTP response is a 200 OK and the response body is a JSON project detail object

10.27. Transfer validate-token

To check if a transfer token for one project is valid for your user send a POST request specifying the project id in the url and containing the following data:

  • token: valid transfer token received by email.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "token": "6:1c7e4Y:dCsDFlmNGeYnAKwHVdehYq8w-ZI"
    }' \
-s http://localhost:8000/api/v1/projects/1/transfer_validate_token

The HTTP response is a 200 OK with an empty body response

10.28. Transfer request

To request to the owner the transfer of a project send a POST request specifying the project id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/projects/1/transfer_request

The HTTP response is a 200 OK with an empty body response

10.29. Transfer start

To start the transfer of one of your projects to another user send a POST request specifying the project id in the url and containing the following data:

  • user: user id of other admin member of the project.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "user": 5
    }' \
-s http://localhost:8000/api/v1/projects/1/transfer_start

The HTTP response is a 200 OK with an empty body response

10.30. Transfer accept

To accept the transfer of one project to your user send a POST request specifying the project id in the url and containing the following data:

  • token: valid transfer token received by email.

  • reason: text included in the email response to the project owner.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "reason": "testing",
        "token": "6:1c7e4Z:QcoHrrU53BK5l4qUW6AmkpJc94g"
    }' \
-s http://localhost:8000/api/v1/projects/3/transfer_accept

The HTTP response is a 200 OK with an empty body response

10.31. Transfer reject

To reject the transfer of one project to your user send a POST request specifying the project id in the url and containing the following data:

  • token: valid transfer token received by email.

  • reason: text included in the email response to the project owner.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "reason": "testing",
        "token": "6:1c7e4Y:dCsDFlmNGeYnAKwHVdehYq8w-ZI"
    }' \
-s http://localhost:8000/api/v1/projects/1/transfer_reject

The HTTP response is a 200 OK with an empty body response

10.32. Duplicate

To duplicate a project (create a new one with the same status, colors, attributes…​) send a POST request specifying the project id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "description": "c description",
        "is_private": true,
        "name": "Dup name",
        "users": [
            {
                "id": 8
            }
        ]
    }' \
-s http://localhost:8000/api/v1/projects/3/duplicate

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON project detail object

11. Memberships/Invitations

11.1. List

To list memberships send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/memberships

The HTTP response is a 200 OK and the response body is a JSON list of membership detail objects

The results can be filtered using the following parameters:

  • project: project id

  • role: role id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/memberships?project=1

11.2. Create

To create memberships/invitations send a POST request with the following data:

  • project (required)

  • role (required): Role to the membership

  • username (required): user username or email

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "project": 1,
        "role": 3,
        "username": "test-user@test.com"
    }' \
-s http://localhost:8000/api/v1/memberships

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON membership detail object

11.3. Bulk creation

To create multiple memberships at the same time send a POST request with the following data:

  • project_id (required)

  • bulk_memberships (required): a list of dicts with

    • role_id

    • username: user username or email

  • invitation_extra_text: string

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_memberships": [
            {
                "role_id": 3,
                "username": "test@test.com"
            },
            {
                "role_id": 4,
                "username": "john@doe.com"
            }
        ],
        "project_id": 1
    }' \
-s http://localhost:8000/api/v1/memberships/bulk_create

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON list of membership detail object

11.4. Get

To get a membership send a GET request specifying the membership id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/memberships/1

The HTTP response is a 200 OK and the response body is a JSON membership detail object

11.5. Edit

To edit memberships send a PUT or a PATCH specifying the membership id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "role": 3
    }' \
-s http://localhost:8000/api/v1/memberships/1

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON membership detail object

11.6. Delete

To delete memberships/invitations send a DELETE specifying the membership id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/memberships/2

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

11.7. Resend invitation

To resend an invitation send a POST request specifying the membership id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/memberships/1/resend_invitation

The HTTP response is a 200 OK and the response body is a JSON membership detail object

11.8. Get Invitation (by token)

To get an invitation send a GET request specifying the invitation id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/invitations/00000000-0000-0000-0000-000000000000

The HTTP response is a 200 OK and the response body is a JSON membership detail object

12. Milestones

12.1. List

To list milestones send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/milestones

The HTTP response is a 200 OK and the response body is a JSON list of milestone detail objects

The results can be filtered using the following parameters:

  • project: project ID

  • closed: true to get only closed milestones or false to get only opened ones.

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/milestones?project=1
Note

When you filter milestones by project ID (/api/v1/milestones?project=<projectID>) the response has two new headers:

  • Taiga-Info-Total-Opened-Milestones: the numer of opened milestones for this project.

  • Taiga-Info-Total-Closed-Milestones: the numer of closed milestones for this project.

12.2. Create

To create milestone send a POST request with the following data:

  • project (required): project id

  • name (required): string

  • estimated_start (required): iso date (YYYY-MM-DD)

  • estimated_finish (required): iso date (YYYY-MM-DD)

  • disponibility: float

  • slug: slug

  • order: integer

  • watchers: array of watcher id’s

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "disponibility": 30,
        "estimated_finish": "2014-11-04",
        "estimated_start": "2014-10-20",
        "name": "Sprint 1",
        "order": 1,
        "project": 1,
        "slug": "sprint-1",
        "watchers": []
    }' \
-s http://localhost:8000/api/v1/milestones
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "estimated_finish": "2014-11-04",
        "estimated_start": "2014-10-20",
        "name": "Sprint 3",
        "project": 1
    }' \
-s http://localhost:8000/api/v1/milestones

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON milestone detail object

12.3. Get

To get a milestone send a GET request specifying the milestone id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/milestones/1

The HTTP response is a 200 OK and the response body is a JSON milestone detail object

12.4. Edit

To edit milestones send a PUT or a PATCH specifying the milestone id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "Sprint 2"
    }' \
-s http://localhost:8000/api/v1/milestones/1

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON milestone detail object

12.5. Delete

To delete milestones send a DELETE specifying the milestone id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/milestones/1

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

12.6. Stats

To get the milestone stats send a GET request specifying the milestone id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/milestones/1/stats

The HTTP response is a 200 OK and the response body is a JSON milestone stats detail object

12.7. Watch a milestone

To watch a milestone send a POST request specifying the milestone id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/milestones/1/watch

The HTTP response is a 200 OK with an empty body response

12.8. Stop watching a milestone

To stop watching an milestone send a POST request specifying the milestone id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/milestones/1/unwatch

The HTTP response is a 200 OK with an empty body response

12.9. List milestone watchers

To get the list of watchers from a milestone send a GET request specifying the milestone id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/milestones/1/watchers

The HTTP response is a 200 OK and the response body is a JSON list of milestone watcher object

13. Epics

13.1. List

To list epics send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epics

The HTTP response is a 200 OK and the response body is a JSON list of epic list objects

The results can be filtered using the following parameters:

  • project: project id

  • project__slug: project slug

  • assigned_to: assigned to user id

  • status__is_closed: boolean indicating if the epic status is closed

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epics?project=1

13.2. Create

To create epics send a POST request with the following data:

  • assigned_to: user id

  • blocked_note: reason why the epic is blocked

  • description: string

  • is_blocked: boolean

  • is_closed: boolean

  • color: HEX color

  • project (required): project id

  • subject (required)

  • tags: array of strings

  • watchers: array of watcher id’s

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "assigned_to": null,
        "blocked_note": "blocking reason",
        "client_requirement": false,
        "color": "#ABCABC",
        "description": "New epic description",
        "epics_order": 2,
        "is_blocked": true,
        "project": 1,
        "status": 2,
        "subject": "New epic",
        "tags": [
            "service catalog",
            "customer"
        ],
        "team_requirement": false,
        "watchers": []
    }' \
-s http://localhost:8000/api/v1/epics
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "project": 1,
        "subject": "New epic"
    }' \
-s http://localhost:8000/api/v1/epics

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON epic detail object

13.3. Get

To get an epic send a GET request specifying the epic id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epics/1

The HTTP response is a 200 OK and the response body is a JSON epic detail (GET) object

13.4. Get by ref

To get an epic send a GET request specifying the epic reference and one of the following parameters:

  • project (project id)

  • project_slug

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epics/by_ref?ref=85\&project=3

The HTTP response is a 200 OK and the response body is a JSON epic detail (GET) object

13.5. Edit

To edit epics send a PUT or a PATCH specifying the epic id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "subject": "Patching subject",
        "version": 1
    }' \
-s http://localhost:8000/api/v1/epics/13

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON epic detail object

13.6. Delete

To delete epics send a DELETE specifying the epic id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epics/13

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

13.7. Bulk creation

To create multiple epics at the same time send a POST request with the following data:

  • project_id (required)

  • status_id (optional)

  • bulk_epics: epic subjects, one per line

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_epics": "EPIC 1 \n EPIC 2 \n EPIC 3",
        "project_id": 1
    }' \
-s http://localhost:8000/api/v1/epics/bulk_create

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON list of epic detail object

13.8. Filters data

To get the epic filters data send a GET request specifying the project id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epics/filters_data?project=1

The HTTP response is a 200 OK and the response body is a JSON epic filters data object

To get the list of related user stories from an epic send a GET request specifying the epic id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epics/13/related_userstories

The HTTP response is a 200 OK and the response body is a JSON list of epic related user story detail objects

To create an epic related user story send a POST request with the following data:

  • epic: related epic id

  • user_story: related user story id

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "epic": 13,
        "user_story": 1
    }' \
-s http://localhost:8000/api/v1/epics/13/related_userstories

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON epic related user story detail object

To get a related user story from an epic send a GET request specifying the epic and user story ids in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epics/13/related_userstories/53

The HTTP response is a 200 OK and the response body is a JSON epic related user story detail object

To edit epic related user stories send a PUT or a PATCH specifying the epic and user story ids in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "order": 100
    }' \
-s http://localhost:8000/api/v1/epics/13/related_userstories/53

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON epic related user story detail object

To delete epic related user stories send a DELETE specifying the epic and the userstory ids in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epics/13/related_userstories/53

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

To create multiple related user stories at the same time send a POST request with the following data:

  • project_id (required)

  • bulk_userstories: user stories subjects, one per line

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_userstories": "epic 1 \n epic 2 \n epic 3",
        "project_id": 3
    }' \
-s http://localhost:8000/api/v1/epics/13/related_userstories/bulk_create

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON list of epic related user story detail object

13.15. Vote an epic

To vote epics send a POST request specifying the epic id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epics/3/upvote

The HTTP response is a 200 OK with an empty body response

13.16. Remove vote from an epic

To remove a vote from an epic send a POST request specifying the epic id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epics/3/downvote

When remove of the vote succeeded, the HTTP response is a 200 OK with an empty body response

13.17. Get epic voters list

To get the list of voters from an epic send a GET request specifying the epic id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epics/1/voters

The HTTP response is a 200 OK and the response body is a JSON list of epic voter object

13.18. Watch an epic

To watch an epic send a POST request specifying the epic id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epics/13/watch

The HTTP response is a 200 OK with an empty body response

13.19. Stop watching an epic

To stop watching an epic send a POST request specifying the epic id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epics/13/unwatch

The HTTP response is a 200 OK with an empty body response

13.20. List epic watchers

To get the list of watchers from an epic send a GET request specifying the epic id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epics/13/watchers

The HTTP response is a 200 OK and the response body is a JSON list of epic watcher object

13.21. List attachments

To list epic attachments send a GET request with the following parameters:

  • project: project id

  • object_id: epic id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epics/attachments?object_id=619\&project=1

The HTTP response is a 200 OK and the response body is a JSON list of attachment detail objects

13.22. Create attachment

To create epic attachments send a POST request with the following data:

  • object_id (required): epic id

  • project (required): project id

  • attached_file (required): attaching file

  • description

  • is_deprecated

curl -X POST \
-H "Content-Type: multipart/form-data" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-F attached_file=@test.png \
-F object_id=13 \
-F project=3 \
-s http://localhost:8000/api/v1/epics/attachments

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON attachment detail object

13.23. Get attachment

To get an epic attachment send a GET request specifying the epic attachment id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epics/attachments/619

The HTTP response is a 200 OK and the response body is a JSON attachment detail object

13.24. Edit attachment

To edit epic attachments send a PUT or a PATCH specifying the epic attachment id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "description": "Updated description"
    }' \
-s http://localhost:8000/api/v1/epics/attachments/619

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON attachment detail object

13.25. Delete attachment

To delete epic attachments send a DELETE specifying the epic attachment id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epics/attachments/619

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

14. Epic status

14.1. List

To list epic status send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epic-statuses

The HTTP response is a 200 OK and the response body is a JSON list of epic status detail objects

The results can be filtered using the following parameters:

  • project: project id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epic-statuses?project=1

14.2. Create

To create epic statuses send a POST request with the following data:

  • color: in hexadecimal

  • is_closed: (true|false)

  • name (required)

  • order: integer

  • project: (required): project id

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "color": "#AAAAAA",
        "is_closed": true,
        "name": "New status",
        "order": 8,
        "project": 1
    }' \
-s http://localhost:8000/api/v1/epic-statuses
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "New status name",
        "project": 1
    }' \
-s http://localhost:8000/api/v1/epic-statuses

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON epic status detail object

14.3. Get

To get an epic status send a GET request specifying the epic status id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epic-statuses/1

The HTTP response is a 200 OK and the response body is a JSON epic status detail object

14.4. Edit

To edit epic statuses send a PUT or a PATCH specifying the epic status id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "Patch status name"
    }' \
-s http://localhost:8000/api/v1/epic-statuses/1

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON epic status detail object

14.5. Delete

To delete epic satuses send a DELETE specifying the epic status id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epic-statuses/1

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

14.6. Bulk update order

To update the order of multiple epic statuses at the same time send a POST request with the following data:

  • project (required)

  • bulk_epic_statuses: list where each element is a list, the first element is the status id and the second the new order

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_epic_statuses": [
            [
                1,
                10
            ],
            [
                2,
                5
            ]
        ],
        "project": 1
    }' \
-s http://localhost:8000/api/v1/epic-statuses/bulk_update_order

When the update is successful, the HTTP response is a 204 NO CONTENT with an empty body response

15. Epic custom attribute

15.1. List

To list epic custom attributes send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epic-custom-attributes

The HTTP response is a 200 OK and the response body is a JSON list of epic custom attribute detail objects

The results can be filtered using the following parameters:

  • project: project id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epic-custom-attributes?project=1

15.2. Create

To create epic custom attributes send a POST request with the following data:

  • name: (required) text

  • description: text

  • order: integer

  • project: (required) integer, project id

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "description": "Duration in minutes",
        "name": "Duration 2",
        "order": 8,
        "project": 1
    }' \
-s http://localhost:8000/api/v1/epic-custom-attributes
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "Duration 3",
        "project": 1
    }' \
-s http://localhost:8000/api/v1/epic-custom-attributes

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON epic custom attribute detail object

15.3. Get

To get an epic custom attribute send a GET request specifying the epic custom attribute id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epic-custom-attributes/12

The HTTP response is a 200 OK and the response body is a JSON epic custom attribute detail object

15.4. Edit

To edit epic custom attributes send a PUT or a PATCH specifying the epic custom attribute id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "Duration 1"
    }' \
-s http://localhost:8000/api/v1/epic-custom-attributes/12

When the update is successful, the HTTP response is a 200 OK and the response body is a JSON epic custom attribute detail object

15.5. Delete

To delete epic custom attributes send a DELETE specifying the epic custom attribute id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epic-custom-attributes/12

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

15.6. Bulk update order

To update the order of multiple epic custom attributes at the same time send a POST request with the following data:

  • project (required)

  • bulk_epic_custom_attributes: list where each element is a list, the first element is the custom attribute id and the second the new order

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_epic_custom_attributes": [
            [
                12,
                10
            ],
            [
                14,
                15
            ]
        ],
        "project": 1
    }' \
-s http://localhost:8000/api/v1/epic-custom-attributes/bulk_update_order

When the update is successful, the HTTP response is a 204 NO CONTENT with an empty body response

16. Epic custom attributes values

16.1. Get

To get an epic custom attribute value send a GET request specifying the epic custom attribute id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/epics/custom-attributes-values/13

The HTTP response is a 200 OK and the response body is a JSON epic custom attribute detail object

16.2. Edit

To edit epic custom attributes values send a PUT or a PATCH specifying the epic id in the url. "attribute_values" must be a JSON object with pairs epic custom atribute id - value. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "attributes_values": {
            "12": "240 min"
        },
        "version": 1
    }' \
-s http://localhost:8000/api/v1/epics/custom-attributes-values/13

When the update is successful, the HTTP response is a 200 OK and the response body is a JSON epic custom attribute detail object

17. User stories

17.1. List

To list user stories send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstories

The HTTP response is a 200 OK and the response body is a JSON list of user story list objects

The results can be filtered using the following parameters:

  • project: project id

  • milestone: milestone id

  • milestone__isnull: (true|false) if you are looking for user stories associated with a milestone or not

  • status: status id

  • status__is_archived: (true|false)

  • watchers: watching user id

  • assigned_to: assigned to user id

  • status__is_closed: (true|false)

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstories?project=1

17.2. Create

To create user stories send a POST request with the following data:

  • assigned_to: user id

  • backlog_order: order in the backlog

  • blocked_note: reason why the user story is blocked

  • client_requirement: boolean

  • description: string

  • is_blocked: boolean

  • is_closed: boolean

  • kanban_order: order in the kanban

  • milestone: milestone id

  • points: dictionary of points

  • project (required): project id

  • sprint_order: order in the milestone

  • status: status id

  • subject (required)

  • tags: array of strings

  • team_requirement: boolean

  • watchers: array of watcher id’s

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "assigned_to": null,
        "backlog_order": 2,
        "blocked_note": "blocking reason",
        "client_requirement": false,
        "description": "Implement API CALL",
        "is_blocked": false,
        "is_closed": true,
        "kanban_order": 37,
        "milestone": null,
        "points": {
            "1": 4,
            "2": 3,
            "3": 2,
            "4": 1
        },
        "project": 1,
        "sprint_order": 2,
        "status": 2,
        "subject": "Customer personal data",
        "tags": [
            "service catalog",
            "customer"
        ],
        "team_requirement": false,
        "watchers": []
    }' \
-s http://localhost:8000/api/v1/userstories
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "project": 1,
        "subject": "Customer personal data"
    }' \
-s http://localhost:8000/api/v1/userstories

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON user story detail object

17.3. Get

To get a user story send a GET request specifying the user story id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstories/1

The HTTP response is a 200 OK and the response body is a JSON user story detail (GET) object

17.4. Get by ref

To get a user story send a GET request specifying the user story reference and one of the following parameters:

  • project (project id)

  • project_slug

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstories/by_ref?ref=1\&project=1

The HTTP response is a 200 OK and the response body is a JSON user story detail (GET) object

17.5. Edit

To edit user stories send a PUT or a PATCH specifying the user story id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "subject": "Patching subject",
        "version": 1
    }' \
-s http://localhost:8000/api/v1/userstories/1

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON user story detail object

17.6. Delete

To delete user stories send a DELETE specifying the user story id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstories/1

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

17.7. Bulk creation

To create multiple user stories at the same time send a POST request with the following data:

  • project_id (required)

  • status_id

  • bulk_stories: user story subjects, one per line

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_stories": "US 1 \n US 2 \n US 3",
        "project_id": 1
    }' \
-s http://localhost:8000/api/v1/userstories/bulk_create

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON list of user story detail object

17.8. Bulk update backlog order

To update the backlog order of multiple user stories at the same time send a POST request with the following data:

  • project_id (required)

  • bulk_stories: list where each element is a json object with two attributes, the user story id and the new order

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_stories": [
            {
                "order": 10,
                "us_id": 1
            },
            {
                "order": 15,
                "us_id": 2
            }
        ],
        "project_id": 1
    }' \
-s http://localhost:8000/api/v1/userstories/bulk_update_backlog_order

When the update is successful, the HTTP response is a 200 OK and the response body is a JSON list of user story detail object

17.9. Bulk update kanban order

To update the kanban order of multiple user stories at the same time send a POST request with the following data:

  • project_id (required)

  • bulk_stories: list where each element is a json object with two attributes, the user story id and the new order

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_stories": [
            {
                "order": 10,
                "us_id": 1
            },
            {
                "order": 15,
                "us_id": 2
            }
        ],
        "project_id": 1
    }' \
-s http://localhost:8000/api/v1/userstories/bulk_update_kanban_order

When the update is successful, the HTTP response is a 200 OK and the response body is a JSON list of user story detail object

17.10. Bulk update sprint order

To update the sprint order of multiple user stories at the same time send a POST request with the following data:

  • project_id (required)

  • bulk_stories: list where each element is a json object with two attributes, the user story id and the new order

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_stories": [
            {
                "order": 10,
                "us_id": 1
            },
            {
                "order": 15,
                "us_id": 2
            }
        ],
        "project_id": 1
    }' \
-s http://localhost:8000/api/v1/userstories/bulk_update_sprint_order

When the update is successful, the HTTP response is a 200 OK and the response body is a JSON list of user story detail object

17.11. Bulk update milestone

To update the sprint of multiple user stories at the same time send a POST request with the following data:

  • project_id (required)

  • milestone_id (required)

  • bulk_stories: list where each element is a json object with two attributes, the user story id and the new order

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_stories": [
            {
                "order": 10,
                "us_id": 1
            },
            {
                "order": 15,
                "us_id": 2
            }
        ],
        "milestone_id": 1,
        "project_id": 1
    }' \
-s http://localhost:8000/api/v1/userstories/bulk_update_milestone

When the update is successful, the HTTP response is a 204 NO CONTENT with an empty body response

17.12. Filters data

To get the user stories filters data send a GET request specifying the project id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstories/filters_data?project=1

The HTTP response is a 200 OK and the response body is a JSON user story filters data object

17.13. Vote a user story

To add a vote to a user story send a POST request specifying the user story id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstories/1/upvote

The HTTP response is a 200 OK with an empty body response

17.14. Remove vote from a user story

To remove a vote from a user story send a POST request specifying the user story id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstories/1/downvote

When remove of the vote succeeded, the HTTP response is a 200 OK with an empty body response

17.15. Get user story voters list

To get the list of voters from a user story send a GET request specifying the user story id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstories/2/voters

The HTTP response is a 200 OK and the response body is a JSON list of user story voter object

17.16. Watch a user story

To watch a user story send a POST request specifying the project id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstories/1/watch

The HTTP response is a 200 OK with an empty body response

17.17. Stop watching a user story

To stop watching a user story send a POST request specifying the user story id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstories/1/unwatch

The HTTP response is a 200 OK with an empty body response

17.18. List user story watchers

To get the list of watchers from a user story send a GET request specifying the user story id in the url

{
    "full_name": "GitHub",
    "id": 2,
    "username": "github-050fcd259228472fa00ba021675d3065"
}

The HTTP response is a 200 OK and the response body is a JSON list of user story watcher object

17.19. List attachments

To list user story attachments send a GET request with the following parameters:

  • project: project id

  • object_id: user story id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstories/attachments?object_id=1\&project=1

The HTTP response is a 200 OK and the response body is a JSON list of attachment detail objects

17.20. Create attachment

To create user story attachments send a POST request with the following data:

  • object_id (required): user story id

  • project (required): project id

  • attached_file (required): attaching file

  • description

  • is_deprecated

curl -X POST \
-H "Content-Type: multipart/form-data" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-F attached_file=@test.png \
-F object_id=1 \
-F project=1 \
-s http://localhost:8000/api/v1/userstories/attachments

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON attachment detail object

17.21. Get attachment

To get a user story attachment send a GET request specifying the user story attachment id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstories/attachments/415

The HTTP response is a 200 OK and the response body is a JSON attachment detail object

17.22. Edit attachment

To edit user story attachments send a PUT or a PATCH specifying the user story attachment id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "description": "patching description"
    }' \
-s http://localhost:8000/api/v1/userstories/attachments/1

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON attachment detail object

17.23. Delete attachment

To delete user story attachments send a DELETE specifying the user story attachment id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstories/attachments/410

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

18. User story status

18.1. List

To list user story status send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstory-statuses

The HTTP response is a 200 OK and the response body is a JSON list of user story status detail objects

The results can be filtered using the following parameters:

  • project: project id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstory-statuses?project=1

18.2. Create

To create user story statuses send a POST request with the following data:

  • color: in hexadecimal

  • is_closed: (true|false)

  • name (required)

  • order: integer

  • project: (required): project id

  • wip_limit: integer representing the max number of user stories in this status

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "color": "#AAAAAA",
        "is_closed": true,
        "name": "New status",
        "order": 8,
        "project": 1,
        "wip_limit": 6
    }' \
-s http://localhost:8000/api/v1/userstory-statuses
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "New status name",
        "project": 1
    }' \
-s http://localhost:8000/api/v1/userstory-statuses

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON user story status detail object

18.3. Get

To get a user story status send a GET request specifying the user story status id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstory-statuses/1

The HTTP response is a 200 OK and the response body is a JSON user story status detail object

18.4. Edit

To edit user story statuses send a PUT or a PATCH specifying the user story status id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "Patch status name"
    }' \
-s http://localhost:8000/api/v1/userstory-statuses/1

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON user story status detail object

18.5. Delete

To delete user story satuses send a DELETE specifying the user story status id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstory-statuses/1

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

18.6. Bulk update order

To update the order of multiple user story statues at the same time send a POST request with the following data:

  • project (required)

  • bulk_userstory_statuses: list where each element is a list, the first element is the status id and the second the new order

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_userstory_statuses": [
            [
                1,
                10
            ],
            [
                2,
                5
            ]
        ],
        "project": 1
    }' \
-s http://localhost:8000/api/v1/userstory-statuses/bulk_update_order

When the update is successful, the HTTP response is a 204 NO CONTENT with an empty body response

19. Points

19.1. List

To list points send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/points

The HTTP response is a 200 OK and the response body is a JSON list of point detail objects

The results can be filtered using the following parameters:

  • project: project id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/points?project=1

19.2. Create

To create points send a POST request with the following data:

  • color: in hexadecimal

  • name (required)

  • order: integer

  • value (required): integer

  • project: (required): project id

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "color": "#AAAAAA",
        "name": "Huge",
        "order": 8,
        "project": 1,
        "value": 40
    }' \
-s http://localhost:8000/api/v1/points
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "Very huge",
        "project": 1
    }' \
-s http://localhost:8000/api/v1/points

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON point detail object

19.3. Get

To get a point send a GET request specifying the point id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/points/1

The HTTP response is a 200 OK and the response body is a JSON point detail object

19.4. Edit

To edit points send a PUT or a PATCH specifying the point id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "Patch name"
    }' \
-s http://localhost:8000/api/v1/points/1

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON point detail object

19.5. Delete

To delete points send a DELETE specifying the point id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/points/1

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

19.6. Bulk update order

To update the order of multiple points at the same time send a POST request with the following data:

  • project (required)

  • bulk_points: list where each element is a list, the first element is the status id and the second the new order

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_points": [
            [
                1,
                10
            ],
            [
                2,
                5
            ]
        ],
        "project": 1
    }' \
-s http://localhost:8000/api/v1/points/bulk_update_order

When the update is successful, the HTTP response is a 204 NO CONTENT with an empty body response

20. User story custom attribute

20.1. List

To list user story custom attributes send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstory-custom-attributes

The HTTP response is a 200 OK and the response body is a JSON list of user story custom attribute detail objects

The results can be filtered using the following parameters:

  • project: project id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstory-custom-attributes?project=1

20.2. Create

To create user story custom attributes send a POST request with the following data:

  • name: (required) text

  • description: text

  • order: integer

  • project: (required) integer, project id

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "description": "Duration in minutes",
        "name": "Duration 2",
        "order": 8,
        "project": 1
    }' \
-s http://localhost:8000/api/v1/userstory-custom-attributes
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "Duration 3",
        "project": 1
    }' \
-s http://localhost:8000/api/v1/userstory-custom-attributes

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON user story custom attribute detail object

20.3. Get

To get a user story custom attribute send a GET request specifying the user story custom attribute id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstory-custom-attributes/1

The HTTP response is a 200 OK and the response body is a JSON user story custom attribute detail object

20.4. Edit

To edit user story custom attributes send a PUT or a PATCH specifying the user story custom attribute id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "Duration 1"
    }' \
-s http://localhost:8000/api/v1/userstory-custom-attributes/1

When the update is successful, the HTTP response is a 200 OK and the response body is a JSON user story custom attribute detail object

20.5. Delete

To delete user story custom attributes send a DELETE specifying the user story custom attribute id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstory-custom-attributes/1

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

20.6. Bulk update order

To update the order of multiple user story custom attributes at the same time send a POST request with the following data:

  • project (required)

  • bulk_userstory_custom_attributes: list where each element is a list, the first element is the custom attribute id and the second the new order

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_userstory_custom_attributes": [
            [
                1,
                10
            ],
            [
                2,
                5
            ]
        ],
        "project": 1
    }' \
-s http://localhost:8000/api/v1/userstory-custom-attributes/bulk_update_order

When the update is successful, the HTTP response is a 204 NO CONTENT with an empty body response

21. User story custom attributes values

21.1. Get

To get a user story custom attribute send a GET request specifying the user story custom attribute id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/userstories/custom-attributes-values/1

The HTTP response is a 200 OK and the response body is a JSON user story custom attribute detail object

21.2. Edit

To edit user story custom attributes values send a PUT or a PATCH specifying the user story id in the url. "attribute_values" must be a JSON object with pairs user story custom atribute id - value. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "attributes_values": {
            "1": "240 min"
        },
        "version": 1
    }' \
-s http://localhost:8000/api/v1/userstories/custom-attributes-values/1

When the update is successful, the HTTP response is a 200 OK and the response body is a JSON user story custom attribute detail object

22. Tasks

22.1. List

To list tasks send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/tasks

The HTTP response is a 200 OK and the response body is a JSON list of task list objects

The results can be filtered using the following parameters:

  • project: project id

  • user_story: user story id

  • milestone: milestone id

  • watchers: watching user id

  • assigned_to: assigned to user id

  • status__is_closed: (true|false)

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/tasks?project=1

22.2. Create

To create tasks send a POST request with the following data:

  • assigned_to: user id

  • blocked_note: reason why the task is blocked

  • description: string

  • is_blocked: boolean

  • is_closed: boolean

  • milestone: milestone id

  • project (required): project id

  • user_story: user story id

  • status: status id

  • subject (required)

  • tags: array of strings

  • us_order: order in the user story,

  • taskboard_order: order in the taskboard,

  • is_iocaine: boolean,

  • external_reference: tuple of ("service", serviceId),

  • watchers: array of watcher id’s

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "assigned_to": null,
        "blocked_note": "blocking reason",
        "description": "Implement API CALL",
        "external_reference": null,
        "is_blocked": false,
        "is_closed": true,
        "is_iocaine": false,
        "milestone": null,
        "project": 1,
        "status": 1,
        "subject": "Customer personal data",
        "tags": [
            "service catalog",
            "customer"
        ],
        "taskboard_order": 1,
        "us_order": 1,
        "user_story": 17,
        "watchers": []
    }' \
-s http://localhost:8000/api/v1/tasks
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "project": 1,
        "subject": "Customer personal data"
    }' \
-s http://localhost:8000/api/v1/tasks

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON task detail object

22.3. Get

To get a task send a GET request specifying the task id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/tasks/1

The HTTP response is a 200 OK and the response body is a JSON task detail (GET) object

22.4. Get by ref

To get a task send a GET request specifying the task reference and one of the following parameters:

  • project (project id)

  • project_slug

{
    "assigned_to": 12,
    "assigned_to_extra_info": {
        "big_photo": null,
        "full_name_display": "Vanesa Garcia",
        "gravatar_id": "74cb769a5e64d445b8550789e1553502",
        "id": 12,
        "is_active": true,
        "photo": null,
        "username": "user6"
    },
    "attachments": [],
    "blocked_note": "",
    "blocked_note_html": "",
    "comment": "",
    "created_date": "2016-11-18T07:52:23.172Z",
    "description": "Dolorem aperiam necessitatibus itaque voluptates at excepturi quibusdam laboriosam delectus nobis illum, eaque ab minima inventore expedita, non iure quibusdam explicabo exercitationem repellendus nobis? Aliquam ullam sit ea doloribus sed iure quibusdam vel accusantium voluptates alias, dolorem alias totam quas pariatur magni ullam officiis. At porro reiciendis, animi repellat eum, impedit velit nostrum reprehenderit maiores, maxime laborum dolorum id suscipit deserunt, sequi tenetur sint?",
    "description_html": "<p>Dolorem aperiam necessitatibus itaque voluptates at excepturi quibusdam laboriosam delectus nobis illum, eaque ab minima inventore expedita, non iure quibusdam explicabo exercitationem repellendus nobis? Aliquam ullam sit ea doloribus sed iure quibusdam vel accusantium voluptates alias, dolorem alias totam quas pariatur magni ullam officiis. At porro reiciendis, animi repellat eum, impedit velit nostrum reprehenderit maiores, maxime laborum dolorum id suscipit deserunt, sequi tenetur sint?</p>",
    "external_reference": null,
    "finished_date": "2016-10-04T10:15:17.631Z",
    "id": 1,
    "is_blocked": false,
    "is_closed": true,
    "is_iocaine": false,
    "is_voter": false,
    "is_watcher": true,
    "milestone": 1,
    "milestone_slug": "sprint-2016-9-24",
    "modified_date": "2016-11-18T07:59:37.373Z",
    "neighbors": {
        "next": {
            "id": 2,
            "ref": 3,
            "subject": "Lighttpd support"
        },
        "previous": null
    },
    "owner": 15,
    "owner_extra_info": {
        "big_photo": null,
        "full_name_display": "Virginia Castro",
        "gravatar_id": "69b60d39a450e863609ae3546b12b360",
        "id": 15,
        "is_active": true,
        "photo": null,
        "username": "user9"
    },
    "project": 1,
    "ref": 2,
    "status": 3,
    "status_extra_info": {
        "color": "#ffcc00",
        "is_closed": true,
        "name": "Lista para testear"
    },
    "subject": "Patching subject",
    "tags": [
        [
            "obcaecati",
            null
        ],
        [
            "mollitia",
            null
        ],
        [
            "quod",
            null
        ],
        [
            "qui",
            null
        ],
        [
            "beatae",
            null
        ],
        [
            "cum",
            null
        ]
    ],
    "taskboard_order": 1479455543172,
    "total_voters": 3,
    "total_watchers": 4,
    "us_order": 1479455543172,
    "user_story": 1,
    "user_story_extra_info": {
        "epics": [
            {
                "color": "#f57900",
                "id": 1,
                "project": {
                    "id": 1,
                    "name": "Beta project patch",
                    "slug": "project-0"
                },
                "ref": 63,
                "subject": "Support for bulk actions"
            }
        ],
        "id": 1,
        "ref": 1,
        "subject": "Patching subject"
    },
    "version": 2,
    "watchers": [
        1,
        6,
        11,
        12
    ]
}

The HTTP response is a 200 OK and the response body is a JSON task detail (GET) object

22.5. Edit

To edit tasks send a PUT or a PATCH specifying the task id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "subject": "Patching subject",
        "version": 1
    }' \
-s http://localhost:8000/api/v1/tasks/1

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON task detail object

22.6. Delete

To delete tasks send a DELETE specifying the task id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/tasks/1

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

22.7. Bulk creation

To create multiple tasks at the same time send a POST request with the following data:

  • project_id (required)

  • status_id

  • sprint_id: milestone id (optional)

  • us_id: user story id (optional)

  • bulk_tasks: task subjects, one per line

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_tasks": "Task 1 \n Task 2 \n Task 3",
        "milestone_id": 1,
        "project_id": 1
    }' \
-s http://localhost:8000/api/v1/tasks/bulk_create

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON list of task detail object

22.8. Filters data

To get the task filters data send a GET request specifying the project id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/tasks/filters_data?project=1

The HTTP response is a 200 OK and the response body is a JSON task filters data object

22.9. Vote a task

To vote tasks send a POST request specifying the task id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/tasks/1/upvote

The HTTP response is a 200 OK with an empty body response

22.10. Remove vote from a task

To remove a vote from a task send a POST request specifying the task id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/tasks/1/downvote

When remove of the vote succeeded, the HTTP response is a 200 OK with an empty body response

22.11. Get task voters list

To get the list of voters from a task send a GET request specifying the task id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/tasks/1/voters

The HTTP response is a 200 OK and the response body is a JSON list of task voter object

22.12. Watch a task

To watch a task send a POST request specifying the task id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/tasks/1/watch

The HTTP response is a 200 OK with an empty body response

22.13. Stop watching a task

To stop watching a task send a POST request specifying the task id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/tasks/1/unwatch

The HTTP response is a 200 OK with an empty body response

22.14. List task watchers

To get the list of watchers from a task send a GET request specifying the task id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/tasks/1/watchers

The HTTP response is a 200 OK and the response body is a JSON list of task watcher object

22.15. List attachments

To list task attachments send a GET request with the following parameters:

  • project: project id

  • object_id: task id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/tasks/attachments?object_id=1\&project=1

The HTTP response is a 200 OK and the response body is a JSON list of attachment detail objects

22.16. Create attachment

To create task attachments send a POST request with the following data:

  • object_id (required): task id

  • project (required): project id

  • attached_file (required): attaching file

  • description

  • is_deprecated

curl -X POST \
-H "Content-Type: multipart/form-data" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-F attached_file=@test.png \
-F object_id=1 \
-F project=1 \
-s http://localhost:8000/api/v1/tasks/attachments

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON attachment detail object

22.17. Get attachment

To get a task attachment send a GET request specifying the task attachment id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/tasks/attachments/414

The HTTP response is a 200 OK and the response body is a JSON attachment detail object

22.18. Edit attachment

To edit task attachments send a PUT or a PATCH specifying the task attachment id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "description": "Updated description"
    }' \
-s http://localhost:8000/api/v1/tasks/attachments/414

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON attachment detail object

22.19. Delete attachment

To delete task attachments send a DELETE specifying the task attachment id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/tasks/attachments/414

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

23. Task status

23.1. List

To list task status send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/task-statuses

The HTTP response is a 200 OK and the response body is a JSON list of task status detail objects

The results can be filtered using the following parameters:

  • project: project id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/task-statuses?project=1

23.2. Create

To create task statuses send a POST request with the following data:

  • color: in hexadecimal

  • is_closed: (true|false)

  • name (required)

  • order: integer

  • project: (required): project id

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "color": "#AAAAAA",
        "is_closed": true,
        "name": "New status",
        "order": 8,
        "project": 1
    }' \
-s http://localhost:8000/api/v1/task-statuses
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "New status name",
        "project": 1
    }' \
-s http://localhost:8000/api/v1/task-statuses

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON task status detail object

23.3. Get

To get a task status send a GET request specifying the task status id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/task-statuses/1

The HTTP response is a 200 OK and the response body is a JSON task status detail object

23.4. Edit

To edit task statuses send a PUT or a PATCH specifying the task status id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "Patch status name"
    }' \
-s http://localhost:8000/api/v1/task-statuses/1

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON task status detail object

23.5. Delete

To delete task satuses send a DELETE specifying the task status id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/task-statuses/1

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

23.6. Bulk update order

To update the order of multiple task statuses at the same time send a POST request with the following data:

  • project (required)

  • bulk_task_statuses: list where each element is a list, the first element is the status id and the second the new order

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_task_statuses": [
            [
                1,
                10
            ],
            [
                2,
                5
            ]
        ],
        "project": 1
    }' \
-s http://localhost:8000/api/v1/task-statuses/bulk_update_order

When the update is successful, the HTTP response is a 204 NO CONTENT with an empty body response

24. Task custom attribute

24.1. List

To list task custom attributes send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/task-custom-attributes

The HTTP response is a 200 OK and the response body is a JSON list of task custom attribute detail objects

The results can be filtered using the following parameters:

  • project: project id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/task-custom-attributes?project=1

24.2. Create

To create task custom attributes send a POST request with the following data:

  • name: (required) text

  • description: text

  • order: integer

  • project: (required) integer, project id

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "description": "Duration in minutes",
        "name": "Duration 2",
        "order": 8,
        "project": 1
    }' \
-s http://localhost:8000/api/v1/task-custom-attributes
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "Duration 3",
        "project": 1
    }' \
-s http://localhost:8000/api/v1/task-custom-attributes

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON task custom attribute detail object

24.3. Get

To get a task custom attribute send a GET request specifying the task custom attribute id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/task-custom-attributes/5

The HTTP response is a 200 OK and the response body is a JSON task custom attribute detail object

24.4. Edit

To edit task custom attributes send a PUT or a PATCH specifying the task custom attribute id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "Duration 1"
    }' \
-s http://localhost:8000/api/v1/task-custom-attributes/5

When the update is successful, the HTTP response is a 200 OK and the response body is a JSON task custom attribute detail object

24.5. Delete

To delete task custom attributes send a DELETE specifying the task custom attribute id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/task-custom-attributes/5

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

24.6. Bulk update order

To update the order of multiple task custom attributes at the same time send a POST request with the following data:

  • project (required)

  • bulk_task_custom_attributes: list where each element is a list, the first element is the custom attribute id and the second the new order

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_task_custom_attributes": [
            [
                5,
                10
            ],
            [
                2,
                15
            ]
        ],
        "project": 1
    }' \
-s http://localhost:8000/api/v1/task-custom-attributes/bulk_update_order

When the update is successful, the HTTP response is a 204 NO CONTENT with an empty body response

25. Task custom attributes values

25.1. Get

To get a task custom attribute send a GET request specifying the task custom attribute id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/task-custom-attributes/5

The HTTP response is a 200 OK and the response body is a JSON task custom attribute detail object

25.2. Edit

To edit task custom attributes values send a PUT or a PATCH specifying the task id in the url. "attribute_values" must be a JSON object with pairs task custom atribute id - value. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "Duration 1"
    }' \
-s http://localhost:8000/api/v1/task-custom-attributes/5

When the update is successful, the HTTP response is a 200 OK and the response body is a JSON task custom attribute detail object

26. Issues

26.1. List

To list issues send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issues

The HTTP response is a 200 OK and the response body is a JSON list of issue detail list objects

The results can be filtered using the following parameters:

  • project: project id

  • status: status id

  • severity: severity id

  • priority: priority id

  • owner: owner user id

  • assigned_to: assigned to user id

  • tags: separated by ","

  • type: issue type id

  • watchers: watching user id

  • status__is_closed: (true|false)

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issues?project=1

The results can be ordered using the order_by parameter with the values:

  • type

  • severity

  • status

  • priority

  • created_date

  • modified_date

  • owner

  • assigned_to

  • subject

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issues?project=1\&order_by=priority

26.2. Create

To create issues send a POST request with the following data:

  • assigned_to: user id

  • blocked_note: reason why the issue is blocked

  • description: string

  • is_blocked: boolean

  • is_closed: boolean

  • milestone: milestone id

  • project (required): project id

  • status: status id

  • severity: severity id

  • priority: priority id

  • type: type id

  • subject (required)

  • tags: array of strings

  • watchers: array of watcher id’s

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "assigned_to": null,
        "blocked_note": "blocking reason",
        "description": "Implement API CALL",
        "is_blocked": false,
        "is_closed": true,
        "milestone": null,
        "priority": 3,
        "project": 1,
        "severity": 2,
        "status": 3,
        "subject": "Customer personal data",
        "tags": [
            "service catalog",
            "customer"
        ],
        "type": 1,
        "watchers": []
    }' \
-s http://localhost:8000/api/v1/issues
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "project": 1,
        "subject": "Customer personal data"
    }' \
-s http://localhost:8000/api/v1/issues

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON issue detail object

26.3. Get

To get an issue send a GET request specifying the issue id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issues/3

The HTTP response is a 200 OK and the response body is a JSON issue detail (GET) object

26.4. Get by ref

To get an issue send a GET request specifying the issue reference and one of the following parameters:

  • project (project id)

  • project_slug

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issues/by_ref?ref=62\&project=1

The HTTP response is a 200 OK and the response body is a JSON issue detail (GET) object

26.5. Edit

To edit issues send a PUT or a PATCH specifying the issue id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "subject": "Patching subject",
        "version": 1
    }' \
-s http://localhost:8000/api/v1/issues/3

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON issue detail object

26.6. Delete

To delete issues send a DELETE specifying the issue id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issues/21

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

26.7. Filters data

To get the issue filters data send a GET request specifying the project id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issues/filters_data?project=1

The HTTP response is a 200 OK and the response body is a JSON issue filters data object

26.8. Vote an issue

To vote issues send a POST specifying the issue id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issues/3/upvote

When vote succeeded, the HTTP response is a 200 OK with an empty body response

26.9. Remove vote from an issue

To remove a vote from an issue send a POST specifying the issue id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issues/3/downvote

When remove of the vote succeeded, the HTTP response is a 200 OK with an empty body response

26.10. Get issue voters list

To get the list of voters from an issue send a GET request specifying the issue id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issues/3/voters

The HTTP response is a 200 OK and the response body is a JSON issue voters detail object

26.11. Watch an issue

To watch an issue send a POST request specifying the issue id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issues/3/watch

The HTTP response is a 200 OK with an empty body response

26.12. Stop watching an issue

To stop watching an issue send a POST request specifying the issue id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issues/3/unwatch

The HTTP response is a 200 OK with an empty body response

26.13. List issue watchers

To get the list of watchers from an issue send a GET request specifying the issue id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issues/3/watchers

The HTTP response is a 200 OK and the response body is a JSON list of issue watcher object

26.14. List attachments

To list issue attachments send a GET request with the following parameters:

  • project: project id

  • object_id: issue id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issues/attachments?object_id=608\&project=1

The HTTP response is a 200 OK and the response body is a JSON list of attachment detail objects

26.15. Create attachment

To create issue attachments send a POST request with the following data:

  • object_id (required): issue id

  • project (required): project id

  • attached_file (required): attaching file

  • description

  • is_deprecated

curl -X POST \
-H "Content-Type: multipart/form-data" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-F attached_file=@test.png \
-F object_id=21 \
-F project=1 \
-s http://localhost:8000/api/v1/issues/attachments

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON attachment detail object

26.16. Get attachment

To get an issue attachment send a GET request specifying the issue attachment id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issues/attachments/608

The HTTP response is a 200 OK and the response body is a JSON attachment detail object

26.17. Edit attachment

To edit issue attachments send a PUT or a PATCH specifying the issue attachment id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issues/attachments/608

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON attachment detail object

26.18. Delete attachment

To delete issue attachments send a DELETE specifying the issue attachment id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issues/attachments/608

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

27. Issue status

27.1. List

To list issue status send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issue-statuses

The HTTP response is a 200 OK and the response body is a JSON list of issue status detail objects

The results can be filtered using the following parameters:

  • project: project id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issue-statuses?project=1

27.2. Create

To create issue statuses send a POST request with the following data:

  • color: in hexadecimal

  • is_closed: (true|false)

  • name (required)

  • order: integer

  • project: (required): project id

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "color": "#AAAAAA",
        "is_closed": true,
        "name": "New status",
        "order": 8,
        "project": 1
    }' \
-s http://localhost:8000/api/v1/issue-statuses
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "New status name",
        "project": 1
    }' \
-s http://localhost:8000/api/v1/issue-statuses

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON issue status detail object

27.3. Get

To get a issue status send a GET request specifying the issue status id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issue-statuses/1

The HTTP response is a 200 OK and the response body is a JSON issue status detail object

27.4. Edit

To edit issue statuses send a PUT or a PATCH specifying the issue status id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "subject": "Patching subject",
        "version": 1
    }' \
-s http://localhost:8000/api/v1/issues/3

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON issue status detail object

27.5. Delete

To delete issue satuses send a DELETE specifying the issue status id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issue-statuses/1

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

27.6. Bulk update order

To update the order of multiple issue statuses at the same time send a POST request with the following data:

  • project (required)

  • bulk_issue_statuses: list where each element is a list, the first element is the status id and the second the new order

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_issue_statuses": [
            [
                1,
                10
            ],
            [
                2,
                5
            ]
        ],
        "project": 1
    }' \
-s http://localhost:8000/api/v1/issue-statuses/bulk_update_order

When the update is successful, the HTTP response is a 204 NO CONTENT with an empty body response

28. Issue types

28.1. List

To list issue types send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issue-types

The HTTP response is a 200 OK and the response body is a JSON list of issue type detail objects

The results can be filtered using the following parameters:

  • project: project id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issue-types?project=1

28.2. Create

To create issue types send a POST request with the following data:

  • color: in hexadecimal

  • name (required)

  • order: integer

  • project: (required): project id

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "color": "#AAAAAA",
        "name": "New type",
        "order": 8,
        "project": 1
    }' \
-s http://localhost:8000/api/v1/issue-types
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "New type name",
        "project": 1
    }' \
-s http://localhost:8000/api/v1/issue-types

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON issue type detail object

28.3. Get

To get an issue type send a GET request specifying the issue type id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issue-types/1

The HTTP response is a 200 OK and the response body is a JSON issue type detail object

28.4. Edit

To edit issue types send a PUT or a PATCH specifying the issue type id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "Patch type name"
    }' \
-s http://localhost:8000/api/v1/issue-types/1

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON issue type detail object

28.5. Delete

To delete issue statuses send a DELETE specifying the issue type id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issue-types/1

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

28.6. Bulk update order

To update the order of multiple issue types at the same time send a POST request with the following data:

  • project (required)

  • bulk_issue_types: list where each element is a list, the first element is the status id and the second the new order

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_issue_types": [
            [
                1,
                10
            ],
            [
                2,
                5
            ]
        ],
        "project": 1
    }' \
-s http://localhost:8000/api/v1/issue-types/bulk_update_order

When the update is successful, the HTTP response is a 204 NO CONTENT with an empty body response

29. Priorities

29.1. List

To list priorities send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/priorities

The HTTP response is a 200 OK and the response body is a JSON list of priority detail objects

The results can be filtered using the following parameters:

  • project: project id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/priorities?project=1

29.2. Create

To create priorities send a POST request with the following data:

  • color: in hexadecimal

  • name (required)

  • order: integer

  • project: (required): project id

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "color": "#AAAAAA",
        "name": "New priority",
        "order": 8,
        "project": 1
    }' \
-s http://localhost:8000/api/v1/priorities
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "New priority name",
        "project": 1
    }' \
-s http://localhost:8000/api/v1/priorities

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON priority detail object

29.3. Get

To get a priority send a GET request specifying the priority id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/priorities/1

The HTTP response is a 200 OK and the response body is a JSON priority detail object

29.4. Edit

To edit priorities send a PUT or a PATCH specifying the priority id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "Patch name"
    }' \
-s http://localhost:8000/api/v1/priorities/1

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON priority detail object

29.5. Delete

To delete priorities send a DELETE specifying the priority id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/priorities/1

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

29.6. Bulk update order

To update the order of multiple priorities at the same time send a POST request with the following data:

  • project (required)

  • bulk_priorities: list where each element is a list, the first element is the status id and the second the new order

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_priorities": [
            [
                1,
                10
            ],
            [
                2,
                5
            ]
        ],
        "project": 1
    }' \
-s http://localhost:8000/api/v1/priorities/bulk_update_order

When the update is successful, the HTTP response is a 204 NO CONTENT with an empty body response

30. Severities

30.1. List

To list severities send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/severities

The HTTP response is a 200 OK and the response body is a JSON list of severity detail objects

The results can be filtered using the following parameters:

  • project: project id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/severities?project=1

30.2. Create

To create severities send a POST request with the following data:

  • color: in hexadecimal

  • name (required)

  • order: integer

  • project: (required): project id

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "color": "#AAAAAA",
        "name": "New severity",
        "order": 8,
        "project": 1
    }' \
-s http://localhost:8000/api/v1/severities
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "New severity name",
        "project": 1
    }' \
-s http://localhost:8000/api/v1/severities

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON severity detail object

30.3. Get

To get a severity send a GET request specifying the severity id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/severities/1

The HTTP response is a 200 OK and the response body is a JSON severity detail object

30.4. Edit

To edit severities send a PUT or a PATCH specifying the severity id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "Patch name"
    }' \
-s http://localhost:8000/api/v1/severities/1

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON severity detail object

30.5. Delete

To delete severities send a DELETE specifying the severity id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/severities/1

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

30.6. Bulk update order

To update the order of multiple severities at the same time send a POST request with the following data:

  • project (required)

  • bulk_severities: list where each element is a list, the first element is the status id and the second the new order

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_severities": [
            [
                1,
                10
            ],
            [
                2,
                5
            ]
        ],
        "project": 1
    }' \
-s http://localhost:8000/api/v1/severities/bulk_update_order

When the update is successful, the HTTP response is a 204 NO CONTENT with an empty body response

31. Issue custom attribute

31.1. List

To list issue custom attributes send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issue-custom-attributes

The HTTP response is a 200 OK and the response body is a JSON list of issue custom attribute detail objects

The results can be filtered using the following parameters:

  • project: project id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issue-custom-attributes?project=1

31.2. Create

To create issue custom attributes send a POST request with the following data:

  • name: (required) text

  • description: text

  • order: integer

  • project: (required) integer, project id

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "description": "Duration in minutes",
        "name": "Duration 2",
        "order": 8,
        "project": 1
    }' \
-s http://localhost:8000/api/v1/issue-custom-attributes
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "Duration 3",
        "project": 1
    }' \
-s http://localhost:8000/api/v1/issue-custom-attributes

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON issue custom attribute detail object

31.3. Get

To get a issue custom attribute send a GET request specifying the issue custom attribute id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issue-custom-attributes/4

The HTTP response is a 200 OK and the response body is a JSON issue custom attribute detail object

31.4. Edit

To edit issue custom attributes send a PUT or a PATCH specifying the issue custom attribute id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "Duration 1"
    }' \
-s http://localhost:8000/api/v1/issue-custom-attributes/4

When the update is successful, the HTTP response is a 200 OK and the response body is a JSON issue custom attribute detail object

31.5. Delete

To delete issue custom attributes send a DELETE specifying the issue custom attribute id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issue-custom-attributes/4

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

31.6. Bulk update order

To update the order of multiple issue custom attributes at the same time send a POST request with the following data:

  • project (required)

  • bulk_issue_custom_attributes: list where each element is a list, the first element is the custom attribute id and the second the new order

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "bulk_issue_custom_attributes": [
            [
                4,
                10
            ],
            [
                1,
                5
            ]
        ],
        "project": 1
    }' \
-s http://localhost:8000/api/v1/issue-custom-attributes/bulk_update_order

When the update is successful, the HTTP response is a 204 NO CONTENT with an empty body response

32. Issue custom attributes values

32.1. Get

To get a issue custom attribute send a GET request specifying the issue custom attribute id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/issues/custom-attributes-values/21

The HTTP response is a 200 OK and the response body is a JSON issue custom attribute detail object

32.2. Edit

To edit issue custom attributes values send a PUT or a PATCH specifying the issue id in the url. "attribute_values" must be a JSON object with pairs issue custom atribute id - value. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "attributes_values": {
            "4": "240 min"
        },
        "version": 1
    }' \
-s http://localhost:8000/api/v1/issues/custom-attributes-values/21

When the update is successful, the HTTP response is a 200 OK and the response body is a JSON issue custom attribute detail object

33. Wiki pages

33.1. List

To list wiki pages send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/wiki

The HTTP response is a 200 OK and the response body is a JSON list of wiki page detail objects

The results can be filtered using the following parameters:

  • project: project id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/wiki?project=1

33.2. Create

To create wiki pages send a POST request with the following data:

  • project (required): project id

  • slug (required): slug

  • content (required): string

  • watchers: array of watcher id’s

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "content": "Lorem ipsum dolor.",
        "project": 1,
        "slug": "new-page",
        "watchers": []
    }' \
-s http://localhost:8000/api/v1/wiki
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "content": "Lorem ipsum dolor.",
        "project": 1,
        "slug": "new-simple-page"
    }' \
-s http://localhost:8000/api/v1/wiki

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON wiki page detail object

33.3. Get

To get a wiki page send a GET request specifying the wiki page id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/wiki/4

The HTTP response is a 200 OK and the response body is a JSON wiki page detail object

33.4. Get by slug

To get a wiki page send a GET request specifying the wiki page slug and the project id as parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/wiki/by_slug?slug=home\&project=1

The HTTP response is a 200 OK and the response body is a JSON wiki page detail object

33.5. Edit

To edit wiki pages send a PUT or a PATCH specifying the wiki page id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "subject": "Patching subject",
        "version": 1
    }' \
-s http://localhost:8000/api/v1/wiki/4

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON wiki page detail object

33.6. Delete

To delete wiki page send a DELETE specifying the wiki page id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/wiki/4

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

33.7. Watch a wiki page

To watch a wiki page send a POST request specifying the wiki page id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/wiki/4/watch

The HTTP response is a 200 OK with an empty body response

33.8. Stop watching a wiki page

To stop watching a wiki page send a POST request specifying the wiki page id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/wiki/4/unwatch

The HTTP response is a 200 OK with an empty body response

33.9. List wiki page watchers

To get the list of watchers from a wiki page send a GET request specifying the wiki page id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/wiki/4/watchers

The HTTP response is a 200 OK and the response body is a JSON list of wiki page watcher object

33.10. List attachments

To list wiki page attachments send a GET request with the following parameters:

  • project: project id

  • object_id: wiki page id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/wiki/attachments?object_id=4\&project=1

The HTTP response is a 200 OK and the response body is a JSON list of attachment detail objects

33.11. Create attachment

To create wiki page attachments send a POST request with the following data:

  • object_id (required): wiki page id

  • project (required): project id

  • attached_file (required): attaching file

  • description

  • is_deprecated

{
    "attached_file": "attachments/2/e/0/8/b1adfe21145f09cbeb55e291aed55f41b64a1aff6e8950ddbf544b47370f/sample_attachment_2.txt",
    "created_date": "2016-11-18T07:53:51.054Z",
    "description": "Updated description",
    "id": 609,
    "is_deprecated": true,
    "modified_date": "2016-11-18T07:59:33.851Z",
    "name": "sample_attachment_2.txt",
    "object_id": 11,
    "order": 1,
    "owner": 9,
    "project": 3,
    "sha1": "62dbe72633a794717c1f4817d2d7d087b1c29c69",
    "size": 1688,
    "thumbnail_card_url": null,
    "url": "http://localhost:8000/media/attachments/2/e/0/8/b1adfe21145f09cbeb55e291aed55f41b64a1aff6e8950ddbf544b47370f/sample_attachment_2.txt"
}

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON attachment detail object

33.12. Get attachment

To get an wiki page attachment send a GET request specifying the wiki page attachment id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/wiki/attachments/609

The HTTP response is a 200 OK and the response body is a JSON attachment detail object

33.13. Edit attachment

To edit wiki page attachments send a PUT or a PATCH specifying the wiki page attachment id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "description": "Updated description"
    }' \
-s http://localhost:8000/api/v1/wiki/attachments/609

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON attachment detail object

33.14. Delete attachment

To delete wiki page attachments send a DELETE specifying the wiki page attachment id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/wiki/attachments/609

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

To list wiki links send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/wiki-links

The HTTP response is a 200 OK and the response body is a JSON list of wiki link detail objects

The results can be filtered using the following parameters:

  • project: project id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/wiki-links?project=1

To create wiki links send a POST request with the following data:

  • project (required): project id

  • title (required): string

  • href (required): wiki page slug

  • order: integer

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "href": "home",
        "order": 1,
        "project": 1,
        "title": "Home page"
    }' \
-s http://localhost:8000/api/v1/wiki-links
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "href": "home",
        "project": 1,
        "title": "Home page"
    }' \
-s http://localhost:8000/api/v1/wiki-links

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON wiki link detail object

To get a wiki link send a GET request specifying the wiki link id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/wiki-links/1

The HTTP response is a 200 OK and the response body is a JSON wiki link detail object

To edit wiki links send a PUT or a PATCH specifying the wiki link id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "subject": "Patching subject"
    }' \
-s http://localhost:8000/api/v1/wiki-links/1

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON wiki link detail object

To delete wiki link send a DELETE specifying the wiki link id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/wiki-links/1

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

35. History

35.1. Get user story, task, issue or wiki page history

To get the history of a user story, task, issue or wiki page send a GET request specifying the id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/history/userstory/2

The HTTP response is a 200 OK and the response body is a JSON of a list of history entry detail objects

35.2. Get comment versions

To get the comment versions from the history entry of a user story, task, issue or wiki page send a GET request specifying the history entry id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/history/userstory/2/comment_versions?id=00000000-0000-0000-0000-000000000000

The HTTP response is a 200 OK and the response body is a JSON of a list of history entry comment detail objects

35.3. Edit comment

To edit a history comment send a POST specifying the history entry id in the url with the following data:

  • assigned_to: the new comment

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "comment": "comment edition"
    }' \
-s http://localhost:8000/api/v1/history/userstory/2/edit_comment?id=00000000-0000-0000-0000-000000000000

When deleted succesfully, the HTTP response is a 204 NO CONTENT with an empty body response

35.4. Delete comment

To delete a history comment send a POST specifying the history entry id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/history/userstory/2/delete_comment?id=00000000-0000-0000-0000-000000000000

When deleted succesfully, the HTTP response is a 204 NO CONTENT with an empty body response

35.5. Undelete comment

To undelete a history comment send a POST specifying the history entry id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/history/userstory/2/undelete_comment?id=00000000-0000-0000-0000-000000000000

When deleted succesfully, the HTTP response is a 204 NO CONTENT with an empty body response

36. Users

36.1. List

To list users send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/users

The HTTP response is a 200 OK and the response body is a JSON list of user detail objects

The results can be filtered using the following parameters:

  • project: project id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/users?project=1

36.2. Get

To get a user send a GET request specifying the user id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/users/6

The HTTP response is a 200 OK and the response body is a JSON user detail object

36.3. Me

To get your own user send a GET request to the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/users/me

The HTTP response is a 200 OK and the response body is a JSON user detail object

36.4. Get user stats

To get the stats from a user send a GET request specifying the user id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/users/6/stats

The HTTP response is a 200 OK and the response body is a JSON user stats object

36.5. Get watched content

To get the user watched content send a GET request specifying the user id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/users/1/watched

The HTTP response is a 200 OK and the response body is a list of JSON watched detail object

The results can be filtered using the following parameters:

  • type: of the content. Possible values: project, userstory, task and issue

  • q: text to search in the subject of the element

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/users/1/watched?type=project\&q=test

36.6. Get liked content

To get the user liked content send a GET request specifying the user id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/users/6/liked

The HTTP response is a 200 OK and the response body is a list of JSON liked detail object

The results can be filtered using the following parameters:

  • q: text to search in the subject of the element

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/users/6/liked?q=test

36.7. Get voted content

To get the user voted content send a GET request specifying the user id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/users/6/voted

The HTTP response is a 200 OK and the response body is a list of JSON voted detail object

The results can be filtered using the following parameters:

  • type: of the content. Possible values: userstory, task and issue

  • q: text to search in the subject of the element

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/users/6/liked?q=test

36.8. Edit

To edit users send a PUT or a PATCH specifying the user id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "username": "patchedusername"
    }' \
-s http://localhost:8000/api/v1/users/6

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON user detail object

36.9. Delete

To delete users send a DELETE specifying the user id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${ADMIN_AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/users/10

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

36.10. Get contacts

To get a user contacts send a GET request specifying the user id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/users/6/contacts

The results can be filtered using the following parameter:

  • q: text to search in username, full name or email

The HTTP response is a 200 OK and the response body is a list of JSON contact detail object

36.11. Cancel

To cancel a user account send a POST with the following data

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "cancel_token": "eyJ1c2VyX2NhbmNlbF9hY2NvdW50X2lkIjo2fQ:1c7e4Z:DEbgW6P9EI-9_1lzQUScYWfKx5c"
    }' \
-s http://localhost:8000/api/v1/users/cancel

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

36.12. Change avatar

To change your user avatar send a POST with the following data

curl -X POST \
-H "Content-Type: multipart/form-data" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-F avatar=@test.png \
-s http://localhost:8000/api/v1/users/change_avatar

When the change is successful, the HTTP response is a 200 OK and the response body is a JSON user detail object

36.13. Remove avatar

To remove your user avatar send a POST with the following data

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/users/remove_avatar

When the change is successful, the HTTP response is a 200 OK and the response body is a JSON user detail object

36.14. Change email

To change your user email send a POST with the following data

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "email_token": "email-token"
    }' \
-s http://localhost:8000/api/v1/users/change_email

When the change is successful, the HTTP response is a 200 OK and the response body is a JSON user detail object

36.15. Change password

To change your user password send a POST with the following data

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "current_password": "123123",
        "password": "new-password"
    }' \
-s http://localhost:8000/api/v1/users/change_password

When the change succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

36.16. Password recovery

To request a user password recovery send a POST with the following data:

  • username (required): this field also supports the user email

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "username": "user1"
    }' \
-s http://localhost:8000/api/v1/users/password_recovery

When the password recovery request succeeded, the HTTP response is a 200 OK and the response body is a JSON object:

{
    "detail": "\u00a1Correo enviado con \u00e9xito!"
}

36.17. Change password from recovery

To change a user password from a request recovery send a POST with the following data

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "password": "new-password",
        "token": "password-token"
    }' \
-s http://localhost:8000/api/v1/users/change_password_from_recovery

When the password change succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

37. Notify policies

37.1. List

To list the notify policies of the current user send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/notify-policies

The HTTP response is a 200 OK and the response body is a JSON list of notify policy detail objects

37.2. Get

To get a notify policy send a GET request specifying the notify policy id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/notify-policies/7

The HTTP response is a 200 OK and the response body is a JSON notify policy detail object

37.3. Edit

To edit notify policies send a PUT or a PATCH specifying the notify policy id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "notify_level": 2
    }' \
-s http://localhost:8000/api/v1/notify-policies/7

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON notify policy detail object

38. Feedback

38.1. Create

To create feedback send a POST request with the following data:

  • comment (required)

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "comment": "Testing feedback"
    }' \
-s http://localhost:8000/api/v1/feedback

When created successfully, the HTTP response is a 201 Created and the response body is a JSON feedback object

39. Export/Import

39.1. Export

To get a project dump send a GET request with the project id:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/exporter/1

Depending on server configuration it can return two results:

  • If taiga is working in synchronous mode the json file is directly generated, the result is a 200 OK and as response body a JSON of export detail for synch mode.

  • If taiga is working in asynchronous mode the result is a 202 Accepted and as response body a JSON of export request accepted. The export_id can be used to build the URL to download the exported file when the file generation is complete, those urls look like: MEDIA_URL/exports/PROJECT_ID/PROJECT_SLUG-export_id.json.

39.2. Import

To load a project dump send a POST request with the following file:

  • dump (required)

curl -X POST \
-H "Content-Type: multipart/form-data" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-F dump=@dump.json \
-s http://localhost:8000/api/v1/importer/load_dump

Depending on server configuration it can return two results:

40. Webhooks

40.1. List

To list webhooks send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/webhooks

The HTTP response is a 200 OK and the response body is a JSON list of webhook detail objects

The results can be filtered using the following parameters:

  • project: project id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/webhooks?project=1

40.2. Create

To create webhook send a POST request with the following data:

  • project (required): project id

  • name (required): string

  • url (required): payload url

  • key (required): secret key

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "key": "my-very-secret-key",
        "name": "My service webhook",
        "project": 1,
        "url": "http://myservice.com/webhooks"
    }' \
-s http://localhost:8000/api/v1/webhooks

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON webhook detail object

40.3. Get

To get a webhook send a GET request specifying the webhook id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/webhooks/1

The HTTP response is a 200 OK and the response body is a JSON webhook detail object

40.4. Edit

To edit a webhook send a PUT or a PATCH specifying the webhook id in the url. In a PATCH request you just need to send the modified data, in a PUT one the whole object must be sent.

curl -X PATCH \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "name": "My service name"
    }' \
-s http://localhost:8000/api/v1/webhooks/1

When the creation is successful, the HTTP response is a 200 OK and the response body is a JSON webhook detail object

40.5. Delete

To delete a webhook send a DELETE specifying the webhook id in the url

curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/webhooks/1

When delete succeeded, the HTTP response is a 204 NO CONTENT with an empty body response

40.6. Test

To test a webhook send a POST request specifying the webhook id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/webhooks/1/test

The HTTP response is a 200 OK and the response body is a JSON webhook log detail object with the resault of the test.

40.7. Logs list

To list webhook logs send a GET request to the url:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/webhooklogs

The HTTP response is a 200 OK and the response body is a JSON list of webhook log detail objects

The results can be filtered using the following parameters:

  • webhook: webhook id

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/webhooklogs?webhook=1

40.8. Log get

To get a webhook log send a GET request specifying the webhook log id in the url

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/webhooklogs/1

The HTTP response is a 200 OK and the response body is a JSON webhook log detail object

40.9. Resend request

To resend a request from a webhook log send a POST request specifying the webhook log id in the url

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/webhooklogs/1/resend

The HTTP response is a 200 OK and the response body is a JSON webhook log detail object with the resault of the resend.

41. Timelines

41.1. List user timeline

To list a user timeline send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/timeline/user/1

This API call returns only actions directly executed by the specified user.

The HTTP response is a 200 OK and the response body is a JSON list of timeline entry detail

41.2. List profile timeline

To list a profile timeline send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/timeline/profile/1

This API call returns actions executed by the specified user and related to them, watching objects, actions by related team members, belonging to projects…​

The HTTP response is a 200 OK and the response body is a JSON list of timeline entry detail

41.3. List project timeline

To list a project timeline send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/timeline/project/1

This API call returns actions executed by different users related to the specified project.

The HTTP response is a 200 OK and the response body is a JSON list of timeline entry detail

42. Locales

42.1. List

To list the available locales send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/locales

The HTTP response is a 200 OK and the response body is a JSON list of locale objects

43. Stats

43.1. Get discover stats

To get the discover stats send a GET request with the following parameters:

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/stats/discover

The HTTP response is a 200 OK and the response body is a JSON discover stats object

43.2. Get system stats

To get the discover stats send a GET request with the following parameters:

Note
This API will only work if your instance has system stats enabled
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/stats/system

The HTTP response is a 200 OK and the response body is a JSON system stats object

44. Importers

44.1. Trello

44.1.1. Auth url

Get the url for authorize Taiga to access to your Trello account.

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/importers/trello/auth_url

44.1.2. Authorize

Complete the authorization process.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "code": "00000000000000000000000000000000"
    }' \
-s http://localhost:8000/api/v1/importers/trello/auth_url

44.1.3. List users

List your Trello users.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "project": "123ABC",
        "token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    }' \
-s http://localhost:8000/api/v1/importers/trello/auth_url

44.1.4. List projects

List your Trello boards.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    }' \
-s http://localhost:8000/api/v1/importers/trello/auth_url

44.1.5. Import project

Ask the server to import a project from Trello.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "description": "New project description",
        "is_private": false,
        "keep_external_reference": false,
        "name": "New project name",
        "project": "123ABC",
        "template": "kanban",
        "token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "users_bindings": {
            "user-1": "123",
            "user-2": "321"
        }
    }' \
-s http://localhost:8000/api/v1/importers/trello/import
  • If taiga is working in synchronous mode the result is a 200 OK and as response body a JSON of imported project result.

  • If taiga is working in asynchronous mode the result is a 202 Accepted and as response body a JSON of import project accepted.

44.2. Github

44.2.1. Auth url

Get the url for authorize Taiga to access to your Github account.

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/importers/github/auth_url

44.2.2. Authorize

Complete the authorization process.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "code": "00000000000000000000"
    }' \
-s http://localhost:8000/api/v1/importers/github/authorize

44.2.3. List users

List the Github repository users.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "project": "user/project",
        "token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    }' \
-s http://localhost:8000/api/v1/importers/github/list_users

44.2.4. List repositories

List your Github repositories.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    }' \
-s http://localhost:8000/api/v1/importers/github/list_projects

44.2.5. Import project

Ask the server to import a repository from Github.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "description": "New project description",
        "is_private": false,
        "keep_external_reference": false,
        "name": "New project name",
        "project": "123ABC",
        "template": "kanban",
        "token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "users_bindings": {
            "user-1": "123",
            "user-2": "321"
        }
    }' \
-s http://localhost:8000/api/v1/importers/github/import
  • If taiga is working in synchronous mode the result is a 200 OK and as response body a JSON of imported project result.

  • If taiga is working in asynchronous mode the result is a 202 Accepted and as response body a JSON of import project accepted.

44.3. Jira

44.3.1. Auth url

Get the url for authorize Taiga to access to your Jira account.

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/importers/jira/auth_url?url=http://your.jira.server

44.3.2. Authorize

Complete the authorization process.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{}' \
-s http://localhost:8000/api/v1/importers/jira/authorize

44.3.3. List users

List the Jira project users.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "project": "12345",
        "token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "url": "http://your.jira.server"
    }' \
-s http://localhost:8000/api/v1/importers/jira/list_users

44.3.4. List projects

List your Jira projects.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "url": "http://your.jira.server"
    }' \
-s http://localhost:8000/api/v1/importers/jira/list_projects

44.3.5. Import project

Ask the server to import a project from Jira.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "description": "New project description",
        "is_private": false,
        "keep_external_reference": false,
        "name": "New project name",
        "project": "123",
        "project_type": "kanban",
        "token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "url": "http://your.jira.server",
        "users_bindings": {
            "user-1": "123",
            "user-2": "321"
        }
    }' \
-s http://localhost:8000/api/v1/importers/jira/import
  • If taiga is working in synchronous mode the result is a 200 OK and as response body a JSON of imported project result.

  • If taiga is working in asynchronous mode the result is a 202 Accepted and as response body a JSON of import project accepted.

44.4. Asana

44.4.1. Auth url

Get the url for authorize Taiga to access to your Asana account.

curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-s http://localhost:8000/api/v1/importers/asana/auth_url

44.4.2. Authorize

Complete the authorization process.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{}' \
-s http://localhost:8000/api/v1/importers/asana/authorize

44.4.3. List users

List the Asana project users.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "project": 12345,
        "token": {
            "access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "data": {
                "email": "user-email@email.com",
                "id": 123,
                "name": "User"
            },
            "expires_in": 3600,
            "refresh_token": "0/000000000000000000000000000000000",
            "token_type": "bearer"
        }
    }' \
-s http://localhost:8000/api/v1/importers/asana/list_users

44.4.4. List projects

List your Asana projects.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "token": {
            "access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "data": {
                "email": "user-email@email.com",
                "id": 123,
                "name": "User"
            },
            "expires_in": 3600,
            "refresh_token": "0/000000000000000000000000000000000",
            "token_type": "bearer"
        }
    }' \
-s http://localhost:8000/api/v1/importers/asana/list_projects

44.4.5. Import project

Ask the server to import a project from Asana.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "description": "New project description",
        "is_private": false,
        "keep_external_reference": false,
        "name": "New project name",
        "project": 123,
        "template": "kanban",
        "token": {
            "access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "data": {
                "email": "user-email@email.com",
                "id": 123,
                "name": "User"
            },
            "expires_in": 3600,
            "refresh_token": "0/000000000000000000000000000000000",
            "token_type": "bearer"
        },
        "users_bindings": {
            "user-1": "123",
            "user-2": "321"
        }
    }' \
-s http://localhost:8000/api/v1/importers/asana/import
  • If taiga is working in synchronous mode the result is a 200 OK and as response body a JSON of imported project result.

  • If taiga is working in asynchronous mode the result is a 202 Accepted and as response body a JSON of import project accepted.

45. Contact

45.1. Contact project

To contact the admins from a project (the project must have the contact option activated) send a POST request containing the following data:

  • project: project id

  • comment: comment for the admin staff

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d '{
        "comment": "Comment to admins",
        "project": 3
    }' \
-s http://localhost:8000/api/v1/contact

When the creation is successful, the HTTP response is a 201 Created and the response body is a JSON contact project object

46. Objects Summary

46.1. Attachment

{
    "attached_file": "attachments/3/c/3/7/68e6630883b61b1ab1e93eb69fa0cff627c227bce6ef21b9af61a8ecd638/sample_attachment_3.txt",
    "created_date": "2016-11-18T07:53:26.546Z",
    "description": "accusantium nesciunt hic consequatur animi optio veniam deserunt",
    "id": 415,
    "is_deprecated": true,
    "modified_date": "2016-11-18T07:53:26.546Z",
    "name": "sample_attachment_3.txt",
    "object_id": 62,
    "order": 1,
    "owner": 9,
    "project": 3,
    "sha1": "da2631d805f12a1b533738a0912e9b9c2261dbef",
    "size": 1178,
    "thumbnail_card_url": null,
    "url": "http://localhost:8000/media/attachments/3/c/3/7/68e6630883b61b1ab1e93eb69fa0cff627c227bce6ef21b9af61a8ecd638/sample_attachment_3.txt"
}
{
    "description": "description paragraph",
    "icon_url": null,
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "example application",
    "web": "http://example.com"
}

46.2. Application token object

{
    "application": {
        "description": "description paragraph",
        "icon_url": null,
        "id": "00000000-0000-0000-0000-000000000000",
        "name": "example application",
        "web": "http://example.com"
    },
    "auth_code": "f44f063e-ad64-11e6-8c47-68f72800aadd",
    "id": 1,
    "next_url": "http://example.com?auth_code=f44f063e-ad64-11e6-8c47-68f72800aadd",
    "user": 6
}

46.3. Authorization code object

{
    "auth_code": "f44f063e-ad64-11e6-8c47-68f72800aadd",
    "next_url": "http://example.com?auth_code=f44f063e-ad64-11e6-8c47-68f72800aadd",
    "state": "random-state"
}

46.4. Cyphered token object

{
    "token": "00000000-0000-0000-0000-000000000001"
}

46.5. User detail

{
    "big_photo": null,
    "bio": "",
    "color": "#40826D",
    "email": "user2114747470430251528@taigaio.demo",
    "full_name": "Vanesa Torres",
    "full_name_display": "Vanesa Torres",
    "gravatar_id": "b579f05d7d36f4588b11887093e4ce44",
    "id": 6,
    "is_active": true,
    "lang": "",
    "max_memberships_private_projects": null,
    "max_memberships_public_projects": null,
    "max_private_projects": null,
    "max_public_projects": null,
    "photo": null,
    "roles": [
        "Design",
        "Front",
        "Product Owner",
        "Stakeholder",
        "UX"
    ],
    "theme": "",
    "timezone": "",
    "total_private_projects": 4,
    "total_public_projects": 2,
    "username": "patchedusername"
}

46.6. User contact detail

{
    "big_photo": null,
    "bio": "",
    "color": "#FFCC00",
    "full_name": "Angela Perez",
    "full_name_display": "Angela Perez",
    "gravatar_id": "c9ba9d485f9a9153ebf53758feb0980c",
    "id": 11,
    "is_active": true,
    "lang": "",
    "photo": null,
    "roles": [
        "Front",
        "Product Owner",
        "UX"
    ],
    "theme": "",
    "timezone": "",
    "username": "user5"
}

46.7. User authentication-detail

{
    "auth_token": "eyJ1c2VyX2F1dGhlbnRpY2F0aW9uX2lkIjoxNn0:1c7e4b:mfGTXiSHaiGwpxul9Hy7V1OIVlQ",
    "big_photo": null,
    "bio": "",
    "color": "#349dea",
    "email": "test-register@email.com",
    "full_name": "test",
    "full_name_display": "test",
    "gravatar_id": "1ec29e4d0732b571e9a975e258a7e9b5",
    "id": 16,
    "is_active": true,
    "lang": "",
    "max_memberships_private_projects": null,
    "max_memberships_public_projects": null,
    "max_private_projects": null,
    "max_public_projects": null,
    "photo": null,
    "roles": [
        "Front"
    ],
    "theme": "",
    "timezone": "",
    "total_private_projects": 0,
    "total_public_projects": 0,
    "username": "test-username"
}

46.8. User stats detail

{
    "roles": [
        "Dise\u00f1ador",
        "Product Owner",
        "UX",
        "Front",
        "Stakeholder"
    ],
    "total_num_closed_userstories": 0,
    "total_num_contacts": 11,
    "total_num_projects": 11
}

46.9. Search results detail

{
    "count": 57,
    "epics": [
        {
            "assigned_to": 9,
            "id": 4,
            "ref": 66,
            "status": 3,
            "subject": "Create testsuite with matrix builds"
        },
        {
            "assigned_to": null,
            "id": 1,
            "ref": 63,
            "status": 4,
            "subject": "Support for bulk actions"
        },
        {
            "assigned_to": 14,
            "id": 3,
            "ref": 65,
            "status": 4,
            "subject": "Experimental: modular file types"
        },
        {
            "assigned_to": null,
            "id": 2,
            "ref": 64,
            "status": null,
            "subject": "get_actions() does not check for 'delete_selected' in actions"
        }
    ],
    "issues": [
        {
            "assigned_to": 15,
            "id": 17,
            "ref": 58,
            "status": 6,
            "subject": "Support for bulk actions"
        },
        {
            "assigned_to": null,
            "id": 4,
            "ref": 45,
            "status": 3,
            "subject": "Migrate to Python 3 and milk a beautiful cow"
        },
        {
            "assigned_to": 9,
            "id": 6,
            "ref": 47,
            "status": 4,
            "subject": "Implement the form"
        },
        {
            "assigned_to": 8,
            "id": 18,
            "ref": 59,
            "status": 5,
            "subject": "Create the user model"
        },
        {
            "assigned_to": 14,
            "id": 21,
            "ref": 62,
            "status": 6,
            "subject": "Create the user model"
        },
        {
            "assigned_to": 10,
            "id": 9,
            "ref": 50,
            "status": 7,
            "subject": "Implement the form"
        },
        {
            "assigned_to": null,
            "id": 13,
            "ref": 54,
            "status": 5,
            "subject": "Experimental: modular file types"
        },
        {
            "assigned_to": 14,
            "id": 20,
            "ref": 61,
            "status": 1,
            "subject": "Create testsuite with matrix builds"
        },
        {
            "assigned_to": 11,
            "id": 14,
            "ref": 55,
            "status": 7,
            "subject": "Experimental: modular file types"
        },
        {
            "assigned_to": null,
            "id": 15,
            "ref": 56,
            "status": 5,
            "subject": "Create the html template"
        },
        {
            "assigned_to": 9,
            "id": 5,
            "ref": 46,
            "status": 5,
            "subject": "Experimental: modular file types"
        },
        {
            "assigned_to": 9,
            "id": 16,
            "ref": 57,
            "status": 2,
            "subject": "Lighttpd support"
        },
        {
            "assigned_to": 6,
            "id": 12,
            "ref": 53,
            "status": 2,
            "subject": "Add tests for bulk operations"
        },
        {
            "assigned_to": null,
            "id": 2,
            "ref": 43,
            "status": 4,
            "subject": "Implement the form"
        },
        {
            "assigned_to": 15,
            "id": 8,
            "ref": 49,
            "status": 7,
            "subject": "Implement the form"
        },
        {
            "assigned_to": 12,
            "id": 1,
            "ref": 42,
            "status": 4,
            "subject": "Exception is thrown if trying to add a folder with existing name"
        },
        {
            "assigned_to": 12,
            "id": 7,
            "ref": 48,
            "status": 4,
            "subject": "Migrate to Python 3 and milk a beautiful cow"
        }
    ],
    "tasks": [
        {
            "assigned_to": 12,
            "id": 3,
            "ref": 4,
            "status": 5,
            "subject": "Add setting to allow regular users to create folders at the root level."
        },
        {
            "assigned_to": 9,
            "id": 18,
            "ref": 23,
            "status": 2,
            "subject": "get_actions() does not check for 'delete_selected' in actions"
        },
        {
            "assigned_to": 6,
            "id": 2,
            "ref": 3,
            "status": 2,
            "subject": "Lighttpd support"
        },
        {
            "assigned_to": 7,
            "id": 20,
            "ref": 26,
            "status": 3,
            "subject": "Lighttpd support"
        },
        {
            "assigned_to": 9,
            "id": 16,
            "ref": 21,
            "status": 1,
            "subject": "Add setting to allow regular users to create folders at the root level."
        },
        {
            "assigned_to": 11,
            "id": 14,
            "ref": 19,
            "status": 3,
            "subject": "Lighttpd support"
        },
        {
            "assigned_to": 8,
            "id": 7,
            "ref": 9,
            "status": 1,
            "subject": "Added file copying and processing of images (resizing)"
        },
        {
            "assigned_to": 9,
            "id": 11,
            "ref": 15,
            "status": 4,
            "subject": "Create the user model"
        },
        {
            "assigned_to": 5,
            "id": 6,
            "ref": 8,
            "status": 4,
            "subject": "Lighttpd x-sendfile support"
        },
        {
            "assigned_to": 14,
            "id": 8,
            "ref": 10,
            "status": 1,
            "subject": "Create testsuite with matrix builds"
        },
        {
            "assigned_to": 11,
            "id": 9,
            "ref": 11,
            "status": 3,
            "subject": "Create the user model"
        },
        {
            "assigned_to": 7,
            "id": 10,
            "ref": 13,
            "status": 1,
            "subject": "Exception is thrown if trying to add a folder with existing name"
        },
        {
            "assigned_to": 12,
            "id": 1,
            "ref": 2,
            "status": 3,
            "subject": "Patching subject"
        },
        {
            "assigned_to": 14,
            "id": 5,
            "ref": 7,
            "status": 4,
            "subject": "Fixing templates for Django 1.6."
        },
        {
            "assigned_to": 13,
            "id": 22,
            "ref": 28,
            "status": 4,
            "subject": "Added file copying and processing of images (resizing)"
        },
        {
            "assigned_to": 8,
            "id": 21,
            "ref": 27,
            "status": 1,
            "subject": "Create the user model"
        },
        {
            "assigned_to": 15,
            "id": 4,
            "ref": 5,
            "status": 2,
            "subject": "Lighttpd x-sendfile support"
        },
        {
            "assigned_to": 15,
            "id": 19,
            "ref": 25,
            "status": 3,
            "subject": "Create testsuite with matrix builds"
        },
        {
            "assigned_to": 8,
            "id": 12,
            "ref": 16,
            "status": 4,
            "subject": "get_actions() does not check for 'delete_selected' in actions"
        }
    ],
    "userstories": [
        {
            "id": 12,
            "milestone_name": null,
            "milestone_slug": null,
            "ref": 34,
            "status": 1,
            "subject": "Implement the form",
            "total_points": 50.0
        },
        {
            "id": 15,
            "milestone_name": null,
            "milestone_slug": null,
            "ref": 37,
            "status": 4,
            "subject": "Create testsuite with matrix builds",
            "total_points": 22.0
        },
        {
            "id": 10,
            "milestone_name": null,
            "milestone_slug": null,
            "ref": 32,
            "status": 4,
            "subject": "Exception is thrown if trying to add a folder with existing name",
            "total_points": 16.0
        },
        {
            "id": 13,
            "milestone_name": null,
            "milestone_slug": null,
            "ref": 35,
            "status": 3,
            "subject": "Migrate to Python 3 and milk a beautiful cow",
            "total_points": 53.0
        },
        {
            "id": 5,
            "milestone_name": "Sprint 2016-10-9",
            "milestone_slug": "sprint-2016-10-9",
            "ref": 18,
            "status": 1,
            "subject": "Fixing templates for Django 1.6.",
            "total_points": 31.0
        },
        {
            "id": 1,
            "milestone_name": "Sprint 2016-9-24",
            "milestone_slug": "sprint-2016-9-24",
            "ref": 1,
            "status": 3,
            "subject": "Patching subject",
            "total_points": 44.0
        },
        {
            "id": 17,
            "milestone_name": null,
            "milestone_slug": null,
            "ref": 39,
            "status": 3,
            "subject": "Implement the form",
            "total_points": 56.0
        },
        {
            "id": 16,
            "milestone_name": null,
            "milestone_slug": null,
            "ref": 38,
            "status": 2,
            "subject": "Fixing templates for Django 1.6.",
            "total_points": 88.0
        },
        {
            "id": 9,
            "milestone_name": null,
            "milestone_slug": null,
            "ref": 31,
            "status": 4,
            "subject": "Add tests for bulk operations",
            "total_points": 23.0
        },
        {
            "id": 18,
            "milestone_name": null,
            "milestone_slug": null,
            "ref": 40,
            "status": 2,
            "subject": "get_actions() does not check for 'delete_selected' in actions",
            "total_points": 21.5
        },
        {
            "id": 3,
            "milestone_name": "Sprint 2016-9-24",
            "milestone_slug": "sprint-2016-9-24",
            "ref": 12,
            "status": 2,
            "subject": "Create the user model",
            "total_points": 21.0
        }
    ],
    "wikipages": [
        {
            "id": 1,
            "slug": "home"
        },
        {
            "id": 6,
            "slug": "nam-rerum"
        },
        {
            "id": 3,
            "slug": "mollitia-deserunt-in"
        },
        {
            "id": 4,
            "slug": "consequuntur-qui"
        },
        {
            "id": 2,
            "slug": "repellendus-similique"
        },
        {
            "id": 5,
            "slug": "eius"
        }
    ]
}

46.10. User storage data

{
    "created_date": "2016-11-18T07:59:27.576Z",
    "key": "favorite-forest",
    "modified_date": "2016-11-18T07:59:27.610Z",
    "value": "Russian Taiga"
}

47. Project templates detail

{
    "created_date": "2014-04-22T14:48:43.596Z",
    "default_options": {
        "epic_status": "New",
        "issue_status": "New",
        "issue_type": "Bug",
        "points": "?",
        "priority": "Normal",
        "severity": "Normal",
        "task_status": "New",
        "us_status": "New"
    },
    "default_owner_role": "product-owner",
    "description": "New description",
    "epic_statuses": [
        {
            "color": "#999999",
            "is_closed": false,
            "name": "New",
            "order": 1,
            "slug": "new"
        },
        {
            "color": "#ff8a84",
            "is_closed": false,
            "name": "Ready",
            "order": 2,
            "slug": "ready"
        },
        {
            "color": "#ff9900",
            "is_closed": false,
            "name": "In progress",
            "order": 3,
            "slug": "in-progress"
        },
        {
            "color": "#fcc000",
            "is_closed": false,
            "name": "Ready for test",
            "order": 4,
            "slug": "ready-for-test"
        },
        {
            "color": "#669900",
            "is_closed": true,
            "name": "Done",
            "order": 5,
            "slug": "done"
        }
    ],
    "id": 1,
    "is_backlog_activated": true,
    "is_contact_activated": true,
    "is_epics_activated": false,
    "is_issues_activated": true,
    "is_kanban_activated": false,
    "is_wiki_activated": true,
    "issue_statuses": [
        {
            "color": "#8C2318",
            "is_closed": false,
            "name": "New",
            "order": 1,
            "slug": "new"
        },
        {
            "color": "#5E8C6A",
            "is_closed": false,
            "name": "In progress",
            "order": 2,
            "slug": "in-progress"
        },
        {
            "color": "#88A65E",
            "is_closed": true,
            "name": "Ready for test",
            "order": 3,
            "slug": "ready-for-test"
        },
        {
            "color": "#BFB35A",
            "is_closed": true,
            "name": "Closed",
            "order": 4,
            "slug": "closed"
        },
        {
            "color": "#89BAB4",
            "is_closed": false,
            "name": "Needs Info",
            "order": 5,
            "slug": "needs-info"
        },
        {
            "color": "#CC0000",
            "is_closed": true,
            "name": "Rejected",
            "order": 6,
            "slug": "rejected"
        },
        {
            "color": "#666666",
            "is_closed": false,
            "name": "Postponed",
            "order": 7,
            "slug": "posponed"
        }
    ],
    "issue_types": [
        {
            "color": "#89BAB4",
            "name": "Bug",
            "order": 1
        },
        {
            "color": "#ba89a8",
            "name": "Question",
            "order": 2
        },
        {
            "color": "#89a8ba",
            "name": "Enhancement",
            "order": 3
        }
    ],
    "modified_date": "2016-11-18T07:59:38.889Z",
    "name": "Scrum",
    "order": 1,
    "points": [
        {
            "name": "?",
            "order": 1,
            "value": null
        },
        {
            "name": "0",
            "order": 2,
            "value": 0.0
        },
        {
            "name": "1/2",
            "order": 3,
            "value": 0.5
        },
        {
            "name": "1",
            "order": 4,
            "value": 1.0
        },
        {
            "name": "2",
            "order": 5,
            "value": 2.0
        },
        {
            "name": "3",
            "order": 6,
            "value": 3.0
        },
        {
            "name": "5",
            "order": 7,
            "value": 5.0
        },
        {
            "name": "8",
            "order": 8,
            "value": 8.0
        },
        {
            "name": "10",
            "order": 9,
            "value": 10.0
        },
        {
            "name": "13",
            "order": 10,
            "value": 13.0
        },
        {
            "name": "20",
            "order": 11,
            "value": 20.0
        },
        {
            "name": "40",
            "order": 12,
            "value": 40.0
        }
    ],
    "priorities": [
        {
            "color": "#666666",
            "name": "Low",
            "order": 1
        },
        {
            "color": "#669933",
            "name": "Normal",
            "order": 3
        },
        {
            "color": "#CC0000",
            "name": "High",
            "order": 5
        }
    ],
    "roles": [
        {
            "computable": true,
            "name": "UX",
            "order": 10,
            "permissions": [
                "add_issue",
                "modify_issue",
                "delete_issue",
                "view_issues",
                "add_milestone",
                "modify_milestone",
                "delete_milestone",
                "view_milestones",
                "view_project",
                "add_task",
                "modify_task",
                "delete_task",
                "view_tasks",
                "add_us",
                "modify_us",
                "delete_us",
                "view_us",
                "add_wiki_page",
                "modify_wiki_page",
                "delete_wiki_page",
                "view_wiki_pages",
                "add_wiki_link",
                "delete_wiki_link",
                "view_wiki_links",
                "view_epics",
                "add_epic",
                "modify_epic",
                "delete_epic",
                "comment_epic",
                "comment_us",
                "comment_task",
                "comment_issue",
                "comment_wiki_page"
            ],
            "slug": "ux"
        },
        {
            "computable": true,
            "name": "Design",
            "order": 20,
            "permissions": [
                "add_issue",
                "modify_issue",
                "delete_issue",
                "view_issues",
                "add_milestone",
                "modify_milestone",
                "delete_milestone",
                "view_milestones",
                "view_project",
                "add_task",
                "modify_task",
                "delete_task",
                "view_tasks",
                "add_us",
                "modify_us",
                "delete_us",
                "view_us",
                "add_wiki_page",
                "modify_wiki_page",
                "delete_wiki_page",
                "view_wiki_pages",
                "add_wiki_link",
                "delete_wiki_link",
                "view_wiki_links",
                "view_epics",
                "add_epic",
                "modify_epic",
                "delete_epic",
                "comment_epic",
                "comment_us",
                "comment_task",
                "comment_issue",
                "comment_wiki_page"
            ],
            "slug": "design"
        },
        {
            "computable": true,
            "name": "Front",
            "order": 30,
            "permissions": [
                "add_issue",
                "modify_issue",
                "delete_issue",
                "view_issues",
                "add_milestone",
                "modify_milestone",
                "delete_milestone",
                "view_milestones",
                "view_project",
                "add_task",
                "modify_task",
                "delete_task",
                "view_tasks",
                "add_us",
                "modify_us",
                "delete_us",
                "view_us",
                "add_wiki_page",
                "modify_wiki_page",
                "delete_wiki_page",
                "view_wiki_pages",
                "add_wiki_link",
                "delete_wiki_link",
                "view_wiki_links",
                "view_epics",
                "add_epic",
                "modify_epic",
                "delete_epic",
                "comment_epic",
                "comment_us",
                "comment_task",
                "comment_issue",
                "comment_wiki_page"
            ],
            "slug": "front"
        },
        {
            "computable": true,
            "name": "Back",
            "order": 40,
            "permissions": [
                "add_issue",
                "modify_issue",
                "delete_issue",
                "view_issues",
                "add_milestone",
                "modify_milestone",
                "delete_milestone",
                "view_milestones",
                "view_project",
                "add_task",
                "modify_task",
                "delete_task",
                "view_tasks",
                "add_us",
                "modify_us",
                "delete_us",
                "view_us",
                "add_wiki_page",
                "modify_wiki_page",
                "delete_wiki_page",
                "view_wiki_pages",
                "add_wiki_link",
                "delete_wiki_link",
                "view_wiki_links",
                "view_epics",
                "add_epic",
                "modify_epic",
                "delete_epic",
                "comment_epic",
                "comment_us",
                "comment_task",
                "comment_issue",
                "comment_wiki_page"
            ],
            "slug": "back"
        },
        {
            "computable": false,
            "name": "Product Owner",
            "order": 50,
            "permissions": [
                "add_issue",
                "modify_issue",
                "delete_issue",
                "view_issues",
                "add_milestone",
                "modify_milestone",
                "delete_milestone",
                "view_milestones",
                "view_project",
                "add_task",
                "modify_task",
                "delete_task",
                "view_tasks",
                "add_us",
                "modify_us",
                "delete_us",
                "view_us",
                "add_wiki_page",
                "modify_wiki_page",
                "delete_wiki_page",
                "view_wiki_pages",
                "add_wiki_link",
                "delete_wiki_link",
                "view_wiki_links",
                "view_epics",
                "add_epic",
                "modify_epic",
                "delete_epic",
                "comment_epic",
                "comment_us",
                "comment_task",
                "comment_issue",
                "comment_wiki_page"
            ],
            "slug": "product-owner"
        },
        {
            "computable": false,
            "name": "Stakeholder",
            "order": 60,
            "permissions": [
                "add_issue",
                "modify_issue",
                "delete_issue",
                "view_issues",
                "view_milestones",
                "view_project",
                "view_tasks",
                "view_us",
                "modify_wiki_page",
                "view_wiki_pages",
                "add_wiki_link",
                "delete_wiki_link",
                "view_wiki_links",
                "view_epics",
                "comment_epic",
                "comment_us",
                "comment_task",
                "comment_issue",
                "comment_wiki_page"
            ],
            "slug": "stakeholder"
        }
    ],
    "severities": [
        {
            "color": "#666666",
            "name": "Wishlist",
            "order": 1
        },
        {
            "color": "#669933",
            "name": "Minor",
            "order": 2
        },
        {
            "color": "#0000FF",
            "name": "Normal",
            "order": 3
        },
        {
            "color": "#FFA500",
            "name": "Important",
            "order": 4
        },
        {
            "color": "#CC0000",
            "name": "Critical",
            "order": 5
        }
    ],
    "slug": "scrum",
    "task_statuses": [
        {
            "color": "#999999",
            "is_closed": false,
            "name": "New",
            "order": 1,
            "slug": "new"
        },
        {
            "color": "#ff9900",
            "is_closed": false,
            "name": "In progress",
            "order": 2,
            "slug": "in-progress"
        },
        {
            "color": "#ffcc00",
            "is_closed": true,
            "name": "Ready for test",
            "order": 3,
            "slug": "ready-for-test"
        },
        {
            "color": "#669900",
            "is_closed": true,
            "name": "Closed",
            "order": 4,
            "slug": "closed"
        },
        {
            "color": "#999999",
            "is_closed": false,
            "name": "Needs Info",
            "order": 5,
            "slug": "needs-info"
        }
    ],
    "us_statuses": [
        {
            "color": "#999999",
            "is_archived": false,
            "is_closed": false,
            "name": "New",
            "order": 1,
            "slug": "new",
            "wip_limit": null
        },
        {
            "color": "#ff8a84",
            "is_archived": false,
            "is_closed": false,
            "name": "Ready",
            "order": 2,
            "slug": "ready",
            "wip_limit": null
        },
        {
            "color": "#ff9900",
            "is_archived": false,
            "is_closed": false,
            "name": "In progress",
            "order": 3,
            "slug": "in-progress",
            "wip_limit": null
        },
        {
            "color": "#fcc000",
            "is_archived": false,
            "is_closed": false,
            "name": "Ready for test",
            "order": 4,
            "slug": "ready-for-test",
            "wip_limit": null
        },
        {
            "color": "#669900",
            "is_archived": false,
            "is_closed": true,
            "name": "Done",
            "order": 5,
            "slug": "done",
            "wip_limit": null
        },
        {
            "color": "#5c3566",
            "is_archived": true,
            "is_closed": true,
            "name": "Archived",
            "order": 6,
            "slug": "archived",
            "wip_limit": null
        }
    ],
    "videoconferences": null,
    "videoconferences_extra_data": ""
}

47.1. Project list entry

{
    "anon_permissions": [],
    "blocked_code": null,
    "created_date": "2016-11-18T07:59:29.387Z",
    "creation_template": 1,
    "default_epic_status": 38,
    "default_issue_status": 59,
    "default_issue_type": 25,
    "default_points": 97,
    "default_priority": 28,
    "default_severity": 45,
    "default_task_status": 43,
    "default_us_status": 49,
    "description": "Beta description",
    "i_am_admin": true,
    "i_am_member": true,
    "i_am_owner": true,
    "id": 9,
    "is_backlog_activated": true,
    "is_contact_activated": true,
    "is_epics_activated": false,
    "is_fan": false,
    "is_featured": false,
    "is_issues_activated": true,
    "is_kanban_activated": false,
    "is_looking_for_people": false,
    "is_private": true,
    "is_watcher": true,
    "is_wiki_activated": true,
    "logo_big_url": null,
    "logo_small_url": null,
    "looking_for_people_note": "",
    "members": [
        6
    ],
    "modified_date": "2016-11-18T07:59:29.501Z",
    "my_permissions": [
        "modify_issue",
        "modify_epic",
        "add_issue",
        "modify_us",
        "delete_wiki_page",
        "delete_epic",
        "modify_milestone",
        "add_wiki_page",
        "comment_wiki_page",
        "view_wiki_pages",
        "add_member",
        "delete_us",
        "modify_project",
        "delete_project",
        "remove_member",
        "view_epics",
        "modify_wiki_page",
        "view_wiki_links",
        "view_tasks",
        "add_wiki_link",
        "view_issues",
        "comment_us",
        "modify_wiki_link",
        "view_project",
        "comment_task",
        "delete_wiki_link",
        "admin_project_values",
        "add_us",
        "delete_task",
        "add_epic",
        "delete_milestone",
        "admin_roles",
        "view_milestones",
        "modify_task",
        "comment_issue",
        "delete_issue",
        "comment_epic",
        "view_us",
        "add_milestone",
        "add_task"
    ],
    "name": "Beta project",
    "notify_level": 1,
    "owner": {
        "big_photo": null,
        "full_name_display": "Vanesa Torres",
        "gravatar_id": "b579f05d7d36f4588b11887093e4ce44",
        "id": 6,
        "is_active": true,
        "photo": null,
        "username": "user2114747470430251528"
    },
    "public_permissions": [],
    "slug": "user2114747470430251528-beta-project",
    "tags": [],
    "tags_colors": {},
    "total_activity": 1,
    "total_activity_last_month": 1,
    "total_activity_last_week": 1,
    "total_activity_last_year": 1,
    "total_closed_milestones": 0,
    "total_fans": 0,
    "total_fans_last_month": 0,
    "total_fans_last_week": 0,
    "total_fans_last_year": 0,
    "total_milestones": null,
    "total_story_points": null,
    "total_watchers": 1,
    "totals_updated_datetime": "2016-11-18T07:59:29.532Z",
    "videoconferences": null,
    "videoconferences_extra_data": null
}

47.2. Project detail

{
    "anon_permissions": [],
    "blocked_code": null,
    "created_date": "2016-11-18T07:52:21.932Z",
    "creation_template": null,
    "default_epic_status": null,
    "default_issue_status": null,
    "default_issue_type": null,
    "default_points": null,
    "default_priority": null,
    "default_severity": null,
    "default_task_status": null,
    "default_us_status": null,
    "description": "Beta description",
    "epic_custom_attributes": [
        {
            "created_date": "2016-11-18T07:52:22.60559+00:00",
            "description": "aut nostrum consequatur quasi odio et",
            "id": 1,
            "modified_date": "2016-11-18T07:52:22.605611+00:00",
            "name": "enim similique",
            "order": 1,
            "project_id": 1,
            "type": "multiline"
        },
        {
            "created_date": "2016-11-18T07:52:22.607836+00:00",
            "description": "id distinctio sequi amet incidunt",
            "id": 2,
            "modified_date": "2016-11-18T07:52:22.607873+00:00",
            "name": "quod",
            "order": 1,
            "project_id": 1,
            "type": "multiline"
        },
        {
            "created_date": "2016-11-18T07:52:22.608882+00:00",
            "description": "ratione eius necessitatibus ad quibusdam",
            "id": 3,
            "modified_date": "2016-11-18T07:52:22.608901+00:00",
            "name": "dolores",
            "order": 1,
            "project_id": 1,
            "type": "date"
        },
        {
            "created_date": "2016-11-18T07:52:22.60975+00:00",
            "description": "ratione doloribus explicabo",
            "id": 4,
            "modified_date": "2016-11-18T07:52:22.609773+00:00",
            "name": "corrupti totam voluptatibus",
            "order": 1,
            "project_id": 1,
            "type": "multiline"
        },
        {
            "created_date": "2016-11-18T07:52:22.610685+00:00",
            "description": "nostrum asperiores eveniet libero consequuntur expedita velit accusantium",
            "id": 5,
            "modified_date": "2016-11-18T07:52:22.610708+00:00",
            "name": "odit",
            "order": 1,
            "project_id": 1,
            "type": "url"
        },
        {
            "created_date": "2016-11-18T07:59:05.126086+00:00",
            "description": "Duration in minutes",
            "id": 26,
            "modified_date": "2016-11-18T07:59:05.134205+00:00",
            "name": "Duration 2",
            "order": 8,
            "project_id": 1,
            "type": "text"
        },
        {
            "created_date": "2016-11-18T07:59:05.167735+00:00",
            "description": "",
            "id": 27,
            "modified_date": "2016-11-18T07:59:05.175112+00:00",
            "name": "Duration 3",
            "order": 1479455945161,
            "project_id": 1,
            "type": "text"
        }
    ],
    "epic_statuses": [
        {
            "color": "#ff9900",
            "id": 3,
            "is_closed": false,
            "name": "En curso",
            "order": 3,
            "project_id": 1,
            "slug": "in-progress"
        },
        {
            "color": "#fcc000",
            "id": 4,
            "is_closed": false,
            "name": "Lista para testear",
            "order": 4,
            "project_id": 1,
            "slug": "ready-for-test"
        },
        {
            "color": "#669900",
            "id": 5,
            "is_closed": true,
            "name": "Hecha",
            "order": 5,
            "project_id": 1,
            "slug": "done"
        },
        {
            "color": "#ff8a84",
            "id": 2,
            "is_closed": false,
            "name": "Preparada",
            "order": 5,
            "project_id": 1,
            "slug": "ready"
        },
        {
            "color": "#AAAAAA",
            "id": 36,
            "is_closed": true,
            "name": "New status",
            "order": 8,
            "project_id": 1,
            "slug": "new-status"
        },
        {
            "color": "#999999",
            "id": 37,
            "is_closed": false,
            "name": "New status name",
            "order": 10,
            "project_id": 1,
            "slug": "new-status-name"
        }
    ],
    "epics_csv_uuid": null,
    "i_am_admin": true,
    "i_am_member": true,
    "i_am_owner": true,
    "id": 1,
    "is_backlog_activated": true,
    "is_contact_activated": true,
    "is_epics_activated": false,
    "is_fan": false,
    "is_featured": false,
    "is_issues_activated": true,
    "is_kanban_activated": false,
    "is_looking_for_people": false,
    "is_out_of_owner_limits": false,
    "is_private": true,
    "is_private_extra_info": {
        "can_be_updated": true,
        "reason": null
    },
    "is_watcher": false,
    "is_wiki_activated": true,
    "issue_custom_attributes": [
        {
            "created_date": "2016-11-18T07:52:22.625432+00:00",
            "description": "officiis repudiandae dignissimos similique consequatur mollitia at enim ad molestias praesentium",
            "id": 1,
            "modified_date": "2016-11-18T07:52:22.625457+00:00",
            "name": "doloribus ducimus nulla",
            "order": 1,
            "project_id": 1,
            "type": "date"
        },
        {
            "created_date": "2016-11-18T07:52:22.626887+00:00",
            "description": "minus quibusdam neque eveniet repellendus ex dolorum optio ullam vitae",
            "id": 2,
            "modified_date": "2016-11-18T07:52:22.626912+00:00",
            "name": "doloremque id",
            "order": 1,
            "project_id": 1,
            "type": "url"
        },
        {
            "created_date": "2016-11-18T07:52:22.627843+00:00",
            "description": "facere corrupti ipsa odit mollitia saepe officiis",
            "id": 3,
            "modified_date": "2016-11-18T07:52:22.627867+00:00",
            "name": "fugiat optio consequuntur",
            "order": 1,
            "project_id": 1,
            "type": "date"
        },
        {
            "created_date": "2016-11-18T07:52:22.628735+00:00",
            "description": "fugiat porro officia deleniti quidem ipsam",
            "id": 4,
            "modified_date": "2016-11-18T07:52:22.628758+00:00",
            "name": "adipisci exercitationem",
            "order": 1,
            "project_id": 1,
            "type": "text"
        },
        {
            "created_date": "2016-11-18T07:52:22.629701+00:00",
            "description": "voluptate rem perspiciatis ipsum",
            "id": 5,
            "modified_date": "2016-11-18T07:52:22.629735+00:00",
            "name": "velit",
            "order": 1,
            "project_id": 1,
            "type": "url"
        }
    ],
    "issue_statuses": [
        {
            "color": "#88A65E",
            "id": 3,
            "is_closed": true,
            "name": "Lista para testear",
            "order": 3,
            "project_id": 1,
            "slug": "ready-for-test"
        },
        {
            "color": "#BFB35A",
            "id": 4,
            "is_closed": true,
            "name": "Cerrada",
            "order": 4,
            "project_id": 1,
            "slug": "closed"
        },
        {
            "color": "#5E8C6A",
            "id": 2,
            "is_closed": false,
            "name": "En curso",
            "order": 5,
            "project_id": 1,
            "slug": "in-progress"
        },
        {
            "color": "#89BAB4",
            "id": 5,
            "is_closed": false,
            "name": "Necesita informaci\u00f3n",
            "order": 5,
            "project_id": 1,
            "slug": "needs-info"
        },
        {
            "color": "#CC0000",
            "id": 6,
            "is_closed": true,
            "name": "Rechazada",
            "order": 6,
            "project_id": 1,
            "slug": "rejected"
        },
        {
            "color": "#666666",
            "id": 7,
            "is_closed": false,
            "name": "Pospuesta",
            "order": 7,
            "project_id": 1,
            "slug": "postponed"
        },
        {
            "color": "#AAAAAA",
            "id": 50,
            "is_closed": true,
            "name": "New status",
            "order": 8,
            "project_id": 1,
            "slug": "new-status"
        },
        {
            "color": "#999999",
            "id": 51,
            "is_closed": false,
            "name": "New status name",
            "order": 10,
            "project_id": 1,
            "slug": "new-status-name"
        },
        {
            "color": "#8C2318",
            "id": 1,
            "is_closed": false,
            "name": "Patch status name",
            "order": 10,
            "project_id": 1,
            "slug": "patch-status-name"
        }
    ],
    "issue_types": [
        {
            "color": "#89BAB4",
            "id": 1,
            "name": "Bug",
            "order": 1,
            "project_id": 1
        },
        {
            "color": "#ba89a8",
            "id": 2,
            "name": "Pregunta",
            "order": 2,
            "project_id": 1
        },
        {
            "color": "#89a8ba",
            "id": 3,
            "name": "Mejora",
            "order": 3,
            "project_id": 1
        }
    ],
    "issues_csv_uuid": null,
    "logo_big_url": "http://localhost:8000/media/project/0/6/e/e/de740e1db4660f627ccc1cbad23fbc5ce3aaa124bffd65ffa95f6c0a25ef/test.png.300x300_q85_crop.png",
    "logo_small_url": "http://localhost:8000/media/project/0/6/e/e/de740e1db4660f627ccc1cbad23fbc5ce3aaa124bffd65ffa95f6c0a25ef/test.png.80x80_q85_crop.png",
    "looking_for_people_note": "",
    "max_memberships": null,
    "members": [
        {
            "color": "",
            "full_name": "Administrator",
            "full_name_display": "Administrator",
            "gravatar_id": "64e1b8d34f425d19e1ee2ea7236d3028",
            "id": 5,
            "is_active": true,
            "photo": null,
            "role": 4,
            "role_name": "Back",
            "username": "admin"
        },
        {
            "color": "#FFCC00",
            "full_name": "Angela Perez",
            "full_name_display": "Angela Perez",
            "gravatar_id": "c9ba9d485f9a9153ebf53758feb0980c",
            "id": 11,
            "is_active": true,
            "photo": null,
            "role": 5,
            "role_name": "Product Owner",
            "username": "user5"
        },
        {
            "color": "#40826D",
            "full_name": "Bego\u00f1a Flores",
            "full_name_display": "Bego\u00f1a Flores",
            "gravatar_id": "aed1e43be0f69f07ce6f34a907bc6328",
            "id": 7,
            "is_active": true,
            "photo": null,
            "role": 5,
            "role_name": "Product Owner",
            "username": "user1"
        },
        {
            "color": "#B6DA55",
            "full_name": "Catalina Fernandez",
            "full_name_display": "Catalina Fernandez",
            "gravatar_id": "9971a763f5dfc5cbd1ce1d2865b4fcfa",
            "id": 9,
            "is_active": true,
            "photo": null,
            "role": 3,
            "role_name": "Front",
            "username": "user3"
        },
        {
            "color": "#2099DB",
            "full_name": "Enrique Crespo",
            "full_name_display": "Enrique Crespo",
            "gravatar_id": "f31e0063c7cd6da19b6467bc48d2b14b",
            "id": 10,
            "is_active": true,
            "photo": null,
            "role": 4,
            "role_name": "Back",
            "username": "user4"
        },
        {
            "color": "#71A6D2",
            "full_name": "Francisco Gil",
            "full_name_display": "Francisco Gil",
            "gravatar_id": "5c921c7bd676b7b4992501005d243c42",
            "id": 8,
            "is_active": true,
            "photo": null,
            "role": 1,
            "role_name": "UX",
            "username": "user2"
        },
        {
            "color": "#002e33",
            "full_name": "Miguel Molina",
            "full_name_display": "Miguel Molina",
            "gravatar_id": "dce0e8ed702cd85d5132e523121e619b",
            "id": 14,
            "is_active": true,
            "photo": null,
            "role": 5,
            "role_name": "Product Owner",
            "username": "user8"
        },
        {
            "color": "#B6DA55",
            "full_name": "Mohamed Ortega",
            "full_name_display": "Mohamed Ortega",
            "gravatar_id": "6d7e702bd6c6fc568fca7577f9ca8c55",
            "id": 13,
            "is_active": true,
            "photo": null,
            "role": 6,
            "role_name": "Stakeholder",
            "username": "user7"
        },
        {
            "color": "#349dea",
            "full_name": "test",
            "full_name_display": "test",
            "gravatar_id": "1ec29e4d0732b571e9a975e258a7e9b5",
            "id": 16,
            "is_active": true,
            "photo": null,
            "role": 3,
            "role_name": "Front",
            "username": "test-username"
        },
        {
            "color": "#71A6D2",
            "full_name": "Vanesa Garcia",
            "full_name_display": "Vanesa Garcia",
            "gravatar_id": "74cb769a5e64d445b8550789e1553502",
            "id": 12,
            "is_active": true,
            "photo": null,
            "role": 6,
            "role_name": "Stakeholder",
            "username": "user6"
        },
        {
            "color": "#40826D",
            "full_name": "Vanesa Torres",
            "full_name_display": "Vanesa Torres",
            "gravatar_id": "b579f05d7d36f4588b11887093e4ce44",
            "id": 6,
            "is_active": true,
            "photo": null,
            "role": 2,
            "role_name": "Design",
            "username": "user2114747470430251528"
        },
        {
            "color": "#FFFF00",
            "full_name": "Virginia Castro",
            "full_name_display": "Virginia Castro",
            "gravatar_id": "69b60d39a450e863609ae3546b12b360",
            "id": 15,
            "is_active": true,
            "photo": null,
            "role": 6,
            "role_name": "Stakeholder",
            "username": "user9"
        }
    ],
    "milestones": [
        {
            "closed": false,
            "id": 1,
            "name": "Sprint 2016-9-24",
            "slug": "sprint-2016-9-24"
        },
        {
            "closed": false,
            "id": 2,
            "name": "Sprint 2016-10-9",
            "slug": "sprint-2016-10-9"
        }
    ],
    "modified_date": "2016-11-18T07:59:29.289Z",
    "my_permissions": [
        "modify_issue",
        "modify_epic",
        "add_issue",
        "modify_us",
        "delete_wiki_page",
        "delete_epic",
        "modify_milestone",
        "add_wiki_page",
        "comment_wiki_page",
        "view_wiki_pages",
        "add_member",
        "delete_us",
        "modify_project",
        "delete_project",
        "remove_member",
        "view_epics",
        "modify_wiki_page",
        "view_wiki_links",
        "view_tasks",
        "add_wiki_link",
        "view_issues",
        "comment_us",
        "modify_wiki_link",
        "view_project",
        "comment_task",
        "delete_wiki_link",
        "admin_project_values",
        "add_us",
        "delete_task",
        "add_epic",
        "delete_milestone",
        "admin_roles",
        "view_milestones",
        "modify_task",
        "comment_issue",
        "delete_issue",
        "comment_epic",
        "view_us",
        "add_milestone",
        "add_task"
    ],
    "name": "Beta project patch",
    "notify_level": 3,
    "owner": {
        "big_photo": null,
        "full_name_display": "Vanesa Torres",
        "gravatar_id": "b579f05d7d36f4588b11887093e4ce44",
        "id": 6,
        "is_active": true,
        "photo": null,
        "username": "user2114747470430251528"
    },
    "points": [
        {
            "id": 1,
            "name": "?",
            "order": 1,
            "project_id": 1,
            "value": null
        },
        {
            "id": 2,
            "name": "0",
            "order": 2,
            "project_id": 1,
            "value": 0
        },
        {
            "id": 3,
            "name": "1/2",
            "order": 3,
            "project_id": 1,
            "value": 0.5
        },
        {
            "id": 4,
            "name": "1",
            "order": 4,
            "project_id": 1,
            "value": 1
        },
        {
            "id": 5,
            "name": "2",
            "order": 5,
            "project_id": 1,
            "value": 2
        },
        {
            "id": 6,
            "name": "3",
            "order": 6,
            "project_id": 1,
            "value": 3
        },
        {
            "id": 7,
            "name": "5",
            "order": 7,
            "project_id": 1,
            "value": 5
        },
        {
            "id": 8,
            "name": "8",
            "order": 8,
            "project_id": 1,
            "value": 8
        },
        {
            "id": 9,
            "name": "10",
            "order": 9,
            "project_id": 1,
            "value": 10
        },
        {
            "id": 10,
            "name": "13",
            "order": 10,
            "project_id": 1,
            "value": 13
        },
        {
            "id": 11,
            "name": "20",
            "order": 11,
            "project_id": 1,
            "value": 20
        },
        {
            "id": 12,
            "name": "40",
            "order": 12,
            "project_id": 1,
            "value": 40
        }
    ],
    "priorities": [
        {
            "color": "#CC0000",
            "id": 3,
            "name": "Alta",
            "order": 5,
            "project_id": 1
        },
        {
            "color": "#669933",
            "id": 2,
            "name": "Normal",
            "order": 5,
            "project_id": 1
        },
        {
            "color": "#AAAAAA",
            "id": 25,
            "name": "New priority",
            "order": 8,
            "project_id": 1
        },
        {
            "color": "#999999",
            "id": 26,
            "name": "New priority name",
            "order": 10,
            "project_id": 1
        },
        {
            "color": "#666666",
            "id": 1,
            "name": "Patch name",
            "order": 10,
            "project_id": 1
        }
    ],
    "public_permissions": [],
    "roles": [
        {
            "computable": true,
            "id": 1,
            "name": "UX",
            "order": 10,
            "permissions": [
                "add_issue",
                "modify_issue",
                "delete_issue",
                "view_issues",
                "add_milestone",
                "modify_milestone",
                "delete_milestone",
                "view_milestones",
                "view_project",
                "add_task",
                "modify_task",
                "delete_task",
                "view_tasks",
                "add_us",
                "modify_us",
                "delete_us",
                "view_us",
                "add_wiki_page",
                "modify_wiki_page",
                "delete_wiki_page",
                "view_wiki_pages",
                "add_wiki_link",
                "delete_wiki_link",
                "view_wiki_links",
                "view_epics",
                "add_epic",
                "modify_epic",
                "delete_epic",
                "comment_epic",
                "comment_us",
                "comment_task",
                "comment_issue",
                "comment_wiki_page"
            ],
            "project_id": 1,
            "slug": "ux"
        },
        {
            "computable": true,
            "id": 2,
            "name": "Dise\u00f1ador",
            "order": 20,
            "permissions": [
                "add_issue",
                "modify_issue",
                "delete_issue",
                "view_issues",
                "add_milestone",
                "modify_milestone",
                "delete_milestone",
                "view_milestones",
                "view_project",
                "add_task",
                "modify_task",
                "delete_task",
                "view_tasks",
                "add_us",
                "modify_us",
                "delete_us",
                "view_us",
                "add_wiki_page",
                "modify_wiki_page",
                "delete_wiki_page",
                "view_wiki_pages",
                "add_wiki_link",
                "delete_wiki_link",
                "view_wiki_links",
                "view_epics",
                "add_epic",
                "modify_epic",
                "delete_epic",
                "comment_epic",
                "comment_us",
                "comment_task",
                "comment_issue",
                "comment_wiki_page"
            ],
            "project_id": 1,
            "slug": "design"
        },
        {
            "computable": true,
            "id": 3,
            "name": "Front",
            "order": 30,
            "permissions": [
                "add_issue",
                "modify_issue",
                "delete_issue",
                "view_issues",
                "add_milestone",
                "modify_milestone",
                "delete_milestone",
                "view_milestones",
                "view_project",
                "add_task",
                "modify_task",
                "delete_task",
                "view_tasks",
                "add_us",
                "modify_us",
                "delete_us",
                "view_us",
                "add_wiki_page",
                "modify_wiki_page",
                "delete_wiki_page",
                "view_wiki_pages",
                "add_wiki_link",
                "delete_wiki_link",
                "view_wiki_links",
                "view_epics",
                "add_epic",
                "modify_epic",
                "delete_epic",
                "comment_epic",
                "comment_us",
                "comment_task",
                "comment_issue",
                "comment_wiki_page"
            ],
            "project_id": 1,
            "slug": "front"
        },
        {
            "computable": true,
            "id": 4,
            "name": "Back",
            "order": 40,
            "permissions": [
                "add_issue",
                "modify_issue",
                "delete_issue",
                "view_issues",
                "add_milestone",
                "modify_milestone",
                "delete_milestone",
                "view_milestones",
                "view_project",
                "add_task",
                "modify_task",
                "delete_task",
                "view_tasks",
                "add_us",
                "modify_us",
                "delete_us",
                "view_us",
                "add_wiki_page",
                "modify_wiki_page",
                "delete_wiki_page",
                "view_wiki_pages",
                "add_wiki_link",
                "delete_wiki_link",
                "view_wiki_links",
                "view_epics",
                "add_epic",
                "modify_epic",
                "delete_epic",
                "comment_epic",
                "comment_us",
                "comment_task",
                "comment_issue",
                "comment_wiki_page"
            ],
            "project_id": 1,
            "slug": "back"
        },
        {
            "computable": false,
            "id": 5,
            "name": "Product Owner",
            "order": 50,
            "permissions": [
                "add_issue",
                "modify_issue",
                "delete_issue",
                "view_issues",
                "add_milestone",
                "modify_milestone",
                "delete_milestone",
                "view_milestones",
                "view_project",
                "add_task",
                "modify_task",
                "delete_task",
                "view_tasks",
                "add_us",
                "modify_us",
                "delete_us",
                "view_us",
                "add_wiki_page",
                "modify_wiki_page",
                "delete_wiki_page",
                "view_wiki_pages",
                "add_wiki_link",
                "delete_wiki_link",
                "view_wiki_links",
                "view_epics",
                "add_epic",
                "modify_epic",
                "delete_epic",
                "comment_epic",
                "comment_us",
                "comment_task",
                "comment_issue",
                "comment_wiki_page"
            ],
            "project_id": 1,
            "slug": "product-owner"
        },
        {
            "computable": false,
            "id": 6,
            "name": "Stakeholder",
            "order": 60,
            "permissions": [
                "add_issue",
                "modify_issue",
                "delete_issue",
                "view_issues",
                "view_milestones",
                "view_project",
                "view_tasks",
                "view_us",
                "modify_wiki_page",
                "view_wiki_pages",
                "add_wiki_link",
                "delete_wiki_link",
                "view_wiki_links",
                "view_epics",
                "comment_epic",
                "comment_us",
                "comment_task",
                "comment_issue",
                "comment_wiki_page"
            ],
            "project_id": 1,
            "slug": "stakeholder"
        }
    ],
    "severities": [
        {
            "color": "#0000FF",
            "id": 3,
            "name": "Normal",
            "order": 3,
            "project_id": 1
        },
        {
            "color": "#FFA500",
            "id": 4,
            "name": "Importante",
            "order": 4,
            "project_id": 1
        },
        {
            "color": "#669933",
            "id": 2,
            "name": "Menor",
            "order": 5,
            "project_id": 1
        },
        {
            "color": "#CC0000",
            "id": 5,
            "name": "Cr\u00edtica",
            "order": 5,
            "project_id": 1
        },
        {
            "color": "#AAAAAA",
            "id": 41,
            "name":