API Documentation

Last updated: Sep 2, 2019

Getting Started with the Zube API

Authentication

Generating a Private Key

To access the Zube API, you first need to generate a private key. You will then use this private key to sign access token requests.

  1. Log in to Zube, navigate to your profile settings page and click on the API Access tab.
  2. Click the 'Generate an API Key' button. You will be prompted to download a .pem file containing your Private API Key. Click save.

    Make sure to store this file! Zube only stores the public portion of the key and you will not be able to view this key again.

  3. After you've generated your first private key, you will be issued a Client Id. You will also be shown the fingerprint for your private key, which you can use to verify the key if you wish.
screenshot

Requesting an API Access Token

Before you can send requests to Zube's API endpoints, you will need an access token. Before you can request an access token from Zube, you will need to create a refresh JSON Web Token (JWT) signed by your private key and encoded using the RS256 algorithm. Zube checks the key of this refresh JWT against the public key stored by Zube and returns a new access JWT that you use to access all other API endpoints.

As an example, the following Node.js code can be used to generate the refresh JWT used to request an API access token.
var fs = require('fs');
var jsonwebtoken = require('jsonwebtoken'); // $ npm install jsonwebtoken

var client_id = CLIENT_ID;
var private_key = fs.readFileSync(PATH_TO_PEM_FILE);

var now = Math.floor(Date.now() / 1000);
var refresh_jwt = jsonwebtoken.sign({
    iat: now,      // Issued at time
    exp: now + 60, // JWT expiration time (10 minute maximum)
    iss: client_id // Your Zube client id
}, private_key, { algorithm: 'RS256' });

console.log(refresh_jwt);

Replace CLIENT_ID and PATH_TO_PEM_FILE in the above code with your information.

The code above creates a refresh JWT with a one minute expiry. You can create your refresh JWT with an expiry of up to 10 minutes. Once your refresh JWT is expired, you will need to generate a new refresh JWT to request new access tokens.

After creating the refresh JWT, you can request a new access token. Set your refresh JWT and Client Id in the Header of the API request to the tokens endpoint:

curl -i \
-H "Authorization: Bearer REFRESH_JWT" \
-H "X-Client-ID: CLIENT_ID" \
-H "Accept: application/json" \
-X POST \
https://zube.io/api/users/tokens

REFRESH_JWT and CLIENT_ID are the values you must replace.

The API request above will return an access token, your ACCESS_JWT, which you can use to make further requests to Zube's API endpoints.

curl -i \
-H "Authorization: Bearer ACCESS_JWT" \
-H "X-Client-ID: CLIENT_ID" \
-H "Accept: application/json" \
https://zube.io/api/ANY_END_POINT

NOTE: The access JWT in only valid for 24 hours, after which you will need to request a new access token by repeating the steps outlined above.

Verifying a Private Key

Zube generates a fingerprint for your private and public key pair using a SHA-1 hash function. You can verify that your private key matches the public key stored on Zube by generating the fingerprint of your private key and comparing it to the fingerprint displayed on Zube. To verify your private key:

  1. Generate the fingerprint for your private key locally with the following command:
    openssl rsa -in PATH_TO_PEM_FILE -pubout -outform DER | openssl sha1 -c
  2. Compare the resulting fingerprint to the fingerprint displayed on Zube for your private key. They should match.

screenshot

Deleting a Private Key

You can remove a lost, compromised or unwanted private key by deleting it in the Zube interface. After you have deleted your private key, you will be able to generate a new one.

Example Request Response

Example Request

You can find instructions for getting your CLIENT_ID and generating your ACCESS_JWT in the Authentication section above.

To send a request to a Zube API endpoint, include your ACCESS_JWT and CLIENT_ID in the Header for your request.

The code below will send a GET request to the projects endpoint.

curl -i \
-H "Authorization: Bearer ACCESS_JWT" \
-H "X-Client-ID: CLIENT_ID" \
-H "Accept: application/json" \
https://zube.io/api/projects

Example Response

The code above will return a JSON object:

