> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to Teamwork

The Teamwork connector lets your AI agent act in each user's Teamwork account. Each user signs in to Teamwork once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 250 tools.

**Authentication:** OAuth 2.0
**Categories:** Project Management, Collaboration, Productivity
**Tools:** 250: 112 read, 102 write, 36 destructive
**Users sign in with:** OAuth
**OAuth app:** Your own Teamwork app
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=TEAMWORK)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Teamwork connection

   In **AgentKit > Connections**, create a Teamwork connection and copy its redirect URI. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Register an OAuth app

   Teamwork connections use your own OAuth app. Register one with Teamwork and add the redirect URI you copied.

   Then enter the app's Client ID and Client Secret on the Teamwork connection.

5. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'teamwork'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Teamwork:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'teamwork_activity_list',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "teamwork"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Teamwork:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="teamwork_activity_list",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'teamwork_activity_list',
  toolInput: {},
  connector: 'teamwork',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="teamwork_activity_list",
    tool_input={},
    connection_name="teamwork",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `teamwork_activity_list`

List Latest Activity · Read-only

List the latest activity across all projects the user can see.
Returns activity entries with type, actor, item and timestamp, newest first.
Use for a site-wide activity feed. Use teamwork_project_activity_list for one project.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `activity_types` (`string`, optional): Comma-separated activity types to include, for example new, edited, completed. Example: new,completed.
- `end_date` (`string`, optional): Only activity on or before this date (YYYY-MM-DD). Example: 2025-01-31.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `project_ids` (`string`, optional): Comma-separated project ids; only activity in these projects. Example: 123456.
- `start_date` (`string`, optional): Only activity on or after this date (YYYY-MM-DD). Example: 2025-01-01.
- `user_ids` (`string`, optional): Comma-separated user ids; only activity by these users. Example: 101,102.

Example input: `{}`

### `teamwork_calendar_event_get`

Get Calendar Event · Read-only

Retrieve one calendar event by id.
Returns the event with title, times, location, description and attendees.
Use when you have an event id. Use teamwork_calendar_events_list to find events.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `event_id` (`integer`, required): Id of the calendar event. Example: 7701.

Example input: `{"event_id":7701}`

### `teamwork_calendar_event_types_list`

List Calendar Event Types · Read-only

List the calendar event types defined on the Teamwork site.
Returns each event type with id and name.
Use to find an event type id for teamwork_calendar_event_update.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `teamwork_calendar_events_list`

List Calendar Events · Read-only

List the calendar events you can see in a date range.
Returns each event with id, title, start, end and attendees.
Use to see what is scheduled. Use teamwork_calendar_event_get for one event.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `end_date` (`string`, required): End of the range in YYYYMMDD format. Example: 20250331.
- `start_date` (`string`, required): Start of the range in YYYYMMDD format. Example: 20250301.

Example input: `{"end_date":"<end_date>","start_date":"<start_date>"}`

### `teamwork_comment_get`

Get Comment · Read-only

Retrieve one comment on a task, milestone, notebook or link by id.
Returns the comment with body, author, timestamp and the object it belongs to.
Use when you have a comment id and need its detail. Use teamwork_message_reply_get for a reply to a message.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `comment_id` (`integer`, required): Id of the comment. Example: 88001.

Example input: `{"comment_id":88001}`

### `teamwork_comments_list`

List Comments · Read-only

List comments across tasks, milestones, notebooks, links, files and other items you can see.
Returns a page of comments with body, author, parent item and timestamps, plus paging metadata.
Use to search or review discussion across projects. Use teamwork_task_comments_list or teamwork_milestone_comments_list for one item.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `object_ids` (`string`, optional): Comma-separated ids of the items to read comments for. Example: 7654321,7654322.
- `object_type` (`string`, optional): Only comments on this type of item. Example: task.
- `order_mode` (`string`, optional): Sort direction. Example: asc. Allowed values: asc, desc. One of: `asc`, `desc`.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `project_ids` (`string`, optional): Comma-separated project ids; only comments in these projects. Example: 123456.
- `search_term` (`string`, optional): Only return comments whose name or text matches this term. Example: roadmap.
- `updated_after` (`string`, optional): Only comments updated after this ISO 8601 timestamp. Example: 2025-01-01T00:00:00Z.

Example input: `{}`

### `teamwork_companies_list`

List Companies · Read-only

List companies (clients) on the Teamwork site.
Returns a page of companies with id, name, website and contact details.
Use to find a company id for teamwork_project_create or teamwork_people_list.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `search_term` (`string`, optional): Only return companies whose name or text matches this term. Example: roadmap.

Example input: `{}`

### `teamwork_company_get`

Get Company · Read-only

Retrieve one company by id.
Returns the company's name, website, address and contact details.
Use when you have a company id and need its detail.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `company_id` (`integer`, required): Id of the company. Example: 55.

Example input: `{"company_id":55}`

### `teamwork_company_people_list`

List Company People · Read-only

List the people who belong to one company.
Returns each person with id, name and email.
Use to see who works at a client. Use teamwork_people_list for everyone on the site.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `company_id` (`integer`, required): Id of the company. Example: 55.

Example input: `{"company_id":55}`

### `teamwork_company_projects_list`

List Company Projects · Read-only

List the projects that belong to one company.
Returns each project with id, name and status.
Use to see a client's projects. Use teamwork_projects_list with a company filter for more options.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `company_id` (`integer`, required): Id of the company. Example: 55.

Example input: `{"company_id":55}`

### `teamwork_currency_codes_list`

List Currency Codes · Read-only

List the currency codes Teamwork accepts.
Returns each currency with its code and name.
Use to find a valid currency_code for teamwork_invoice_create or teamwork_customfield_create.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `teamwork_customfield_get`

Get Custom Field · Read-only

Retrieve one custom field definition by id.
Returns the field with name, type, entity, options and project.
Use when you have a custom field id. Use teamwork_customfields_list to find fields.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `customfield_id` (`integer`, required): Id of the custom field. Example: 6801.

Example input: `{"customfield_id":6801}`

### `teamwork_customfields_list`

List Custom Fields · Read-only

List the custom field definitions on the Teamwork site, including project-scoped ones.
Returns a page of custom fields with id, name, type, entity and project.
Use to find a custom field id before reading or setting values. Use teamwork_customfield_get for one field.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `order_by` (`string`, optional): Field to sort by. Example: name. Allowed values: name, project, dateCreated, dateUpdated, id. One of: `name`, `project`, `dateCreated`, `dateUpdated`, `id`.
- `order_mode` (`string`, optional): Sort direction. Example: asc. Allowed values: asc, desc. One of: `asc`, `desc`.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `search_term` (`string`, optional): Only return custom fields whose name or text matches this term. Example: roadmap.

Example input: `{}`

### `teamwork_expense_get`

Get Expense · Read-only

Retrieve one expense by id.
Returns the expense with name, description, cost, date and project.
Use when you have an expense id and need its detail.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `expense_id` (`integer`, required): Id of the expense. Example: 2201.

Example input: `{"expense_id":2201}`

### `teamwork_expenses_list`

List Expenses · Read-only

List the expenses recorded across all projects you can see.
Returns each expense with id, name, cost, date and project.
Use for a cross-project expense review. Use teamwork_project_expenses_list for one project.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `teamwork_file_categories_list`

List File Categories · Read-only

List the file categories defined in one project.
Returns each category with id, name and parent.
Use to find a category id to pass when creating or updating a file.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.

Example input: `{"project_id":123456}`

### `teamwork_file_get`

Get File · Read-only

Retrieve the details of one file, including a short-lived download URL.
Returns the file with name, size, version, uploader and a download URL that is valid for one hour.
Use when you have a file id. Use teamwork_project_files_list to find files.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `file_id` (`integer`, required): Id of the file. Example: 4401.

Example input: `{"file_id":4401}`

### `teamwork_invoice_get`

Get Invoice · Read-only

Retrieve an invoice with its line items.
Returns the invoice with the time entries and expenses on it.
Use when you have an invoice id. Use teamwork_invoices_list to find invoices.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `invoice_id` (`integer`, required): Id of the invoice. Example: 3301.

Example input: `{"invoice_id":3301}`

### `teamwork_invoices_list`

List Invoices · Read-only

List the invoices across all projects you can see.
Returns each invoice with id, number, status, project and totals.
Use for a cross-project billing review. Use teamwork_project_invoices_list for one project.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `type` (`string`, optional): Which invoices to return. Example: active. Allowed values: active, all, completed. One of: `active`, `all`, `completed`.

Example input: `{}`

### `teamwork_job_roles_list`

List Job Roles · Read-only

List the job roles defined on the Teamwork site.
Returns a page of job roles with id and name.
Use to find a job role id for resource planning.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `order_mode` (`string`, optional): Sort direction. Example: asc. Allowed values: asc, desc. One of: `asc`, `desc`.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `search_term` (`string`, optional): Only return job roles whose name or text matches this term. Example: roadmap.

Example input: `{}`

### `teamwork_link_categories_list`

List Link Categories · Read-only

List the link categories defined in one project.
Returns each category with id, name and parent.
Use to find a category id to pass when creating or updating a link.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.

Example input: `{"project_id":123456}`

### `teamwork_link_comments_list`

List Link Comments · Read-only

List the comments on one link.
Returns a page of comments with body, author and timestamps.
Use to read discussion on a link. Use teamwork_comments_list to search across items.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `link_id` (`integer`, required): Id of the link. Example: 3001.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.

Example input: `{"link_id":3001}`

### `teamwork_link_get`

Get Link · Read-only

Retrieve one link by id.
Returns the link with name, URL, description and category.
Use when you have a link id and need its detail.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `link_id` (`integer`, required): Id of the link. Example: 3001.

Example input: `{"link_id":3001}`

### `teamwork_links_list`

List Links · Read-only

List the links on all projects you can see.
Returns each link with id, name, URL, category and project.
Use to find a link across projects. Use teamwork_project_links_list for one project.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `teamwork_me_get`

Get Current User · Read-only

Retrieve the profile of the authenticated Teamwork user.
Returns the user's id, name, email, company and role.
Use to identify who the connection acts as, or to get the user id to assign tasks to yourself.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `teamwork_message_categories_list`

List Message Categories · Read-only

List the message categories defined in one project.
Returns each category with id, name and parent.
Use to find a category id to pass when creating or updating a message.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.

Example input: `{"project_id":123456}`

### `teamwork_message_get`

Get Message · Read-only

Retrieve one message board post by id.
Returns the message with title, body, author and project.
Use when you have a message id and need its full text.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `message_id` (`integer`, required): Id of the message. Example: 6001.

Example input: `{"message_id":6001}`

### `teamwork_message_replies_list`

List Message Replies · Read-only

List the replies to a message.
Returns a page of replies with id, body, author and timestamp.
Use to read a message thread.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `message_id` (`integer`, required): Id of the message. Example: 6001.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.

Example input: `{"message_id":6001}`

### `teamwork_message_reply_get`

Get Message Reply · Read-only

Retrieve one message reply by id.
Returns the reply with body, author, message and timestamps.
Use when you have a reply id. Use teamwork_message_replies_list for all replies on a message.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `reply_id` (`integer`, required): Id of the message reply. Example: 6501.

Example input: `{"reply_id":6501}`

### `teamwork_messages_list`

List Messages · Read-only

