> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nekt.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Teamwork as a data source

> Bring your Teamwork.com projects, tasks, milestones, time entries, people, companies, comments and messages to Nekt.

Teamwork.com is a project management platform for client work: projects are split into task lists, tasks and milestones, people log time against them, and teams discuss the work in comments, messages and notebooks. This connector reads your site's data through the official Teamwork API (v3) and brings your projects, tasks and subtasks, task lists, milestones, time entries, people, companies, tags, comments, messages, notebooks, risks, project updates, custom field definitions, workflows and their stages, job roles and skills.

> [!NOTE]
>
> This connector covers **Teamwork.com (Projects)**. Teamwork Desk, the help desk product, has its own connector. The connector only reads data: it never creates, changes or deletes anything in Teamwork.

## Configuring Teamwork as a Source

In the [Sources](https://app.nekt.ai/sources) tab, click on the "Add source" button located on the top right of your screen. Then, select the Teamwork option from the list of connectors.

Click **Next** and you'll be prompted to add your access.

### 1. Add account access

The Teamwork API uses the **API token** of a Teamwork user. In Teamwork, click your profile picture, then **Edit My Details**, open the **API & Mobile** tab and copy your API token.

* **Site URL**: the address you open Teamwork with, for example `https://yourcompany.teamwork.com` (sites hosted in Europe use `https://yourcompany.eu.teamwork.com`). If you access Teamwork through a custom domain, use your `teamwork.com` address.
* **API Token**: the token copied from Teamwork.
* **Start Date**: the earliest date synced on the first sync and on full syncs. Tasks, task lists, milestones, time entries, messages and notebooks last updated since this date are loaded, and so are the comments and message replies posted since it. The other tables are always loaded whole.

> [!WARNING]
>
> Teamwork only returns what the user of the API token can see. Use the API token of a **site administrator** to sync every project; with another user, the projects, tasks and time entries that user has no access to are left out. If the token stops working (for example, the user is removed), the syncs fail until you update it.

> [!TIP]
>
> Teamwork allows 150 API requests per minute per site (300 on the Scale plan), shared by every integration of the site. The connector stays under that limit, so a long history takes a while on the first sync.

Once you're done, click **Next**.

### 2. Select streams

Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis. You can select entire groups of streams or pick specific ones.

> Tip: The stream can be found more easily by typing its name.

Select the streams and click **Next**.

### 3. Configure data streams

Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a folder to organize it inside the layer, a name for each table (which will effectively contain the fetched data) and the type of sync.

* **Layer**: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
* **Folder**: a folder can be created inside the selected layer to group all tables being created from this new data source.
* **Table name**: we suggest a name, but feel free to customize it. You have the option to add a **prefix** to all tables at once and make this process faster!
* **Sync Type**: keep the suggested type. Tasks, Task Lists, Milestones, Time Entries, Messages, Message Replies, Comments and Notebooks are **Incremental**: each sync reads only what changed since the previous one (starting one day earlier, to be safe) and merges it into the table. The other tables are **Full table**: each sync reads them whole and replaces the table.

> [!NOTE]
>
> Comments and Message Replies are read by the date they were posted. Each incremental sync also checks the comments and replies edited since the previous sync, so an edit to an older one is updated too. Tasks, Time Entries and Milestones deleted in Teamwork stay in the table, marked as deleted.

Once you are done configuring, click **Next**.

### 4. Configure data source

Describe your data source for easy identification within your organization, not exceeding 140 characters.

To define your [Trigger](https://docs.nekt.com/runs/scheduling-and-triggers.md), consider how often you want data to be extracted from this source. This decision usually depends on how frequently you need the new table data updated (every day, once a week, or only at specific times). The main tables are read incrementally, so an hourly or daily sync works well.

Optionally, you can configure Delta Log Retention and determine for how long we should store old states of this table as it gets updated. Read more about this resource [here](https://docs.nekt.com/get-started/core-concepts/resource-control).

Once you are ready, click **Next** to finalize the setup.

### 5. Check your new source

You can view your new source on the [Sources](https://app.nekt.ai/sources) page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.

> [!WARNING]
>
> For you to be able to see it on your [Catalog](https://app.nekt.ai/catalog), you need at least one successful source run.

## Permissions and features

Each table needs the user of the API token to be allowed to see its data, and some need a Teamwork feature that is not on every plan or may be turned off (for example Risks, Workflows, Notebooks, Messages or time tracking). When Teamwork refuses a table (no permission) or does not offer it on your site (feature not available), the sync skips only that table, says which tables were skipped and why, and keeps syncing the others. Give the user the permission, enable the feature in Teamwork, or deselect those tables.

# Streams and Fields

## Available streams

The table below lists every stream, its **slug** (the exact identifier to pass when creating the source via API) and a short description.

| Stream | Slug | Sync | Description |
| - | - | - | - |
| Tasks | `tasks` | Incremental | Tasks and subtasks, including completed and deleted ones. |
| Task Lists | `tasklists` | Incremental | Task lists of every project. |
| Milestones | `milestones` | Incremental | Project milestones. |
| Time Entries | `time_entries` | Incremental | Time logged on projects and tasks. |
| Messages | `messages` | Incremental | Project messages. |
| Message Replies | `message_replies` | Incremental | Replies to project messages. |
| Comments | `comments` | Incremental | Comments on tasks, milestones, notebooks, files and links. |
| Notebooks | `notebooks` | Incremental | Project notebooks. |
| Projects | `projects` | Full table | Projects, including archived ones and templates. |
| People | `people` | Full table | Users, clients, collaborators and placeholders. |
| Companies | `companies` | Full table | Your company and client companies. |
| Tags | `tags` | Full table | Tags. |
| Project Categories | `project_categories` | Full table | Project categories. |
| Custom Fields | `custom_fields` | Full table | Custom field definitions. |
| Workflows | `workflows` | Full table | Workflows. |
| Workflow Stages | `workflow_stages` | Full table | Stages of each workflow. |
| Job Roles | `job_roles` | Full table | Job roles. |
| Skills | `skills` | Full table | Skills. |
| Risks | `risks` | Full table | Project risks. |
| Project Updates | `project_updates` | Full table | Project status updates. |

Tasks join task lists on `tasks.tasklist_id` = `tasklists.id`, and task lists join projects on `tasklists.project_id` = `projects.id`. Time entries, milestones, messages, notebooks, comments, risks and project updates carry `project_id`. People join on `people.id` with the user columns (`created_by`, `updated_by`, `user_id`, `assignee_user_ids`...), companies on `companies.id` = `projects.company_id`, and tags on `tags.id` with the `tag_ids` lists.

## Fields by stream

Fields marked String (JSON) hold a nested object or list as JSON text; use your warehouse's JSON functions to read them. Dates and times are in UTC.

> [accordion] Tasks
>
> Every task and subtask (`parent_task_id` is set on subtasks), including completed tasks, tasks of archived projects and deleted tasks (`status` = deleted). Tasks have no project column: join `tasklist_id` with `tasklists.id` to get `project_id`.
>
> Table: `tasks` · Primary key: `id` · Sync: Incremental (`updated_at`)
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `accumulated_estimated_minutes` | Integer | Estimated time of the task plus its subtasks, in minutes. |
> | `assignee_companies` | String (JSON) | Assignee companies of the task (JSON) |
> | `assignee_company_ids` | Array of integers | IDs of the assignee companies related to the task. |
> | `assignee_job_role_ids` | Array of integers | IDs of the assignee job roles related to the task. |
> | `assignee_team_ids` | Array of integers | IDs of the assignee teams related to the task. |
> | `assignee_user_ids` | Array of integers | IDs of the assignee users related to the task. |
> | `assignees` | String (JSON) | Assignees of the task (JSON) |
> | `attachments` | String (JSON) | Attachments of the task (JSON) |
> | `capacities` | String (JSON) | Capacities of the task (JSON) |
> | `change_followers` | String (JSON) | Change followers of the task (JSON) |
> | `column` | String (JSON) | Column of the task (JSON) |
> | `comment_followers` | String (JSON) | Comment followers of the task (JSON) |
> | `complete_followers` | String (JSON) | Complete followers of the task (JSON) |
> | `completed_at` | Datetime | Date and time the task was completed. |
> | `completed_by` | Integer | ID of the user who completed the task. |
> | `completed_on` | Datetime | Completed on of the task (date and time) |
> | `created_at` | Datetime | Date and time the task was created. |
> | `created_by` | Integer | ID of the user who created the task. |
> | `created_by_user_id` | Integer | ID of the created by user related to the task. |
> | `crm_deal_ids` | Array of integers | IDs of the crm deals related to the task. |
> | `date_updated` | Datetime | Date updated of the task (date and time) |
> | `decimal_display_order` | Number | Decimal display order of the task. |
> | `deleted_at` | Datetime | Date and time the task was deleted (null unless deleted) |
> | `deleted_by` | Integer | ID of the user who deleted the task. |
> | `dependency_ids` | Array of integers | IDs of the dependencies related to the task. |
> | `description` | String | Description of the task. |
> | `description_content_type` | String | Description content type of the task. |
> | `display_order` | Integer | Display order of the task. |
> | `due_date` | Datetime | Due date of the task. |
> | `due_date_base` | String | Due date base of the task. |
> | `due_date_from_milestone` | Boolean | Whether due date from milestone is enabled for the task. |
> | `due_date_offset` | Integer | Due date offset of the task. |
> | `estimate_minutes` | Integer | Estimated time of the task, in minutes. |
> | `has_desk_tickets` | Boolean | Whether the task has desk tickets. |
> | `has_reminders` | Boolean | Whether the task has reminders. |
> | `has_timeblocks` | Boolean | Whether the task has timeblocks. |
> | `id` | Integer | Unique identifier of the task. |
> | `is_archived` | Boolean | Whether the task is archived. |
> | `is_blocked` | Boolean | Whether the task is blocked. |
> | `is_private` | Integer | Whether the task is private (1 = yes, 0 = no) |
> | `latest_updates` | String (JSON) | Latest updates of the task (JSON) |
> | `lockdown` | String (JSON) | Lockdown of the task (JSON) |
> | `meta` | String (JSON) | Meta of the task (JSON) |
> | `name` | String | Name of the task. |
> | `notify` | Boolean | Whether notify is enabled for the task. |
> | `original_due_date` | Datetime | Original due date of the task (date and time) |
> | `out_of_sequence` | Boolean | Whether out of sequence is enabled for the task. |
> | `parent_task_id` | Integer | ID of the parent task when this task is a subtask (null for top-level tasks) |
> | `predecessor_ids` | Array of integers | IDs of the predecessors related to the task. |
> | `predecessors` | String (JSON) | Predecessors of the task (JSON) |
> | `priority` | String | Priority of the task (none, low, medium, high) |
> | `progress` | Integer | Progress of the task, in percent (0-100) |
> | `proofs` | String (JSON) | Proofs of the task (JSON) |
> | `sequence_due_date` | Datetime | Sequence due date of the task (date and time) |
> | `sequence_id` | Integer | ID of the sequence related to the task. |
> | `sequence_root_task` | Boolean | Whether sequence root task is enabled for the task. |
> | `sequence_start_date` | Datetime | Sequence start date of the task (date and time) |
> | `start_date` | Datetime | Start date of the task. |
> | `start_date_offset` | Integer | Start date offset of the task. |
> | `status` | String | Status of the task (new, reopened, completed, deleted...) |
> | `sub_task_ids` | Array of integers | IDs of the sub tasks related to the task. |
> | `tag_ids` | Array of integers | IDs of the tags applied to the task. |
> | `tasklist_id` | Integer | ID of the task list the task belongs to. |
> | `template_role_name` | String | Template role name of the task. |
> | `timer` | String (JSON) | Timer of the task (JSON) |
> | `updated_at` | Datetime | Date and time the task was last updated. |
> | `updated_by` | Integer | ID of the user who last updated the task. |
> | `user_permissions` | String (JSON) | User permissions of the task (JSON) |
> | `workflow_stages` | String (JSON) | Workflow stages of the task (JSON) |

> [accordion] Task Lists
>
> Task lists of every project, including completed and deleted ones.
>
> Table: `tasklists` · Primary key: `id` · Sync: Incremental (`updated_at`)
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `calculated_due_date` | Datetime | Calculated due date of the task list (date and time) |
> | `calculated_start_date` | Datetime | Calculated start date of the task list (date and time) |
> | `created_at` | Datetime | Date and time the task list was created. |
> | `default_task_id` | Integer | ID of the default task related to the task list. |
> | `description` | String | Description of the task list. |
> | `display_order` | Integer | Display order of the task list. |
> | `icon` | String | Icon of the task list. |
> | `id` | Integer | Unique identifier of the task list. |
> | `is_billable` | Boolean | Whether the task list is billable. |
> | `is_pinned` | Boolean | Whether the task list is pinned. |
> | `is_private` | Boolean | Whether the task list is private. |
> | `lockdown_id` | Integer | ID of the lockdown related to the task list. |
> | `milestone_id` | Integer | ID of the milestone related to the task list. |
> | `name` | String | Name of the task list. |
> | `project_id` | Integer | ID of the project the task list belongs to. |
> | `status` | String | Status of the task list. |
> | `tasklist_budget` | String (JSON) | Tasklist budget of the task list (JSON) |
> | `updated_at` | Datetime | Date and time the task list was last updated. |

> [accordion] Milestones
>
> Milestones of every project, including completed and deleted ones.
>
> Table: `milestones` · Primary key: `id` · Sync: Incremental (`updated_at`)
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `can_complete` | Boolean | Whether the milestone can complete. |
> | `can_edit` | Boolean | Whether the milestone can edit. |
> | `change_follower_ids` | Array of integers | IDs of the change followers related to the milestone. |
> | `comment_follower_ids` | Array of integers | IDs of the comment followers related to the milestone. |
> | `comments_count` | Integer | Comments count of the milestone. |
> | `completed` | Boolean | Whether completed is enabled for the milestone. |
> | `completed_by` | Integer | ID of the user who completed the milestone. |
> | `completed_on` | Datetime | Date and time the milestone was completed. |
> | `completer_id` | Integer | ID of the completer related to the milestone. |
> | `created_by` | Integer | ID of the user who created the milestone. |
> | `created_on` | Datetime | Date and time the milestone was created. |
> | `creator_user_id` | Integer | ID of the creator user related to the milestone. |
> | `deadline` | Datetime | Due date (deadline) of the milestone. |
> | `deleted_on` | Datetime | Deleted on of the milestone (date and time) |
> | `description` | String | Description of the milestone. |
> | `description_html` | String | Description html of the milestone. |
> | `id` | Integer | Unique identifier of the milestone. |
> | `is_deleted` | Boolean | Whether the milestone is deleted. |
> | `last_changed_on` | Datetime | Date and time the milestone was last changed. |
> | `latest_updates` | String (JSON) | Latest updates of the milestone (JSON) |
> | `lockdown_id` | Integer | ID of the lockdown related to the milestone. |
> | `name` | String | Name of the milestone. |
> | `num_comments_read` | Integer | Num comments read of the milestone. |
> | `original_due_date` | Datetime | Original due date of the milestone (date and time) |
> | `percentage_complete` | Integer | Percentage complete of the milestone. |
> | `percentage_tasks_completed` | Integer | Percentage tasks completed of the milestone. |
> | `private` | Boolean | Whether private is enabled for the milestone. |
> | `project_id` | Integer | ID of the project the milestone belongs to. |
> | `reminder` | Boolean | Whether reminder is enabled for the milestone. |
> | `responsible_parties` | String (JSON) | Responsible parties of the milestone (JSON) |
> | `responsible_party_ids` | Array of integers | IDs of the responsible parties related to the milestone. |
> | `status` | String | Status of the milestone. |
> | `tag_ids` | Array of integers | IDs of the tags applied to the milestone. |
> | `tasklist_ids` | Array of integers | IDs of the tasklists related to the milestone. |
> | `updated_at` | Datetime | Date and time the record was last updated in Teamwork, used as the incremental replication key. |
> | `updated_by` | Integer | ID of the user who last updated the milestone. |
> | `user_following_changes` | Boolean | Whether user following changes is enabled for the milestone. |
> | `user_following_comments` | Boolean | Whether user following comments is enabled for the milestone. |
> | `user_following_complete` | Boolean | Whether user following complete is enabled for the milestone. |

> [accordion] Time Entries
>
> Time logged by people on projects and tasks (`minutes`, billable flag and rates), including entries of archived projects and deleted entries.
>
> Table: `time_entries` · Primary key: `id` · Sync: Incremental (`updated_at`)
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `assigned_team_ids` | Array of integers | IDs of the assigned teams related to the time entry. |
> | `billable` | Boolean | Whether the time entry is billable. |
> | `billable_info` | String (JSON) | Billable info of the time entry (JSON) |
> | `billable_rate` | Number | Billable rate of the time entry (per hour, in the installation currency) |
> | `budget_allocations` | String (JSON) | Budget allocations of the time entry (JSON) |
> | `child_timelog_id` | Integer | ChildTimelogID is set on a divided timelog, and points at its remainder. |
> | `cost_info` | String (JSON) | Cost info of the time entry (JSON) |
> | `cost_rate` | Number | Cost rate of the time entry (per hour, in the installation currency) |
> | `created_at` | Datetime | Date and time the time entry was created. |
> | `date_created` | Datetime | Date created of the time entry (date and time) |
> | `date_deleted` | Datetime | Date deleted of the time entry (date and time) |
> | `date_edited` | Datetime | Date edited of the time entry (date and time) |
> | `deleted` | Boolean | Whether the time entry was deleted. |
> | `deleted_at` | Datetime | Date and time the time entry was deleted (null unless deleted) |
> | `deleted_by` | Integer | ID of the user who deleted the time entry. |
> | `deleted_by_user_id` | Integer | ID of the deleted by user related to the time entry. |
> | `description` | String | Description of the time entry. |
> | `desk_ticket_id` | Integer | ID of the desk ticket related to the time entry. |
> | `edited_by_user_id` | Integer | ID of the edited by user related to the time entry. |
> | `has_start_time` | Boolean | Whether the time entry has start time. |
> | `id` | Integer | Unique identifier of the time entry. |
> | `is_billable` | Boolean | Whether the time entry is billable. |
> | `is_locked` | Boolean | Whether the time entry is locked. |
> | `logged_by` | Integer | Logged by of the time entry. |
> | `logged_by_user_id` | Integer | ID of the user who logged the time. |
> | `minutes` | Integer | Time logged, in minutes. |
> | `parent_timelog_id` | Integer | ParentTimelogID is set on the remainder of a divided timelog, and points at the entry it came from, while that entry still exists. |
> | `project_billing_invoice_id` | Integer | ID of the project billing invoice related to the time entry. |
> | `project_id` | Integer | ID of the project the time entry belongs to. |
> | `tag_ids` | Array of integers | IDs of the tags applied to the time entry. |
> | `task_id` | Integer | ID of the task the time entry is linked to. |
> | `task_id_pre_move` | Integer | Task id pre move of the time entry. |
> | `task_pre_move` | String (JSON) | Task pre move of the time entry (JSON) |
> | `time_logged` | Datetime | Date and time the work was done (the date the time is logged for) |
> | `updated_at` | Datetime | Date and time the time entry was last updated. |
> | `updated_by` | Integer | ID of the user who last updated the time entry. |
> | `user_id` | Integer | ID of the user the time was logged for. |
> | `verified` | Boolean | Whether verified is enabled for the time entry. |
> | `verified_at` | Datetime | Verified at of the time entry (date and time) |
> | `verified_by` | String (JSON) | Verified by of the time entry (JSON) |

> [accordion] Messages
>
> Messages posted on projects.
>
> Table: `messages` · Primary key: `id` · Sync: Incremental (`updated_at`)
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `attachments` | String (JSON) | Attachments of the message (JSON) |
> | `author` | String (JSON) | Author of the message (JSON) |
> | `body` | String | Body of the message. |
> | `created_at` | Datetime | Date and time the message was created. |
> | `id` | Integer | Unique identifier of the message. |
> | `last_reply` | String (JSON) | A Relationship to a message reply (JSON) |
> | `lockdown` | String (JSON) | Lockdown of the message (JSON) |
> | `message` | String (JSON) | Message of the message (JSON) |
> | `meta` | String (JSON) | Meta of the message (JSON) |
> | `people_notified_count` | Integer | People notified count of the message. |
> | `project_id` | Integer | ID of the project the message belongs to. |
> | `reply_id` | Integer | ID of the reply related to the message. |
> | `reply_status` | String | Reply status of the message. |
> | `status` | String | Status of the message. |
> | `tags` | String (JSON) | Tags of the message (JSON) |
> | `title` | String | Title of the message. |
> | `updated_at` | Datetime | Date and time the message was last updated. |

> [accordion] Message Replies
>
> Replies to project messages, read by creation date.
>
> Table: `message_replies` · Primary key: `id` · Sync: Incremental (`created_at`)
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `attachments` | String (JSON) | Attachments of the message reply (JSON) |
> | `author` | String (JSON) | Author of the message reply (JSON) |
> | `body` | String | Body of the message reply. |
> | `created_at` | Datetime | Date and time the message reply was created. |
> | `id` | Integer | Unique identifier of the message reply. |
> | `message` | String (JSON) | Message of the message reply (JSON) |
> | `meta` | String (JSON) | Meta of the message reply (JSON) |
> | `people_notified_count` | Integer | People notified count of the message reply. |
> | `status` | String | Status of the message reply. |
> | `updated_at` | Datetime | Date and time the message reply was last updated. |

> [accordion] Comments
>
> Comments on tasks, milestones, notebooks, files and links (`object_type` / `object_id` say on what), read by posting date.
>
> Table: `comments` · Primary key: `id` · Sync: Incremental (`posted_date_time`)
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `body` | String | Body of the comment. |
> | `comment_link` | String | Comment link of the comment. |
> | `content_type` | String | Content type of the comment. |
> | `date_deleted` | Datetime | Date deleted of the comment (date and time) |
> | `date_last_edited` | Datetime | Date last edited of the comment (date and time) |
> | `deleted` | Boolean | Whether the comment was deleted. |
> | `deleted_by` | Integer | ID of the user who deleted the comment. |
> | `deleted_by_user_id` | Integer | ID of the deleted by user related to the comment. |
> | `file_count` | Integer | File count of the comment. |
> | `file_ids` | Array of integers | IDs of the files related to the comment. |
> | `html_body` | String | Html body of the comment. |
> | `id` | Integer | Unique identifier of the comment. |
> | `installation_id` | Integer | ID of the installation related to the comment. |
> | `is_private` | Integer | Whether the comment is private (1 = yes, 0 = no) |
> | `last_edited_by` | Integer | Last edited by of the comment. |
> | `last_edited_by_user_id` | Integer | ID of the last edited by user related to the comment. |
> | `lockdown_id` | Integer | ID of the lockdown related to the comment. |
> | `meta` | String (JSON) | Meta of the comment (JSON) |
> | `object_id` | Integer | ID of the item the comment was posted on. |
> | `object_type` | String | Type of the item the comment was posted on (tasks, milestones, notebooks, files, links...) |
> | `people_notified_count` | Integer | People notified count of the comment. |
> | `posted_by` | Integer | Posted by of the comment. |
> | `posted_by_user_id` | Integer | ID of the posted by user related to the comment. |
> | `posted_date_time` | Datetime | Date and time the comment was posted. |
> | `project_id` | Integer | ID of the project the comment belongs to. |
> | `reactions` | String (JSON) | Reactions of the comment (JSON) |
> | `reactions_count` | Integer | Reactions count of the comment. |

> [accordion] Notebooks
>
> Project notebooks and their contents.
>
> Table: `notebooks` · Primary key: `id` · Sync: Incremental (`updated_at`)
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `category_id` | Integer | ID of the category related to the notebook. |
> | `change_followers` | String (JSON) | Change followers of the notebook (JSON) |
> | `comment_followers` | String (JSON) | Comment followers of the notebook (JSON) |
> | `comments_count` | Integer | Comments count of the notebook. |
> | `content_html` | String | Content html of the notebook. |
> | `contents` | String | Can be optionally hidden on lists. |
> | `created_at` | Datetime | Date and time the notebook was created. |
> | `created_by` | Integer | ID of the user who created the notebook. |
> | `created_by_user_id` | Integer | ID of the created by user related to the notebook. |
> | `date_created` | Datetime | Date created of the notebook (date and time) |
> | `date_deleted` | Datetime | Date deleted of the notebook (date and time) |
> | `date_updated` | Datetime | Date updated of the notebook (date and time) |
> | `deleted` | Boolean | Whether the notebook was deleted. |
> | `deleted_at` | Datetime | Date and time the notebook was deleted (null unless deleted) |
> | `deleted_by` | Integer | ID of the user who deleted the notebook. |
> | `deleted_by_user_id` | Integer | ID of the deleted by user related to the notebook. |
> | `description` | String | Description of the notebook. |
> | `id` | Integer | Unique identifier of the notebook. |
> | `is_full_width` | Boolean | Whether the notebook is full width. |
> | `is_private` | Boolean | Whether the notebook is private. |
> | `latest_version_no` | Integer | Latest version no of the notebook. |
> | `lockdown_id` | Integer | ID of the lockdown related to the notebook. |
> | `locked` | Boolean | Whether locked is enabled for the notebook. |
> | `locked_at` | Datetime | Locked at of the notebook (date and time) |
> | `locked_by` | Integer | Locked by of the notebook. |
> | `name` | String | Name of the notebook. |
> | `notebook_version_created_date_time` | Datetime | Notebook version created date time of the notebook (date and time) |
> | `notebook_version_id` | Integer | ID of the notebook version related to the notebook. |
> | `notebook_version_updated_date_time` | Datetime | Notebook version updated date time of the notebook (date and time) |
> | `privacy` | String (JSON) | Privacy of the notebook (JSON) |
> | `project_id` | Integer | ID of the project the notebook belongs to. |
> | `read_comments_count` | Integer | Read comments count of the notebook. |
> | `secure_content` | Boolean | Whether secure content is enabled for the notebook. |
> | `tag_ids` | Array of integers | IDs of the tags applied to the notebook. |
> | `type` | String | Type of the notebook. |
> | `updated_at` | Datetime | Date and time the notebook was last updated. |
> | `updated_by` | Integer | ID of the user who last updated the notebook. |
> | `updated_by_user_id` | Integer | ID of the updated by user related to the notebook. |
> | `user_following_changes` | Boolean | Whether user following changes is enabled for the notebook. |
> | `user_following_comments` | Boolean | Whether user following comments is enabled for the notebook. |
> | `version_count` | Integer | Version count of the notebook. |

> [accordion] Projects
>
> Every project the user can see, of every type (normal, templates, personal, tentative), including archived ones (`status` = inactive).
>
> Table: `projects` · Primary key: `id` · Sync: Full table
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `active_pages` | String (JSON) | Active pages of the project (JSON) |
> | `allow_notify_anyone` | Boolean | Whether allow notify anyone is enabled for the project. |
> | `announcement` | String | Announcement of the project. |
> | `archived_at` | Datetime | When the project was archived. |
> | `archived_by` | Integer | The user who archived the project. |
> | `budget_count` | Integer | How many active budgets the project holds. |
> | `category_id` | Integer | ID of the category related to the project. |
> | `company_id` | Integer | ID of the company of the project. |
> | `completed_at` | Datetime | Date and time the project was completed. |
> | `completed_by` | Integer | ID of the user who completed the project. |
> | `created_at` | Datetime | Date and time the project was created. |
> | `created_by` | Integer | ID of the user who created the project. |
> | `custom_field_value_ids` | Array of integers | IDs of the custom field values related to the project. |
> | `customfield_values` | String (JSON) | Customfield values of the project (JSON) |
> | `default_privacy` | String | Default privacy of the project. |
> | `deleted_at` | Datetime | DeletedAt/deletedBy and archivedAt/archivedBy are backed by the same two columns, split by status, and exposed separately so the storage can be untangled later without an API change. |
> | `deleted_by` | Integer | The user who deleted the project. |
> | `description` | String | Description of the project. |
> | `direct_file_uploads_enabled` | Boolean | Whether direct file uploads enabled is enabled for the project. |
> | `end_at` | Datetime | End at of the project (date and time) |
> | `end_date` | Datetime | End date of the project. |
> | `financial_budget_id` | Integer | The project's budget id when its budget is a financial budget, else null. |
> | `harvest_timers_enabled` | Boolean | Whether harvest timers enabled is enabled for the project. |
> | `id` | Integer | Unique identifier of the project. |
> | `integrations` | String (JSON) | Integrations of the project (JSON) |
> | `is_billable` | Boolean | Whether the project is billable. |
> | `is_on_boarding_project` | Boolean | Whether the project is on boarding project. |
> | `is_project_admin` | Boolean | Whether the project is project admin. |
> | `is_sample_project` | Boolean | Whether the project is sample project. |
> | `is_starred` | Boolean | Whether the project is starred. |
> | `last_worked_on` | Datetime | Last worked on of the project (date and time) |
> | `latest_activity` | String (JSON) | Latest activity of the project (JSON) |
> | `logo` | String | Logo of the project. |
> | `logo_color` | String | Logo color of the project. |
> | `logo_icon` | String | Logo icon of the project. |
> | `min_max_available_dates` | String (JSON) | Min max available dates of the project (JSON) |
> | `name` | String | Name of the project. |
> | `notify_comment_include_creator` | Boolean | Whether notify comment include creator is enabled for the project. |
> | `notify_everyone` | Boolean | Whether notify everyone is enabled for the project. |
> | `notify_task_assignee` | Boolean | Whether notify task assignee is enabled for the project. |
> | `overview_start_page` | String | Overview start page of the project. |
> | `owned_by` | Integer | Owned by of the project. |
> | `owner_id` | Integer | ID of the owner related to the project. |
> | `portfolio_cards` | String (JSON) | Portfolio cards of the project (JSON) |
> | `privacy_enabled` | Boolean | Whether privacy enabled is enabled for the project. |
> | `project_number` | String | Project number of the project. |
> | `project_number_counter` | Integer | The counter the project number was generated from. |
> | `project_owner_id` | Integer | ID of the project owner related to the project. |
> | `reply_by_email_enabled` | Boolean | Whether reply by email enabled is enabled for the project. |
> | `show_announcement` | Boolean | Whether show announcement is enabled for the project. |
> | `skip_weekends` | Boolean | Whether skip weekends is enabled for the project. |
> | `start_at` | Datetime | Start at of the project (date and time) |
> | `start_date` | Datetime | Start date of the project. |
> | `start_page` | String | Start page of the project. |
> | `status` | String | The project status. |
> | `sub_status` | String | The project chronogram sub-status, derived from completion and dates. |
> | `tag_ids` | Array of integers | IDs of the tags applied to the project. |
> | `tasks_start_page` | String | Tasks start page of the project. |
> | `time_budget_id` | Integer | The project's budget id when its budget is a time budget, else null. |
> | `timelog_requires_task` | Boolean | Whether timelog requires task is enabled for the project. |
> | `type` | String | The project type. |
> | `update_id` | Integer | ID of the update related to the project. |
> | `updated_at` | Datetime | Date and time the project was last updated. |
> | `updated_by` | Integer | ID of the user who last updated the project. |
> | `users` | String (JSON) | Users of the project (JSON) |
> | `workflow_ids` | Array of integers | IDs of the workflows related to the project. |

> [accordion] People
>
> Users of the site: your team, clients, collaborators, placeholder resources and service accounts, including deleted users (`deleted`).
>
> Table: `people` · Primary key: `id` · Sync: Full table
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `avatar_url` | String | Avatar url of the person. |
> | `can_access_portfolio` | Boolean | Whether the person can access portfolio. |
> | `can_add_projects` | Boolean | Whether the person can add projects. |
> | `can_manage_portfolio` | Boolean | Whether the person can manage portfolio. |
> | `company_id` | Integer | ID of the company of the person. |
> | `company_role_id` | Integer | ID of the company role related to the person. |
> | `created_at` | Datetime | Date and time the person was created. |
> | `created_by` | String (JSON) | ID of the user who created the person (JSON) |
> | `deleted` | Boolean | Whether the person was deleted. |
> | `email` | String | Email of the person. |
> | `first_name` | String | First name of the person. |
> | `id` | Integer | Unique identifier of the person. |
> | `in_owner_company` | Boolean | Whether in owner company is enabled for the person. |
> | `is_admin` | Boolean | Whether the person is admin. |
> | `is_client_user` | Boolean | Whether the person is client user. |
> | `is_placeholder_resource` | Boolean | Whether the person is placeholder resource. |
> | `is_service_account` | Boolean | Whether the person is service account. |
> | `job_roles` | String (JSON) | Job roles of the person (JSON) |
> | `last_login` | Datetime | Last login of the person (date and time) |
> | `last_name` | String | Last name of the person. |
> | `length_of_day` | Number | Working hours in the person's day. |
> | `linked_client_portal_company_id` | Integer | LinkedClientPortalCompanyID and LinkedClientPortalCompany are the user's own company when that company is on the client portal the read was scoped to, and the key into included.linkedClientPortalCompanies. |
> | `login_target` | String | Login target of the person. |
> | `meta` | String (JSON) | Meta of the person (JSON) |
> | `site_owner` | Boolean | Whether site owner is enabled for the person. |
> | `skills` | String (JSON) | Skills are the skills the user holds (JSON) |
> | `teams` | String (JSON) | Teams of the person (JSON) |
> | `timezone` | String | Timezone of the person. |
> | `title` | String | Title of the person. |
> | `type` | String | Type of the person. |
> | `updated_at` | Datetime | Date and time the person was last updated. |
> | `updated_by` | String (JSON) | ID of the user who last updated the person (JSON) |
> | `user_cost` | Integer | Cost of the person (per hour, in cents of the installation currency) |
> | `user_rate` | Integer | Billable rate of the person (per hour, in cents of the installation currency) |
> | `user_rates` | String (JSON) | UserRates is a map of currency ID to rate (JSON) |
> | `working_hour` | String (JSON) | Working hour of the person (JSON) |
> | `working_hours_id` | Integer | ID of the working hours related to the person. |

> [accordion] Companies
>
> Companies (your own company and client companies).
>
> Table: `companies` · Primary key: `id` · Sync: Full table
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `accounts` | Integer | Accounts of the company. |
> | `address_one` | String | Address one of the company. |
> | `address_two` | String | Address two of the company. |
> | `budget_distribution` | String (JSON) | Budget distribution of the company (JSON) |
> | `can_see_private` | Boolean | Whether the company can see private. |
> | `cid` | String | Cid of the company. |
> | `city` | String | City of the company. |
> | `client_managed_by` | String (JSON) | Client managed by of the company (JSON) |
> | `client_portals` | String (JSON) | ClientPortals are the client portals the company is linked to, as references into the sideloaded portals (JSON) |
> | `clients` | Integer | Clients of the company. |
> | `collaborators` | Integer | Collaborators of the company. |
> | `company_domains` | String (JSON) | Company domains of the company (JSON) |
> | `company_name_url` | String | Company name url of the company. |
> | `company_update` | String (JSON) | Company update of the company (JSON) |
> | `contacts` | Integer | Contacts of the company. |
> | `country_code` | String | Country code of the company. |
> | `created_at` | Datetime | Date and time the company was created. |
> | `currency` | String (JSON) | Currency of the company (JSON) |
> | `email_one` | String | Email one of the company. |
> | `email_three` | String | Email three of the company. |
> | `email_two` | String | Email two of the company. |
> | `fax` | String | Fax of the company. |
> | `financial_budget_summary` | String (JSON) | Financial budget summary of the company (JSON) |
> | `id` | Integer | Unique identifier of the company. |
> | `industry_id` | Integer | ID of the industry related to the company. |
> | `is_owner` | Boolean | Whether the company is owner. |
> | `logo_url` | String | Logo url of the company. |
> | `name` | String | Name of the company. |
> | `phone` | String | Phone of the company. |
> | `private_notes` | String | Private notes of the company. |
> | `private_notes_text` | String | Private notes text of the company. |
> | `profile_text` | String | Profile text of the company. |
> | `profitability` | String (JSON) | Profitability of the company (JSON) |
> | `rates` | String (JSON) | Rates of the company (JSON) |
> | `state` | String | State of the company. |
> | `stats` | String (JSON) | Stats of the company (JSON) |
> | `status` | String | Status of the company. |
> | `tags` | String (JSON) | Tags of the company (JSON) |
> | `time_budget_summary` | String (JSON) | Time budget summary of the company (JSON) |
> | `updated_at` | Datetime | Date and time the company was last updated. |
> | `website` | String | Website of the company. |
> | `zip` | String | Zip of the company. |

> [accordion] Tags
>
> Tags used on projects, tasks, time entries and other items.
>
> Table: `tags` · Primary key: `id` · Sync: Full table
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `color` | String | Color of the tag. |
> | `count` | Integer | Count of the tag. |
> | `id` | Integer | Unique identifier of the tag. |
> | `name` | String | Name of the tag. |
> | `project_id` | Integer | ID of the project the tag belongs to. |

> [accordion] Project Categories
>
> Categories used to group projects.
>
> Table: `project_categories` · Primary key: `id` · Sync: Full table
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `color` | String | Color of the project category. |
> | `count` | Integer | Count of the project category. |
> | `id` | Integer | Unique identifier of the project category. |
> | `name` | String | Name of the project category. |
> | `parent_id` | Integer | ID of the parent related to the project category. |

> [accordion] Custom Fields
>
> Definitions of the custom fields of projects, tasks and companies.
>
> Table: `custom_fields` · Primary key: `id` · Sync: Full table
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `created_at` | Datetime | Date and time the custom field was created. |
> | `created_by` | Integer | ID of the user who created the custom field. |
> | `created_by_user_id` | Integer | ID of the created by user related to the custom field. |
> | `currency_code` | String | Currency code of the custom field. |
> | `deleted` | Boolean | Whether the custom field was deleted. |
> | `deleted_at` | Datetime | Date and time the custom field was deleted (null unless deleted) |
> | `deleted_by` | Integer | ID of the user who deleted the custom field. |
> | `deleted_by_user_id` | Integer | ID of the deleted by user related to the custom field. |
> | `description` | String | Description of the custom field. |
> | `entity` | String | Entity of the custom field. |
> | `formula` | String | Formula of the custom field. |
> | `group_id` | Integer | ID of the group related to the custom field. |
> | `id` | Integer | Unique identifier of the custom field. |
> | `is_private` | Boolean | Whether the custom field is private. |
> | `name` | String | Name of the custom field. |
> | `options` | String (JSON) | Options of the custom field (JSON) |
> | `project_id` | Integer | ID of the project the custom field belongs to. |
> | `required` | Boolean | Whether required is enabled for the custom field. |
> | `type` | String | Type of the custom field. |
> | `unit_id` | Integer | ID of the unit related to the custom field. |
> | `updated_at` | Datetime | Date and time the custom field was last updated. |
> | `updated_by` | Integer | ID of the user who last updated the custom field. |
> | `updated_by_user_id` | Integer | ID of the updated by user related to the custom field. |
> | `visibilities` | Array of strings | Visibilities of the custom field. |

> [accordion] Workflows
>
> Workflows (boards of stages tasks move through), including archived ones.
>
> Table: `workflows` · Primary key: `id` · Sync: Full table
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `companies` | String (JSON) | Companies of the workflow (JSON) |
> | `created_at` | Datetime | Date and time the workflow was created. |
> | `created_by` | Integer | ID of the user who created the workflow. |
> | `default_workflow` | Boolean | Whether default workflow is enabled for the workflow. |
> | `id` | Integer | Unique identifier of the workflow. |
> | `lockdown` | String (JSON) | Lockdown of the workflow (JSON) |
> | `name` | String | Name of the workflow. |
> | `project_ids` | Array of integers | IDs of the projects related to the workflow. |
> | `project_specific` | Boolean | Whether project specific is enabled for the workflow. |
> | `stages` | String (JSON) | Stages of the workflow (JSON) |
> | `status` | String | Status of the workflow. |
> | `updated_at` | Datetime | Date and time the workflow was last updated. |
> | `updated_by` | Integer | ID of the user who last updated the workflow. |

> [accordion] Workflow Stages
>
> Stages of every workflow.
>
> Table: `workflow_stages` · Primary key: `workflow_id`, `id` · Sync: Full table
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `color` | String | Color of the workflow stage. |
> | `created_at` | Datetime | Date and time the workflow stage was created. |
> | `created_by` | Integer | ID of the user who created the workflow stage. |
> | `deleted_at` | Datetime | Date and time the workflow stage was deleted (null unless deleted) |
> | `deleted_by` | Integer | ID of the user who deleted the workflow stage. |
> | `display_order` | Number | Display order of the workflow stage. |
> | `id` | Integer | Unique identifier of the workflow stage. |
> | `name` | String | Name of the workflow stage. |
> | `show_completed_tasks` | Boolean | Whether show completed tasks is enabled for the workflow stage. |
> | `task_ids` | Array of integers | IDs of the tasks related to the workflow stage. |
> | `updated_at` | Datetime | Date and time the workflow stage was last updated. |
> | `updated_by` | Integer | ID of the user who last updated the workflow stage. |
> | `workflow` | String (JSON) | Workflow of the workflow stage (JSON) |
> | `workflow_id` | Integer | ID of the workflow the stage belongs to. |

> [accordion] Job Roles
>
> Job roles assigned to people.
>
> Table: `job_roles` · Primary key: `id` · Sync: Full table
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `billable_rates_by_currency_id` | String (JSON) | ID of the billable rates by currency related to the job role (JSON) |
> | `cost_rates_by_currency_id` | String (JSON) | ID of the cost rates by currency related to the job role (JSON) |
> | `created_at` | Datetime | Date and time the job role was created. |
> | `created_by_user` | Integer | Created by user of the job role. |
> | `deleted_at` | Datetime | Date and time the job role was deleted (null unless deleted) |
> | `deleted_by_user` | Integer | Deleted by user of the job role. |
> | `id` | Integer | Unique identifier of the job role. |
> | `is_active` | Boolean | Whether the job role is active. |
> | `name` | String | Name of the job role. |
> | `placeholder_count` | Integer | Placeholder count of the job role. |
> | `primary_users` | String (JSON) | Primary users of the job role (JSON) |
> | `updated_at` | Datetime | Date and time the job role was last updated. |
> | `updated_by_user` | Integer | Updated by user of the job role. |
> | `users` | String (JSON) | Users of the job role (JSON) |

> [accordion] Skills
>
> Skills assigned to people.
>
> Table: `skills` · Primary key: `id` · Sync: Full table
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `created_at` | Datetime | Date and time the skill was created. |
> | `created_by_user` | Integer | Created by user of the skill. |
> | `deleted_at` | Datetime | Date and time the skill was deleted (null unless deleted) |
> | `deleted_by_user` | Integer | Deleted by user of the skill. |
> | `id` | Integer | Unique identifier of the skill. |
> | `name` | String | Name of the skill. |
> | `people_count` | Integer | PeopleCount is how many people hold this skill in total, independent of any page of users. |
> | `updated_at` | Datetime | Date and time the skill was last updated. |
> | `updated_by_user` | Integer | Updated by user of the skill. |
> | `users` | String (JSON) | Users are the people assigned to this skill (JSON) |

> [accordion] Risks
>
> Project risks (source, probability, impact).
>
> Table: `risks` · Primary key: `id` · Sync: Full table
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `can_edit` | Boolean | Whether the risk can edit. |
> | `created_at` | Datetime | Date and time the risk was created. |
> | `created_by` | Integer | ID of the user who created the risk. |
> | `created_by_user_id` | Integer | ID of the created by user related to the risk. |
> | `created_on` | Datetime | Created on of the risk (date and time) |
> | `deleted` | Boolean | Whether the risk was deleted. |
> | `id` | Integer | Unique identifier of the risk. |
> | `impact` | String | Impact of the risk. |
> | `impact_cost` | Boolean | Whether impact cost is enabled for the risk. |
> | `impact_performance` | Boolean | Whether impact performance is enabled for the risk. |
> | `impact_schedule` | Boolean | Whether impact schedule is enabled for the risk. |
> | `impact_value` | Integer | Impact value of the risk. |
> | `last_changed_by_user_id` | Integer | ID of the last changed by user related to the risk. |
> | `last_changed_on` | Datetime | Last changed on of the risk (date and time) |
> | `mitigation_plan` | String | Mitigation plan of the risk. |
> | `probability` | String | Probability of the risk. |
> | `probability_value` | Integer | Probability value of the risk. |
> | `project_id` | Integer | ID of the project the risk belongs to. |
> | `result` | Integer | Result of the risk. |
> | `source` | String | Source of the risk. |
> | `status` | String | Status of the risk. |
> | `updated_at` | Datetime | Date and time the risk was last updated. |
> | `updated_by` | Integer | ID of the user who last updated the risk. |

> [accordion] Project Updates
>
> Status updates posted on projects (text and health).
>
> Table: `project_updates` · Primary key: `id` · Sync: Full table
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `color` | String | Color of the project update. |
> | `created_at` | Datetime | Date and time the project update was created. |
> | `created_by` | Integer | ID of the user who created the project update. |
> | `deleted` | Boolean | Whether the project update was deleted. |
> | `deleted_at` | Datetime | Date and time the project update was deleted (null unless deleted) |
> | `deleted_by` | Integer | ID of the user who deleted the project update. |
> | `health` | Integer | Health of the project update. |
> | `health_label` | String | Health label of the project update. |
> | `id` | Integer | Unique identifier of the project update. |
> | `is_active` | Boolean | Whether the project update is active. |
> | `like_from_user_i_ds` | Array of integers | Like from user i ds of the project update. |
> | `like_from_users` | String (JSON) | Like from users of the project update (JSON) |
> | `project_id` | Integer | ID of the project the project update belongs to. |
> | `reactions` | String (JSON) | Reactions of the project update (JSON) |
> | `text` | String | Text of the project update. |
> | `updated_at` | Datetime | Date and time the project update was last updated. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.