{
  "pagination":{
    "page":1,
    "per_page":30,
    "total_pages":1,
    "total":1
  },
  "data":[
    {
      "id":123456,
      "account_id":54321,
      "description":"The place to organize our web application",
      "name":"Web Project",
      "created_at":"2018-07-06T03:52:29.513Z",
      "updated_at":"2018-07-06T03:52:29.513Z",
      "slug":"web-project",
      "private":true,
      "priority_format":"number",
      "priority":true,
      "points":true,
      "triage":false,
      "upvotes":false,
      "sources":[
        {
          "id":123456789,
          "github_owner_id":87654321,
          "description":"Javascript frontend repository",
          "full_name":"zubeio/js-frontend",
          "homepage":null,
          "html_url":"https://github.com/zubeio/js-frontend",
          "name":"js-frontend",
          "private":true,
          "created_at":"2018-09-13T19:53:09.000Z",
          "updated_at":"2019-07-02T22:25:48.000Z",
          "webhook_verified_at":"2019-07-03T23:29:09.894Z",
          "initial_import_at":"2018-12-17T04:09:49.348Z"
        }
      ],
      "workspaces":[
        {
          "id":654321,
          "project_id":123456,
          "description":null,
          "name":"Product Team Workspace",
          "slug":"product-team-workspace",
          "private":true,
          "priority_format":"number",
          "priority":true,
          "points":true,
          "upvotes":false,
          "created_at":"2018-12-17T04:09:49.348Z",
          "updated_at":"2018-12-17T04:09:49.348Z",
          "archive_merged_prs":false,
          "use_category_labels":false
        }
      ]
    }
  ]
}

Request Parameters

Pagination

Most endpoints that return lists will return their data as paginated collections defaulting to 30 items per page. You can specify further pages by passing the page parameter. For pages that allow customized pagination, you can set the number of results per page with the per_page parameter.

curl -i \
-H "Authorization: Bearer ACCESS_JWT" \
-H "X-Client-ID: CLIENT_ID" \
"https://zube.io/api/cards?page=2&per_page=10"

Ordering

Most endpoints that return lists accept order[by] and order[direction] parameters. order[direction] accepts either asc or desc. The possible attributes available for order[by] can be found in the table below the endpoint description.

curl -i \
-H "Authorization: Bearer ACCESS_JWT" \
-H "X-Client-ID: CLIENT_ID" \
"https://zube.io/api/cards?order%5Bby%5D=points&order%5Bdirection%5D=desc"

Filtering

Most endpoints that return lists can be filtered using where. For endpoints that support filtering, the attributes available for where appear in the table below the endpoint. All filtering is scoped under the where query parameter. For example, you'd use where[project_id] to filter for a direct match of cards that are on the specified project.

curl -i \
-H "Authorization: Bearer ACCESS_JWT" \
-H "X-Client-ID: CLIENT_ID" \
"https://zube.io/api/cards?where%5Bproject_id%5D=3"

Select

For most endpoints that return lists you can specify which data attributes you'd like included in the response using the select parameter. select takes an array of attributes. For example to select just the id and title attributes of cards you'd use select[]=id&select[]=title

Note: For convenience, many models return with some of their associated models populated. For endpoints where a model returns with associated model data, the associated data will not be removed when a request includes select, so select may be of limited use in those cases.

curl -i \
-H "Authorization: Bearer ACCESS_JWT" \
-H "X-Client-ID: CLIENT_ID" \
"https://zube.io/api/cards?select%5B%5D=id&select%5B%5D=title"

ETag Caching

Conditional requests

Most responses will return with an ETag header. You are highly encouraged to make use of ETags for subsequent requests to the same endpoint. If the response would be the same, a 304 Not Modified will be returned instead.

For example, if you received a response to the cards endpoint with the response header ETag: "27e-BpOwiFj52s046/zdOTfiQ0fepw8", then you'd include it as the value of the request header If-None-Match for subsequent requests like so:

curl -i \
-H "Authorization: Bearer ACCESS_JWT" \
-H "X-Client-ID: CLIENT_ID" \
-H 'If-None-Match: "27e-BpOwiFj52s046/zdOTfiQ0fepw8"' \
https://zube.io/api/cards

Data Mutations

Body Data