List message board posts across projects.
Returns a page of messages with id, title, author, project and timestamp.
Use to browse project discussions. Use teamwork_message_get for the full text of one.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_after` (`string`, optional): Only messages created after this ISO 8601 timestamp. Example: 2025-01-01T00:00:00Z.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `project_ids` (`string`, optional): Comma-separated project ids; only messages in these projects. Example: 123456.
- `search_term` (`string`, optional): Only return messages whose name or text matches this term. Example: roadmap.
- `unread_only` (`boolean`, optional): When true, only unread messages. Example: false.

Example input: `{}`

### `teamwork_milestone_comments_list`

List Milestone Comments · Read-only

List the comments on a milestone.
Returns a page of comments with id, body, author and timestamp.
Use to read a milestone's discussion.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `milestone_id` (`integer`, required): Id of the milestone. Example: 4001.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.

Example input: `{"milestone_id":4001}`

### `teamwork_milestone_get`

Get Milestone · Read-only

Retrieve one milestone by id.
Returns the milestone with title, description, deadline, status and linked task lists.
Use when you have a milestone id and need its detail.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `milestone_id` (`integer`, required): Id of the milestone. Example: 4001.

Example input: `{"milestone_id":4001}`

### `teamwork_milestones_list`

List Milestones · Read-only

List milestones across all projects.
Returns a page of milestones with id, title, deadline, status and project.
Use to find upcoming or overdue milestones. Use teamwork_project_milestones_list for one project.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `assigned_to_user_ids` (`string`, optional): Comma-separated user ids; only milestones assigned to these users. Example: 101.
- `due_after` (`string`, optional): Only milestones due on or after this date (YYYY-MM-DD). Example: 2025-01-01.
- `due_before` (`string`, optional): Only milestones due on or before this date (YYYY-MM-DD). Example: 2025-12-31.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `project_ids` (`string`, optional): Comma-separated project ids; only milestones in these projects. Example: 123456.
- `search_term` (`string`, optional): Only return milestones whose name or text matches this term. Example: roadmap.

Example input: `{}`

### `teamwork_my_status_get`

Get My Status · Read-only

Retrieve the current status message of the authenticated user.
Returns the status with id, message and date.
Use to read your own status. Use teamwork_statuses_list for everyone.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `teamwork_my_timers_list`

List My Timers · Read-only

List the running and paused timers of the authenticated user.
Returns each timer with id, task, project, running state and elapsed seconds.
Use to see what you are timing right now. Use teamwork_timers_list for the site-wide list.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `teamwork_notebook_categories_list`

List Notebook Categories · Read-only

List the notebook categories defined in one project.
Returns each category with id, name and parent.
Use to find a category id to pass when creating or updating a notebook.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.

Example input: `{"project_id":123456}`

### `teamwork_notebook_comments_list`

List Notebook Comments · Read-only

List the comments on one notebook.
Returns a page of comments with body, author and timestamps.
Use to read discussion on a notebook. Use teamwork_comments_list to search across items.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `notebook_id` (`integer`, required): Id of the notebook. Example: 2001.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.

Example input: `{"notebook_id":2001}`

### `teamwork_notebook_get`

Get Notebook · Read-only

Retrieve one notebook by id.
Returns the notebook with name, description and contents.
Use when you have a notebook id and need its text.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `notebook_id` (`integer`, required): Id of the notebook. Example: 2001.

Example input: `{"notebook_id":2001}`

### `teamwork_notebook_version_get`

Get Notebook Version · Read-only

Retrieve one saved version of a notebook, including its contents.
Returns the version with contents, author and timestamp.
Use after teamwork_notebook_versions_list to read an earlier version.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `notebook_id` (`integer`, required): Id of the notebook. Example: 2001.
- `version_id` (`integer`, required): Id of the version. Example: 9101.

Example input: `{"notebook_id":2001,"version_id":9101}`

### `teamwork_notebook_versions_list`

List Notebook Versions · Read-only

List the saved versions of a notebook.
Returns each version with id, author and timestamp.
Use to review a notebook's edit history. Use teamwork_notebook_version_get to read one version.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `notebook_id` (`integer`, required): Id of the notebook. Example: 2001.

Example input: `{"notebook_id":2001}`

### `teamwork_notebooks_list`

List Notebooks · Read-only

List notebooks across projects.
Returns a page of notebooks with id, name, project and last update.
Use to find project documentation. Use teamwork_notebook_get for the contents.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `project_ids` (`string`, optional): Comma-separated project ids; only notebooks in these projects. Example: 123456.
- `search_term` (`string`, optional): Only return notebooks whose name or text matches this term. Example: roadmap.

Example input: `{}`

### `teamwork_people_list`

List People · Read-only

List people on the Teamwork site, optionally filtered by name, email, company or project.
Returns a page of people with id, name, email, company and user type.
Use to find a user id for assignment. Use teamwork_project_people_list for one project's members.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `company_ids` (`string`, optional): Comma-separated company ids; only people in these companies. Example: 55.
- `emails` (`string`, optional): Comma-separated email addresses; only people with these emails. Example: ana@example.com.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `project_ids` (`string`, optional): Comma-separated project ids; only members of these projects. Example: 123456.
- `search_term` (`string`, optional): Only return people whose name or text matches this term. Example: roadmap.
- `user_type` (`string`, optional): Only people of this type. Example: account. Allowed values: account, collaborator, contact. One of: `account`, `collaborator`, `contact`.

Example input: `{}`

### `teamwork_person_get`

Get Person · Read-only

Retrieve one person by id.
Returns the person's name, email, title, company and user type.
Use when you have a user id and need their profile.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `person_id` (`integer`, required): Id of the person. Example: 101.

Example input: `{"person_id":101}`

### `teamwork_personal_tasks_list`

List Personal Tasks · Read-only

List the personal tasks of the authenticated user, which live outside any project.
Returns a page of personal tasks with id, name, status and dates.
Use for a user's private to-do list. Use teamwork_tasks_list for project tasks.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.

Example input: `{}`

### `teamwork_portfolio_board_columns_list`

List Portfolio Board Columns · Read-only

List the columns of one portfolio board.
Returns each column with id, name and colour.
Use to find a column id. Use teamwork_portfolio_column_cards_list for the projects in a column.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `board_id` (`integer`, required): Id of the portfolio board. Example: 801.

Example input: `{"board_id":801}`

### `teamwork_portfolio_board_get`

Get Portfolio Board · Read-only

Retrieve one portfolio board by id.
Returns the board with name, description, colour and project statistics.
Use when you have a board id. Use teamwork_portfolio_boards_list to find boards.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `board_id` (`integer`, required): Id of the portfolio board. Example: 801.

Example input: `{"board_id":801}`

### `teamwork_portfolio_boards_list`

List Portfolio Boards · Read-only

List the portfolio boards, which group projects into columns for a high-level view.
Returns each board with id, name, description, colour and project count.
Use to find a portfolio board id. Use teamwork_portfolio_board_columns_list for a board's columns.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `teamwork_portfolio_column_cards_list`

List Portfolio Column Projects · Read-only

List the projects (cards) inside one portfolio column.
Returns each card with its id and the project it represents.
Use to see which projects sit in a column.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `column_id` (`integer`, required): Id of the portfolio column. Example: 901.

Example input: `{"column_id":901}`

### `teamwork_project_activity_list`

List Project Activity · Read-only

List the latest activity inside one project.
Returns activity entries with type, actor, item and timestamp, newest first.
Use to see what changed in a single project. Use teamwork_activity_list for all projects.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.
- `end_date` (`string`, optional): Only activity on or before this date (YYYY-MM-DD). Example: 2025-01-31.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `start_date` (`string`, optional): Only activity on or after this date (YYYY-MM-DD). Example: 2025-01-01.

Example input: `{"project_id":123456}`

### `teamwork_project_categories_list`

List Project Categories · Read-only

List the project categories defined on the Teamwork site.
Returns category id, name and colour for each category.
Use to find a category id to pass to teamwork_project_create or teamwork_projects_list.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `teamwork_project_customfield_values_list`

List Project Custom Field Values · Read-only

List the custom field values set on one project.
Returns a page of values with the field id and the stored value.
Use to read a project's custom data. Use teamwork_customfields_list to see field definitions.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.

Example input: `{"project_id":123456}`

### `teamwork_project_expenses_list`

List Project Expenses · Read-only

List the expenses recorded in one project, optionally filtered by date or invoiced state.
Returns each expense with id, name, cost, date and invoiced state.
Use when you know the project. Use teamwork_expenses_list for all projects.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.
- `from_date` (`string`, optional): Only expenses on or after this date (YYYYMMDD). Example: 20250301.
- `invoiced_type` (`string`, optional): Filter by invoiced state. Example: NonInvoiced. Allowed values: Invoiced, NonInvoiced. One of: `Invoiced`, `NonInvoiced`.
- `to_date` (`string`, optional): Only expenses on or before this date (YYYYMMDD). Example: 20250331.

Example input: `{"project_id":123456}`

### `teamwork_project_files_list`

List Project Files · Read-only

List the files stored in one project.
Returns each file with id, name, size, category, uploader and date.
Use to find a file id. Uploading files is not supported by these tools.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.

Example input: `{"project_id":123456}`

### `teamwork_project_get`

Get Project · Read-only

Retrieve a single project by id.
Returns the project with name, description, status, start and end dates, owner, company and category.
Use after teamwork_projects_list when you have a project id and need its full detail.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project to retrieve. Example: 123456.
- `include` (`string`, optional): Comma-separated related objects to sideload into the response. Allowed values: projectOwners, companies, projectCategories, tags, users, createdBy. Example: tags,companies.

Example input: `{"project_id":123456}`

### `teamwork_project_invoices_list`

List Project Invoices · Read-only

List the invoices of one project.
Returns each invoice with id, number, status and totals.
Use when you know the project. Use teamwork_invoices_list for all projects.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `type` (`string`, optional): Which invoices to return. Example: active. Allowed values: active, all, completed. One of: `active`, `all`, `completed`.

Example input: `{"project_id":123456}`

### `teamwork_project_links_list`

List Project Links · Read-only

List the links saved in one project.
Returns each link with id, name, URL and category.
Use when you know the project. Use teamwork_links_list for all projects.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.

Example input: `{"project_id":123456}`

### `teamwork_project_messages_archived_list`

List Archived Messages · Read-only

List the archived messages of one project.
Returns a summary record for each archived message with id, title and author.
Use to find a message to bring back with teamwork_message_unarchive. Use teamwork_messages_list for active messages.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.

Example input: `{"project_id":123456}`

### `teamwork_project_milestones_list`

List Project Milestones · Read-only

List the milestones in one project.
Returns a page of milestones with id, title, deadline and status.
Use when you know the project. Use teamwork_milestones_list to search across projects.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.

Example input: `{"project_id":123456}`

### `teamwork_project_people_list`

List Project People · Read-only

List the people who are members of a project.
Returns a page of people with id, name, email and company.
Use to see who works on a project. Use teamwork_people_list for everyone on the site.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project whose members to list. Example: 123456.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `search_term` (`string`, optional): Only return people whose name or text matches this term. Example: roadmap.

Example input: `{"project_id":123456}`

### `teamwork_project_person_get`

Get Project Person · Read-only

Retrieve one person as seen within a project.
Returns the person with name, email, company and project role details.
Use to check a user's record in a project. Use teamwork_project_people_list for all members.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `person_id` (`integer`, required): Id of the person. Example: 101.
- `project_id` (`integer`, required): Id of the project. Example: 123456.

Example input: `{"person_id":101,"project_id":123456}`

### `teamwork_project_risks_list`

List Project Risks · Read-only

List the risks in the risk register of one project.
Returns a page of risks with source, probability, impact and mitigation plan, plus paging metadata.
Use when you know the project. Use teamwork_risks_list across projects.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.
- `order_mode` (`string`, optional): Sort direction. Example: asc. Allowed values: asc, desc. One of: `asc`, `desc`.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `search_term` (`string`, optional): Only return risks whose name or text matches this term. Example: roadmap.

Example input: `{"project_id":123456}`

### `teamwork_project_stats_get`

Get Project Stats · Read-only

Retrieve the task, milestone and activity statistics of one project.
Returns counts of tasks, completed and late tasks, milestones and similar totals for the project.
Use for a quick progress snapshot. Use teamwork_project_summary_get for the dashboard-style summary.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.

Example input: `{"project_id":123456}`

### `teamwork_project_status_updates_list`

List Status Updates for Project · Read-only

List the status updates posted on one project.
Returns a page of status updates with text, health, author and date.
Use to read a project's status history. Use teamwork_status_updates_list for all projects.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.
- `created_after` (`string`, optional): Only updates created after this ISO 8601 timestamp. Example: 2025-01-01T00:00:00Z.
- `order_mode` (`string`, optional): Sort direction. Example: asc. Allowed values: asc, desc. One of: `asc`, `desc`.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.

Example input: `{"project_id":123456}`

### `teamwork_project_summary_get`

Get Project Summary · Read-only

Retrieve the dashboard summary of a project.
Returns counters for tasks, milestones, events, risks, timers, unread items and project health.
Use for a high-level status of one project. Use teamwork_project_stats_get for classic statistics.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.

Example input: `{"project_id":123456}`

### `teamwork_project_tasklists_list`

List Project Task Lists · Read-only

List the task lists in one project.
Returns a page of task lists with id, name, description and completion state.
Use when you know the project. Use teamwork_tasklists_list to search across projects.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.

Example input: `{"project_id":123456}`

### `teamwork_project_tasks_list`

List Project Tasks · Read-only

List the tasks in one project, optionally filtered by assignee, tag, priority or due date.
Returns a page of tasks with id, name, status, priority, dates and assignees, plus paging metadata.
Use when you know the project. Use teamwork_tasks_list to search across projects.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project whose tasks to list. Example: 123456.
- `due_after` (`string`, optional): Only tasks due on or after this date (YYYY-MM-DD). Example: 2025-01-01.
- `due_before` (`string`, optional): Only tasks due on or before this date (YYYY-MM-DD). Example: 2025-12-31.
- `include` (`string`, optional): Comma-separated related objects to sideload into the response. Allowed values: projects, tasklists, parentTasks, companies, teams, users, milestones, comments, tags, timeTotals, subtaskStats, attachments. Example: tasklists,users.
- `include_completed_tasks` (`boolean`, optional): When true, completed tasks are included. Example: false.
- `order_by` (`string`, optional): Field to sort by. Example: duedate. One of: `id`, `startdate`, `createdat`, `priority`, `project`, `duedate`, `updatedat`, `taskname`, `completedat`, `assignedto`, `estimatedtime`, `dateadded`, `dateupdated`, `datecompleted`, `tags`.
- `order_mode` (`string`, optional): Sort direction. Example: asc. Allowed values: asc, desc. One of: `asc`, `desc`.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `priority` (`string`, optional): Only tasks with this priority. Example: high. Allowed values: low, medium, high. One of: `low`, `medium`, `high`.
- `responsible_party_ids` (`string`, optional): Comma-separated user ids; only tasks assigned to these users. Example: 101,102.
- `search_term` (`string`, optional): Only return tasks whose name or text matches this term. Example: roadmap.
- `tag_ids` (`string`, optional): Comma-separated tag ids; only tasks with these tags. Example: 3,4.
- `task_filter` (`string`, optional): Preset filter on task dates and state. Example: overdue. One of: `all`, `anytime`, `completed`, `created`, `overdue`, `today`, `yesterday`, `started`, `tomorrow`, `thisweek`, `within7`, `within14`, `within30`, `within365`, `nodate`, `noduedate`, `nostartdate`, `hasDate`, `upcoming`.
- `tasklist_ids` (`string`, optional): Comma-separated task list ids; only tasks in these lists. Example: 9001,9002.
- `updated_after` (`string`, optional): Only tasks updated after this ISO 8601 timestamp. Example: 2025-01-01T00:00:00Z.

Example input: `{"project_id":123456}`

### `teamwork_project_template_get`

Get Project Template · Read-only

Retrieve one project template by id.
Returns the template with name, description and settings.
Use when you have a template id. Use teamwork_project_templates_list to find templates.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `template_id` (`integer`, required): Id of the project template. Example: 4321.

Example input: `{"template_id":4321}`

### `teamwork_project_templates_list`

List Project Templates · Read-only

List the project templates available on the Teamwork site.
Returns a page of templates with id, name and description, plus paging metadata.
Use to find a template id to pass to teamwork_project_clone with new_from_template. Use teamwork_project_template_get for one template.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `search_term` (`string`, optional): Only return templates whose name or text matches this term. Example: roadmap.

Example input: `{}`

### `teamwork_project_time_entries_list`

List Project Time Entries · Read-only

List the time entries logged against one project.
Returns a page of time entries with id, minutes, date, description, user and task.
Use when you know the project. Use teamwork_time_entries_list for filters across projects.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.
- `end_date` (`string`, optional): Only entries on or before this date (YYYY-MM-DD). Example: 2025-03-31.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `start_date` (`string`, optional): Only entries on or after this date (YYYY-MM-DD). Example: 2025-03-01.

Example input: `{"project_id":123456}`

### `teamwork_project_time_total_get`

Get Project Time Total · Read-only

Get the total time logged against one project.
Returns total, billable and non-billable minutes for the project.
Use for a project's time summary. Use teamwork_time_total_get for site-wide totals with filters.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.
- `end_date` (`string`, optional): Only time on or before this date (YYYY-MM-DD). Example: 2025-03-31.
- `start_date` (`string`, optional): Only time on or after this date (YYYY-MM-DD). Example: 2025-03-01.

Example input: `{"project_id":123456}`

### `teamwork_project_workflows_list`

List Project Workflows · Read-only

List the board workflows applied to one project.
Returns each workflow with id, name and status.
Use to see which board a project uses. Use teamwork_workflows_list for all workflows.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.

Example input: `{"project_id":123456}`

### `teamwork_projects_health_list`

List Project Health · Read-only

List calculated health scores for projects.
Returns a page of projects with their health score and indicators, plus paging metadata.
Use to spot projects that need attention. Use teamwork_project_summary_get for one project's counters.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `only_starred_projects` (`boolean`, optional): When true, only starred projects are scored. Example: false.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `project_ids` (`string`, optional): Comma-separated project ids; only these projects. Leave empty for every project you can see. Example: 123456,123457.

Example input: `{}`

### `teamwork_projects_list`

List Projects · Read-only

List projects in the Teamwork site, optionally filtered by name, owner, category, company or status.
Returns a page of projects with id, name, description, status, dates and owner, plus paging metadata.
Use to browse or find a project id. Use teamwork_project_get for one project's full detail.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `include` (`string`, optional): Comma-separated related objects to sideload into the response. Allowed values: projectOwners, companies, projectCategories, tags, users, createdBy. Example: tags,companies.
- `include_archived_projects` (`boolean`, optional): When true, archived projects are included in the results. Example: false.
- `only_starred_projects` (`boolean`, optional): When true, only return projects starred by the authenticated user. Example: true.
- `order_by` (`string`, optional): Field to sort by. Example: name. One of: `creatorname`, `companyname`, `datecreated`, `startdate`, `duedate`, `lastactivity`, `name`, `namecaseinsensitive`, `ownercompany`, `ownername`, `health`, `taskcompletion`, `budgetused`, `starred`, `starredcompanyname`, `starredfirst`, `lastworkedon`, `categoryname`, `status`, `id`, `projectnumber`.
- `order_mode` (`string`, optional): Sort direction. Example: asc. Allowed values: asc, desc. One of: `asc`, `desc`.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `project_category_ids` (`string`, optional): Comma-separated project category ids; only projects in these categories. Example: 7,8.
- `project_company_ids` (`string`, optional): Comma-separated company ids; only projects belonging to these companies. Example: 55.
- `project_owner_ids` (`string`, optional): Comma-separated user ids; only projects owned by these users. Example: 101,102.
- `project_tag_ids` (`string`, optional): Comma-separated tag ids; only projects carrying these tags. Example: 3,4.
- `search_term` (`string`, optional): Only return projects whose name or text matches this term. Example: roadmap.
- `updated_after` (`string`, optional): Only projects updated after this ISO 8601 timestamp. Example: 2025-01-01T00:00:00Z.

Example input: `{}`

### `teamwork_projects_starred_list`

List Starred Projects · Read-only

List the projects the authenticated user has starred.
Returns a page of starred projects with id, name, status and dates, plus paging metadata.
Use to find a user's favourite projects. Use teamwork_projects_list for all projects.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `order_by` (`string`, optional): Field to sort by. Example: name. One of: `name`, `namecaseinsensitive`, `datecreated`, `startdate`, `duedate`, `lastactivity`, `companyname`, `ownername`, `categoryname`, `status`, `id`.
- `order_mode` (`string`, optional): Sort direction. Example: asc. Allowed values: asc, desc. One of: `asc`, `desc`.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `search_term` (`string`, optional): Only return projects whose name or text matches this term. Example: roadmap.

Example input: `{}`

### `teamwork_resource_tags_list`

List Resource Tags · Read-only

List the tags attached to one project, task, milestone, message, notebook, link or other item.
Returns each tag with id, name and colour.
Use to see how an item is tagged. Use teamwork_tags_list for all tags on the site.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `item_id` (`integer`, required): Id of the item. Example: 7654321.
- `resource` (`string`, required): Type of item whose tags to read. Example: tasks. One of: `projects`, `tasks`, `milestones`, `messages`, `timelogs`, `files`, `users`, `companies`, `notebooks`, `links`.

Example input: `{"item_id":7654321,"resource":"projects"}`

### `teamwork_risk_get`

Get Risk · Read-only

Retrieve one risk by id.
Returns the risk with source, probability, impact, mitigation plan and project.
Use when you have a risk id and need its detail.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `risk_id` (`integer`, required): Id of the risk. Example: 5101.

Example input: `{"risk_id":5101}`

### `teamwork_risks_list`

List Risks · Read-only

List risks from the risk registers of all projects you can see.
Returns a page of risks with source, probability, impact, mitigation plan and project, plus paging metadata.
Use for a cross-project risk review. Use teamwork_project_risks_list for one project.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `order_mode` (`string`, optional): Sort direction. Example: asc. Allowed values: asc, desc. One of: `asc`, `desc`.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `project_ids` (`string`, optional): Comma-separated project ids; only risks in these projects. Example: 123456.
- `search_term` (`string`, optional): Only return risks whose name or text matches this term. Example: roadmap.
- `statuses` (`string`, optional): Comma-separated risk statuses to include. Example: open.

Example input: `{}`

### `teamwork_search`

Search Teamwork · Read-only

Search the Teamwork site for projects, tasks, messages and other items by text.
Returns matching items grouped by type, with ids and titles.
Use when you only have a keyword. Use the list tools to filter a known object type.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `search_term` (`string`, required): Text to search for. Example: launch plan.
- `limit` (`integer`, optional): Maximum number of results to return. Example: 20.
- `project_id` (`integer`, optional): Restrict the search to one project. Example: 123456.
- `types` (`string`, optional): Comma-separated item types to search, for example tasks, projects, messages. Example: tasks,projects.

Example input: `{"search_term":"<search_term>"}`

### `teamwork_skills_list`

List Skills · Read-only

List the skills defined on the Teamwork site.
Returns a page of skills with id and name.
Use to find a skill id for resource planning.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `order_mode` (`string`, optional): Sort direction. Example: asc. Allowed values: asc, desc. One of: `asc`, `desc`.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `search_term` (`string`, optional): Only return skills whose name or text matches this term. Example: roadmap.

Example input: `{}`

### `teamwork_status_updates_list`

List Project Status Updates · Read-only

List the project status updates posted across all projects you can see.
Returns a page of status updates with text, health, author, project and date.
Use for a cross-project status feed. Use teamwork_project_status_updates_list for one project.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_after` (`string`, optional): Only updates created after this ISO 8601 timestamp. Example: 2025-01-01T00:00:00Z.
- `order_by` (`string`, optional): Field to sort by. Example: date. Allowed values: date, color, health, project, user, id. One of: `date`, `color`, `health`, `project`, `user`, `id`.
- `order_mode` (`string`, optional): Sort direction. Example: asc. Allowed values: asc, desc. One of: `asc`, `desc`.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.

