API Documentation

Last updated: Oct 25, 2021

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

Person

Get the current person's information
GET /api/current_person

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
auto_add_github_users boolean
created_at timestamp
default_epic_list_id integer
id integer
name text
private boolean
should_use_fibonacci_scale 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
body text
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
was_archived_from_404 boolean
workspace_id integer

Extended Parameters

Note: This endpoint accepts the following extended query parameters
nametyperequirednotes
where[created_after] timestamp
where[updated_after] timestamp
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 card custom field dates
GET /api/cards/:card_id/card_custom_field_dates

Parameters

These parameters can be used in the where clause and order clause.
nametype
card_id integer
created_at timestamp
custom_field_id integer
date timestamp
id integer
updated_at timestamp
Get a card custom field date
GET /api/cards/:card_id/card_custom_field_dates/:card_custom_field_date_id
Create a new card custom field date
POST /api/cards/:card_id/card_custom_field_dates

Body Data

nametyperequirednotes
custom_field_id Integer
date Timestamp
Update a card custom field date
PUT /api/cards/:card_id/card_custom_field_dates/:card_custom_field_date_id

Body Data

nametyperequirednotes
custom_field_id Integer
date Timestamp
Remove a card custom field date
DELETE /api/cards/:card_id/card_custom_field_dates/:card_custom_field_date_id
Get a list of card card custom field numbers
GET /api/cards/:card_id/card_custom_field_numbers

Parameters

These parameters can be used in the where clause and order clause.
nametype
card_id integer
created_at timestamp
custom_field_id integer
id integer
number double precision
updated_at timestamp
Get a card custom field number
GET /api/cards/:card_id/card_custom_field_numbers/:card_custom_field_number_id
Create a new card custom field number
POST /api/cards/:card_id/card_custom_field_numbers

Body Data

nametyperequirednotes
custom_field_id Integer
number Float
Update a card custom field number
PUT /api/cards/:card_id/card_custom_field_numbers/:card_custom_field_number_id

Body Data

nametyperequirednotes
custom_field_id Integer
number Float
Remove a card custom field number
DELETE /api/cards/:card_id/card_custom_field_numbers/:card_custom_field_number_id
Get a list of card card custom field texts
GET /api/cards/:card_id/card_custom_field_texts

Parameters

These parameters can be used in the where clause and order clause.
nametype
card_id integer
created_at timestamp
custom_field_id integer
id integer
text text
updated_at timestamp
Get a card custom field text
GET /api/cards/:card_id/card_custom_field_texts/:card_custom_field_text_id
Create a new card custom field text
POST /api/cards/:card_id/card_custom_field_texts

Body Data

nametyperequirednotes
custom_field_id Integer
text String
Update a card custom field text
PUT /api/cards/:card_id/card_custom_field_texts/:card_custom_field_text_id

Body Data

nametyperequirednotes
custom_field_id Integer
text String
Remove a card custom field text
DELETE /api/cards/:card_id/card_custom_field_texts/:card_custom_field_text_id
Get a list of card card custom field single selections
GET /api/cards/:card_id/card_custom_field_single_selections

Parameters

These parameters can be used in the where clause and order clause.
nametype
card_id integer
created_at timestamp
custom_field_id integer
id integer
single_select_option_id integer
updated_at timestamp
Get a card custom field single selection
GET /api/cards/:card_id/card_custom_field_single_selections/:card_custom_field_single_selection_id
Create a new card custom field single selection
POST /api/cards/:card_id/card_custom_field_single_selections

Body Data

nametyperequirednotes
custom_field_id Integer
single_select_option_id Integer
Update a card custom field single selection
PUT /api/cards/:card_id/card_custom_field_single_selections/:card_custom_field_single_selection_id

Body Data

nametyperequirednotes
custom_field_id Integer
single_select_option_id Integer
Remove a card custom field single selection
DELETE /api/cards/:card_id/card_custom_field_single_selections/:card_custom_field_single_selection_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
customer_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.

Custom Fields

Get a list of custom fields
GET /api/projects/:project_id/custom_fields

Parameters

These parameters can be used in the where clause and order clause.
nametype
created_at timestamp
data_type USER-DEFINED
id integer
name text
project_id integer
updated_at timestamp
Get a custom field
GET /api/projects/:project_id/custom_fields/:custom_field_id
Create a new custom field
POST /api/projects/:project_id/custom_fields