When body data is sent for POST or PUT requests, it should be sent as valid JSON. Any request that sends body data should also include the required header "Content-Type: application/json".

curl -i \
-H "Authorization: Bearer ACCESS_JWT" \
-H "X-Client-ID: CLIENT_ID" \
-H "Content-Type: application/json" \
-d '{"project_id":YOUR_PROJECT_ID,"title":"Hello World"}' \
-X POST \
https://zube.io/api/cards

Responsible Usage

Rate Limiting

You can can make at most one (1) request per second. While short bursts of a few requests at a slightly higher rate are permitted, exceeding one request per second for any extended duration will result in rejection of your requests and may constitute abuse.

Abuse

Never make concurrent requests or make requests at a rate faster than one per second. If you accidentally hit the rate limit, please back off the rate of your requests immediately. If you happen to trigger abuse detection, please do your best not to trigger it again. Failure to observe these rules will result in rejection of your requests and possible suspension from future API usage.

API Endpoints

Accounts

Note: Zube Organizations are referred to as accounts in the Zube API.
Get a list of accounts
GET /api/accounts

Parameters

These parameters can be used in the where clause and order clause.
nametype
annual_amount numeric
created_at timestamp
discount integer
display_name text
first_billable_at timestamp
has_annual_billing boolean
has_github_billing boolean
id integer
private_users_count integer
seats integer
slug text
status text
updated_at timestamp
Get an account
GET /api/accounts/:account_id
Get a list of account admins
GET /api/accounts/:account_id/admin_members

Parameters

These parameters can be used in the where clause and order clause.
nametype
avatar_path_is_locked boolean
created_at timestamp
github_user_id integer
id integer
is_user boolean
name text
name_is_locked boolean
updated_at timestamp
username text
Create an account admin
POST /api/accounts/:account_id/admin_members

Body Data

nametyperequirednotes
person_id Integer
Remove an account admin
DELETE /api/accounts/:account_id/admin_members/:admin_member_id
Get a list of account members
GET /api/accounts/:account_id/members

Parameters

These parameters can be used in the where clause and order clause.
nametype
avatar_path_is_locked boolean
created_at timestamp
github_user_id integer
id integer
is_user boolean
name text
name_is_locked boolean
updated_at timestamp
username text
Create an account member
POST /api/accounts/:account_id/members

Body Data

nametyperequirednotes
person_id Integer
Remove an account member
DELETE /api/accounts/:account_id/members/:member_id
Get a list of projects for an account
GET /api/accounts/:account_id/projects

Parameters

These parameters can be used in the where clause and order clause.
nametype
account_id integer
created_at timestamp
id integer
name text
private boolean
slug text
updated_at timestamp

Cards

Get a list of cards
GET /api/cards

Parameters

These parameters can be used in the where clause and order clause.
nametype
category_name text
closed_at timestamp
closer_id integer
comments_count integer
created_at timestamp
creator_id integer
epic_id integer
id integer
last_comment_at timestamp
number integer
points number
priority integer
project_id integer
search_key text
sprint_id integer
state text
status text
updated_at timestamp
upvotes_count integer
workspace_id integer
Create a card
POST /api/cards

Body Data

nametyperequirednotes
assignee_ids Array Array of assignee.ids
body Text
category_name String
epic_id Integer
github_issue[milestone_id] Integer
github_issue[source_id] Integer Required if github_issue object is sent
label_ids Array Array of label.ids
points Number
priority Integer Must be one of 1, 2, 3, 4, 5, or null
project_id Integer
sprint_id Integer
title String
workspace_id Integer
Get a card
GET /api/cards/:card_id
Update a card
PUT /api/cards/:card_id

Body Data

nametyperequirednotes
assignee_ids Array Array of assignee.ids
body Text
epic_id Integer
github_issue[milestone_id] Integer
label_ids Array Array of label.ids
points Number
priority Integer Must be one of 1, 2, 3, 4, 5, or null
project_id Integer
sprint_id Integer
state String Only accepts open or closed
title String
workspace_id Integer
Archive a card
PUT /api/cards/:card_id/archive
Note: This endpoint does not take any data
Move a card
PUT /api/cards/:card_id/move
Note: To move a card to a column on a workspace, pass:
destination: {
  position: CARD_POSITION,
  type: "category",
  name: NAME_OF_CATEGORY,
  workspace_id: YOUR_WORKSPACE_ID
}
To move a card to a project's triage, pass:
destination: {
  position: CARD_POSITION,
  type: "project"
}