Example input: `{}`

### `teamwork_statuses_list`

List People Statuses · Read-only

List the latest status message of every person on the Teamwork site.
Returns a page of statuses with the person, message and date.
Use to see what teammates are up to. Use teamwork_my_status_get for your own status.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `search_term` (`string`, optional): Only return statuses whose name or text matches this term. Example: roadmap.

Example input: `{}`

### `teamwork_subtasks_list`

List Subtasks · Read-only

List the subtasks of a task.
Returns a page of subtasks with id, name, status and assignees.
Use to inspect a task's children. Use teamwork_subtask_create to add one.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): Id of the parent task. Example: 7654321.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.

Example input: `{"task_id":7654321}`

### `teamwork_tag_get`

Get Tag · Read-only

Retrieve one tag by id.
Returns the tag's name and colour.
Use when you have a tag id and need its detail.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `tag_id` (`integer`, required): Id of the tag. Example: 3.

Example input: `{"tag_id":3}`

### `teamwork_tags_list`

List Tags · Read-only

List tags defined on the Teamwork site.
Returns a page of tags with id, name and colour.
Use to find a tag id for filtering or attaching to tasks and projects.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `search_term` (`string`, optional): Only return tags whose name or text matches this term. Example: roadmap.

Example input: `{}`

### `teamwork_task_activity_list`

List Task Activity · Read-only

List the activity log of one task.
Returns activity entries with type, actor and timestamp.
Use to see what changed on a task. Use teamwork_project_activity_list for a whole project.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): Id of the task. Example: 7654321.

Example input: `{"task_id":7654321}`

### `teamwork_task_comments_list`

List Task Comments · Read-only

List the comments on a task.
Returns a page of comments with id, body, author and timestamp.
Use to read a task's discussion. Use teamwork_task_comment_create to reply.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): Id of the task. Example: 7654321.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.

Example input: `{"task_id":7654321}`

### `teamwork_task_customfield_values_list`

List Task Custom Field Values · Read-only

List the custom field values set on one task.
Returns a page of values with the field id and the stored value.
Use to read a task's custom data. Use teamwork_customfields_list to see field definitions.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): Id of the task. Example: 7654321.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.

Example input: `{"task_id":7654321}`

### `teamwork_task_dependencies_list`

List Task Dependencies · Read-only

List the tasks that depend on a task, meaning tasks that cannot finish until this one is done.
Returns the dependent tasks with id, name and dependency type.
Use to see what a task is blocking. Use teamwork_task_predecessors_list to see what blocks it.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): Id of the task. Example: 7654321.

Example input: `{"task_id":7654321}`

### `teamwork_task_followers_list`

List Task Followers · Read-only

List the users who follow a task.
Returns the followers with user id and which kinds of change they follow.
Use to see who is notified about a task. Use teamwork_task_followers_set to change the followers.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): Id of the task. Example: 7654321.
- `return_user_info` (`boolean`, optional): When true, include name, company and avatar for each follower. Example: true.

Example input: `{"task_id":7654321}`

### `teamwork_task_get`

Get Task · Read-only

Retrieve one task by id.
Returns the task with name, description, status, priority, dates, assignees, progress and estimated time.
Use when you have a task id and need its full detail.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): Id of the task to retrieve. Example: 7654321.
- `include` (`string`, optional): Comma-separated related objects to sideload into the response. Allowed values: projects, tasklists, parentTasks, companies, teams, users, milestones, comments, tags, timeTotals, subtaskStats, attachments. Example: tasklists,users,comments.

Example input: `{"task_id":7654321}`

### `teamwork_task_predecessors_list`

List Task Predecessors · Read-only

List the tasks that must be completed or started before a task can be completed.
Returns the predecessor tasks with id, name and dependency type.
Use to see what is blocking a task. Use teamwork_task_dependencies_list for the opposite direction.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): Id of the task. Example: 7654321.

Example input: `{"task_id":7654321}`

### `teamwork_task_reminders_list`

List Task Reminders · Read-only

List the reminders set on a task.
Returns each reminder with id, user, note and time.
Use to see when a task will remind someone. Use teamwork_task_reminder_create to add one.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): Id of the task. Example: 7654321.

Example input: `{"task_id":7654321}`

### `teamwork_task_time_entries_list`

List Task Time Entries · Read-only

List the time entries logged against one task.
Returns a page of time entries with id, minutes, date, description and user.
Use to see how much time went into a task.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): Id of the task. Example: 7654321.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.

Example input: `{"task_id":7654321}`

### `teamwork_task_time_total_get`

Get Task Time Total · Read-only

Get the total time logged against one task.
Returns total, billable and non-billable minutes for the task.
Use for a task's time summary. Use teamwork_task_time_entries_list to see each entry.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): Id of the task. Example: 7654321.

Example input: `{"task_id":7654321}`

### `teamwork_tasklist_get`

Get Task List · Read-only

Retrieve one task list by id.
Returns the task list with name, description, project and milestone.
Use when you have a task list id and need its detail.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `tasklist_id` (`integer`, required): Id of the task list. Example: 9001.

Example input: `{"tasklist_id":9001}`

### `teamwork_tasklist_tasks_list`

List Task List Tasks · Read-only

List the tasks inside one task list.
Returns a page of tasks with id, name, status, priority, dates and assignees, plus paging metadata.
Use when you know the task list id. Use teamwork_tasklists_list to find task lists.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `tasklist_id` (`integer`, required): Id of the task list whose tasks to list. Example: 9001.
- `due_after` (`string`, optional): Only tasks due on or after this date (YYYY-MM-DD). Example: 2025-01-01.
- `due_before` (`string`, optional): Only tasks due on or before this date (YYYY-MM-DD). Example: 2025-12-31.
- `include` (`string`, optional): Comma-separated related objects to sideload into the response. Allowed values: projects, tasklists, parentTasks, companies, teams, users, milestones, comments, tags, timeTotals, subtaskStats, attachments. Example: tasklists,users.
- `include_completed_tasks` (`boolean`, optional): When true, completed tasks are included. Example: false.
- `order_by` (`string`, optional): Field to sort by. Example: duedate. One of: `id`, `startdate`, `createdat`, `priority`, `project`, `duedate`, `updatedat`, `taskname`, `completedat`, `assignedto`, `estimatedtime`, `dateadded`, `dateupdated`, `datecompleted`, `tags`.
- `order_mode` (`string`, optional): Sort direction. Example: asc. Allowed values: asc, desc. One of: `asc`, `desc`.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `priority` (`string`, optional): Only tasks with this priority. Example: high. Allowed values: low, medium, high. One of: `low`, `medium`, `high`.
- `responsible_party_ids` (`string`, optional): Comma-separated user ids; only tasks assigned to these users. Example: 101,102.
- `search_term` (`string`, optional): Only return tasks whose name or text matches this term. Example: roadmap.
- `tag_ids` (`string`, optional): Comma-separated tag ids; only tasks with these tags. Example: 3,4.
- `task_filter` (`string`, optional): Preset filter on task dates and state. Example: overdue. One of: `all`, `anytime`, `completed`, `created`, `overdue`, `today`, `yesterday`, `started`, `tomorrow`, `thisweek`, `within7`, `within14`, `within30`, `within365`, `nodate`, `noduedate`, `nostartdate`, `hasDate`, `upcoming`.
- `updated_after` (`string`, optional): Only tasks updated after this ISO 8601 timestamp. Example: 2025-01-01T00:00:00Z.

Example input: `{"tasklist_id":9001}`

### `teamwork_tasklist_templates_list`

List Task List Templates · Read-only

List the task list templates available on the Teamwork site.
Returns a page of task list templates with id and name.
Use to find a reusable task list layout. Use teamwork_tasklists_list for real task lists.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.

Example input: `{}`

### `teamwork_tasklist_time_total_get`

Get Task List Time Total · Read-only

Get the total time logged against the tasks of one task list.
Returns total, billable and non-billable minutes for the list.
Use for a task list's time summary. Use teamwork_project_time_total_get for a whole project.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `tasklist_id` (`integer`, required): Id of the task list. Example: 9001.

Example input: `{"tasklist_id":9001}`

### `teamwork_tasklists_list`

List Task Lists · Read-only

List task lists across all projects.
Returns a page of task lists with id, name, description, project and completion state.
Use to find a task list id. Use teamwork_project_tasklists_list for one project.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `project_ids` (`string`, optional): Comma-separated project ids; only lists in these projects. Example: 123456.
- `search_term` (`string`, optional): Only return task lists whose name or text matches this term. Example: roadmap.
- `show_completed` (`boolean`, optional): When true, completed task lists are included. Example: false.

Example input: `{}`

### `teamwork_tasks_list`

List Tasks · Read-only

List tasks across all projects, optionally filtered by assignee, project, tag, priority or due date.
Returns a page of tasks with id, name, status, priority, dates and assignees, plus paging metadata.
Use for cross-project task queries. Use teamwork_project_tasks_list or teamwork_tasklist_tasks_list to scope to one project or list.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `due_after` (`string`, optional): Only tasks due on or after this date (YYYY-MM-DD). Example: 2025-01-01.
- `due_before` (`string`, optional): Only tasks due on or before this date (YYYY-MM-DD). Example: 2025-12-31.
- `include` (`string`, optional): Comma-separated related objects to sideload into the response. Allowed values: projects, tasklists, parentTasks, companies, teams, users, milestones, comments, tags, timeTotals, subtaskStats, attachments. Example: tasklists,users.
- `include_completed_tasks` (`boolean`, optional): When true, completed tasks are included. Example: false.
- `order_by` (`string`, optional): Field to sort by. Example: duedate. One of: `id`, `startdate`, `createdat`, `priority`, `project`, `duedate`, `updatedat`, `taskname`, `completedat`, `assignedto`, `estimatedtime`, `dateadded`, `dateupdated`, `datecompleted`, `tags`.
- `order_mode` (`string`, optional): Sort direction. Example: asc. Allowed values: asc, desc. One of: `asc`, `desc`.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `priority` (`string`, optional): Only tasks with this priority. Example: high. Allowed values: low, medium, high. One of: `low`, `medium`, `high`.
- `project_ids` (`string`, optional): Comma-separated project ids; only tasks in these projects. Example: 123456,123457.
- `responsible_party_ids` (`string`, optional): Comma-separated user ids; only tasks assigned to these users. Example: 101,102.
- `search_term` (`string`, optional): Only return tasks whose name or text matches this term. Example: roadmap.
- `tag_ids` (`string`, optional): Comma-separated tag ids; only tasks with these tags. Example: 3,4.
- `task_filter` (`string`, optional): Preset filter on task dates and state. Example: overdue. One of: `all`, `anytime`, `completed`, `created`, `overdue`, `today`, `yesterday`, `started`, `tomorrow`, `thisweek`, `within7`, `within14`, `within30`, `within365`, `nodate`, `noduedate`, `nostartdate`, `hasDate`, `upcoming`.
- `tasklist_ids` (`string`, optional): Comma-separated task list ids; only tasks in these lists. Example: 9001,9002.
- `updated_after` (`string`, optional): Only tasks updated after this ISO 8601 timestamp. Example: 2025-01-01T00:00:00Z.

Example input: `{}`

### `teamwork_team_get`

Get Team · Read-only

Retrieve one team by id.
Returns the team with name, description and, when requested, its members.
Use when you have a team id. Use teamwork_teams_list to find teams.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `team_id` (`integer`, required): Id of the team. Example: 1301.
- `include` (`string`, optional): Set to members to include the people on the team. Example: members. Allowed values: members. One of: `members`.

Example input: `{"team_id":1301}`

### `teamwork_teams_list`

List Teams · Read-only

List the teams on the Teamwork site.
Returns each team with id, name and member count.
Use to find a team id. Use teamwork_team_get for one team's members.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `sort_by` (`string`, optional): Field to sort by. Example: name. Allowed values: name, dateAdded. One of: `name`, `dateAdded`.

Example input: `{}`

### `teamwork_time_entries_list`

List Time Entries · Read-only

List logged time entries across projects, optionally filtered by project, task, user or date range.
Returns a page of time entries with id, minutes, date, description, user, task and project.
Use for timesheets and reports. Use teamwork_time_total_get for aggregate totals.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `assigned_to_user_ids` (`string`, optional): Comma-separated user ids; only time logged by these users. Example: 101,102.
- `billable_type` (`string`, optional): Filter by billable state. Example: billable. Allowed values: all, billable, nonbillable. One of: `all`, `billable`, `nonbillable`.
- `end_date` (`string`, optional): Only entries on or before this date (YYYY-MM-DD). Example: 2025-03-31.
- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `project_id` (`integer`, optional): Only time logged against this project. Example: 123456.
- `start_date` (`string`, optional): Only entries on or after this date (YYYY-MM-DD). Example: 2025-03-01.
- `task_id` (`integer`, optional): Only time logged against this task. Example: 7654321.

Example input: `{}`

### `teamwork_time_entry_get`

Get Time Entry · Read-only

Retrieve one time entry by id.
Returns the time entry with minutes, date, description, user, task and project.
Use when you have a time entry id and need its detail.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `timelog_id` (`integer`, required): Id of the time entry. Example: 300100.

Example input: `{"timelog_id":300100}`

### `teamwork_time_total_get`

Get Time Totals · Read-only

Get total logged and billable time, optionally for a project, task or date range.
Returns total minutes and billable minutes for the selected filters.
Use for a quick total. Use teamwork_time_entries_list for the individual entries.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `end_date` (`string`, optional): Only count entries on or before this date (YYYY-MM-DD). Example: 2025-03-31.
- `project_id` (`integer`, optional): Only count time logged against this project. Example: 123456.
- `start_date` (`string`, optional): Only count entries on or after this date (YYYY-MM-DD). Example: 2025-03-01.
- `task_id` (`integer`, optional): Only count time logged against this task. Example: 7654321.

Example input: `{}`

### `teamwork_timer_get`

Get Timer · Read-only

Retrieve one timer by id.
Returns the timer with task, project, description, running state and elapsed seconds.
Use when you have a timer id. Use teamwork_timers_list to find timers.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `timer_id` (`integer`, required): Id of the timer. Example: 5001.

Example input: `{"timer_id":5001}`

### `teamwork_timers_list`

List Timers · Read-only