Body Data

nametyperequirednotes
data_type String Must be one of date, number, text, or single_select
name String
Update a custom field
PUT /api/projects/:project_id/custom_fields/:custom_field_id

Body Data

nametyperequirednotes
text String
Remove a custom field
DELETE /api/projects/:project_id/custom_fields/:custom_field_id
Get a list of custom field single select options
GET /api/custom_fields/:custom_field_id/single_select_options

Parameters

These parameters can be used in the where clause and order clause.
nametype
created_at timestamp
custom_field_id integer
id integer
text text
updated_at timestamp
Get a custom field single select option
GET /api/custom_fields/:custom_field_id/single_select_options/:single_select_option_id
Create a new custom field single select option
POST /api/custom_fields/:custom_field_id/single_select_options

Body Data

nametyperequirednotes
text String
Update a custom field single select option
PUT /api/custom_fields/:custom_field_id/single_select_options/:single_select_option_id

Body Data

nametyperequirednotes
text String
Remove a custom field single select option
DELETE /api/custom_fields/:custom_field_id/single_select_options/:single_select_option_id

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
epic_list_id integer
id integer
number integer
open_cards_count integer
open_points number
priority integer
project_id integer
rank text
search_key text
start_date timestamp
state text
status text
title text
track_cards boolean
updated_at timestamp
workspace_id integer

Extended Parameters

Note: This endpoint accepts the following extended query parameters
nametyperequirednotes
where[after_number] integer
where[created_after] timestamp
where[updated_after] timestamp
Create an epic
POST /api/projects/:project_id/epics

Body Data

nametyperequirednotes
after_target_id Integer after_target_id is the id of the epic after which this epic should be placed
assignee_id Integer
before_target_id Integer before_target_id is the id of the epic before which this epic should be placed
color String Hex color code string without preceding "#"
description Text
due_on Timestamp
epic_list_id Boolean
label_ids Array Array of label.ids
target_position Integer Refers to the target index position of the epic
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
epic_list_id Boolean
label_ids Array Array of label.ids
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
Move an epic
PUT /api/projects/:project_id/epics/:epic_id/move
Note: Provide only one of target_position, after_target_id or before_target_id.

Body Data

nametyperequirednotes
after_target_id Integer after_target_id is the id of the epic after which this epic should be placed
assignee_id Integer
before_target_id Integer before_target_id is the id of the epic before which this epic should be placed
color String Hex color code string without preceding "#"
description Text
due_on Timestamp
epic_list_id Boolean
label_ids Array Array of label.ids
state String Only accepts open or closed
status String Must be one of new, queued, in_progress, completed, closed, or archived
target_position Integer Refers to the target index position of the epic
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
body text
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
was_archived_from_404 boolean
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

Epic Lists

Get a list of epic lists
GET /api/projects/:project_id/epic_lists

Parameters

These parameters can be used in the where clause and order clause.
nametype
created_at timestamp
id integer
name text
project_id integer
rank text
updated_at timestamp
Create an epic list
POST /api/projects/:project_id/epic_lists
Note: Provide only one of target_position, after_target_id or before_target_id.

Body Data

nametyperequirednotes
after_target_id Integer after_target_id is the id of the epic list after which this epic list should be placed
before_target_id Integer before_target_id is the id of the epic list before which this epic list should be placed
name String
target_position Integer Refers to the target index position of the list.
Get an epic list
GET /api/projects/:project_id/epic_lists/:epic_list_id
Update an epic list
PUT /api/projects/:project_id/epic_lists/:epic_list_id

Body Data

nametyperequirednotes
name String
Move an epic list
PUT /api/projects/:project_id/epic_lists/:epic_list_id/move
Note: Provide only one of target_position, after_target_id or before_target_id.

Body Data

nametyperequirednotes
after_target_id Integer after_target_id is the id of the epic list after which this epic list should be placed
before_target_id Integer before_target_id is the id of the epic list before which this epic list should be placed
target_position Integer Refers to the target index position of the list.
Delete an epic list
DELETE /api/projects/:project_id/epic_lists/:epic_list_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
auto_add_github_users boolean
created_at timestamp
default_epic_list_id integer
id integer
name text
private boolean
should_use_fibonacci_scale 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
auto_add_github_users Boolean
color String Hex color code string without preceding "#"
description String
name String
should_use_fibonacci_scale Boolean
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
body text
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
was_archived_from_404 boolean
workspace_id integer