Body Data

nametyperequirednotes
destination[name] Integer Name of the destination category.
destination[position] Integer
destination[type] String Only accepts category or project
destination[workspace_id] Integer Required if sending destination[type] as category
Add a card to a source repo
PUT /api/cards/:card_id/add_to_source

Body Data

nametyperequirednotes
source_id Integer You cannot change the source for a card that already has a source
Get a list of card relations
GET /api/card_relations

Parameters

These parameters can be used in the where clause and order clause.
nametype
card_id integer
created_at timestamp
id integer
linked_card_id integer
Create a card relationship
POST /api/card_relations

Body Data

nametyperequirednotes
card_id Integer
linked_card_id Integer
Remove a card relationship
DELETE /api/card_relations/:card_relation_id
Get a list of card comments
GET /api/cards/:card_id/comments

Parameters

These parameters can be used in the where clause and order clause.
nametype
card_id integer
created_at timestamp
creator_id integer
id integer
updated_at timestamp
Create a new card comment
POST /api/cards/:card_id/comments

Body Data

nametyperequirednotes
body Text
Update a card comment
PUT /api/cards/:card_id/comments/:comment_id

Body Data

nametyperequirednotes
body Text
Remove a card comment
DELETE /api/cards/:card_id/comments/:comment_id
Get a list of card events
GET /api/cards/:card_id/events
Note: This endpoint does not take any parameters.
Get a list of commit references
GET /api/cards/:card_id/commit_references
Note: This endpoint does not take any parameters.
Get a list of card subscriptions
GET /api/cards/:card_id/subscriptions
Note: Returns either zero or one subscription for the current user. This endpoint does not take any parameters
Create a card subscription
POST /api/cards/:card_id/subscriptions
Remove a card subscription
DELETE /api/cards/:card_id/subscriptions/:subscription_id
GET /api/cards/:card_id/tickets

Parameters

These parameters can be used in the where clause and order clause.
nametype
assignee_id integer
cards_count integer
cards_status text
closed_at timestamp
closer_id integer
comments_count integer
created_at timestamp
creator_id integer
due_on timestamp
id integer
number integer
priority integer
project_id integer
search_key text
start_date timestamp
state text
status text
title text
track_cards boolean
type text
updated_at timestamp
Get a list of upvoters
GET /api/cards/:card_id/upvoters
Note: This endpoint does not take any parameters.
Create a card upvote
POST /api/cards/:card_id/upvotes
Note: Creates a card upvote for the current user. This endpoint does not take any data.

Categories

Note: Workspace columns are referred to as categories in the Zube API.
Get a list of categories
GET /api/workspaces/:workspace_id/categories
Note: This endpoint does not take any parameters.
Get a category
GET /api/workspaces/:workspace_id/categories/:_categoryId
Note: _categoryId is an ObjectId, not an integer.
Get a list of categories metadata
GET /api/workspaces/:workspace_id/categories_metadata
Note: Returns a set of categories without their lists of cards. This endpoint does not take any parameters.
Get a category's metadata
GET /api/workspaces/:workspace_id/categories_metadata/:_categoryId
Note: Returns a single category without it's list of cards. _categoryId is an ObjectId, not an integer.

Epics

Get a list of epics
GET /api/projects/:project_id/epics

Parameters

These parameters can be used in the where clause and order clause.
nametype
assignee_id integer
cards_status text
closed_at timestamp
closed_cards_count integer
closed_points number
closer_id integer
comments_count integer
created_at timestamp
creator_id integer
due_on timestamp
id integer
number integer
open_cards_count integer
open_points number
project_id integer
search_key text
state text
status text
title text
track_cards boolean
updated_at timestamp
workspace_id integer
Create an epic
POST /api/projects/:project_id/epics

Body Data