List running and paused timers, optionally for one user, project or task.
Returns timers with id, state, elapsed seconds, task and project.
Use to see who is tracking time right now.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `page` (`integer`, optional): Page number to return, starting at 1. Example: 1.
- `page_size` (`integer`, optional): Number of items per page (default 50, max 500). Example: 50.
- `project_id` (`integer`, optional): Only timers on this project. Example: 123456.
- `running_timers_only` (`boolean`, optional): When true, only timers that are currently running. Example: true.
- `task_id` (`integer`, optional): Only timers on this task. Example: 7654321.
- `user_id` (`integer`, optional): Only timers belonging to this user. Example: 101.

Example input: `{}`

### `teamwork_trashcan_project_items_list`

List Trashed Project Items · Read-only

List the deleted items (tasks, task lists, milestones and so on) that sit in the trashcan of one project.
Returns the trashed items grouped by type, each with id, name and deletion date.
Use to find the id of a deleted task or milestone to restore with teamwork_trashcan_restore.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project whose trashcan to read. Example: 123456.
- `days` (`integer`, optional): Only items deleted in the last this many days. Example: 30.
- `items` (`string`, optional): Comma-separated item types to return, for example tasks,tasklists. Use all for every type. Example: tasks,tasklists.

Example input: `{"project_id":123456}`

### `teamwork_trashcan_projects_list`

List Trashed Projects · Read-only

List the projects that were deleted and are still in the trashcan.
Returns the deleted projects with id, name and deletion date.
Use to find a deleted project id to restore with teamwork_trashcan_restore.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `days` (`integer`, optional): Only projects deleted in the last this many days. Example: 30.

Example input: `{}`

### `teamwork_workflow_stages_list`

List Workflow Stages · Read-only

List the stages (board columns) of a workflow.
Returns each stage with id, name and display order.
Use to find a stage id for teamwork_task_workflow_stage_move.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `workflow_id` (`integer`, required): Id of the workflow. Example: 1101.

Example input: `{"workflow_id":1101}`

### `teamwork_workflows_list`

List Workflows · Read-only

List the board workflows defined on the Teamwork site.
Returns each workflow with id, name and status.
Use to find a workflow id. Use teamwork_workflow_stages_list for its columns.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `search_term` (`string`, optional): Only return workflows whose name or text matches this term. Example: roadmap.

Example input: `{}`

### `teamwork_workload_get`

Get Workload · Read-only

Get the workload of users across projects for a period.
Returns per-user workload totals grouped by day, week or month.
Use to see who is overloaded or free. Use teamwork_tasks_list for the underlying tasks.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `end_date` (`string`, optional): End of the period (YYYY-MM-DD). Example: 2025-03-31.
- `group_by` (`string`, optional): Period used to aggregate the workload. Example: week. Allowed values: day, week, month. One of: `day`, `week`, `month`.
- `search_term` (`string`, optional): Only users whose name matches this term. Example: Ravi.
- `start_date` (`string`, optional): Start of the period (YYYY-MM-DD). Example: 2025-03-01.

Example input: `{}`

### `teamwork_calendar_event_create`

Create Calendar Event · Write

Create an event on your calendar.
Returns the id of the created event and a status of OK.
Use to schedule time. Nobody is notified unless notify is true. Use teamwork_calendar_event_update to add attendees, a location or a project.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `end` (`string`, required): End of the event as an ISO 8601 date and time. Example: 2027-03-01T11:00:00Z.
- `start` (`string`, required): Start of the event as an ISO 8601 date and time. Example: 2027-03-01T10:00:00Z.
- `title` (`string`, required): Title of the event. Example: Design review.
- `all_day` (`boolean`, optional): Set true for an all-day event. Example: false.
- `notify` (`boolean`, optional): Set true to notify attendees about the event. Defaults to false. Example: false.

Example input: `{"end":"<end>","start":"<start>","title":"<title>"}`

### `teamwork_calendar_event_update`

Update Calendar Event · Write

Update the title, times, location, description, project or attendees of a calendar event.
Returns a status of OK when the event was updated.
Use to edit an event. Only the fields you supply are changed. Nobody is notified unless notify is true.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `event_id` (`integer`, required): Id of the calendar event to update. Example: 7701.
- `all_day` (`boolean`, optional): Set true for an all-day event. Example: false.
- `attending_user_ids` (`string`, optional): Comma-separated ids of the users attending. Example: 101,102.
- `description` (`string`, optional): New description of the event. Example: Review the latest mockups.
- `end` (`string`, optional): New end of the event as an ISO 8601 date and time. Example: 2027-03-02T11:00:00Z.
- `location` (`string`, optional): Where the event takes place. Example: Meeting room 2.
- `notify` (`boolean`, optional): Set true to notify attendees about the change. Defaults to false. Example: false.
- `project_id` (`integer`, optional): Id of the project to link the event to. Example: 123456.
- `start` (`string`, optional): New start of the event as an ISO 8601 date and time. Example: 2027-03-02T10:00:00Z.
- `title` (`string`, optional): New title of the event. Example: Design review (moved).

Example input: `{"event_id":7701}`

### `teamwork_comment_create`

Create Comment · Write

Add a comment to a milestone, notebook or link.
Returns the id of the created comment and a status of OK.
Use for items other than tasks. Use teamwork_task_comment_create for a task and teamwork_message_reply_create for a message. Nobody is notified unless you list people in notify.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `body` (`string`, required): Text of the comment. Plain text or HTML. Example: Looks good, ready to proceed.
- `item_id` (`integer`, required): Id of the milestone, notebook or link to comment on. Example: 4001.
- `resource` (`string`, required): Type of item to comment on. Example: milestones. Allowed values: milestones, notebooks, links. One of: `milestones`, `notebooks`, `links`.
- `is_private` (`boolean`, optional): Set true to make the comment private to the people it is shared with. Example: false.

Example input: `{"body":"<body>","item_id":4001,"resource":"milestones"}`

### `teamwork_comment_update`

Update Comment · Write

Change the text of a comment.
Returns a status of OK when the comment was updated.
Use to edit a comment you posted. Nobody is notified of the change.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `body` (`string`, required): New text of the comment. Plain text or HTML. Example: Updated: ready to proceed once QA signs off.
- `comment_id` (`integer`, required): Id of the comment to update. Example: 88001.
- `is_private` (`boolean`, optional): Set true to make the comment private to the people it is shared with. Example: false.

Example input: `{"body":"<body>","comment_id":88001}`

### `teamwork_company_create`

Create Company · Write

Create a company (client) on the Teamwork site.
Returns the created company with its id and name.
Use before creating projects or people for a new client. Use teamwork_company_update to edit an existing one.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the company. Example: Acme Corp.
- `address_line_1` (`string`, optional): First line of the street address. Example: 1 Main Street.
- `city` (`string`, optional): City. Example: Springfield.
- `country_code` (`string`, optional): Two-letter ISO country code. Example: US.
- `email` (`string`, optional): Primary email address of the company. Example: info@acme.example.com.
- `phone` (`string`, optional): Company phone number. Example: +1 555 0100.
- `profile` (`string`, optional): Free-text profile or notes shown on the company page.
- `state` (`string`, optional): State or region. Example: IL.
- `website` (`string`, optional): Company website URL. Example: https://acme.example.com.
- `zip` (`string`, optional): Postal code. Example: 62701.

Example input: `{"name":"<name>"}`

### `teamwork_company_update`

Update Company · Write

Update the details of an existing company.
Returns the updated company.
Use to edit a company. Only the fields you supply are changed.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `company_id` (`integer`, required): Id of the company to update. Example: 55.
- `address_line_1` (`string`, optional): First line of the street address. Example: 1 Main Street.
- `city` (`string`, optional): City. Example: Springfield.
- `country_code` (`string`, optional): Two-letter ISO country code. Example: US.
- `email` (`string`, optional): Primary email address of the company. Example: info@acme.example.com.
- `name` (`string`, optional): Name of the company. Example: Acme Corp.
- `phone` (`string`, optional): Company phone number. Example: +1 555 0100.
- `profile` (`string`, optional): Free-text profile or notes shown on the company page.
- `state` (`string`, optional): State or region. Example: IL.
- `website` (`string`, optional): Company website URL. Example: https://acme.example.com.
- `zip` (`string`, optional): Postal code. Example: 62701.

Example input: `{"company_id":55}`

### `teamwork_customfield_create`

Create Custom Field · Write

Create a custom field for projects, tasks or companies, either site-wide or limited to one project.
Returns the created custom field with its id.
Use before setting field values. Pass project_id to keep the field inside one project. Use teamwork_customfield_delete to remove it.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `entity` (`string`, required): What the field is attached to. Example: task. Allowed values: project, task, company. One of: `project`, `task`, `company`.
- `name` (`string`, required): Name of the custom field. Example: Customer tier.
- `type` (`string`, required): Kind of value the field holds. Example: text-short. One of: `text-short`, `text-long`, `number-decimal`, `number-integer`, `financial`, `dropdown`, `multiselect`, `checkbox`, `percentage`, `url`, `date`, `phone`, `email`, `status`, `rating`, `user`.
- `choices` (`array`, optional): Options for dropdown and multiselect fields, one entry per option. Example: ["Gold", "Silver", "Bronze"].
- `currency_code` (`string`, optional): Three-letter currency code for financial fields. Example: USD.
- `description` (`string`, optional): Description of the field. Example: Support tier of the customer.
- `is_private` (`boolean`, optional): Set true to hide the field from people without access. Example: false.
- `project_id` (`integer`, optional): Id of a project to limit the field to. Leave empty for a site-wide field. Example: 123456.
- `required` (`boolean`, optional): Set true if the field must be filled in. Example: false.

Example input: `{"entity":"project","name":"<name>","type":"text-short"}`

### `teamwork_customfield_update`

Update Custom Field · Write

Update the name, description, required flag or privacy of a custom field.
Returns the updated custom field.
Use to edit a field definition. Only the fields you supply are changed.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `customfield_id` (`integer`, required): Id of the custom field to update. Example: 6801.
- `description` (`string`, optional): New description of the field. Example: Plan the customer is on.
- `is_private` (`boolean`, optional): Set true to hide the field from people without access. Example: false.
- `name` (`string`, optional): New name of the custom field. Example: Customer plan.
- `required` (`boolean`, optional): Set true if the field must be filled in. Example: false.

Example input: `{"customfield_id":6801}`

### `teamwork_expense_create`

Create Expense · Write

Record an expense in a project.
Returns the id of the created expense and a status of OK.
Use to log a project cost such as travel or licences. The project must have Billing turned on (see teamwork_project_features_set).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `cost` (`string`, required): Amount of the expense as a decimal string. Example: 250.00.
- `date` (`string`, required): Date of the expense in YYYYMMDD format. Example: 20250305.
- `name` (`string`, required): Name of the expense. Example: Conference ticket.
- `project_id` (`integer`, required): Id of the project the expense belongs to. Example: 123456.
- `description` (`string`, optional): Description of the expense. Example: Ticket for the design conference.

Example input: `{"cost":"<cost>","date":"<date>","name":"<name>","project_id":123456}`

### `teamwork_expense_update`

Update Expense · Write

Update the name, cost, date or description of an expense.
Returns a status of OK when the expense was updated.
Use to correct an expense. Only the fields you supply are changed.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `expense_id` (`integer`, required): Id of the expense to update. Example: 2201.
- `cost` (`string`, optional): New amount of the expense as a decimal string. Example: 199.00.
- `date` (`string`, optional): New date of the expense in YYYYMMDD format. Example: 20250306.
- `description` (`string`, optional): New description of the expense. Example: Discounted ticket.
- `name` (`string`, optional): New name of the expense. Example: Conference ticket (early bird).

Example input: `{"expense_id":2201}`

### `teamwork_file_category_create`

Create File Category · Write

Create a file category in a project.
Returns the id of the created category and a status of OK.
Use to group files in a project. Use teamwork_file_categories_list to see existing categories.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the category. Example: Planning.
- `project_id` (`integer`, required): Id of the project to create the category in. Example: 123456.
- `parent_id` (`integer`, optional): Id of a parent category, to nest this one underneath it. Example: 501.

Example input: `{"name":"<name>","project_id":123456}`

### `teamwork_file_category_update`

Update File Category · Write

Rename a file category.
Returns a status of OK when the category was updated.
Use to rename a category. Use teamwork_file_categories_list to find its id.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `category_id` (`integer`, required): Id of the file category to update. Example: 501.
- `name` (`string`, required): New name of the category. Example: Roadmap.

Example input: `{"category_id":501,"name":"<name>"}`

### `teamwork_invoice_add_time`

Add Time to Invoice · Write

Attach existing time entries to an invoice.
Returns a status of OK when the time entries were added.
Use to bill logged time. Find time entry ids with teamwork_time_entries_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `invoice_id` (`integer`, required): Id of the invoice. Example: 3301.
- `time_entry_ids` (`array`, required): Ids of the time entries to add to the invoice. Example: [300100, 300101].

Example input: `{"invoice_id":3301,"time_entry_ids":[300100,300101]}`

### `teamwork_invoice_complete`

Complete Invoice · Write

Mark an invoice as complete.
Returns a status of OK when the invoice was completed.
Use when the invoice has been issued. Use teamwork_invoice_uncomplete to reopen it.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `invoice_id` (`integer`, required): Id of the invoice to complete. Example: 3301.

Example input: `{"invoice_id":3301}`

### `teamwork_invoice_create`

Create Invoice · Write

Create an invoice in a project.
Returns the id of the created invoice and a status of OK.
Use to start billing a project. The project must have Billing turned on (see teamwork_project_features_set). Use teamwork_invoice_add_time to attach logged time.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `number` (`string`, required): Invoice number shown on the invoice. Example: INV-0042.
- `project_id` (`integer`, required): Id of the project to invoice. Example: 123456.
- `currency_code` (`string`, optional): Three-letter currency code of the invoice. Example: USD.
- `description` (`string`, optional): Description of the invoice. Example: Design work for March.
- `display_date` (`string`, optional): Date shown on the invoice in YYYYMMDD format. Example: 20250331.
- `fixed_cost` (`string`, optional): Fixed amount for the invoice as a decimal string. Leave empty to bill logged time and expenses. Example: 1500.00.
- `po_number` (`string`, optional): Purchase order number of the client. Example: PO-9981.

Example input: `{"number":"<number>","project_id":123456}`

### `teamwork_invoice_uncomplete`

Reopen Invoice · Write

Mark a completed invoice as not complete again.
Returns a status of OK when the invoice was reopened.
Use to undo teamwork_invoice_complete.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `invoice_id` (`integer`, required): Id of the invoice to reopen. Example: 3301.

Example input: `{"invoice_id":3301}`

### `teamwork_invoice_update`

Update Invoice · Write

Update the number, description, dates, currency or fixed cost of an invoice.
Returns a status of OK when the invoice was updated.
Use to edit an invoice. Only the fields you supply are changed.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `invoice_id` (`integer`, required): Id of the invoice to update. Example: 3301.
- `currency_code` (`string`, optional): Three-letter currency code of the invoice. Example: USD.
- `description` (`string`, optional): Description of the invoice. Example: Design work for March.
- `display_date` (`string`, optional): Date shown on the invoice in YYYYMMDD format. Example: 20250331.
- `fixed_cost` (`string`, optional): Fixed amount for the invoice as a decimal string. Leave empty to bill logged time and expenses. Example: 1500.00.
- `number` (`string`, optional): Invoice number shown on the invoice. Example: INV-0042.
- `po_number` (`string`, optional): Purchase order number of the client. Example: PO-9981.

Example input: `{"invoice_id":3301}`

### `teamwork_link_category_create`

Create Link Category · Write

Create a link category in a project.
Returns the id of the created category and a status of OK.
Use to group links in a project. Use teamwork_link_categories_list to see existing categories.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the category. Example: Planning.
- `project_id` (`integer`, required): Id of the project to create the category in. Example: 123456.
- `parent_id` (`integer`, optional): Id of a parent category, to nest this one underneath it. Example: 501.

Example input: `{"name":"<name>","project_id":123456}`

### `teamwork_link_category_update`

Update Link Category · Write

Rename a link category.
Returns a status of OK when the category was updated.
Use to rename a category. Use teamwork_link_categories_list to find its id.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `category_id` (`integer`, required): Id of the link category to update. Example: 501.
- `name` (`string`, required): New name of the category. Example: Roadmap.

Example input: `{"category_id":501,"name":"<name>"}`

### `teamwork_link_create`

Create Link · Write

Save a link in a project.
Returns the id of the created link and a status of OK.
Use to bookmark an external resource in a project. Nobody is notified.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the link. Example: Design mockups.
- `project_id` (`integer`, required): Id of the project to save the link in. Example: 123456.
- `url` (`string`, required): Address the link points to. Example: https://example.com/mockups.
- `category_id` (`integer`, optional): Id of the link category to file the link under. Example: 501.
- `description` (`string`, optional): Description of the link. Example: Figma file with the latest mockups.
- `is_private` (`boolean`, optional): Set true to make the link private to the people it is shared with. Example: false.