Extended Parameters

Note: This endpoint accepts the following extended query parameters
nametyperequirednotes
where[after_number] integer
where[assignee_ids][] Array Array of assignee.ids or null
where[created_after] timestamp
where[labels][] Array Array of label.names or null
where[milestones][] Array Array of milestone.titles or null
where[source_ids][] Array Array of source.ids or null
where[types] String Only accepts issue, pull_request or null
where[updated_after] timestamp
order[by] String Accepts assignee, creator, milestone or sprint
order[direction] String Only accepts asc or desc
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
Get a list of customers
GET /api/projects/:project_id/customers

Parameters

These parameters can be used in the where clause and order clause.
nametype
contact text
created_at timestamp
creator_id integer
id integer
name text
project_id integer
updated_at timestamp
Add a customer
POST /api/projects/:project_id/customers

Body Data

nametyperequirednotes
contact String
name String
Get a customer
GET /api/projects/:project_id/customers/:customer_id
Update a customer
PUT /api/projects/:project_id/customers/:customer_id

Body Data

nametyperequirednotes
contact String
name String
Remove a customer
DELETE /api/projects/:project_id/customers/:customer_id
Get your triage subscription level settings
GET /api/projects/:project_id/triage_user_settings
Note: This endpoint does not take any parameters.
Get your triage subscription level settings
GET /api/projects/:project_id/triage_user_settings/:user_triage_setting_id
Update your triage subscription level settings
PUT /api/projects/:project_id/triage_user_settings/:user_triage_setting_id
Note: This endpoint allows you to edit how Zube automatically subscribes you to cards in Triage.

Body Data

nametyperequirednotes
subscription_level String Must be one of following, not_following, or muted
Get your project subscription level settings
GET /api/projects/:project_id/user_settings
Note: This endpoint does not take any parameters.
Get your project subscription level settings by id
GET /api/projects/:project_id/user_settings/:user_project_setting_id
Update your project subscription level settings
PUT /api/projects/:project_id/user_settings/:user_project_setting_id
Note: This endpoint allows you to edit how Zube automatically subscribes you to Epics and Tickets.

Body Data

nametyperequirednotes
subscription_level String Must be one of following, not_following, or muted
Get your project email preferences
GET /api/projects/:project_id/user_email_preferences
Note: This endpoint does not take any parameters.
Get your project email preferences by id
GET /api/projects/:project_id/user_email_preferences/:user_project_email_preference_id
Update your project email preferences
PUT /api/projects/:project_id/user_email_preferences/:user_project_email_preference_id

Body Data

nametyperequirednotes
card_added_to_triage Boolean
card_assigned_to_self Boolean
card_assignee_added Boolean
card_card_linked Boolean
card_comment_added Boolean
card_comment_mention Boolean
card_epic_added Boolean
card_label_added Boolean
card_mention Boolean
card_milestone_added Boolean
card_points_changed Boolean
card_priority_changed Boolean
card_ticket_added Boolean
email String
epic_assigned_to_self Boolean
epic_assignee_added Boolean
epic_card_added Boolean
epic_comment_added Boolean
epic_comment_mention Boolean
epic_created Boolean
epic_due_date_changed Boolean
epic_mention Boolean
epic_status_closed Boolean
epic_status_completed Boolean
epic_status_in_progress Boolean
epic_status_queued Boolean
pr_added_to_triage Boolean
pr_assigned_to_self Boolean
pr_assignee_added Boolean
pr_card_linked Boolean
pr_comment_added Boolean
pr_comment_mention Boolean
pr_epic_added Boolean
pr_label_added Boolean
pr_mention Boolean
pr_milestone_added Boolean
pr_points_changed Boolean
pr_priority_changed Boolean
pr_ticket_added Boolean
ticket_assigned_to_self Boolean
ticket_assignee_added Boolean
ticket_card_added Boolean
ticket_comment_added Boolean
ticket_comment_mention Boolean
ticket_created Boolean
ticket_due_date_changed Boolean
ticket_label_added Boolean
ticket_mention Boolean
ticket_priority_changed Boolean
ticket_start_date_changed Boolean
ticket_status_closed Boolean
ticket_status_completed Boolean
ticket_status_in_progress Boolean
ticket_status_queued Boolean
Get your project in app preferences
GET /api/projects/:project_id/user_in_app_preferences
Note: This endpoint does not take any parameters.
Get your project in app preferences by id
GET /api/projects/:project_id/user_in_app_preferences/:user_project_in_app_preference_id
Update your project in app preferences
PUT /api/projects/:project_id/user_in_app_preferences/:user_project_in_app_preference_id