nametyperequirednotes
assignee_id Integer
color String Hex color code string without preceding "#"
description Text
due_on Timestamp
title String
track_cards Boolean
Get an epic
GET /api/projects/:project_id/epics/:epic_id
Update an epic
PUT /api/projects/:project_id/epics/:epic_id

Body Data

nametyperequirednotes
assignee_id Integer
color String Hex color code string without preceding "#"
description Text
due_on Timestamp
state String Only accepts open or closed
status String Must be one of new, queued, in_progress, completed, closed, or archived
title String
track_cards Boolean
Get a list of epic cards
GET /api/epics/:epic_id/cards

Parameters

These parameters can be used in the where clause and order clause.
nametype
category_name text
closed_at timestamp
closer_id integer
comments_count integer
created_at timestamp
creator_id integer
epic_id integer
id integer
last_comment_at timestamp
number integer
points number
priority integer
project_id integer
search_key text
sprint_id integer
state text
status text
updated_at timestamp
upvotes_count integer
workspace_id integer
Add a card to an epic
POST /api/epics/:epic_id/cards

Body Data

nametyperequirednotes
card_id Integer
Remove a card from an epic
DELETE /api/epics/:epic_id/cards/:card_id
Get a list of epic comments
GET /api/epics/:epic_id/comments

Parameters

These parameters can be used in the where clause and order clause.
nametype
card_id integer
created_at timestamp
creator_id integer
id integer
updated_at timestamp
Create an epic comment
POST /api/epics/:epic_id/comments

Body Data

nametyperequirednotes
body Text
Update an epic comment
PUT /api/epics/:epic_id/comments/:comment_id

Body Data

nametyperequirednotes
body Text
Remove an epic comment
DELETE /api/epics/:epic_id/comments/:comment_id
Get a list of epic events
GET /api/epics/:epic_id/events

Parameters

These parameters can be used in the where clause and order clause.
nametype
actor_id integer
assignee_id integer
commit_id text
created_at timestamp
event text
github_issue_id integer
id bigint
source_id integer
updated_at timestamp
Get a list of epic subscriptions
GET /api/epics/:epic_id/subscriptions
Note: Returns either zero or one subscription for the current user. This endpoint does not take any parameters.
Create an epic subscription
POST /api/epics/:epic_id/subscriptions
Remove an epic subscription
DELETE /api/epics/:epic_id/subscriptions/:subscription_id

Labels

Get a list of labels
GET /api/projects/:project_id/labels

Parameters

These parameters can be used in the where clause and order clause.
nametype
created_at timestamp
id integer
project_id integer
slug text
updated_at timestamp
Create a label
POST /api/projects/:project_id/labels

Body Data

nametyperequirednotes
color String Hex color code string without preceding "#"
name String
Get a label
GET /api/projects/:project_id/labels/:label_id
Update a label
PUT /api/projects/:project_id/labels/:label_id

Body Data

nametyperequirednotes
color String Hex color code string without preceding "#"
name String
Delete a label
DELETE /api/projects/:project_id/labels/:label_id

Notifications

Get a list of notifications
GET /api/notifications
Note: This endpoint does not take any parameters.
Update a notification
PUT /api/notifications/:_notificationId
Note: _notificationId is an ObjectId, not an integer.

Body Data

nametyperequirednotes
read Boolean
Delete a notification
DELETE /api/notifications/:_notificationId
Note: _notificationId is an ObjectId, not an integer.

Projects

Get a list of projects
GET /api/projects

Parameters

These parameters can be used in the where clause and order clause.
nametype
account_id integer
created_at timestamp
id integer
name text
private boolean
slug text
updated_at timestamp
Create a project
POST /api/projects

Body Data

nametyperequirednotes
account_id Integer
description String
name String
Get a project
GET /api/projects/:project_id
Update a project
PUT /api/projects/:project_id

Body Data

nametyperequirednotes
description String
name String
triage Boolean Only valid for projects with one workspace
Delete a project
DELETE /api/projects/:project_id
Get a list of project admins
GET /api/projects/:project_id/admin_members

Parameters