Example input: `{"name":"<name>","project_id":123456,"url":"<url>"}`

### `teamwork_link_update`

Update Link · Write

Update the name, URL, description or category of a link.
Returns a status of OK when the link was updated.
Use to edit a saved link. Only the fields you supply are changed.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `link_id` (`integer`, required): Id of the link to update. Example: 3001.
- `category_id` (`integer`, optional): Id of the link category to file the link under. Example: 501.
- `description` (`string`, optional): Description of the link. Example: Figma file with the latest mockups.
- `is_private` (`boolean`, optional): Set true to make the link private to the people it is shared with. Example: false.
- `name` (`string`, optional): Name of the link. Example: Design mockups.
- `url` (`string`, optional): Address the link points to. Example: https://example.com/mockups.

Example input: `{"link_id":3001}`

### `teamwork_message_archive`

Archive Message · Write

Archive a message together with its replies.
Returns a status of OK when the message was archived.
Use to hide a finished discussion without deleting it. Use teamwork_message_unarchive to bring it back.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `message_id` (`integer`, required): Id of the message to archive. Example: 6001.

Example input: `{"message_id":6001}`

### `teamwork_message_category_create`

Create Message Category · Write

Create a message category in a project.
Returns the id of the created category and a status of OK.
Use to group messages in a project. Use teamwork_message_categories_list to see existing categories.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the category. Example: Planning.
- `project_id` (`integer`, required): Id of the project to create the category in. Example: 123456.
- `parent_id` (`integer`, optional): Id of a parent category, to nest this one underneath it. Example: 501.

Example input: `{"name":"<name>","project_id":123456}`

### `teamwork_message_category_update`

Update Message Category · Write

Rename a message category.
Returns a status of OK when the category was updated.
Use to rename a category. Use teamwork_message_categories_list to find its id.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `category_id` (`integer`, required): Id of the message category to update. Example: 501.
- `name` (`string`, required): New name of the category. Example: Roadmap.

Example input: `{"category_id":501,"name":"<name>"}`

### `teamwork_message_create`

Create Message · Write

Post a new message on a project's message board.
Returns the id of the created message and a status of OK.
Use to start a discussion in a project. Use teamwork_message_reply_create to answer an existing message.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `body` (`string`, required): Body of the message. Plain text or HTML.
- `project_id` (`integer`, required): Id of the project to post in. Example: 123456.
- `title` (`string`, required): Title of the message. Example: Kickoff notes.
- `category_id` (`string`, optional): Id of the message category to file the post under. Example: 12.
- `is_private` (`string`, optional): Set to '1' to make the message private, '0' for public. Example: 0.
- `notify` (`string`, optional): Comma-separated user ids to notify, or 'all' to notify everyone on the project. Example: 101,102.

Example input: `{"body":"<body>","project_id":123456,"title":"<title>"}`

### `teamwork_message_reply_create`

Create Message Reply · Write

Reply to a message board post.
Returns the id of the created reply and a status of OK.
Use to answer an existing message. Use teamwork_message_create for a new topic.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `body` (`string`, required): Text of the reply. Plain text or HTML.
- `message_id` (`integer`, required): Id of the message to reply to. Example: 6001.
- `notify` (`string`, optional): Comma-separated user ids to notify, or 'all'. Example: 101.

Example input: `{"body":"<body>","message_id":6001}`

### `teamwork_message_reply_update`

Update Message Reply · Write

Change the body of a message reply.
Returns a status of OK when the reply was updated.
Use to correct a reply after posting it. Use teamwork_message_reply_create to add a new one.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `body` (`string`, required): New body of the reply. Plain text or HTML. Example: Corrected figures are attached.
- `reply_id` (`integer`, required): Id of the message reply to update. Example: 6501.

Example input: `{"body":"<body>","reply_id":6501}`

### `teamwork_message_unarchive`

Unarchive Message · Write

Restore an archived message to the active message list.
Returns a status of OK when the message was unarchived.
Use to undo teamwork_message_archive.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `message_id` (`integer`, required): Id of the archived message to restore. Example: 6001.

Example input: `{"message_id":6001}`

### `teamwork_message_update`

Update Message · Write

Update the title, body, category or privacy of a message.
Returns a status of OK when the message was updated.
Use to edit a message after posting it. Only the fields you supply are changed and nobody is notified.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `message_id` (`integer`, required): Id of the message to update. Example: 6001.
- `body` (`string`, optional): New body of the message. Plain text or HTML. Example: Updated plan attached below.
- `category_id` (`integer`, optional): Id of the message category to move the message to. Example: 501.
- `is_private` (`boolean`, optional): Set true to make the message private to the people it is shared with. Example: false.
- `title` (`string`, optional): New title of the message. Example: Launch plan v2.

Example input: `{"message_id":6001}`

### `teamwork_milestone_complete`

Complete Milestone · Write

Mark a milestone as complete.
Returns a status of OK when the milestone was completed.
Use when a milestone has been reached.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `milestone_id` (`integer`, required): Id of the milestone to complete. Example: 4001.

Example input: `{"milestone_id":4001}`

### `teamwork_milestone_create`

Create Milestone · Write

Create a milestone in a project.
Returns the id of the created milestone and a status of OK.
Use to add a dated checkpoint to a project.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `deadline` (`string`, required): Deadline in YYYYMMDD format. Example: 20250630.
- `project_id` (`integer`, required): Id of the project to create the milestone in. Example: 123456.
- `responsible_party_ids` (`string`, required): Comma-separated user ids responsible for the milestone. Teamwork rejects a milestone with no responsible party. Example: 101,102.
- `title` (`string`, required): Title of the milestone. Example: Beta release.
- `description` (`string`, optional): Description of the milestone.
- `is_private` (`boolean`, optional): When true the milestone is private. Example: false.
- `notify` (`boolean`, optional): When true, the responsible people are notified. Example: false.
- `reminder` (`boolean`, optional): When true, a reminder is sent before the deadline. Example: false.

Example input: `{"deadline":"<deadline>","project_id":123456,"responsible_party_ids":"<responsible_party_ids>","title":"<title>"}`

### `teamwork_milestone_uncomplete`

Reopen Milestone · Write

Mark a completed milestone as not complete again.
Returns a status of OK when the milestone was reopened.
Use to undo teamwork_milestone_complete.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `milestone_id` (`integer`, required): Id of the milestone to reopen. Example: 4001.

Example input: `{"milestone_id":4001}`

### `teamwork_milestone_update`

Update Milestone · Write

Update the title, deadline, description or assignees of a milestone.
Returns a status of OK when the milestone was updated.
Use to reschedule or edit a milestone. Only the fields you supply are changed.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `milestone_id` (`integer`, required): Id of the milestone to update. Example: 4001.
- `deadline` (`string`, optional): New deadline in YYYYMMDD format. Example: 20250715.
- `description` (`string`, optional): New description of the milestone.
- `notify` (`boolean`, optional): When true, the responsible people are notified. Example: false.
- `reminder` (`boolean`, optional): When true, a reminder is sent before the deadline. Example: false.
- `responsible_party_ids` (`string`, optional): Comma-separated user ids responsible for the milestone. Example: 101,102.
- `title` (`string`, optional): New title of the milestone. Example: Beta release (moved).

Example input: `{"milestone_id":4001}`

### `teamwork_my_status_set`

Set My Status · Write

Set a new status message for the authenticated user.
Returns the id of the created status and a status of OK.
Use to tell the team what you are doing. Use teamwork_my_status_delete to clear it.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `status` (`string`, required): Text of the status message. Example: Heads down on the Q4 launch.

Example input: `{"status":"<status>"}`

### `teamwork_notebook_category_create`

Create Notebook Category · Write

Create a notebook category in a project.
Returns the id of the created category and a status of OK.
Use to group notebooks in a project. Use teamwork_notebook_categories_list to see existing categories.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the category. Example: Planning.
- `project_id` (`integer`, required): Id of the project to create the category in. Example: 123456.
- `parent_id` (`integer`, optional): Id of a parent category, to nest this one underneath it. Example: 501.

Example input: `{"name":"<name>","project_id":123456}`

### `teamwork_notebook_category_update`

Update Notebook Category · Write

Rename a notebook category.
Returns a status of OK when the category was updated.
Use to rename a category. Use teamwork_notebook_categories_list to find its id.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `category_id` (`integer`, required): Id of the notebook category to update. Example: 501.
- `name` (`string`, required): New name of the category. Example: Roadmap.

Example input: `{"category_id":501,"name":"<name>"}`

### `teamwork_notebook_create`

Create Notebook · Write

Create a notebook in a project.
Returns the created notebook with its id.
Use to add documentation or meeting notes to a project.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `contents` (`string`, required): Content of the notebook. Markdown or HTML, matching the type. Example: # Agenda
- Status.
- `name` (`string`, required): Name of the notebook. Example: Meeting notes.
- `project_id` (`integer`, required): Id of the project to create the notebook in. Example: 123456.
- `type` (`string`, required): Format of the contents. Example: MARKDOWN. Allowed values: MARKDOWN, HTML. One of: `MARKDOWN`, `HTML`.
- `description` (`string`, optional): Short description of the notebook.
- `is_private` (`boolean`, optional): When true the notebook is private. Example: false.

Example input: `{"contents":"<contents>","name":"<name>","project_id":123456,"type":"MARKDOWN"}`

### `teamwork_notebook_lock`

Lock Notebook · Write

Lock a notebook so others cannot edit it.
Returns an empty success response when the notebook was locked.
Use before a long edit. Use teamwork_notebook_unlock to release the lock.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `notebook_id` (`integer`, required): Id of the notebook to lock. Example: 2001.

Example input: `{"notebook_id":2001}`

### `teamwork_notebook_unlock`

Unlock Notebook · Write

Unlock a notebook so it can be edited again.
Returns an empty success response when the notebook was unlocked.
Use to undo teamwork_notebook_lock.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `notebook_id` (`integer`, required): Id of the notebook to unlock. Example: 2001.

Example input: `{"notebook_id":2001}`

### `teamwork_notebook_update`

Update Notebook · Write

Update the name, contents, description, category or privacy of a notebook.
Returns the updated notebook.
Use to edit a notebook. Only the fields you supply are changed. Set new_version to keep the previous contents as a version.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `notebook_id` (`integer`, required): Id of the notebook to update. Example: 2001.
- `category_id` (`integer`, optional): Id of the notebook category to move the notebook to. Example: 501.
- `contents` (`string`, optional): New contents of the notebook, in the notebook's format. Example: # Runbook
Step one.
- `description` (`string`, optional): New description of the notebook. Example: Steps for launch day.
- `is_private` (`boolean`, optional): Set true to make the notebook private to the people it is shared with. Example: false.
- `name` (`string`, optional): New name of the notebook. Example: Launch runbook.
- `new_version` (`boolean`, optional): Set true to save the edit as a new version and keep the old contents. Example: true.
- `type` (`string`, optional): Format of the contents. Example: MARKDOWN. Allowed values: MARKDOWN, HTML. One of: `MARKDOWN`, `HTML`.

Example input: `{"notebook_id":2001}`

### `teamwork_portfolio_board_create`

Create Portfolio Board · Write

Create a portfolio board.
Returns the id of the created board and a status of OK.
Use to start a new portfolio view. Add columns with teamwork_portfolio_column_create.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the board. Example: 2027 Roadmap.
- `color` (`string`, optional): Colour of the board as a hex code. Example: #3498DB.
- `description` (`string`, optional): Description of the board. Example: Projects planned for 2027.

Example input: `{"name":"<name>"}`

### `teamwork_portfolio_board_update`

Update Portfolio Board · Write

Update the name, description or colour of a portfolio board.
Returns a status of OK when the board was updated.
Use to edit a board. Only the fields you supply are changed.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `board_id` (`integer`, required): Id of the portfolio board to update. Example: 801.
- `color` (`string`, optional): New colour of the board as a hex code. Example: #27AE60.
- `description` (`string`, optional): New description of the board. Example: Revised plan.
- `name` (`string`, optional): New name of the board. Example: 2027 Roadmap v2.

Example input: `{"board_id":801}`

### `teamwork_portfolio_card_add`

Add Project to Portfolio Column · Write

Place a project from the backlog into a portfolio column.
Returns the id of the created card and a status of OK.
Use to put a project on a board. Use teamwork_portfolio_card_move to shift it to another column later.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `column_id` (`integer`, required): Id of the portfolio column. Example: 901.
- `project_id` (`integer`, required): Id of the project to place in the column. Example: 123456.

Example input: `{"column_id":901,"project_id":123456}`

### `teamwork_portfolio_card_move`

Move Portfolio Card · Write

Move a project card from one portfolio column to another.
Returns a status of OK when the card was moved.
Use to change a project's stage on a board. Find card and column ids with teamwork_portfolio_column_cards_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `card_id` (`integer`, required): Id of the card to move. Example: 1001.
- `column_id` (`integer`, required): Id of the column to move the card to. Example: 902.
- `old_column_id` (`integer`, required): Id of the column the card is coming from. Example: 901.

Example input: `{"card_id":1001,"column_id":902,"old_column_id":901}`

### `teamwork_portfolio_column_create`

Create Portfolio Column · Write

Add a column to a portfolio board.
Returns the id of the created column and a status of OK.
Use to add a stage to a board, for example Planned or In flight.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `board_id` (`integer`, required): Id of the portfolio board. Example: 801.
- `name` (`string`, required): Name of the column. Example: In flight.
- `color` (`string`, optional): Colour of the column as a hex code. Example: #F39C12.

Example input: `{"board_id":801,"name":"<name>"}`

### `teamwork_portfolio_column_update`

Update Portfolio Column · Write

Rename or recolour a portfolio column.
Returns a status of OK when the column was updated.
Use to edit a column. Only the fields you supply are changed.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `column_id` (`integer`, required): Id of the portfolio column to update. Example: 901.
- `color` (`string`, optional): New colour of the column as a hex code. Example: #27AE60.
- `name` (`string`, optional): New name of the column. Example: Shipped.

Example input: `{"column_id":901}`

### `teamwork_project_archive`

Archive Project · Write

Archive a project so it becomes inactive and drops out of the active project list.
Returns a status of OK when the project was archived.
Use to retire a finished project without deleting it. Use teamwork_project_unarchive to bring it back.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project to archive. Example: 123456.

Example input: `{"project_id":123456}`

### `teamwork_project_clone`

Clone Project · Write

Copy an existing project into a new project, choosing which parts (task lists, tasks, milestones, notebooks, links, messages, files, comments) to carry over.
Returns the id of the new project and a status of OK. Cloning a large project can take a while.
Use to start a project from an earlier one or from a template. Nothing is copied unless you set its copy flag, and project members are never copied unless copy_people is true.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `new_project_name` (`string`, required): Name of the new project. Example: SK Website Redesign Copy.
- `project_id` (`integer`, required): Id of the project or template to copy. Example: 123456.
- `company_id` (`integer`, optional): Id of the company (client) the new project belongs to. Example: 55.
- `copy_comments` (`boolean`, optional): Copy the comments into the new project. Defaults to false. Example: false.
- `copy_files` (`boolean`, optional): Copy the files into the new project. Defaults to false. Example: false.
- `copy_links` (`boolean`, optional): Copy the links into the new project. Defaults to false. Example: false.
- `copy_messages` (`boolean`, optional): Copy the messages into the new project. Defaults to false. Example: false.
- `copy_milestones` (`boolean`, optional): Copy the milestones into the new project. Defaults to false. Example: false.
- `copy_notebooks` (`boolean`, optional): Copy the notebooks into the new project. Defaults to false. Example: false.
- `copy_people` (`boolean`, optional): Copy the project members into the new project, which can notify them. Defaults to false. Example: false.
- `copy_tasklists` (`boolean`, optional): Copy the task lists (empty) into the new project. Defaults to false. Example: true.
- `copy_tasks` (`boolean`, optional): Copy the tasks into the new project. Defaults to false. Example: true.
- `description` (`string`, optional): Description of the new project. Example: Copy of the redesign project.
- `new_from_template` (`boolean`, optional): Set true when the source is a project template and the copy should be a normal project. Example: false.
- `to_template` (`boolean`, optional): Set true to turn the copy into a project template. Example: false.

Example input: `{"new_project_name":"<new_project_name>","project_id":123456}`

### `teamwork_project_create`

Create Project · Write