Body Data

nametyperequirednotes
card_added_to_triage Boolean
card_assigned_to_self Boolean
card_assignee_added Boolean
card_card_linked Boolean
card_comment_added Boolean
card_comment_mention Boolean
card_epic_added Boolean
card_label_added Boolean
card_mention Boolean
card_milestone_added Boolean
card_points_changed Boolean
card_priority_changed Boolean
card_ticket_added Boolean
epic_assigned_to_self Boolean
epic_assignee_added Boolean
epic_card_added Boolean
epic_comment_added Boolean
epic_comment_mention Boolean
epic_created Boolean
epic_due_date_changed Boolean
epic_mention Boolean
epic_status_closed Boolean
epic_status_completed Boolean
epic_status_in_progress Boolean
epic_status_queued Boolean
pr_added_to_triage Boolean
pr_assigned_to_self Boolean
pr_assignee_added Boolean
pr_card_linked Boolean
pr_comment_added Boolean
pr_comment_mention Boolean
pr_epic_added Boolean
pr_label_added Boolean
pr_mention Boolean
pr_milestone_added Boolean
pr_points_changed Boolean
pr_priority_changed Boolean
pr_ticket_added Boolean
ticket_assigned_to_self Boolean
ticket_assignee_added Boolean
ticket_card_added Boolean
ticket_comment_added Boolean
ticket_comment_mention Boolean
ticket_created Boolean
ticket_due_date_changed Boolean
ticket_label_added Boolean
ticket_mention Boolean
ticket_priority_changed Boolean
ticket_start_date_changed Boolean
ticket_status_closed Boolean
ticket_status_completed Boolean
ticket_status_in_progress Boolean
ticket_status_queued Boolean

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
customer_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

Extended Parameters

Note: This endpoint accepts the following extended query parameters
nametyperequirednotes
where[after_number] integer
where[created_after] timestamp
where[updated_after] timestamp
Create a ticket
POST /api/projects/:project_id/tickets

Body Data

nametyperequirednotes
assignee_id Integer
customer_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
customer_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
body text
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
was_archived_from_404 boolean
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
add_category_labels_to_imported_cards boolean
archive_merged_prs boolean
auto_archive_closed_cards boolean
created_at timestamp
default_card_template_id integer
id integer
is_archived boolean
name text
private boolean
project_id integer
should_display_prs boolean
should_use_fibonacci_scale boolean
slug text
timezone 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
add_category_labels_to_imported_cards Boolean
add_category_labels_to_imported_cards Boolean
archive_merged_prs Boolean
auto_archive_closed_cards Boolean
description Text
name String
points Boolean
priority Boolean
priority_format String Must be one of number, name, or color
should_use_fibonacci_scale Boolean
upvotes Boolean
use_category_labels Boolean
Delete a workspace
DELETE /api/workspaces/:workspace_id
Get your workspace subscription level settings
GET /api/workspaces/:workspace_id/user_settings
Note: This endpoint does not take any parameters.
Get your workspace subscription level settings by id
GET /api/workspaces/:workspace_id/user_settings/:user_workspace_setting_id
Update your workspace subscription level settings
PUT /api/workspaces/:workspace_id/user_settings/:user_workspace_setting_id
Note: This endpoint allows you to edit how Zube automatically subscribes you to Cards in your Workspace.

Body Data

nametyperequirednotes
subscription_level String Must be one of following, not_following, or muted
Get your workspace in app preferences
GET /api/workspaces/:workspace_id/user_in_app_preferences
Note: This endpoint does not take any parameters.
Get your workspace in app preferences by id
GET /api/workspaces/:workspace_id/user_in_app_preferences/user_workspace_in_app_preference_id
Update your workspace in app preferences
PUT /api/workspaces/:workspace_id/user_in_app_preferences/user_workspace_in_app_preference_id