These parameters can be used in the where clause and order clause.
nametype
avatar_path_is_locked boolean
created_at timestamp
github_user_id integer
id integer
is_user boolean
name text
name_is_locked boolean
updated_at timestamp
username text
Add a project admin
POST /api/projects/:project_id/admin_members/:person_id

Body Data

nametyperequirednotes
person_id Integer
Remove a project admin
DELETE /api/projects/:project_id/admin_members/:person_id
Get a list of project members
GET /api/projects/:project_id/members

Parameters

These parameters can be used in the where clause and order clause.
nametype
avatar_path_is_locked boolean
created_at timestamp
github_user_id integer
id integer
is_user boolean
name text
name_is_locked boolean
updated_at timestamp
username text
Add a project member
POST /api/projects/:project_id/members

Body Data

nametyperequirednotes
person_id Integer
Remove a project member
DELETE /api/projects/:project_id/members/:person_id
Get a list of project collaborators
GET /api/projects/:project_id/collaborators

Parameters

These parameters can be used in the where clause and order clause.
nametype
avatar_path_is_locked boolean
created_at timestamp
github_user_id integer
id integer
is_user boolean
name text
name_is_locked boolean
updated_at timestamp
username text
Get a list of project cards
GET /api/projects/:project_id/cards

Parameters

These parameters can be used in the where clause and order clause.
nametype
category_name text
closed_at timestamp
closer_id integer
comments_count integer
created_at timestamp
creator_id integer
epic_id integer
id integer
last_comment_at timestamp
number integer
points number
priority integer
project_id integer
search_key text
sprint_id integer
state text
status text
updated_at timestamp
upvotes_count integer
workspace_id integer
Get a list of cards in triage
GET /api/projects/:project_id/triage_cards
Note: This endpoint does not take any parameters.
Get a list of milestones
GET /api/projects/:project_id/milestones

Parameters

These parameters can be used in the where clause and order clause.
nametype
closed_at timestamp
created_at timestamp
creator_id integer
due_on timestamp
id integer
number integer
source_id integer
state text
title text
updated_at timestamp

Sprints

Get a list of sprints
GET /api/workspaces/:workspace_id/sprints

Parameters

These parameters can be used in the where clause and order clause.
nametype
closed_at timestamp
created_at timestamp
end_date timestamp
id integer
project_id integer
start_date timestamp
state text
updated_at timestamp
workspace_id integer
Create a sprint
POST /api/workspaces/:workspace_id/sprints

Body Data

nametyperequirednotes
description Text
end_date Timestamp
start_date Timestamp
title String
Get a sprint
GET /api/workspaces/:workspace_id/sprints/:sprint_id
Update a sprint
PUT /api/workspaces/:workspace_id/sprints/:sprint_id

Body Data

nametyperequirednotes
description Text
end_date Timestamp
start_date Timestamp
state String Only accepts open or closed
title String
Delete a sprint
DELETE /api/workspaces/:workspace_id/sprints/:sprint_id
Get a list of events
GET /api/sprints/:sprint_id/events
Note: This endpoint does not take any parameters.

Sources

Get a list of sources
GET /api/sources

Parameters

These parameters can be used in the where clause and order clause.
nametype
created_at timestamp
full_name text
github_owner_id integer
has_webhooks boolean
id integer
name text
updated_at timestamp
webhook_verified_at timestamp
Remove a source
DELETE /api/sources/:source_id
Get a list of source collaborators
GET /api/sources/:source_id/collaborators

Parameters

These parameters can be used in the where clause and order clause.
nametype
avatar_path_is_locked boolean
created_at timestamp
github_user_id integer
id integer
is_user boolean
name text
name_is_locked boolean
updated_at timestamp
username text
Get a list of milestones
GET /api/sources/:source_id/milestones

Parameters

These parameters can be used in the where clause and order clause.
nametype
closed_at timestamp
created_at timestamp
creator_id integer
due_on timestamp
id integer
number integer
source_id integer
state text
title text
updated_at timestamp
Create a milestone
POST /api/sources/:source_id/milestones

Body Data

nametyperequirednotes
description Text
due_on Timestamp
title String
Get a milestone
GET /api/sources/:source_id/milestones/:milestone_id
Update a milestone
PUT /api/sources/:source_id/milestones/:milestone_id