Create a new project in the Teamwork site.
Returns the id of the created project and a status of OK.
Use to start a new project. Use teamwork_project_update to change an existing one.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the new project. Example: Website Redesign.
- `category_id` (`integer`, optional): Id of the project category to file the project under. Example: 7.
- `company_id` (`integer`, optional): Id of the company (client) that the project belongs to. Example: 55.
- `description` (`string`, optional): Description of the project.
- `end_date` (`string`, optional): Project end date in YYYYMMDD format. Example: 20250630.
- `is_private` (`boolean`, optional): When true the project is private and only visible to its members. Example: false.
- `project_owner_id` (`integer`, optional): User id of the project owner. Example: 101.
- `start_date` (`string`, optional): Project start date in YYYYMMDD format. Example: 20250101.

Example input: `{"name":"<name>"}`

### `teamwork_project_customfield_value_add`

Add Project Custom Field Value · Write

Set a custom field value on a project that does not have one for that field yet.
Returns the stored custom field value.
Use to fill in a custom field on a project. Use teamwork_project_customfield_value_update to change an existing value.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `customfield_id` (`integer`, required): Id of the custom field the value belongs to. Example: 6801.
- `project_id` (`integer`, required): Id of the project. Example: 123456.
- `value` (`string`, required): Value to store. Use text for text fields, a number for number fields, true or false for checkboxes, an ISO date for date fields, or a list of options for multiselect fields. Example: Gold.

Example input: `{"customfield_id":6801,"project_id":123456,"value":"<value>"}`

### `teamwork_project_customfield_value_update`

Update Project Custom Field Value · Write

Change the value of a custom field already set on a project.
Returns the updated custom field value.
Use to edit a stored value. Use teamwork_project_customfield_value_add for a field with no value yet.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `customfield_id` (`integer`, required): Id of the custom field the value belongs to. Example: 6801.
- `project_id` (`integer`, required): Id of the project. Example: 123456.
- `value` (`string`, required): Value to store. Use text for text fields, a number for number fields, true or false for checkboxes, an ISO date for date fields, or a list of options for multiselect fields. Example: Gold.
- `value_id` (`integer`, required): Id of the stored value, which is the id field returned when listing or adding custom field values (not the id of the custom field itself). Example: 4724354.

Example input: `{"customfield_id":6801,"project_id":123456,"value":"<value>","value_id":4724354}`

### `teamwork_project_features_set`

Set Project Features · Write

Turn project features such as tasks, milestones, messages, files, time tracking, notebooks, links, billing and the risk register on or off.
Returns a status of OK when the settings were saved.
Use to enable or disable the tabs of a project. Only the features you supply are changed. Use teamwork_project_update for name, dates and ownership details.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project to change. Example: 123456.
- `use_billing` (`boolean`, optional): Turn the Billing feature on or off. Example: false.
- `use_files` (`boolean`, optional): Turn the Files feature on or off. Example: true.
- `use_links` (`boolean`, optional): Turn the Links feature on or off. Example: true.
- `use_messages` (`boolean`, optional): Turn the Messages feature on or off. Example: true.
- `use_milestones` (`boolean`, optional): Turn the Milestones feature on or off. Example: true.
- `use_notebook` (`boolean`, optional): Turn the Notebooks feature on or off. Example: true.
- `use_riskregister` (`boolean`, optional): Turn the Risk register feature on or off. Example: true.
- `use_tasks` (`boolean`, optional): Turn the Tasks feature on or off. Example: true.
- `use_time` (`boolean`, optional): Turn the Time tracking feature on or off. Example: true.

Example input: `{"project_id":123456}`

### `teamwork_project_owner_set`

Set Project Owner · Write

Set the owner of a project to an existing user.
Returns a status of OK when the owner was changed.
Use to hand a project to a different person. Use teamwork_people_list to find user ids.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `owner_user_id` (`integer`, required): Id of the user who becomes the project owner. Example: 101.
- `project_id` (`integer`, required): Id of the project to change. Example: 123456.

Example input: `{"owner_user_id":101,"project_id":123456}`

### `teamwork_project_people_add`

Add People to Project · Write

Add existing users to a project as members.
Returns the updated project membership response from Teamwork.
Use to give users access to a project. Users must already exist on the Teamwork site.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project to add people to. Example: 123456.
- `user_ids` (`array`, required): Ids of the users to add to the project. Example: [101, 102].

Example input: `{"project_id":123456,"user_ids":[101,102]}`

### `teamwork_project_star`

Star Project · Write

Add a project to the favourites of the authenticated user.
Returns a status of OK when the project was starred.
Use to pin a project for quick access. Use teamwork_project_unstar to remove it, and teamwork_projects_starred_list to see starred projects.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project to star. Example: 123456.

Example input: `{"project_id":123456}`

### `teamwork_project_status_update_create`

Create Project Status Update · Write

Post a status update with a health rating on a project.
Returns the created status update with its id.
Use to report progress on a project. Nobody is notified unless you pass notify_user_ids. Use teamwork_project_status_update_edit to change the text later.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `project_id` (`integer`, required): Id of the project to post the update on. Example: 123456.
- `text` (`string`, required): Text of the status update. Example: Design is done, build starts Monday.
- `health` (`string`, optional): Health rating to attach to the project: 0 no status, 1 needs attention (red), 2 ready to release (yellow), 3 in progress (green). Example: 3. Allowed values: 0, 1, 2, 3. One of: `0`, `1`, `2`, `3`.
- `notify_user_ids` (`string`, optional): Comma-separated user ids to notify about the update. Leave empty to notify nobody. Example: 101,102.

Example input: `{"project_id":123456,"text":"<text>"}`

### `teamwork_project_status_update_edit`

Edit Project Status Update · Write

Change the text of a project status update.
Returns a status of OK when the update was saved.
Use to correct a status update you posted. Use teamwork_project_status_update_create for a new one.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `text` (`string`, required): New text of the status update. Example: Design is done, build starts Tuesday.
- `update_id` (`integer`, required): Id of the status update to edit. Example: 8801.

Example input: `{"text":"<text>","update_id":8801}`

### `teamwork_project_template_create`

Create Project Template · Write

Create a new, empty project template.
Returns the id of the created template and a status of OK.
Use to start a reusable project blueprint. Use teamwork_project_clone with to_template to turn an existing project into a template, and teamwork_project_delete to remove a template.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the template. Example: Website Launch Template.
- `category_id` (`integer`, optional): Id of the project category to file the template under. Example: 7.
- `company_id` (`integer`, optional): Id of the company (client) the template belongs to. Example: 55.
- `description` (`string`, optional): Description of the template. Example: Standard plan for launching a website.

Example input: `{"name":"<name>"}`

### `teamwork_project_time_entry_create`

Log Time on Project · Write

Log time against a project without attaching it to a task.
Returns the created time entry with its id.
Use for general project work. Use teamwork_task_time_entry_create for work on a specific task.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `date` (`string`, required): Date the time was worked, in YYYY-MM-DD format. Example: 2025-03-04.
- `minutes` (`integer`, required): Additional minutes worked (0 to 59). Example: 30.
- `project_id` (`integer`, required): Id of the project to log time against. Example: 123456.
- `description` (`string`, optional): Description of the work done.
- `hours` (`integer`, optional): Whole hours worked. Example: 1.
- `is_billable` (`boolean`, optional): When true the time is billable. Example: true.
- `tag_ids` (`array`, optional): Ids of existing tags to attach to the time entry. Example: [3].
- `time` (`string`, optional): Start time of day in HH:MM:SS format. Example: 09:30:00.
- `user_id` (`integer`, optional): Id of the user the time is logged for. Defaults to the authenticated user. Example: 101.

Example input: `{"date":"<date>","minutes":30,"project_id":123456}`

### `teamwork_project_unarchive`

Unarchive Project · Write

Reactivate an archived project so it appears in the active project list again.
Returns a status of OK when the project was reactivated.
Use to undo teamwork_project_archive.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the archived project to reactivate. Example: 123456.

Example input: `{"project_id":123456}`

### `teamwork_project_unstar`

Unstar Project · Write

Remove a project from the favourites of the authenticated user.
Returns a status of OK when the project was unstarred.
Use to undo teamwork_project_star.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project to unstar. Example: 123456.

Example input: `{"project_id":123456}`

### `teamwork_project_update`

Update Project · Write

Update the name, description, dates, category, company or owner of an existing project.
Returns a status of OK when the project was updated.
Use to edit a project. Only the fields you supply are changed.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project to update. Example: 123456.
- `category_id` (`integer`, optional): Id of the project category to move the project to. Example: 7.
- `company_id` (`integer`, optional): Id of the company (client) that the project belongs to. Example: 55.
- `description` (`string`, optional): New description for the project.
- `end_date` (`string`, optional): New end date in YYYYMMDD format. Example: 20250731.
- `is_private` (`boolean`, optional): Set true to make the project private, false to make it visible to the whole team. Example: false.
- `name` (`string`, optional): New name for the project. Example: Website Redesign v2.
- `start_date` (`string`, optional): New start date in YYYYMMDD format. Example: 20250201.

Example input: `{"project_id":123456}`

### `teamwork_project_workflow_apply`

Apply Workflow to Project · Write

Apply a board workflow to a project so its tasks can be moved between stages.
Returns the workflow applied to the project.
Use to turn on a board for a project. Use teamwork_project_workflow_remove to take it off.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.
- `workflow_id` (`integer`, required): Id of the workflow to apply. Example: 1101.

Example input: `{"project_id":123456,"workflow_id":1101}`

### `teamwork_resource_tags_update`

Update Resource Tags · Write

Add tags to, replace the tags of, or remove tags from a project, task, milestone, message, notebook, link or other item.
Returns a status of OK when the tags were saved.
Use to tag items by name; tags that do not exist yet are created. By default the names are added to the existing tags. Use teamwork_tag_delete to remove a tag from the site.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `item_id` (`integer`, required): Id of the item. Example: 7654321.
- `resource` (`string`, required): Type of item to tag. Example: tasks. One of: `projects`, `tasks`, `milestones`, `messages`, `timelogs`, `files`, `users`, `companies`, `notebooks`, `links`.
- `tag_names` (`string`, required): Comma-separated tag names. Example: urgent,design.
- `remove_provided_tags` (`boolean`, optional): Set true to remove the names given instead of adding them. Example: false.
- `replace_existing_tags` (`boolean`, optional): Set true to replace all current tags with the names given. Example: false.

Example input: `{"item_id":7654321,"resource":"projects","tag_names":"<tag_names>"}`

### `teamwork_risk_create`

Create Risk · Write

Add a risk to the risk register of a project.
Returns the created risk with its id.
Use to log a project risk. Set at least one of impact_cost, impact_performance or impact_schedule to true. The project must have the Risk register feature turned on (see teamwork_project_features_set).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `project_id` (`integer`, required): Id of the project to add the risk to. Example: 123456.
- `source` (`string`, required): Description of the risk (what could go wrong). Example: Vendor may miss the delivery date.
- `impact_cost` (`boolean`, optional): Set true if the risk affects cost. Example: true.
- `impact_performance` (`boolean`, optional): Set true if the risk affects performance or quality. Example: false.
- `impact_schedule` (`boolean`, optional): Set true if the risk affects the schedule. Example: true.
- `impact_value` (`integer`, optional): Size of the impact if the risk happens, as a score. Example: 75.
- `mitigation_plan` (`string`, optional): What will be done to reduce or handle the risk. Example: Line up a backup vendor.
- `probability_value` (`integer`, optional): Likelihood of the risk happening, as a score. Example: 50.

Example input: `{"project_id":123456,"source":"<source>"}`

### `teamwork_risk_update`

Update Risk · Write

Update the description, scores, mitigation plan or impact areas of a risk.
Returns the updated risk.
Use to edit a logged risk. Only the fields you supply are changed.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `risk_id` (`integer`, required): Id of the risk to update. Example: 5101.
- `impact_cost` (`boolean`, optional): Set true if the risk affects cost. Example: true.
- `impact_performance` (`boolean`, optional): Set true if the risk affects performance or quality. Example: false.
- `impact_schedule` (`boolean`, optional): Set true if the risk affects the schedule. Example: true.
- `impact_value` (`integer`, optional): Size of the impact if the risk happens, as a score. Example: 75.
- `mitigation_plan` (`string`, optional): What will be done to reduce or handle the risk. Example: Line up a backup vendor.
- `probability_value` (`integer`, optional): Likelihood of the risk happening, as a score. Example: 50.
- `source` (`string`, optional): Description of the risk (what could go wrong). Example: Vendor may miss the delivery date.

Example input: `{"risk_id":5101}`

### `teamwork_subtask_create`

Create Subtask · Write

Create a subtask under an existing task.
Returns the created subtask with its id and name.
Use to break a task into smaller steps. Use teamwork_task_create for a top-level task.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name (title) of the task. Example: Draft launch announcement.
- `task_id` (`integer`, required): Id of the parent task. Example: 7654321.
- `assignee_user_ids` (`array`, optional): Ids of the users to assign the task to. Example: [101, 102].
- `description` (`string`, optional): Description of the task. Plain text or HTML.
- `due_date` (`string`, optional): Due date in YYYY-MM-DD format. Example: 2025-03-15.
- `estimated_minutes` (`integer`, optional): Estimated effort in minutes. Example: 120.
- `is_private` (`boolean`, optional): When true the task is only visible to the people it is shared with. Example: false.
- `priority` (`string`, optional): Task priority. Example: high. Allowed values: low, medium, high. One of: `low`, `medium`, `high`.
- `progress` (`integer`, optional): Completion percentage from 0 to 100. Example: 25.
- `start_date` (`string`, optional): Start date in YYYY-MM-DD format. Example: 2025-03-01.
- `tag_ids` (`array`, optional): Ids of existing tags to attach to the task. Example: [3, 4].

Example input: `{"name":"<name>","task_id":7654321}`

### `teamwork_subtasks_quickadd`

Quick Add Subtasks · Write

Create several subtasks under a task from one block of text, one subtask per line.
Returns a status of OK and the ids of the created subtasks.
Use to bulk-create subtasks fast. Separate subtask names with a newline or ~|~. Nobody is notified unless notify is true. Use teamwork_subtask_create for one subtask with full detail.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `content` (`string`, required): Names of the subtasks to create, separated by a newline or ~|~. Example: Write copy~|~Review copy.
- `task_id` (`integer`, required): Id of the parent task. Example: 7654321.
- `notify` (`boolean`, optional): Set true to notify the assignees of the new subtasks. Defaults to false. Example: false.
- `priority` (`string`, optional): Priority applied to every created subtask. Example: medium. Allowed values: low, medium, high. One of: `low`, `medium`, `high`.

Example input: `{"content":"<content>","task_id":7654321}`

### `teamwork_tag_create`

Create Tag · Write

Create a tag.
Returns the created tag with its id.
Use to add a tag that can then be attached to tasks, projects and time entries.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the tag. Example: urgent.
- `color` (`string`, optional): Colour of the tag as a hex code. Example: #ff22b1.
- `project_id` (`integer`, optional): Id of a project to scope the tag to. Omit for a site-wide tag. Example: 123456.

Example input: `{"name":"<name>"}`

### `teamwork_tag_update`

Update Tag · Write

Rename or recolour a tag.
Returns the updated tag.
Use to edit a tag. Only the fields you supply are changed.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `tag_id` (`integer`, required): Id of the tag to update. Example: 3.
- `color` (`string`, optional): New colour of the tag as a hex code. Example: #1d1c39.
- `name` (`string`, optional): New name of the tag. Example: high-priority.

Example input: `{"tag_id":3}`

### `teamwork_task_comment_create`

Create Task Comment · Write

Post a comment on a task.
Returns the id of the created comment and a status of OK.
Use to add a note to a task's discussion. Nobody is notified. Use teamwork_comment_create for milestones, notebooks and links.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `body` (`string`, required): Text of the comment. Plain text or HTML.
- `task_id` (`integer`, required): Id of the task to comment on. Example: 7654321.
- `content_type` (`string`, optional): Format of the body. Example: TEXT. Allowed values: TEXT, HTML. One of: `TEXT`, `HTML`.
- `is_private` (`boolean`, optional): When true the comment is only visible to the team, not clients. Example: false.

Example input: `{"body":"<body>","task_id":7654321}`

### `teamwork_task_complete`

Complete Task · Write

Mark a task as complete.
Returns a status of OK when the task was completed.
Use to close a task. Use teamwork_task_reopen to undo it.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): Id of the task to complete. Example: 7654321.

Example input: `{"task_id":7654321}`

### `teamwork_task_copy`

Copy Task · Write