Body Data

nametyperequirednotes
card_added_to_workspace Boolean
card_assigned_to_self Boolean
card_assignee_added Boolean
card_card_linked Boolean
card_column_changed Boolean
card_comment_added Boolean
card_comment_mention Boolean
card_epic_added Boolean
card_label_added Boolean
card_mention Boolean
card_milestone_added Boolean
card_points_changed Boolean
card_priority_changed Boolean
card_sprint_added Boolean
card_state_changed Boolean
card_status_done Boolean
card_status_in_progress Boolean
card_status_in_review Boolean
card_status_queued Boolean
card_ticket_added Boolean
pr_added_to_workspace Boolean
pr_assigned_to_self Boolean
pr_assignee_added Boolean
pr_card_linked Boolean
pr_column_changed Boolean
pr_comment_added Boolean
pr_comment_mention Boolean
pr_epic_added Boolean
pr_label_added Boolean
pr_mention Boolean
pr_merged Boolean
pr_milestone_added Boolean
pr_points_changed Boolean
pr_priority_changed Boolean
pr_sprint_added Boolean
pr_state_changed Boolean
pr_status_done Boolean
pr_status_in_progress Boolean
pr_status_in_review Boolean
pr_status_queued Boolean
pr_ticket_added Boolean
sprint_card_added Boolean
sprint_card_removed Boolean
sprint_created Boolean
sprint_end_date_changed Boolean
sprint_start_date_changed Boolean
sprint_state_changed Boolean
Get your workspace email preferences
GET /api/workspaces/:workspace_id/user_email_preferences
Note: This endpoint does not take any parameters.
Get your workspace email preferences by id
GET /api/workspaces/:workspace_id/user_email_preferences/user_workspace_email_preference_id
Update your workspace email preferences
PUT /api/workspaces/:workspace_id/user_email_preferences/user_workspace_email_preference_id

Body Data

nametyperequirednotes
card_added_to_workspace Boolean
card_assigned_to_self Boolean
card_assignee_added Boolean
card_card_linked Boolean
card_column_changed Boolean
card_comment_added Boolean
card_comment_mention Boolean
card_epic_added Boolean
card_label_added Boolean
card_mention Boolean
card_milestone_added Boolean
card_points_changed Boolean
card_priority_changed Boolean
card_sprint_added Boolean
card_state_changed Boolean
card_status_done Boolean
card_status_in_progress Boolean
card_status_in_review Boolean
card_status_queued Boolean
card_ticket_added Boolean
email String
pr_added_to_workspace Boolean
pr_assigned_to_self Boolean
pr_assignee_added Boolean
pr_card_linked Boolean
pr_column_changed Boolean
pr_comment_added Boolean
pr_comment_mention Boolean
pr_epic_added Boolean
pr_label_added Boolean
pr_mention Boolean
pr_merged Boolean
pr_milestone_added Boolean
pr_points_changed Boolean
pr_priority_changed Boolean
pr_sprint_added Boolean
pr_state_changed Boolean
pr_status_done Boolean
pr_status_in_progress Boolean
pr_status_in_review Boolean
pr_status_queued Boolean
pr_ticket_added Boolean
sprint_card_added Boolean
sprint_card_removed Boolean
sprint_created Boolean
sprint_end_date_changed Boolean
sprint_start_date_changed Boolean
sprint_state_changed Boolean
Get a list of workspace card templates
GET /api/workspaces/:workspace_id/workspace_card_templates

Parameters

These parameters can be used in the where clause and order clause.
nametype
created_at timestamp
id integer
project_id integer
title text
updated_at timestamp
workspace_id integer
Create a workspace card template
POST /api/workspaces/:workspace_id/workspace_card_templates

Body Data

nametyperequirednotes
content Text
description Text
title Text
workspace_id Integer
Get a workspace card template
GET /api/workspaces/:workspace_id/workspace_card_templates/workspace_card_template_id
Update a workspace
PUT /api/workspaces/:workspace_id/workspace_card_templates/workspace_card_template_id

Body Data

nametyperequirednotes
content Text
description Text
title Text
Delete a workspace
DELETE /api/workspaces/:workspace_id/workspace_card_templates/workspace_card_template_id

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

team@zube.io Zube on Slack