Body Data

nametyperequirednotes
description Text
due_on Timestamp
state String Only accepts open or closed
title String
Delete a milestone
DELETE /api/sources/:source_id/milestones/:milestone_id

Tickets

Get a list of tickets
GET /api/projects/:project_id/tickets

Parameters

These parameters can be used in the where clause and order clause.
nametype
assignee_id integer
cards_count integer
cards_status text
closed_at timestamp
closer_id integer
comments_count integer
created_at timestamp
creator_id integer
due_on timestamp
id integer
number integer
priority integer
project_id integer
search_key text
start_date timestamp
state text
status text
title text
track_cards boolean
type text
updated_at timestamp
Create a ticket
POST /api/projects/:project_id/tickets

Body Data

nametyperequirednotes
assignee_id Integer
description Text
due_on Timestamp
priority Number Must be one of 1, 2, 3, 4
start_date Timestamp
title String
track_cards Boolean
type String Must be one of task, bug, feature, question
Get a ticket
GET /api/projects/:project_id/tickets/:ticket_id
Update a ticket
PUT /api/projects/:project_id/tickets/:ticket_id

Body Data

nametyperequirednotes
assignee_id Integer
description Text
due_on Timestamp
priority Number Must be one of 1, 2, 3, 4
start_date Timestamp
state String Only accepts open or closed
status String Must be one of new, queued, in_progress, completed, closed, or archived
title String
track_cards Boolean
type String Must be one of task, bug, feature, or question
Get a list of cards
GET /api/tickets/:ticket_id/cards

Parameters

These parameters can be used in the where clause and order clause.
nametype
category_name text
closed_at timestamp
closer_id integer
comments_count integer
created_at timestamp
creator_id integer
epic_id integer
id integer
last_comment_at timestamp
number integer
points number
priority integer
project_id integer
search_key text
sprint_id integer
state text
status text
updated_at timestamp
upvotes_count integer
workspace_id integer
Add a card to a ticket
POST /api/tickets/:ticket_id/cards

Body Data

nametyperequirednotes
card_id Integer
Remove a card from a ticket
DELETE /api/tickets/:ticket_id/cards/:card_id
Get a list of ticket comments
GET /api/tickets/:ticket_id/comments

Parameters

These parameters can be used in the where clause and order clause.
nametype
card_id integer
created_at timestamp
creator_id integer
id integer
updated_at timestamp
Create a ticket comment
POST /api/tickets/:ticket_id/comments

Body Data

nametyperequirednotes
body Text
Update a ticket comment
PUT /api/tickets/:ticket_id/comments/:comment_id

Body Data

nametyperequirednotes
body Text
Delete a ticket comment
DELETE /api/tickets/:ticket_id/comments/:comment_id
Get a list of ticket events
GET /api/tickets/:ticket_id/events
Note: This endpoint does not take any parameters.
Get a list of ticket subscriptions
GET /api/tickets/:ticket_id/subscriptions
Note: Returns either zero or one subscription for the current user. This endpoint does not take any parameters.
Create a ticket subscription
POST /api/tickets/:ticket_id/subscriptions
Delete a ticket subscription
DELETE /api/tickets/:ticket_id/subscriptions/:subscription_id

Workspaces

Get a list of workspaces
GET /api/workspaces

Parameters

These parameters can be used in the where clause and order clause.
nametype
archive_merged_prs boolean
created_at timestamp
id integer
name text
private boolean
project_id integer
slug text
updated_at timestamp
use_category_labels boolean
Create a workspace
POST /api/workspaces

Body Data

nametyperequirednotes
description Text
name String
project_id Integer
Get a workspace
GET /api/workspaces/:workspace_id
Update a workspace
PUT /api/workspaces/:workspace_id

Body Data

nametyperequirednotes
archive_merged_prs Boolean
description Text
name String
points Boolean
priority Boolean
priority_format String Must be one of number, name, or color
upvotes Boolean
use_category_labels Boolean
Delete a workspace
DELETE /api/workspaces/:workspace_id

Have more questions? Need help setting up your workflow? Get in touch!

team@zube.io Zube on Slack