Copy a task into a task list in the same or another project.
Returns a status of OK and the id of the new task.
Use to duplicate a task. Use teamwork_task_move to relocate it instead.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the destination project. Example: 123456.
- `task_id` (`integer`, required): Id of the task to copy. Example: 7654321.
- `tasklist_id` (`integer`, required): Id of the destination task list. Example: 9002.

Example input: `{"project_id":123456,"task_id":7654321,"tasklist_id":9002}`

### `teamwork_task_create`

Create Task · Write

Create a task in a task list.
Returns the created task with its id, name and list.
Use to add a task to an existing task list. Use teamwork_subtask_create to add a child of another task.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name (title) of the task. Example: Draft launch announcement.
- `tasklist_id` (`integer`, required): Id of the task list to create the task in. Example: 9001.
- `assignee_user_ids` (`array`, optional): Ids of the users to assign the task to. Example: [101, 102].
- `description` (`string`, optional): Description of the task. Plain text or HTML.
- `due_date` (`string`, optional): Due date in YYYY-MM-DD format. Example: 2025-03-15.
- `estimated_minutes` (`integer`, optional): Estimated effort in minutes. Example: 120.
- `is_private` (`boolean`, optional): When true the task is only visible to the people it is shared with. Example: false.
- `priority` (`string`, optional): Task priority. Example: high. Allowed values: low, medium, high. One of: `low`, `medium`, `high`.
- `progress` (`integer`, optional): Completion percentage from 0 to 100. Example: 25.
- `start_date` (`string`, optional): Start date in YYYY-MM-DD format. Example: 2025-03-01.
- `tag_ids` (`array`, optional): Ids of existing tags to attach to the task. Example: [3, 4].

Example input: `{"name":"<name>","tasklist_id":9001}`

### `teamwork_task_customfield_value_add`

Add Task Custom Field Value · Write

Set a custom field value on a task that does not have one for that field yet.
Returns the stored custom field value.
Use to fill in a custom field on a task. Use teamwork_task_customfield_value_update to change an existing value.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `customfield_id` (`integer`, required): Id of the custom field the value belongs to. Example: 6801.
- `task_id` (`integer`, required): Id of the task. Example: 7654321.
- `value` (`string`, required): Value to store. Use text for text fields, a number for number fields, true or false for checkboxes, an ISO date for date fields, or a list of options for multiselect fields. Example: Gold.

Example input: `{"customfield_id":6801,"task_id":7654321,"value":"<value>"}`

### `teamwork_task_customfield_value_update`

Update Task Custom Field Value · Write

Change the value of a custom field already set on a task.
Returns the updated custom field value.
Use to edit a stored value. Use teamwork_task_customfield_value_add for a field with no value yet.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `customfield_id` (`integer`, required): Id of the custom field the value belongs to. Example: 6801.
- `task_id` (`integer`, required): Id of the task. Example: 7654321.
- `value` (`string`, required): Value to store. Use text for text fields, a number for number fields, true or false for checkboxes, an ISO date for date fields, or a list of options for multiselect fields. Example: Gold.
- `value_id` (`integer`, required): Id of the stored value, which is the id field returned when listing or adding custom field values (not the id of the custom field itself). Example: 4724354.

Example input: `{"customfield_id":6801,"task_id":7654321,"value":"<value>","value_id":4724354}`

### `teamwork_task_followers_set`

Set Task Followers · Write

Set which users follow a task's changes, comments and completion.
Returns the updated task.
Use to add followers who get notified about the task. Only the lists you supply are changed. Use teamwork_task_followers_list to see the current followers.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): Id of the task. Example: 7654321.
- `change_follower_user_ids` (`array`, optional): Ids of users who follow changes made to the task. Example: [101].
- `comment_follower_user_ids` (`array`, optional): Ids of users who follow new comments on the task. Example: [101].
- `complete_follower_user_ids` (`array`, optional): Ids of users who are told when the task is completed. Example: [101].

Example input: `{"task_id":7654321}`

### `teamwork_task_move`

Move Task · Write

Move a task to a task list in another project, or to another list in the same project.
Returns a status of OK when the task was moved.
Use to relocate a task. Use teamwork_task_copy to leave the original in place.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the destination project. Example: 123456.
- `task_id` (`integer`, required): Id of the task to move. Example: 7654321.
- `tasklist_id` (`integer`, required): Id of the destination task list. Example: 9002.

Example input: `{"project_id":123456,"task_id":7654321,"tasklist_id":9002}`

### `teamwork_task_predecessors_set`

Set Task Predecessors · Write

Replace the predecessors of a task with a new list of blocking tasks.
Returns the updated task.
Use to add or remove task dependencies. Include every predecessor the task should keep, because the list replaces the current one. Pass an empty list to clear all predecessors.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `predecessors` (`array`, required): Full list of predecessors. Each entry names the blocking task by id and says whether it must be completed or only started first. Example: [{"id": 7654320, "type": "complete"}].
- `task_id` (`integer`, required): Id of the task that depends on the others. Example: 7654321.

Example input: `{"predecessors":[{"id":7654320,"type":"complete"}],"task_id":7654321}`

### `teamwork_task_reminder_create`

Create Task Reminder · Write

Add a reminder to a task for one or more users at a given date and time.
Returns the created reminder.
Use to schedule a nudge on a task. The reminder is only sent when the time arrives. Use teamwork_task_reminder_delete to remove it.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `remind_at` (`string`, required): When to send the reminder, as an ISO 8601 date and time. Example: 2027-06-01T09:00:00Z.
- `task_id` (`integer`, required): Id of the task. Example: 7654321.
- `user_ids` (`array`, required): Ids of the users to remind. Example: [101].
- `note` (`string`, optional): Note included in the reminder. Example: Check progress before the review.
- `reminder_type` (`string`, optional): How the reminder is delivered. Example: email. Allowed values: email, sms, push. One of: `email`, `sms`, `push`.

Example input: `{"remind_at":"<remind_at>","task_id":7654321,"user_ids":[101]}`

### `teamwork_task_reopen`

Reopen Task · Write

Mark a completed task as not complete again.
Returns a status of OK when the task was reopened.
Use to undo teamwork_task_complete.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): Id of the task to reopen. Example: 7654321.

Example input: `{"task_id":7654321}`

### `teamwork_task_time_entry_create`

Log Time on Task · Write

Log time against a task.
Returns the created time entry with its id.
Use to record work on a task. Use teamwork_project_time_entry_create when the time is not tied to a task.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `date` (`string`, required): Date the time was worked, in YYYY-MM-DD format. Example: 2025-03-04.
- `minutes` (`integer`, required): Additional minutes worked (0 to 59). Example: 30.
- `task_id` (`integer`, required): Id of the task to log time against. Example: 7654321.
- `description` (`string`, optional): Description of the work done.
- `hours` (`integer`, optional): Whole hours worked. Example: 1.
- `is_billable` (`boolean`, optional): When true the time is billable. Example: true.
- `tag_ids` (`array`, optional): Ids of existing tags to attach to the time entry. Example: [3].
- `time` (`string`, optional): Start time of day in HH:MM:SS format. Example: 09:30:00.
- `user_id` (`integer`, optional): Id of the user the time is logged for. Defaults to the authenticated user. Example: 101.

Example input: `{"date":"<date>","minutes":30,"task_id":7654321}`

### `teamwork_task_update`

Update Task · Write

Update fields on an existing task.
Returns the updated task.
Use to rename, reschedule, reassign or re-prioritise a task. Only the fields you supply are changed. Use teamwork_task_complete to mark a task done.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): Id of the task to update. Example: 7654321.
- `assignee_user_ids` (`array`, optional): Ids of the users to assign the task to. Example: [101, 102].
- `description` (`string`, optional): Description of the task. Plain text or HTML.
- `due_date` (`string`, optional): Due date in YYYY-MM-DD format. Example: 2025-03-15.
- `estimated_minutes` (`integer`, optional): Estimated effort in minutes. Example: 120.
- `is_private` (`boolean`, optional): When true the task is only visible to the people it is shared with. Example: false.
- `name` (`string`, optional): Name (title) of the task. Example: Draft launch announcement.
- `priority` (`string`, optional): Task priority. Example: high. Allowed values: low, medium, high. One of: `low`, `medium`, `high`.
- `progress` (`integer`, optional): Completion percentage from 0 to 100. Example: 25.
- `start_date` (`string`, optional): Start date in YYYY-MM-DD format. Example: 2025-03-01.
- `tag_ids` (`array`, optional): Ids of existing tags to attach to the task. Example: [3, 4].

Example input: `{"task_id":7654321}`

### `teamwork_task_workflow_stage_move`

Move Task to Workflow Stage · Write

Move a task to a stage of a workflow board, optionally after another task.
Returns an empty success response when the task was moved.
Use to change a task's board column. Find stage ids with teamwork_workflow_stages_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `stage_id` (`integer`, required): Id of the destination stage. Example: 1201.
- `task_id` (`integer`, required): Id of the task to move. Example: 7654321.
- `workflow_id` (`integer`, required): Id of the workflow. Example: 1101.
- `position_after_task_id` (`integer`, optional): Id of the task to place this one after in the stage. Example: 7654320.

Example input: `{"stage_id":1201,"task_id":7654321,"workflow_id":1101}`

### `teamwork_tasklist_copy`

Copy Task List · Write

Copy a task list, with its tasks, into the same or another project.
Returns a status of OK and the id of the new task list.
Use to duplicate a list. Use teamwork_tasklist_move to relocate it instead.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the destination project. Example: 123456.
- `tasklist_id` (`integer`, required): Id of the task list to copy. Example: 9001.
- `include_completed_tasks` (`boolean`, optional): Set true to also copy completed tasks. Defaults to false. Example: false.

Example input: `{"project_id":123456,"tasklist_id":9001}`

### `teamwork_tasklist_create`

Create Task List · Write

Create a task list in a project.
Returns the id of the created task list and a status of OK.
Use to add a list to a project before creating tasks with teamwork_task_create.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the task list. Example: Sprint 12.
- `project_id` (`integer`, required): Id of the project to create the task list in. Example: 123456.
- `description` (`string`, optional): Description of the task list.
- `is_private` (`boolean`, optional): When true the list is only visible to project members with private access. Example: false.
- `milestone_id` (`integer`, optional): Id of a milestone to attach the list to. Example: 4001.

Example input: `{"name":"<name>","project_id":123456}`

### `teamwork_tasklist_move`

Move Task List · Write

Move a task list, with its tasks, to another project.
Returns a status of OK when the list was moved.
Use to relocate a list. Use teamwork_tasklist_copy to leave the original in place.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the destination project. Example: 123456.
- `tasklist_id` (`integer`, required): Id of the task list to move. Example: 9001.

Example input: `{"project_id":123456,"tasklist_id":9001}`

### `teamwork_tasklist_update`

Update Task List · Write

Update the name, description or milestone of a task list.
Returns a status of OK when the task list was updated.
Use to rename or re-describe a list. Only the fields you supply are changed.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `tasklist_id` (`integer`, required): Id of the task list to update. Example: 9001.
- `description` (`string`, optional): New description of the task list.
- `is_private` (`boolean`, optional): Set true to make the list private. Example: false.
- `milestone_id` (`integer`, optional): Id of a milestone to attach the list to. Example: 4001.
- `name` (`string`, optional): New name of the task list. Example: Sprint 13.

Example input: `{"tasklist_id":9001}`

### `teamwork_tasklists_reorder`

Reorder Task Lists · Write

Move the listed task lists to the top of a project in the order given.
Returns a status of OK when the lists were reordered.
Use to prioritise lists inside a project. Lists you leave out keep their order below the listed ones.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.
- `tasklist_ids` (`array`, required): Ids of the task lists in the order they should appear at the top. Example: [9002, 9001].

Example input: `{"project_id":123456,"tasklist_ids":[9002,9001]}`

### `teamwork_tasks_quickadd`

Quick Add Tasks · Write

Create several tasks in a task list from one block of text, one task per line.
Returns a status of OK and the ids of the created tasks.
Use to bulk-create tasks fast. Separate task names with a newline or ~|~. Nobody is notified unless notify is true. Use teamwork_task_create for one task with full detail.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `content` (`string`, required): Names of the tasks to create, separated by a newline or ~|~. Example: Draft brief~|~Review brief~|~Publish brief.
- `project_id` (`integer`, required): Id of the project the task list belongs to. Example: 123456.
- `tasklist_id` (`integer`, required): Id of the task list to add the tasks to. Example: 9001.
- `description` (`string`, optional): Description applied to every created task. Example: Created from the quick add list.
- `due_date` (`string`, optional): Due date applied to every created task, in YYYYMMDD format. Example: 20271231.
- `notify` (`boolean`, optional): Set true to notify the assignees of the new tasks. Defaults to false. Example: false.
- `priority` (`string`, optional): Priority applied to every created task. Example: medium. Allowed values: low, medium, high. One of: `low`, `medium`, `high`.

Example input: `{"content":"<content>","project_id":123456,"tasklist_id":9001}`

### `teamwork_tasks_reorder`

Reorder Tasks in Task List · Write

Move the listed tasks to the top of a task list in the order given.
Returns a status of OK when the tasks were reordered.
Use to prioritise tasks within a list. Tasks you leave out keep their relative order below the listed ones, and completed tasks cannot be reordered.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `task_ids` (`array`, required): Ids of the tasks in the order they should appear at the top of the list. Example: [7654322, 7654321].
- `tasklist_id` (`integer`, required): Id of the task list. Example: 9001.

Example input: `{"task_ids":[7654322,7654321],"tasklist_id":9001}`

### `teamwork_time_entry_update`

Update Time Entry · Write

Update an existing time entry.
Returns the updated time entry.
Use to correct logged time. Only the fields you supply are changed.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `timelog_id` (`integer`, required): Id of the time entry to update. Example: 300100.
- `date` (`string`, optional): Date the time was worked, in YYYY-MM-DD format. Example: 2025-03-04.
- `description` (`string`, optional): Description of the work done.
- `hours` (`integer`, optional): Whole hours worked. Example: 1.
- `is_billable` (`boolean`, optional): When true the time is billable. Example: true.
- `minutes` (`integer`, optional): Additional minutes worked (0 to 59). Example: 30.
- `tag_ids` (`array`, optional): Ids of existing tags to attach to the time entry. Example: [3].
- `time` (`string`, optional): Start time of day in HH:MM:SS format. Example: 09:30:00.
- `user_id` (`integer`, optional): Id of the user the time is logged for. Defaults to the authenticated user. Example: 101.

Example input: `{"timelog_id":300100}`

### `teamwork_timer_complete`

Complete Timer · Write

Stop a timer and turn it into a logged time entry.
Returns the completed timer and the resulting time entry.
Use to finish a timer started with teamwork_timer_start.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `timer_id` (`integer`, required): Id of the timer to complete. Example: 5001.

Example input: `{"timer_id":5001}`

### `teamwork_timer_pause`

Pause Timer · Write

Pause a running timer.
Returns the paused timer.
Use when work stops for a while. Use teamwork_timer_resume to continue it.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `timer_id` (`integer`, required): Id of the timer to pause. Example: 5001.

Example input: `{"timer_id":5001}`

### `teamwork_timer_resume`

Resume Timer · Write

Resume a paused timer. Any other running timer is paused first.
Returns the running timer.
Use to continue timing after teamwork_timer_pause.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `timer_id` (`integer`, required): Id of the timer to resume. Example: 5001.

Example input: `{"timer_id":5001}`

### `teamwork_timer_start`

Start Timer · Write

Start a timer for the authenticated user on a project, optionally on a task in it.
Returns the created timer with its id and state.
Use to begin live time tracking. Use teamwork_timer_complete to stop it and log the time.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `project_id` (`integer`, required): Id of the project to track time against. Required: a timer with no project can't be updated or logged afterwards. Example: 123456.
- `description` (`string`, optional): Description of the work being timed.
- `is_billable` (`boolean`, optional): When true the tracked time is billable. Example: true.
- `stop_running_timers` (`boolean`, optional): When true, any other running timers of the user are stopped first. Example: true.
- `task_id` (`integer`, optional): Id of the task to track time against. Example: 7654321.

Example input: `{"project_id":123456}`

### `teamwork_timer_update`

Update Timer · Write

Change the description, billable flag, task or project of a timer.
Returns the updated timer.
Use to correct a running or paused timer. Only the fields you supply are changed. Use teamwork_timer_complete to turn it into a time entry.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `timer_id` (`integer`, required): Id of the timer to update. Example: 5001.
- `description` (`string`, optional): New description of the work being timed. Example: Reviewing the brief.
- `is_billable` (`boolean`, optional): Set true if the time is billable. Example: true.
- `project_id` (`integer`, optional): Id of the project the timer belongs to. Example: 123456.
- `task_id` (`integer`, optional): Id of the task the timer belongs to. Example: 7654321.

Example input: `{"timer_id":5001}`

### `teamwork_trashcan_restore`

Restore From Trashcan · Write

Restore a deleted project, task, task list, milestone, message, notebook, link, file, time entry, comment or expense from the trashcan.
Returns a status of OK when the item was restored.
Use to undo a delete. Find the id with teamwork_trashcan_projects_list or teamwork_trashcan_project_items_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `item_id` (`integer`, required): Id of the deleted item to restore. Example: 7654321.
- `resource` (`string`, required): Type of item to restore. Example: tasks. One of: `projects`, `tasks`, `milestones`, `tasklists`, `messages`, `messagereplies`, `notebooks`, `files`, `fileversions`, `timelogs`, `links`, `comments`, `expenses`.
- `include_comments` (`boolean`, optional): Also restore the comments of the item. Defaults to true. Example: true.
- `include_subtasks` (`string`, optional): Tasks only. none restores no subtasks, sameDeletedDate restores subtasks deleted together with the task, any other value restores all of them. Example: sameDeletedDate.

Example input: `{"item_id":7654321,"resource":"projects"}`

### `teamwork_workflow_create`

Create Workflow · Write

Create a board workflow, optionally dedicated to one project.
Returns the created workflow with its id.
Use to set up a board. Pass project_id with project_specific true to keep the workflow inside one project. Add columns with teamwork_workflow_stage_create.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the workflow. Example: Delivery board.
- `project_id` (`integer`, optional): Id of the project the workflow belongs to. Leave empty for a site-wide workflow. Example: 123456.
- `project_specific` (`boolean`, optional): Set true to dedicate the workflow to the project given in project_id. Example: true.

Example input: `{"name":"<name>"}`

### `teamwork_workflow_stage_create`

Create Workflow Stage · Write

Add a stage (board column) to a workflow.
Returns the created stage with its id.
Use to add a column to a board. Use teamwork_workflow_stages_list to see the existing stages.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the stage. Example: In review.
- `workflow_id` (`integer`, required): Id of the workflow. Example: 1101.
- `color` (`string`, optional): Colour of the stage as a hex code. Example: #3498DB.
- `position_after_stage_id` (`integer`, optional): Id of the stage to place this one after. Example: 1201.

Example input: `{"name":"<name>","workflow_id":1101}`

### `teamwork_workflow_stage_update`

Update Workflow Stage · Write

Rename, recolour or reposition a stage of a workflow.
Returns the updated stage.
Use to edit a board column. Only the fields you supply are changed.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `stage_id` (`integer`, required): Id of the stage to update. Example: 1201.
- `workflow_id` (`integer`, required): Id of the workflow. Example: 1101.
- `color` (`string`, optional): New colour of the stage as a hex code. Example: #27AE60.
- `name` (`string`, optional): New name of the stage. Example: Ready for QA.
- `position_after_stage_id` (`integer`, optional): Id of the stage to place this one after. Example: 1201.

Example input: `{"stage_id":1201,"workflow_id":1101}`

### `teamwork_workflow_update`

Update Workflow · Write

Rename a board workflow.
Returns the updated workflow.
Use to change a workflow's name. Use teamwork_workflow_stage_update to change its columns.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `name` (`string`, required): New name of the workflow. Example: Delivery board v2.
- `workflow_id` (`integer`, required): Id of the workflow to update. Example: 1101.

Example input: `{"name":"<name>","workflow_id":1101}`

### `teamwork_activity_delete`

Delete Activity Entry · Destructive

Delete one entry from the activity feed.
Returns an empty success response when the entry was deleted.
Use only to remove a single feed entry. Find ids with teamwork_activity_list or teamwork_project_activity_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `activity_id` (`integer`, required): Id of the activity entry to delete. Example: 9501.

Example input: `{"activity_id":9501}`

### `teamwork_calendar_event_delete`

Delete Calendar Event · Destructive

Delete a calendar event.
Returns a status of OK when the event was deleted.
Use only when the event should be removed. Use teamwork_calendar_event_update to reschedule it instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `event_id` (`integer`, required): Id of the calendar event to delete. Example: 7701.

Example input: `{"event_id":7701}`

### `teamwork_comment_delete`

Delete Comment · Destructive

Delete a comment.
Returns a status of OK when the comment was deleted.
Use only when the comment should be removed. Use teamwork_comment_update to edit it instead, and teamwork_trashcan_restore to undo a delete.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `comment_id` (`integer`, required): Id of the comment to delete. Example: 88001.

Example input: `{"comment_id":88001}`

### `teamwork_company_delete`

Delete Company · Destructive

Delete a company (client) from the Teamwork site.
Returns an empty success response when the company was deleted.
Use only when the company should be removed. Use teamwork_company_update to edit it instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `company_id` (`integer`, required): Id of the company to delete. Example: 55.

Example input: `{"company_id":55}`

### `teamwork_customfield_delete`

Delete Custom Field · Destructive

Delete a custom field definition and all the values stored in it.
Returns an empty success response when the field was deleted.
Use only when the field is no longer needed. Use teamwork_customfield_update to rename it instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `customfield_id` (`integer`, required): Id of the custom field to delete. Example: 6801.

Example input: `{"customfield_id":6801}`

### `teamwork_expense_delete`

Delete Expense · Destructive

Delete an expense.
Returns a status of OK when the expense was deleted.
Use only when the expense should be removed. Use teamwork_trashcan_restore to undo a delete.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `expense_id` (`integer`, required): Id of the expense to delete. Example: 2201.

Example input: `{"expense_id":2201}`

### `teamwork_file_category_delete`

Delete File Category · Destructive

Delete a file category.
Returns a status of OK when the category was deleted.
Use only when the category is no longer needed. Use teamwork_file_category_update to rename it instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `category_id` (`integer`, required): Id of the file category to delete. Example: 501.

Example input: `{"category_id":501}`

### `teamwork_file_delete`

Delete File · Destructive

Delete a file from a project.
Returns a status of OK when the file was deleted.
Use only when the file should be removed. Use teamwork_trashcan_restore to undo a delete.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `file_id` (`integer`, required): Id of the file to delete. Example: 4401.

Example input: `{"file_id":4401}`

### `teamwork_invoice_delete`

Delete Invoice · Destructive

Delete an invoice.
Returns a status of OK when the invoice was deleted.
Use only when the invoice should be removed. Use teamwork_invoice_complete to close it instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `invoice_id` (`integer`, required): Id of the invoice to delete. Example: 3301.

Example input: `{"invoice_id":3301}`

### `teamwork_link_category_delete`

Delete Link Category · Destructive

Delete a link category.
Returns a status of OK when the category was deleted.
Use only when the category is no longer needed. Use teamwork_link_category_update to rename it instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `category_id` (`integer`, required): Id of the link category to delete. Example: 501.

Example input: `{"category_id":501}`

### `teamwork_link_delete`

Delete Link · Destructive

Delete a link.
Returns a status of OK when the link was deleted.
Use only when the link should be removed. Use teamwork_trashcan_restore to undo a delete.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `link_id` (`integer`, required): Id of the link to delete. Example: 3001.

Example input: `{"link_id":3001}`

### `teamwork_message_category_delete`

Delete Message Category · Destructive

Delete a message category.
Returns a status of OK when the category was deleted.
Use only when the category is no longer needed. Use teamwork_message_category_update to rename it instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `category_id` (`integer`, required): Id of the message category to delete. Example: 501.

Example input: `{"category_id":501}`

### `teamwork_message_delete`

Delete Message · Destructive

Delete a message together with its replies.
Returns a status of OK when the message was deleted.
Use only when the message should be removed. Use teamwork_message_archive to keep it but hide it, and teamwork_trashcan_restore to undo a delete.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `message_id` (`integer`, required): Id of the message to delete. Example: 6001.

Example input: `{"message_id":6001}`

### `teamwork_message_reply_delete`

Delete Message Reply · Destructive

Delete a reply on a message.
Returns a status of OK when the reply was deleted.
Use only when the reply should be removed from the discussion.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `reply_id` (`integer`, required): Id of the message reply to delete. Example: 6501.

Example input: `{"reply_id":6501}`

### `teamwork_milestone_delete`

Delete Milestone · Destructive

Delete a milestone.
Returns a status of OK when the milestone was deleted.
Use only when the milestone should be removed. Use teamwork_milestone_complete to close it instead, and teamwork_trashcan_restore to undo a delete.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `milestone_id` (`integer`, required): Id of the milestone to delete. Example: 4001.

Example input: `{"milestone_id":4001}`

### `teamwork_my_status_delete`

Delete My Status · Destructive

Delete a status message of the authenticated user.
Returns a status of OK when the status was deleted.
Use to clear a status. Find the id with teamwork_my_status_get.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `status_id` (`integer`, required): Id of the status to delete. Example: 9301.

Example input: `{"status_id":9301}`

### `teamwork_notebook_category_delete`

Delete Notebook Category · Destructive

Delete a notebook category.
Returns a status of OK when the category was deleted.
Use only when the category is no longer needed. Use teamwork_notebook_category_update to rename it instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `category_id` (`integer`, required): Id of the notebook category to delete. Example: 501.

Example input: `{"category_id":501}`

### `teamwork_notebook_delete`

Delete Notebook · Destructive

Delete a notebook.
Returns an empty success response when the notebook was deleted.
Use only when the notebook should be removed. Use teamwork_trashcan_restore to undo a delete.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `notebook_id` (`integer`, required): Id of the notebook to delete. Example: 2001.

Example input: `{"notebook_id":2001}`

### `teamwork_portfolio_board_delete`

Delete Portfolio Board · Destructive

Delete a portfolio board.
Returns a status of OK when the board was deleted.
Use only when the board is no longer needed. The projects on it are not deleted.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `board_id` (`integer`, required): Id of the portfolio board to delete. Example: 801.

Example input: `{"board_id":801}`

### `teamwork_portfolio_card_delete`

Remove Project from Portfolio Column · Destructive

Remove a project card from a portfolio column.
Returns a status of OK when the card was removed. The project itself is not deleted.
Use to take a project off a board.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `card_id` (`integer`, required): Id of the card to remove. Example: 1001.

Example input: `{"card_id":1001}`

### `teamwork_portfolio_column_delete`

Delete Portfolio Column · Destructive

Delete a portfolio column.
Returns a status of OK when the column was deleted.
Use only when the column is no longer needed.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `column_id` (`integer`, required): Id of the portfolio column to delete. Example: 901.

Example input: `{"column_id":901}`

### `teamwork_project_customfield_value_delete`

Delete Project Custom Field Value · Destructive

Remove a custom field value from a project.
Returns an empty success response when the value was removed.
Use to clear a value without deleting the field definition. Find the value id with the list tool.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.
- `value_id` (`integer`, required): Id of the stored value, which is the id field returned when listing or adding custom field values (not the id of the custom field itself). Example: 4724354.

Example input: `{"project_id":123456,"value_id":4724354}`

### `teamwork_project_delete`

Delete Project · Destructive

Delete a project and everything inside it (tasks, task lists, milestones, messages, files and time entries).
Returns a status of OK when the project was deleted. Teamwork moves it to the trash, where an admin can restore it for a limited time.
Use only when the whole project should be removed. Use teamwork_project_archive to keep it but hide it, and teamwork_trashcan_restore to undo a delete.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project to delete. Example: 123456.

Example input: `{"project_id":123456}`

### `teamwork_project_people_remove`

Remove People from Project · Destructive

Remove users from the member list of a project.
Returns a status of OK when the users were removed.
Use to take people off a project. Use teamwork_project_people_add to add them, and teamwork_project_people_list to see current members.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.
- `user_ids` (`string`, required): Comma-separated ids of the users to remove. Example: 101,102.

Example input: `{"project_id":123456,"user_ids":"<user_ids>"}`

### `teamwork_project_status_update_delete`

Delete Project Status Update · Destructive

Delete a project status update.
Returns a status of OK when the update was deleted.
Use only when the update should be removed from the project's history.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `update_id` (`integer`, required): Id of the status update to delete. Example: 8801.

Example input: `{"update_id":8801}`

### `teamwork_project_workflow_remove`

Remove Workflow from Project · Destructive

Remove a board workflow from a project.
Returns an empty success response when the workflow was removed.
Use to turn a project's board off. Find the workflow id with teamwork_project_workflows_list. Tasks keep their data but lose their stage placement.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `project_id` (`integer`, required): Id of the project. Example: 123456.
- `workflow_id` (`integer`, required): Id of the workflow to remove from the project. Example: 1101.

Example input: `{"project_id":123456,"workflow_id":1101}`

### `teamwork_risk_delete`

Delete Risk · Destructive

Delete a risk from a project's risk register.
Returns an empty success response when the risk was deleted.
Use only when the risk should be removed. Use teamwork_risk_update to change its details instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `risk_id` (`integer`, required): Id of the risk to delete. Example: 5101.

Example input: `{"risk_id":5101}`

### `teamwork_tag_delete`

Delete Tag · Destructive

Delete a tag.
Returns an empty success response when the tag was deleted.
Use only when the tag should be removed from the site.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `tag_id` (`integer`, required): Id of the tag to delete. Example: 3.

Example input: `{"tag_id":3}`

### `teamwork_tags_bulk_delete`

Delete Tags in Bulk · Destructive

Delete several tags from the Teamwork site at once, by id.
Returns an empty success response when the tags were deleted.
Use to clean up many tags in one call. Use teamwork_tag_delete for a single tag.

Read only: no. Destructive: yes. Idempotent (safe to retry): no.

Inputs:

- `tag_ids` (`array`, required): Ids of the tags to delete. Example: [3, 4, 5].

Example input: `{"tag_ids":[3,4,5]}`

### `teamwork_task_customfield_value_delete`

Delete Task Custom Field Value · Destructive

Remove a custom field value from a task.
Returns an empty success response when the value was removed.
Use to clear a value without deleting the field definition. Find the value id with the list tool.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): Id of the task. Example: 7654321.
- `value_id` (`integer`, required): Id of the stored value, which is the id field returned when listing or adding custom field values (not the id of the custom field itself). Example: 4724354.

Example input: `{"task_id":7654321,"value_id":4724354}`

### `teamwork_task_delete`

Delete Task · Destructive

Delete a task.
Returns an empty success response when the task was deleted.
Use only when the task should be removed. Use teamwork_task_complete to close a task instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `task_id` (`integer`, required): Id of the task to delete. Example: 7654321.

Example input: `{"task_id":7654321}`

### `teamwork_task_reminder_delete`

Delete Task Reminder · Destructive

Delete a reminder from a task.
Returns an empty success response when the reminder was deleted.
Use to cancel a reminder. Find the id with teamwork_task_reminders_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `reminder_id` (`integer`, required): Id of the reminder to delete. Example: 6101.
- `task_id` (`integer`, required): Id of the task. Example: 7654321.

Example input: `{"reminder_id":6101,"task_id":7654321}`

### `teamwork_tasklist_delete`

Delete Task List · Destructive

Delete a task list.
Returns an empty success response when the list was deleted.
Use only when the list should be removed.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `tasklist_id` (`integer`, required): Id of the task list to delete. Example: 9001.

Example input: `{"tasklist_id":9001}`

### `teamwork_time_entry_delete`

Delete Time Entry · Destructive

Delete a time entry.
Returns an empty success response when the entry was deleted.
Use only to remove logged time that was recorded in error.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `timelog_id` (`integer`, required): Id of the time entry to delete. Example: 300100.

Example input: `{"timelog_id":300100}`

### `teamwork_timer_delete`

Delete Timer · Destructive

Delete a timer without logging its time.
Returns an empty success response when the timer was deleted.
Use to discard a timer. Use teamwork_timer_complete to save its time as an entry instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `timer_id` (`integer`, required): Id of the timer to delete. Example: 5001.

Example input: `{"timer_id":5001}`

### `teamwork_workflow_delete`

Delete Workflow · Destructive

Delete a board workflow.
Returns an empty success response when the workflow was deleted.
Use only when the board is no longer needed. Use teamwork_project_workflow_remove to detach it from one project instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `workflow_id` (`integer`, required): Id of the workflow to delete. Example: 1101.

Example input: `{"workflow_id":1101}`

## Related

Other Project Management connectors ([all 40](/agentkit/connectors/?category=project-management)):

- [Notion](/agentkit/connectors/notion/): Scalekit connector, OAuth, 51 tools
- [Linear](/agentkit/connectors/linear/): Scalekit connector, OAuth, 62 tools
- [Airtable](/agentkit/connectors/airtable/): Scalekit connector, OAuth, 26 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
