Skip to main content
Glama

Teamwork MCP Server

Model Context Protocol server for Teamwork.com integration with Large Language Models

Go Report Card Go MCP

๐Ÿ“Œ Are you a Teamwork.com user wanting to connect AI tools to your Teamwork.com site right now? Jump straight to the Usage Guide for tokens, enabling MCP, and client configuration examples.

๐Ÿ“– Overview

This MCP (Model Context Protocol) server enables seamless integration between Large Language Models and Teamwork.com. It provides a standardized interface for LLMs to interact with Teamwork.com projects, allowing AI agents to perform various project management operations.

๐Ÿค– What is MCP?

Model Context Protocol (MCP) is an open protocol that standardizes how applications provide context to LLMs. This server describes all the actions available in Teamwork.com (tools) in a way that LLMs can understand and execute through AI agents.

Related MCP server: Teamwork MCP

โœจ Features

  • Multiple Transport Modes: HTTP and STDIO interfaces for different deployment scenarios

  • Secure Authentication: Bearer token and OAuth2 integration with Teamwork.com

  • Tool Framework: Extensible toolset architecture for adding new capabilities

  • Production Ready: Comprehensive logging, monitoring, and observability

  • Read-Only Mode: Optional restriction to read-only operations for safety

See the auto-generated Tool Reference for every create/read/update operation exposed across Projects, Desk, Spaces, and Chat, or browse the same catalogue with per-tool descriptions and a search filter at teamwork.github.io/mcp.

๐Ÿš€ Available Servers

This project provides three different ways to interact with the Teamwork.com MCP server:

๐Ÿ“ก HTTP Server

Production-ready HTTP server for cloud deployments and multi-client support.

๐Ÿ“– Full HTTP Server Documentation

Quick start:

TW_MCP_SERVER_ADDRESS=:8080 go run cmd/mcp-http/main.go

๐Ÿ’ฌ STDIO Server

Direct STDIO interface for desktop applications and development environments.

๐Ÿ“– Full STDIO Server Documentation

Quick start:

TW_MCP_BEARER_TOKEN=your-token go run cmd/mcp-stdio/main.go

๐Ÿ› ๏ธ HTTP CLI

Command-line tool for testing and debugging MCP server functionality.

๐Ÿ“– Full HTTP CLI Documentation

Quick start:

go run cmd/mcp-http-cli/main.go -mcp-url=https://mcp.example.com list-tools

๐Ÿ“‹ Prerequisites

  • Go 1.27 or later

  • Valid Teamwork.com API credentials (bearer token or OAuth2 setup)

๐Ÿงช Development & Testing

Running Tests

# Run all tests
go test ./...

# Run specific package tests
go test ./internal/twprojects/

MCP Inspector

For debugging purposes, use the MCP Inspector tool:

NODE_EXTRA_CA_CERTS=letsencrypt-stg-root-x1.pem npx @modelcontextprotocol/inspector node build/index.js
IMPORTANT

Note: The NODE_EXTRA_CA_CERTS environment variable is required when using OAuth2 authentication with the Let's Encrypt certification authority. Download the certificate here.

๐Ÿ—๏ธ Architecture

โ”œโ”€โ”€ cmd/
โ”‚   โ”œโ”€โ”€ mcp-http/          # HTTP server implementation
โ”‚   โ”œโ”€โ”€ mcp-stdio/         # STDIO server implementation
โ”‚   โ”œโ”€โ”€ mcp-http-cli/      # CLI tool for testing via HTTP
โ”‚   โ”œโ”€โ”€ mcp-test/          # Walks tool handlers against a real site
โ”‚   โ”œโ”€โ”€ mcp-tokens/        # Token-cost report for the tool surface
โ”‚   โ””โ”€โ”€ docs-gen/          # Generates the tool reference (Markdown + GitHub Pages)
โ”œโ”€โ”€ pkg/                   # Importable by other MCP servers built on this one
โ”‚   โ”œโ”€โ”€ auth/              # Authentication helpers (bearer & OAuth2 token handling)
โ”‚   โ”œโ”€โ”€ cli/               # -toolsets flag parsing
โ”‚   โ”œโ”€โ”€ config/            # Configuration management (env, flags), MCP server setup
โ”‚   โ”œโ”€โ”€ helpers/           # Shared utility functions (errors, link helpers, tool parsing)
โ”‚   โ”œโ”€โ”€ request/           # HTTP request primitives / Teamwork API wiring
โ”‚   โ”œโ”€โ”€ testutil/          # Product-neutral test mocks
โ”‚   โ”œโ”€โ”€ toolsets/          # Tool framework and registration logic
โ”‚   โ””โ”€โ”€ twctx/             # Per-request values derived from the bearer token
โ”œโ”€โ”€ internal/              # This server's own tools, not importable elsewhere
โ”‚   โ”œโ”€โ”€ twprojects/        # Teamwork project/domain tools (tasks, tags, timers, etc.)
โ”‚   โ”œโ”€โ”€ twdesk/            # Teamwork Desk tools (tickets, customers, etc.)
โ”‚   โ”œโ”€โ”€ twspaces/          # Teamwork Spaces tools (spaces, pages, etc.)
โ”‚   โ””โ”€โ”€ twchat/            # Teamwork Chat tools (conversations, messages)
โ”œโ”€โ”€ examples/              # Usage & integration examples (LangChain Node/Python)
โ”œโ”€โ”€ docs/usage/            # End-user setup & connection guide
โ”œโ”€โ”€ Makefile               # Common developer tasks
โ”œโ”€โ”€ Dockerfile             # Container build configuration
โ”œโ”€โ”€ CODE_OF_CONDUCT.md     # Community guidelines
โ”œโ”€โ”€ CONTRIBUTING.md        # Contribution guide
โ””โ”€โ”€ SECURITY.md            # Security policy

Available Tools

213 tools
twchat-get_conversationA
Read-only
Inspect

Get a single Teamwork Chat conversation by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
conversation_idYesThe ID of the conversation to retrieve.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds only the 'Teamwork Chat conversation' scope, which is context but not new behavioral disclosure beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that front-loads the action and resource. Every word earns its place, with no redundant or vague phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple get-by-ID tool with one parameter, full schema coverage, and clear annotations. The description is sufficient for an agent to understand what the tool does and how to invoke it correctly, given the low complexity and strong structured metadata.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the parameter description already explains conversation_id as 'The ID of the conversation to retrieve.' The tool description's 'by ID' adds no additional meaning beyond the schema, matching the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'Teamwork Chat conversation' with a specific scope ('single', 'by ID'). This distinguishes it from sibling tools like twchat-list_conversations, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'single ... by ID' clearly implies when to use this tool (when you have a known conversation ID) and differentiates from listing all conversations. However, it does not explicitly name alternative tools or provide exclusions, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twchat-get_current_userA
Read-only
Inspect

Get the current authenticated Teamwork Chat user, including identity, counts (unread conversations/messages, mentions), and settings.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and destructiveHint=false, so the description need not restate safety. It adds value by specifying the output categories (identity, unread counts/mentions, settings), which gives the agent a better sense of what to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no wasted words. It puts the verb and resource first, then enumerates the key output categories in a compact list.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of explaining return values, and it does so by listing identity, counts, and settings. It could have mentioned pagination or exact formatting, but for a simple read-only profile endpoint, the information is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema is empty (100% covered), so there are no parameter semantics to explain. The description correctly focuses on the return payload, which is the only thing the agent needs to understand for invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and names the exact resource ('current authenticated Teamwork Chat user'), and it lists returned content (identity, counts, settings). This distinguishes it from sibling chat tools like list_conversations, list_messages, and list_people, which target different resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'current authenticated' implies the tool is for accessing the caller's own chat profile, which provides clear context for when to use it. However, it does not explicitly name alternatives or state when not to use it, so it falls slightly short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twchat-get_or_create_dmAInspect

Get the 1:1 direct-message conversation with a person, creating it if it does not exist yet. Returns the conversation (use its id with send_message). Use list_people to find user_id. The authenticated user cannot be the target: naming your own user id is rejected.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesThe ID of the person to get the direct-message conversation with. Must be somebody other than the authenticated user; see get_current_user.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses the creation side effect, the returned conversation's downstream use, and the self-target rejection edge case. These are meaningful behavioral details that help an agent predict outcomes and avoid errors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core behavior, followed by return usage, parameter lookup, and the key exclusion. Every sentence is informative with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema, the description covers purpose, side effects, return value usage, parameter sourcing, and a critical rejection case. The agent has enough information to call the tool successfully.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents user_id and its constraint at 100% coverage, so the baseline is 3. The description adds extra value by telling the agent how to resolve the parameter via list_people and explicitly warning that the authenticated user's own id is rejected.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: get or create a 1:1 direct-message conversation with a person. It distinguishes itself from siblings like send_message and get_conversation by emphasizing both the retrieval and creation behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear contextual guidance by telling the agent to use list_people to find user_id and to use the returned conversation id with send_message. It does not explicitly name when to prefer this over twchat-get_conversation, but the create-if-missing semantics make the choice reasonably clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twchat-list_conversationsA
Read-only
Inspect

List Teamwork Chat conversations the current user is a member of.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoSort order for the returned conversations.
typeNoFilter by conversation type: "rooms" for group/channel conversations, "pair" for 1:1 direct messages.
statusNoFilter by conversation status.
page_limitNoNumber of conversations to return (max 10).
page_offsetNoThe index position to start retrieving results from (not a page number).
search_termNoA search term to filter conversations by title.
include_message_dataNoInclude the latest message in each conversation.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds the membership constraint (only conversations the current user belongs to), which is useful behavioral context. It does not disclose pagination limits (page_limit max 10), default sort, or return shape, but with annotations carrying the safety burden, this level is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single 12-word sentence with zero waste. The verb and resource are front-loaded, and the scope qualifier packs meaningful discrimination into the shortest possible form.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list operation with 100% schema coverage and safety annotations, the description covers the essential purpose and scope. The only gaps are unpaginated return-shape details (no output schema exists) and the lack of sibling routing, neither of which is critical for a straightforward list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and all 7 parameters (sort, type, status, page_limit, page_offset, search_term, include_message_data) have descriptive schema text including full enum values. The description adds no parameter-level meaning, which is fine because the schema fully documents them โ€” baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and a specific resource ('Teamwork Chat conversations') with a clear scope qualifier ('the current user is a member of'). This scope distinguishes it from sibling tools like twchat-get_conversation (single conversation) and twchat-list_messages (messages within a conversation), so an agent can identify it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The membership scope implies the usage context โ€” this tool returns the current user's own conversations rather than all conversations in the workspace. However, it provides no explicit guidance about when to prefer it over siblings like twchat-get_conversation or twchat-list_messages, nor any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twchat-list_messagesA
Read-only
Inspect

List messages within a Teamwork Chat conversation. Requires conversation_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
page_sizeNoNumber of messages per page (1-200).
search_termNoA search term to filter messages by text content.
created_afterNoReturn messages created after this time. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
created_beforeNoReturn messages created before this time. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
conversation_idYesThe ID of the conversation to read messages from.
after_message_idNoReturn messages newer than this message ID (cursor).
before_message_idNoReturn messages older than this message ID (cursor).

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe read-only nature is covered. The description adds no behavioral detail beyond the listing action, such as pagination behavior, default ordering, or how cursor parameters affect results. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the core purpose and the essential requirement. There is no filler or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema and annotations cover parameters and safety, but the description lacks guidance on when to choose this tool over similar list tools, how pagination works, or what the returned message objects contain. It is functional for invocation with the required ID but leaves several contextual gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and all parameters are individually documented, including detailed examples for created_after and created_before. The description only reiterates that conversation_id is required, which the schema already states, so it adds minimal semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'List messages within a Teamwork Chat conversation.' It clearly identifies the tool's scope and the required conversation_id, distinguishing it from conversation-level tools like twchat-get_conversation and twchat-list_conversations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for listing messages when you already have a conversation_id, but it does not explicitly state when to use this tool versus alternatives, nor does it mention how to obtain a conversation_id using a sibling tool. Usage context is present but not fully developed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twchat-list_peopleA
Read-only
Inspect

List people in the Teamwork Chat installation. Useful for resolving names to user IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_limitNoNumber of people to return.
page_offsetNoThe index position to start retrieving results from (not a page number).
search_termNoA search term to filter people by name or email.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a safe read operation (readOnlyHint=true, destructiveHint=false). The description adds the scope of the operation ('Teamwork Chat installation') but does not describe pagination behavior, whether inactive people are included, or result sizing, so additional behavioral context is limited.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler. The action is front-loaded and the second sentence justifies the tool's purpose without repeating the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with three optional parameters and no output schema, the description is nearly complete: it explains what is listed, where, and why. It could mention that the result is a list of person objects with IDs, but the given use case already implies the relevant output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already fully documented in the input schema. The description's use case hints at search_term for name/email lookup but adds no parameter-level information beyond the schema, matching the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: listing people in the Teamwork Chat installation, and adds a concrete use case (resolving names to user IDs). It is distinguishable from sibling tools like twchat-get_current_user and user-list tools in other domains, though it does not explicitly name an alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Useful for resolving names to user IDs' gives a clear reason to choose this tool when an agent needs to map names to IDs. It does not provide explicit when-not-to-use guidance or name alternatives, so it misses the top score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twchat-send_dmAInspect

Send a direct message to a person, resolving (or creating) the 1:1 conversation automatically. Requires user_id and body. Use list_people to find user_id. The authenticated user cannot be the recipient: naming your own user id is rejected and nothing is sent, so report a summary in the conversation instead of messaging yourself in chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesThe message text. Supports Markdown.
user_idYesThe ID of the person to send the direct message to. Must be somebody other than the authenticated user; see get_current_user.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral details beyond the annotations: it auto-creates/resolves the conversation and explicitly says a self-recipient request is rejected with nothing sent. Since annotations already signal non-readonly and non-idempotent behavior, the extra context covers the most important operational nuance.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences cover the action, required parameters, lookup hint, and a critical failure case without wasted words. The most important operational detail (auto-resolving the conversation) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, complete schema, and existing annotations, the description covers the key operational behavior and edge case. It does not describe the success return value, but the absence of an output schema is partly mitigated by the straightforward send action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are well documented in the schema. The description adds a cross-tool discovery hint ('Use list_people to find user_id') but otherwise mostly restates the required parameters, so it does not substantially elevate meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Send a direct message to a person') and a distinct behavioral feature ('resolving (or creating) the 1:1 conversation automatically'). This clearly differentiates it from sibling tools like twchat-send_message by focusing on person-to-person DM and automatic conversation resolution.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives useful guidance such as 'Use list_people to find user_id' and explains the self-recipient rejection case. However, it does not explicitly compare this tool to alternatives like twchat-send_message or state when one should be preferred over the other, so the usage context is implied rather than fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twchat-send_messageBInspect

Send a message to a Teamwork Chat conversation. Requires conversation_id and body.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesThe message text. Supports Markdown.
conversation_idYesThe ID of the conversation to post the message to.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate a write operation (readOnlyHint=false), and the description adds that it requires mandatory parameters and performs a send action. However, it does not disclose any behavioral details such as potential failures, rate limits, or side effects. The description adds minimal context beyond the annotations, so a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently states the tool's purpose and required parameters. Every word earns its place, with no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (two well-documented parameters, no output schema, minimal annotations), the description covers the core action and inputs. However, it lacks explicit differentiation from the DM tool and fails to mention any post-send behavior or error conditions, which leaves it slightly incomplete for a fully contextual understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides full descriptions for both parameters (conversation_id as integer, body as Markdown string). The description only restates that they are required, adding no semantic value beyond the schema. With 100% schema coverage, the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Send a message') and the target resource ('Teamwork Chat conversation'), and it explicitly mentions the required parameters. However, it does not explicitly distinguish this tool from the sibling `twchat-send_dm`, so it gets a 4 instead of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as `twchat-send_dm` or when not to use it. There is no explicit context or exclusion, so the agent receives no usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-create_companyCInspect

Create Desk company.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoThe kind of the company.
nameYesThe name of the company.
noteNoThe note for the company.
detailsNoThe details of the company.
domainsNoThe domains for the company.
websiteNoThe website of the company.
industryNoThe industry of the company.
permissionNoThe permission level of the company.
descriptionNoThe description of the company.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral disclosure beyond the annotations; it simply repeats the creation action. It does not mention auth requirements, duplicate handling, side effects, or return behavior. The annotations already indicate a non-read-only, non-destructive, non-idempotent operation, so there is no contradiction, but the description itself provides little transparency value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short and contains no redundant wording. However, it is so minimal that it approaches under-specification rather than being an appropriately sized definition; there is no contextual structure or detail beyond the single creation statement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The input schema is rich and fully documented, and the annotations clarify the basic safety profile, so the description plus schema is minimally sufficient for a basic creation call. However, there is no output schema, no mention of expected return values, and no usage differentiation from the large set of sibling tools, leaving meaningful gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema adequately documents all parameters including enums and required fields. The tool description contributes no parameter-level semantics, so the baseline of 3 applies because the schema carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the action clearly: create a Desk company. The word 'Desk' distinguishes it from twprojects-create_company, and the verb 'create' separates it from twdesk-update_company. It is terse and does not explain what a company represents, but the core purpose is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives. The description does not mention that it is for new companies, that twdesk-update_company is for existing companies, or that twprojects-create_company is a different product. An agent must infer usage entirely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-create_customerCInspect

Create customer.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoThe email of the customer.
notesNoThe notes of the customer.
phoneNoThe phone number of the customer.
mobileNoThe mobile number of the customer.
addressNoThe address of the customer.
jobTitleNoThe job title of the customer.
lastNameNoThe last name of the customer.
extraDataNoThe extra data of the customer.
firstNameNoThe first name of the customer.
facebookURLNoThe Facebook URL of the customer.
linkedinURLNoThe LinkedIn URL of the customer.
organizationNoThe organization of the customer.
twitterHandleNoThe Twitter handle of the customer.

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a mutating, non-idempotent operation, and the description merely says 'Create customer,' adding no behavioral context beyond that. It does not mention what happens on duplicate data, whether any fields are effectively required, or what response to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short and contains no verbose filler, but it is under-specified rather than efficiently informative. A single sentence that essentially restates the tool name does not earn high marks for structure, though it is at least clear and direct.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create operation with 13 optional-looking parameters and no output schema, the description provides almost no context an agent needs to call it correctly. It does not explain which fields should be supplied, whether a name or email is expected, or what a successful creation returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 13 parameters have schema descriptions such as 'The email of the customer' and 'The phone number of the customer,' so the schema already provides full parameter coverage. The tool description adds no parameter-specific meaning, which keeps this at the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'Create customer.' This unambiguously identifies the operation as creating a customer record. It does not, however, add any distinguishing detail beyond the tool name itself, such as what a customer is or which sibling it differs from.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives like twdesk-update_customer, twdesk-get_customer, twdesk-list_customers, or twdesk-create_company. There is no mention of prerequisites, context, or cases where another tool should be preferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-create_fileAInspect

Upload file. Attach the returned ID to tickets or messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesThe content of the file as a base64-encoded string.
nameYesThe name of the file.
mimeTypeYesThe MIME type of the file.
dispositionNoThe disposition of the file.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a non-read, non-idempotent, non-destructive operation; the description adds that the tool returns an ID and that the file is intended for attachment to tickets or messages. It does not surface additional constraints like upload size limits or authentication requirements, but the annotations lower the bar.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and immediately followed by the key downstream purpose. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple upload tool with a full input schema and no output schema, the description covers the essential missing piece: the call returns an ID to use for attachment. It is slightly terse about the exact response shape, but enough for an agent to invoke and use the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented with meaningful descriptions. The tool description adds no parameter-specific detail beyond that coverage, so it stays at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the specific action 'Upload file' and the resource type, then adds the desk-specific purpose ('Attach the returned ID to tickets or messages'). This distinguishes it from sibling twprojects-create_file and other project-upload tools even without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Attach the returned ID to tickets or messages' gives clear context for when this tool is appropriate. It does not explicitly list exclusions or alternative upload tools, so it falls short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-create_helpdoc_articleCInspect

Create a new help doc article.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesThe title of the article.
siteIDYesThe ID of the help doc site to create the article in. Use twdesk-list_helpdoc_sites to discover.
statusNoPublication status of the article (e.g. "published", "draft").
contentsNoThe body content of the article.
isPrivateNoSet to true to make the article private.
descriptionNoA short description / summary of the article.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description repeats the create action already implied by the name and annotations (readOnlyHint=false, idempotentHint=false). It does not disclose any additional behavioral traits such as required permissions, uniqueness constraints, side effects, or rate limits. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no fluff and front-loads the action. However, it is so minimal that it essentially restates the tool name, only adding the word 'new'.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create operation with 6 parameters and no output schema, the description provides no information about return values, required workflow, or expected result. The only meaningful context comes from the schema and annotations, which is inadequate for an agent to fully understand invocation context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all 6 parameters with descriptions, giving 100% schema coverage, so the baseline is 3 despite the tool description adding no parameter-level meaning. The siteID parameter description provides extra discovery guidance, but that is schema content rather than tool description content.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and object: 'Create a new help doc article.' It clearly differentiates from sibling tools like twdesk-update_helpdoc_article or twdesk-get_helpdoc_article via the verb 'create'. However, it adds no specifics about what article creation entails or any scope, stopping short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to choose this tool over alternatives such as twdesk-update_helpdoc_article or twdesk-search_helpdoc_articles. There is no mention of prerequisites, exclusions, or typical use cases. The only usage pointer ('Use twdesk-list_helpdoc_sites to discover.') lives in the siteID parameter schema, not in the tool description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-create_priorityBInspect

Create ticket priority.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the priority.
colorNoThe color of the priority.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already indicate a write operation (readOnlyHint=false) and that the tool is not destructive or idempotent. The description is consistent with those annotations but adds no extra behavioral context such as uniqueness constraints, side effects, or required permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence with no filler or redundancy. It is appropriately compact for a simple create tool with two parameters, though it is terse enough that it relies heavily on the schema and tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple create operation with one required and one optional parameter, the description plus schema is nearly sufficient. However, there is no output schema, and the description does not clarify return behavior or the expected format for 'color', leaving minor gaps for the agent to resolve.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description itself adds no parameter-level meaning; the schema already describes 'name' and 'color', though 'color' lacks an expected format or example.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Create') and a specific resource ('ticket priority'), which distinguishes it from read-only and update siblings like twdesk-get_priority, twdesk-list_priorities, and twdesk-update_priority. It is clear but lacks any additional context about what a ticket priority is, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The imperative phrasing implies this tool is for creating a new ticket priority, and the sibling tool names naturally suggest alternatives for reading or updating priorities. However, there is no explicit when-to-use guidance, no exclusions, and no mention of prerequisites or related tools to prefer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-create_statusCInspect

Create ticket status.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the status.
colorNoThe color of the status.
displayOrderNoThe display order of the status.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds little beyond the annotations: it repeats the creation action and adds the 'ticket' domain qualifier. It does not disclose whether duplicate names are rejected, whether color or displayOrder have defaults, or what the API returns after creation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single economical sentence with no filler and the key action/resource are front-loaded. It is under-specified in behavioral terms, but this is a conciseness issue rather than verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple create operation with fully documented parameters, this is minimally adequate. However, with no output schema, the description does not clarify return behavior, side effects, or uniqueness constraints, leaving moderate gaps for an agent selecting or invoking the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents name, color, and displayOrder completely. The description adds no parameter-level meaning, but the schema fully carries that burden, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('create') and resource ('ticket status'), which is specific enough to distinguish from sibling tools like twdesk-create_priority or twdesk-create_ticket_type. It does not explicitly contrast with update_status or list_statuses, but the core purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as twdesk-update_status for modifying statuses or twdesk-list_statuses for viewing existing ones. An agent must infer usage entirely from the tool name and sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-create_tagCInspect

Create Desk tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the tag.
colorNoThe color of the tag.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description simply restates that a tag is created, which is already implied by readOnlyHint=false. It adds no context about uniqueness constraints, required permissions, idempotency, or effects on existing tickets. There is no contradiction with annotations, but no additional behavioral disclosure either.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with zero wasted words, and the 'Desk' qualifier is useful for disambiguation. However, it is so skeletal that it provides little structural or orienting information beyond the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple create operation with a fully documented 2-parameter schema and annotations, this is minimally workable. But with no output schema and no mention of behavior or return value, an agent gets little help beyond the bare operation and parameter schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters (name and color) already have clear descriptions in the input schema. The tool description adds no parameter-level context, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation ('Create') and resource ('Desk tag'), and the 'Desk' qualifier helps distinguish it from twprojects-create_tag and twspaces-create_tags. However, it mostly mirrors the tool name without adding domain context about what a Desk tag is used for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to create a new tag versus reuse an existing one, nor any reference to sibling tools like twdesk-create_status or twdesk-create_priority. The usage context is only implied by the verb 'Create'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-create_ticketC
Destructive
Inspect

Create ticket.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoEmail addresses to CC.
bccNoEmail addresses to BCC.
bodyYesThe body of the ticket.
tagsNoTags to associate with the ticket. Use twdesk-list_tags to discover.
filesNoFile IDs to attach. Use twdesk-create_file to upload.
typeIdNoTicket type. Use twdesk-list_ticket_types to discover.
agentIdNoAgent the ticket is assigned to. Use twdesk-list_users to discover.
inboxIdYesInbox of the ticket. Use twdesk-list_inboxes to discover.
subjectYesThe subject of the ticket.
statusIdNoStatus of the ticket. Use twdesk-list_statuses to discover.
customerIdNoCustomer of the ticket. Use twdesk-list_customers to discover.
priorityIdNoPriority of the ticket. Use twdesk-list_priorities to discover.
customerEmailNoCustomer email; required when customerId is not given. Existing customers are matched, otherwise a new customer is created.
notifyCustomerNoSet to true if the customer should be sent a copy of the ticket.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral disclosure beyond the annotations, which already mark this as non-read-only and destructive. It does not mention side effects such as customer auto-creation or customer notification, though these are partially documented in the schema. No contradiction exists, but no extra context is provided.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short and readable, but it is under-specified rather than appropriately concise. Despite the tool having 14 parameters and a destructive annotation, the entire description is only two words and provides no context, usage, or side-effect information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 14 parameters, a destructive/open-world annotation, and no output schema, a two-word description leaves significant context unexplained, such as when creating a ticket is appropriate and what side effects may occur. The rich schema partially compensates, but the description alone is not enough for an agent to invoke the tool confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 14 parameters have schema descriptions, including cross-tool references such as twdesk-list_tags and twdesk-list_inboxes, as well as the conditional rule for customerEmail versus customerId. The description itself contributes no parameter semantics, but because schema description coverage is 100%, the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Create ticket.' is a direct restatement of the tool name and the annotated title 'Create Ticket', adding no further scope. It identifies the verb and resource but does not distinguish this create action from related ticket operations such as twdesk-update_ticket or twdesk-reply_ticket beyond the verb already present in the name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to choose this tool over related ticket operations; it does not mention update_ticket, reply_ticket, or any prerequisite like needing an inbox. The only context is implied by the word 'Create', which is insufficient for an agent deciding among the ticket-related siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-create_ticket_typeCInspect

Create ticket type.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the ticket type.
displayOrderNoThe display order of the type.
enabledForFutureInboxesNoWhether the type is enabled for future inboxes.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description only says 'Create ticket type' and adds no behavioral context beyond what the annotations already imply. It does not mention side effects, required permissions, uniqueness constraints, or how the created ticket type interacts with other resources. It is consistent with the annotations, so there is no contradiction, but it provides no additional transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It is appropriately terse for such a simple create operation, though it is so minimal that it provides little value beyond the tool name and title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple create operation with 3 parameters and full schema coverage, the description is minimally viable. However, it lacks usage guidance, behavioral notes, and any indication of what a successful creation returns or affects, so an agent gets just enough to proceed but not enough to be fully confident.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already well documented in the input schema. The description itself does not add any parameter-level meaning, which matches the baseline expectation when the schema carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation (create) and the resource (ticket type), so an agent can tell this creates a new ticket type rather than merely reading one. However, it does not distinguish itself from sibling tools like twdesk-update_ticket_type or twdesk-get_ticket_type beyond the verb, and it closely mirrors the title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives such as twdesk-update_ticket_type, twdesk-list_ticket_types, or twdesk-get_ticket_type. There is no mention of prerequisites, context, or exclusions, leaving the agent to infer appropriate usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-get_companyA
Read-only
Inspect

Get Desk company (customer organization).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the company to retrieve.
fieldsNoSparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond 'Get', but it does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the action and resource, with the parenthetical earning its place by disambiguating company from customer. There is no wasted wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-by-id tool, the required id and optional fields are fully documented in the schema and annotations confirm read-only behavior. It does not explicitly state return shape or not-found behavior, but the get semantics and schema make the primary invocation case well-covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: both id and fields are documented, including the sparse fieldset behavior. The description itself adds no parameter-specific meaning, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get), resource (Desk company), and a clarifying parenthetical (customer organization). This helps distinguish it from sibling tools like twdesk-get_customer and twprojects-get_company despite the similar get_* naming.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus twdesk-list_companies or twdesk-get_customer. The only usage signal is the implicit 'Get' plus the required id parameter, which is not sufficient guidance for an agent choosing among many sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-get_customerC
Read-only
Inspect

Get customer.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the customer to retrieve.
fieldsNoSparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description contributes no behavioral detail beyond the annotations: readOnlyHint=true and destructiveHint=false already establish it as a safe read. It does not mention not-found behavior, response shape, authentication needs, or sparse-field semantics. There is no contradiction with the annotations, but the description adds nothing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two words are under-specification rather than useful conciseness; the sentence 'Get customer.' repeats the name/title and earns no space in the definition. There is no front-loaded context or structure that helps an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The definition lacks an output schema and the description does not describe the returned customer object, failure cases, or how this fetch relates to list_customers. Annotations and schema cover parameter and safety basics, but the overall definition is too spare for confident invocation in a toolset with hundreds of siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage: id and fields are fully documented, including the sparse-fieldset meaning of fields. The description adds nothing about parameters, but per the baseline for high schema coverage, this is acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description 'Get customer.' is a verbatim restatement of the tool name and title, so it provides no additional clarifying information. It names the resource but does not distinguish single-record retrieval from twdesk-list_customers or other twdesk-get_* lookups. This is tautological rather than informative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, prerequisites, or alternatives. Among the many siblings, twdesk-list_customers exists for finding customers and twdesk-get_company/get_user fetch related entities, but an agent cannot infer from the description which one to select. No exclusions or context cues are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-get_helpdoc_articleA
Read-only
Inspect

Get a help doc article by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the help doc article to retrieve.
fieldsNoSparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to repeat safety behavior. It adds no extra behavioral context (e.g., 404 behavior, auth, or sparse-field effects), but there is no contradiction and the read-only nature is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single clear sentence states the operation, resource, and required input with no filler. The key scoping information ('by ID') is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter getter with read-only annotations and no output schema, the description plus schema is sufficient to call the tool correctly. A small gap is the lack of any mention of what the response contains, but this is largely inferable for a 'get' tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so id and fields are already fully documented. The description adds no additional parameter meaning, which is acceptable given that the schema carries the burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get'), names the exact resource ('help doc article'), and states the retrieval criterion ('by ID'). This clearly distinguishes it from sibling tools like twdesk-search_helpdoc_articles and twdesk-get_helpdoc_site.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'by ID' implies this tool is appropriate when the caller already has a help doc article ID, but there is no explicit guidance about when to prefer it over search_helpdoc_articles or how to obtain an ID. No alternatives are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-get_helpdoc_siteA
Read-only
Inspect

Get a help doc site (knowledge base) by ID, including its subdomain, branding and article counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the help doc site to retrieve.
fieldsNoSparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a safe read-only operation (readOnlyHint=true, destructiveHint=false). The description adds some context by identifying the resource as a knowledge base and noting the returned fields, but it does not disclose additional behavioral traits like authorization requirements or response limitations. No contradiction with annotations found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence that front-loads the action and resource, then adds the most useful response details. Every part earns its place with no redundant or vague filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-get tool with complete schema coverage and read-only annotations, this description is largely sufficient. It names key return fields despite no output schema. It could be slightly more complete by pointing to list_helpdoc_sites for ID discovery, but that is not essential for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline applies. The id parameter is adequately documented in the schema, and the fields parameter is already well explained as a sparse fieldset. The description adds no new parameter-level meaning beyond restating that retrieval is by ID.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation: 'Get a help doc site (knowledge base) by ID' and names what the response includes ('subdomain, branding and article counts'). This differentiates the tool from sibling getters like get_helpdoc_article and listing/search tools by both resource type and lookup method.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage is implied: use this when you have a help doc site ID and need its details. However, it does not explicitly mention alternatives such as twdesk-list_helpdoc_sites for discovery when the ID is unknown, nor does it state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-get_inboxC
Read-only
Inspect

Get inbox.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the inbox to retrieve.
fieldsNoSparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral context beyond the annotations, which already declare readOnlyHint=true and destructiveHint=false. There is no mention of return shape, sparse fieldset behavior, or any side effects, leaving the annotations to carry all the weight.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at three words, with no fluff. However, it is under-specified and does little more than echo the title, so it is not a well-earned sentence despite its brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only getter with a clear schema and annotations, the bare description is arguably workable. Still, it lacks any note about the required ID, the distinction from list_inboxes, or the response contents, leaving minor gaps for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with id and fields both clearly documented. The description itself says nothing about parameters, so it does not add value beyond the schema; the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get inbox.' clearly states the verb and resource, making the core operation obvious. However, it merely restates the tool name and title and does not differentiate from sibling tools like twdesk-list_inboxes or other get_* tools, so it misses the top tier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage guidance is provided. The description gives no indication of when to use this tool versus alternatives, nor does it mention that an inbox ID is required. An agent must infer usage entirely from the schema and naming conventions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-get_priorityB
Read-only
Inspect

Get ticket priority.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the priority to retrieve.
fieldsNoSparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds no behavioral context beyond the annotations โ€” no mention of not-found behavior, return shape, or error handling โ€” but it also does not contradict them, so a mid-score is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single five-word sentence with zero filler, and the core purpose is front-loaded. The brevity is efficient but borders on under-specification rather than deliberate compression, since usage and behavioral guidance are entirely absent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity get-by-id tool with two fully documented parameters and safety annotations, the definition is minimally adequate. Gaps remain: no guidance distinguishing it from list_priorities, no description of what is returned (no output schema exists), and no indication of behavior for invalid IDs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the schema fully documents `id` ('The ID of the priority to retrieve') and `fields` ('Sparse fieldset... Omit to receive all fields'). The description adds no parameter-level meaning, but with full schema coverage, the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get') and resource ('ticket priority'), making the purpose unambiguous as a single-entity retrieval operation. It is clear but does not differentiate itself from the many sibling get_* tools (e.g., twdesk-get_status, twdesk-get_ticket_type) beyond the resource name, which is already evident from the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives such as twdesk-list_priorities, twdesk-get_ticket, or the other get_* siblings. No context is provided about needing a known priority id or when a sparse fieldset would be appropriate, leaving selection entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-get_statusC
Read-only
Inspect

Get ticket status.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the status to retrieve.
fieldsNoSparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral detail beyond the word 'Get.' Annotations already indicate readOnlyHint=true and destructiveHint=false, but the description contributes no additional context such as authentication requirements, response shape, pagination, or idempotency implications. No contradiction exists, but the description does not enrich the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no wasted words, which is concise. However, it is under-specified: it omits any context about when to use it, how it relates to sibling tools, or what output to expect. It is not tautological, but it is minimal rather than appropriately structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-by-id tool, the schema covers the parameters and annotations cover the safety profile. Yet the description fails to disambiguate from list_statuses or get_ticket, and with no output schema it would benefit from at least noting that it returns a single status object. It is adequate for a trivial call but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with id described as 'The ID of the status to retrieve' and fields as a sparse fieldset. The description itself adds no parameter-level meaning, but the schema fully carries that burden, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb and resource: 'Get ticket status.' It clearly names the domain (ticket) and the object (status), and distinguishes from list_statuses by implying a single resource. However, it does not explicitly differentiate from get_ticket, which could also return status information, so it is clear but lacks sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as twdesk-list_statuses or twdesk-get_ticket. There are no conditions, exclusions, or references to sibling tools, leaving the agent to infer usage from the name and schema alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-get_tagB
Read-only
Inspect

Get Desk tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the tag to retrieve.
fieldsNoSparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe-read nature is covered by structured metadata. The description adds no further behavioral context, such as sparse fields behavior or error semantics, but it does not contradict the annotations either.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three words, no filler, and the core operation is front-loaded. For a simple get-by-ID tool, this is appropriately sized and does not waste an agent's attention.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema and annotations make the tool callable, but the description provides no return-shape information despite the absence of an output schema, and it does not mention how this relates to list or update tag operations. It is adequate but sparse for a complete picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both id and fields clearly documented in the input schema. The description itself adds no parameter-level detail, but the baseline of 3 is appropriate because the schema carries the informational load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get Desk tag' uses a clear verb and resource, and the 'Desk' qualifier helps distinguish it from sibling tag-getters in other domains. However, it does not explain what a Desk tag is or explicitly state that this retrieves a single tag by ID, so it falls short of a fully differentiated 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives like twdesk-list_tags or even twprojects-get_tag. The required id parameter implies a single-object lookup, but the description itself provides no context for selection, exclusions, or alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-get_ticketC
Read-only
Inspect

Get ticket.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the ticket to retrieve.
fieldsNoSparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds no behavioral context such as error behavior, authentication needs, idempotency, or return format. There is no contradiction with annotations, but the description contributes no additional transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, but this is under-specification rather than effective conciseness. It contains no useful structure or front-loaded information beyond repeating the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a retrieval tool with no output schema, the description leaves out important context such as what is returned, how to handle the optional fields parameter, and when to prefer this over twdesk-search_tickets. The schema helps with parameters, but the description alone is not complete enough for confident selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for both parameters: id and fields. The description itself adds no parameter semantics, but the schema already explains what each parameter does, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description, 'Get ticket.', is essentially identical to the tool name/title and adds no clarifying detail. It names the resource but does not differentiate this retrieval action from sibling tools like twdesk-search_tickets or twdesk-get_ticket_type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives. The description does not mention that this retrieves a single ticket by ID, nor does it contrast with twdesk-search_tickets or other get_* tools, so the agent is left without selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-get_ticket_typeC
Read-only
Inspect

Get ticket type.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the ticket type to retrieve.
fieldsNoSparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.

TDQS

C2.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint=true and destructiveHint=false annotations already convey that this is a safe read operation, so the description is not required to restate that. However, the description adds no additional behavioral context such as error handling, permissions, or caveats; it is adequate but not informative beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short and has no filler, but it is under-specified rather than appropriately sized. A single tautological sentence does not earn full marks for structure because it leaves out scoping or sibling differentiation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description should at least indicate that it returns a single ticket type and clarify when to use it rather than twdesk-list_ticket_types. The current description, combined with the schema, is minimally invocable but not complete enough for reliable tool selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters (id and fields) are already documented with meaningful descriptions. The tool description contributes no additional parameter nuance, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get ticket type.' simply restates the tool name twdesk-get_ticket_type and the annotation title 'Get Ticket Type', providing no new information about what the tool does. It names the resource but does not differentiate this from sibling tools like twdesk-list_ticket_types or twdesk-get_ticket.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as twdesk-list_ticket_types or twdesk-search_tickets. An agent must infer from the name and schema that this fetches a single ticket type by ID; the description gives no selection criteria or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-get_userC
Read-only
Inspect

Get support agent.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the user to retrieve.
fieldsNoSparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond thatโ€”no return format, no behavior for nonexistent IDs, no auth expectationsโ€”so it contributes nothing extra beyond what the annotations and name already convey. There is no contradiction with the annotations, but also no added transparency value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three words with zero wasted text, and the purpose is fully front-loaded. For a simple by-ID getter this is nearly the right size, though it borders on under-specification rather than demonstrating deliberate economy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-by-ID tool with a complete schema and safety annotations, this definition is mostly adequate. The notable gap is differentiation: with over 200 siblings including twprojects-get_user and twchat-get_current_user, the description should clarify which user pool this reads from, and there is no output schema to hint at the return shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline of 3 applies: the schema fully documents both the required id parameter and the optional sparse-fieldset behavior of fields. The description's 'support agent' wording adds only minor role context, hinting that the id refers to a helpdesk agent, but it does not meaningfully compensate beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get support agent.' The 'support agent' phrasing clarifies that this retrieves helpdesk user records, which distinguishes it from the sibling twprojects-get_user. However, it is terse and does not elaborate on what the resulting record contains, so it falls just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as twprojects-get_user, twchat-get_current_user, or twdesk-list_users, and no exclusions are given. An agent must infer from the twdesk naming prefix that this tool belongs to the support-desk domain, which is an inference rather than explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-list_companiesA
Read-only
Inspect

List Desk companies. Filter by name, domains, or kind.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoThe kind of the company to filter by.
nameNoThe name of the company to filter by.
pageNoPage number for pagination of results (1-based).
fieldsNoSparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
domainsNoThe domains of the company to filter by.
orderByNoThe field to order the results by.
pageSizeNoNumber of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more.
orderDirectionNoThe direction to order the results by (asc, desc).

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds no further behavioral context such as pagination quirks, field selection, or return format, but it also does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler. The action and resource are front-loaded, and the filter summary is immediately actionable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich input schema and read-only annotations, the description is largely sufficient for a straightforward list tool. The main gap is the lack of any routing guidance toward twdesk-get_company or clarification of the output shape, but this is not critical for invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema carries the parameter documentation burden. The description highlights name, domains, and kind as filters, but adds no extra meaning beyond what the input schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation ('List') and the resource ('Desk companies'), and names the main filter dimensions. This distinguishes it from related siblings like twdesk-get_company and twprojects-list_companies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage is implied: use this tool to list or filter Desk companies. However, there is no explicit guidance about when to prefer twdesk-get_company for a single company, or how this tool relates to other list operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-list_customersB
Read-only
Inspect

List customers. Filter by company or email.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
emailsNoThe emails of the customers to filter by.
fieldsNoSparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
orderByNoThe field to order the results by.
pageSizeNoNumber of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more.
companyIDsNoThe IDs of the companies to filter by.
companyNamesNoThe names of the companies to filter by.
orderDirectionNoThe direction to order the results by (asc, desc).

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds no behavioral context beyond the schema, such as default result set size, pagination behavior, or that pageSize is silently capped at 100. With no extra disclosure, the description does not meaningfully enhance behavioral transparency beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler. The core action 'List customers' is front-loaded, and the filter capability is stated immediately. Every word earns its place, and the description is appropriately sized for a straightforward read-only list tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 8 fully documented parameters and read-only annotations, the description is minimally adequate but leaves some gaps. It does not mention that omitting all filters likely returns all customers, nor does it clarify return value structure (no output schema exists). An agent could call it correctly using the schema alone, but the description does not fully orient the agent to behavior like pagination or filtering combinations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all 8 parameters. The description's 'Filter by company or email' restates the high-level function of the filter parameters but adds no new semantic meaning beyond what the schema already provides. Baseline of 3 is appropriate given full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List customers', a specific verb and resource that distinguishes it from singular get_customer and from other list tools targeting different resources (companies, tags). However, it does not explicitly differentiate itself from sibling tools like twdesk-search_tickets or twdesk-list_companies, leaving some ambiguity for an agent choosing among related list/search tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. It mentions filtering by company or email, which implies a use case, but it does not state when to prefer this over twdesk-get_customer, twdesk-search_tickets, or other list tools, nor does it mention any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-list_helpdoc_sitesA
Read-only
Inspect

List help doc sites (knowledge bases). Filter by name or subdomain. Use this to discover the site ID required by the help doc article tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoThe name of the help doc site to filter by.
pageNoPage number for pagination of results (1-based).
fieldsNoSparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
orderByNoThe field to order the results by.
pageSizeNoNumber of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more.
subdomainNoThe subdomain of the help doc site to filter by.
orderDirectionNoThe direction to order the results by (asc, desc).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=false, so the safety profile is covered. The description adds useful behavioral context by explaining the tool's role as a discovery mechanism for site IDs, and the schema enriches this with pagination details. Minor gap: the description does not explicitly state that results are paginated or that filters are optional, but the schema handles that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no fluff: the first identifies the resource and filters, the second states the primary use case. The most important guidance (site ID discovery) is front-loaded at the end of a short description. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with 100% schema coverage and no output schema, the description is sufficient. The only gap is that it does not state that the response is a list of site objects, but the tool name and schema make that evident. The description handles the main contextual need: routing the agent to use this tool for site ID discovery.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add parameter-level detail beyond what the schema already provides, but it does frame 'name' and 'subdomain' as filters and 'site ID' as the key output, which adds minimal semantic value. The pagination and sparse-fieldset parameters are already well documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('help doc sites (knowledge bases)'), and distinguishes this tool from related article tools by noting its purpose is to discover the site ID required by the help doc article tools. It is immediately clear what the tool does and how it differs from siblings like twdesk-get_helpdoc_site or twdesk-search_helpdoc_articles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this to discover the site ID required by the help doc article tools,' which tells the agent when to invoke this tool and for what downstream purpose. It does not name alternative tools to exclude, but the downstream guidance is strong and the distinction from article-level tools is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-list_inboxesA
Read-only
Inspect

List inboxes. Filter by name or email.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoThe name of the inbox to filter by.
pageNoPage number for pagination of results (1-based).
emailNoThe email of the inbox to filter by.
fieldsNoSparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
orderByNoThe field to order the results by.
pageSizeNoNumber of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more.
orderDirectionNoThe direction to order the results by (asc, desc).

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds only the filtering behavior by name or email and does not disclose return format, pagination quirks, or any additional side-effect context; this is acceptable but minimal, and there is no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with the core action front-loaded and no filler. 'List inboxes' states the operation immediately, and 'Filter by name or email' adds essential scoping without wasting words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a fully described seven-parameter schema and safety-bearing annotations, the tool is invokable from the structured data alone. Still, the description itself does not state what is returned or clarify when to prefer twdesk-get_inbox or twdesk-search_tickets, leaving a moderate contextual gap for a tool with no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for all seven parameters, including pagination, ordering, and sparse fields. The description's mention of 'name or email' simply re-emphasizes two schema-documented filter parameters without adding new meaning, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with the specific verb-resource pair 'List inboxes' and adds the filtering scope 'by name or email.' This clearly identifies a collection-listing operation and is easily distinguished from single-resource siblings such as twdesk-get_inbox, though it does not explicitly name or contrast any sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use whenever an agent needs to enumerate inboxes and optionally filter them, and it names two concrete filter dimensions. However, it gives no explicit when-to-use vs. when-not-to-use guidance and does not reference alternatives like twdesk-get_inbox for single-inbox lookups.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-list_prioritiesA
Read-only
Inspect

List ticket priorities. Filter by name or color.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoThe name of the priority to filter by.
pageNoPage number for pagination of results (1-based).
colorNoThe color of the priority to filter by.
fieldsNoSparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
orderByNoThe field to order the results by.
pageSizeNoNumber of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more.
orderDirectionNoThe direction to order the results by (asc, desc).

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds only that this lists and filters priorities, which is consistent with the annotations. It does not disclose additional behavioral traits such as pagination behavior, default ordering, or the shape of the returned list, but it does not contradict the annotations either.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short and front-loaded: the core action is stated first, followed by the main filtering capability. Both sentences earn their place with no redundant filler. It is not wordy, though it is minimal enough that it leans on the schema for richer detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list operation with well-documented parameters, the description is adequate for selection and basic invocation. However, there is no output schema, and the description does not mention pagination, field selection, ordering, or what a returned priority object contains. These gaps are partially covered by the schema, but the description itself leaves some operational context unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for all seven parameters, so the schema carries the semantic burden. The description's 'Filter by name or color' does summarize two parameters but adds no new meaning beyond what the schema already states. Baseline 3 is appropriate because the schema is comprehensive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb and resource: 'List ticket priorities.' This clearly identifies the operation and distinguishes it from related tools like twdesk-get_priority, which retrieves a single priority, and twdesk-create_priority. The filter mention adds scope without confusing the core purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage as an enumeration/filtering tool, and 'Filter by name or color' suggests when filtering is relevant. However, it does not explicitly state when to use this tool versus alternatives such as twdesk-get_priority for a single record or twdesk-search_tickets for broader ticket search. Usage context is present but only by implication.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-list_statusesA
Read-only
Inspect

List ticket statuses. Filter by name, color, or code.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoThe code of the status to filter by.
nameNoThe name of the status to filter by.
pageNoPage number for pagination of results (1-based).
colorNoThe color of the status to filter by.
fieldsNoSparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
orderByNoThe field to order the results by.
pageSizeNoNumber of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more.
orderDirectionNoThe direction to order the results by (asc, desc).

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation; the description adds no behavioral detail beyond the filter capability. It does not contradict the annotations, and the pagination quirk (silent reduction above 100) is disclosed in the schema rather than the description. Acceptable given annotation coverage, but no extra behavioral context is contributed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two terse sentences with zero filler: 'List ticket statuses. Filter by name, color, or code.' The core action is front-loaded and every word earns its place. This is exemplary concision for a simple list tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with annotations covering safety and a schema covering all parameters, the description is mostly sufficient. However, with no output schema, the description does not clarify the response shape, and it omits behavioral nuances like whether multiple filter values are AND'd or OR'd, or how this relates to twdesk-get_status. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every one of the 8 parameters is already documented with meaning. The description's mention of filtering by name, color, or code echoes three schema properties but adds no new semantics such as filter combination behavior or format expectations. Baseline 3 is appropriate since the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List ticket statuses', followed by the three filter dimensions (name, color, code). This distinguishes it from sibling list tools like twdesk-list_tags, twdesk-list_priorities, and twdesk-list_ticket_types by naming a distinct resource. It stops short of a 5 because it adds no scoping detail (e.g., all vs. filtered, or workspace scope) that would sharpen the boundary against get_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: the name and 'List ticket statuses' make it evident this tool enumerates statuses, and the filter clause hints at when filtering is relevant. However, there is no explicit when-to-use versus alternatives โ€” notably twdesk-get_status for retrieving a single status โ€” and no exclusions or routing guidance are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-list_tagsB
Read-only
Inspect

List Desk tags. Filter by name, color, or inbox.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoThe name of the tag to filter by.
pageNoPage number for pagination of results (1-based).
colorNoThe color of the tag to filter by.
fieldsNoSparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
orderByNoThe field to order the results by.
inboxIDsNoThe IDs of the inboxes to filter by.
pageSizeNoNumber of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more.
orderDirectionNoThe direction to order the results by (asc, desc).

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false. The description adds a pagination-related caveat via the pageSize parameter description (silent reduction of values over 100), which is useful behavioral context. No contradictions with annotations. However, no extra detail about response shape or filtering semantics beyond schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the primary action and resourceโ€”'List Desk tags'โ€”followed by the key filter options. It earns a 4 rather than 5 because it omits the pagination caveat that appears in the schema and could have mentioned the orderBy/orderDirection options; yet what is there is efficient and free of filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list operation with all-optional parameters and full schema coverage, the description plus annotations cover the essential usage. It is not a 5 because the description itself is minimal: it doesn't mention that results are paginated, that all parameters are optional, or how to use fields/orderBy. With no output schema, the return format is left entirely to the agent's inference, which is acceptable for a simple list tool but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the schema already documents all eight optional parameters well, including the important pageSize caveat. The description's one-line filter list (name, color, inbox) is redundant with the schema but does reinforce the main filter dimensions. Baseline 3 is appropriate because the schema carries the heavy lifting and the description adds no meaningful supplementary parameter detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List Desk tags' followed by filtering dimensions (name, color, inbox). It clearly distinguishes from sibling tools like twdesk-get_tag (single entity retrieval) and twdesk-create_tag (creation). Slight deduction because it lists filter options rather than describing the full scope of what is returned, but purpose is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for listing/filtering tags, which is reasonably clear from the resource and filter parameters. However, it does not explicitly state when to prefer this tool over alternatives such as twdesk-get_tag or twdesk-search_tickets, nor does it mention any exclusions or prerequisites. The filter hints give context but no explicit selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-list_ticket_typesA
Read-only
Inspect

List ticket types. Filter by name or inbox.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoThe name of the type to filter by.
pageNoPage number for pagination of results (1-based).
fieldsNoSparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
orderByNoThe field to order the results by.
inboxIDsNoFilter by inbox. Use twdesk-list_inboxes to discover.
pageSizeNoNumber of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more.
orderDirectionNoThe direction to order the results by (asc, desc).

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that results can be narrowed by name or inbox, which is consistent with read-only behavior, but does not disclose additional runtime traits such as response shape or pagination behavior; the schema compensates for pagination details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, front-loaded sentences with no filler or redundancy. The description is appropriately sized for a straightforward list/filter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation with a rich parameter schema and clear annotations, this description is mostly complete. Minor gaps are the lack of explicit return-shape information and alternative-tool routing, but the tool name and schema cover the essential invocation details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all seven parameters. The description only restates the name and inbox filters at a high level and does not add meaning beyond the schema, which is expected given the high coverage baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('ticket types'), and mentions the key filtering dimensions. It is clear and distinct from singular get/update/create ticket-type tools, though it does not explicitly name any sibling alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The list verb implies an enumeration use case, and 'Filter by name or inbox' gives a concrete selection context. However, there is no explicit guidance about when to prefer this over twdesk-get_ticket_type or twdesk-search_tickets, leaving the distinction mostly implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-list_usersA
Read-only
Inspect

List support agents. For customers, use twdesk-list_customers.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
emailNoThe email addresses of the users to filter by.
fieldsNoSparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
orderByNoThe field to order the results by.
inboxIDsNoThe IDs of the inboxes to filter by.
lastNameNoThe last names of the users to filter by.
pageSizeNoNumber of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more.
firstNameNoThe first names of the users to filter by.
isPartTimeNoWhether to include part-time users in the results.
orderDirectionNoThe direction to order the results by (asc, desc).

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds scoping context but no further behavioral detail such as result shape, default ordering, or pagination behavior beyond what the schema already documents.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler. The primary action is front-loaded, and the alternative tool is mentioned immediately, making it easy to scan and act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with a fully documented schema and clear annotations, the description covers the essential purpose and the key sibling distinction. It could be slightly more explicit about what a returned user record looks like, but the absence of an output schema makes that a minor gap rather than a critical one.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all 10 parameters documented in the schema itself. The description adds no parameter-level detail, but it does not need to because the schema already carries the full parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the operation ('List') and the resource ('support agents'), and disambiguates what 'users' means in this domain. It also names the sibling tool twdesk-list_customers as the correct tool for a different audience, making the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent when not to use this tool: 'For customers, use twdesk-list_customers.' This is a clear, actionable routing instruction that prevents the most likely confusion with a similarly named sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-reply_ticketA
Destructive
Inspect

Reply to a ticket. Use threadType=note for internal agent notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoEmail addresses to CC.
bccNoEmail addresses to BCC.
bodyYesThe body of the message.
ticketIDYesThe ID of the ticket that the message will be sent to.
threadTypeNo'message' is a customer-facing reply; 'note' is an internal agent note.message

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey the destructive hint and non-read-only nature, so the description doesn't need to repeat that. It adds the useful distinction between customer-facing replies and internal agent notes, but does not disclose potential side effects such as email delivery or notification behavior beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler; the core purpose is front-loaded and the threadType guidance earns its place as a high-value usage hint. This is an appropriately sized description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a relatively simple action with full schema coverage and annotations, the description covers the essential purpose and the key note-vs-message distinction. It could be slightly more explicit about how it differs from twdesk-update_ticket, but nothing critical is missing for invoking it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters fully. The description only repeats the threadType note guidance already present in the schema, adding no new semantic information beyond what structured fields provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Reply to a ticket') with a specific verb and resource, and the threadType note clarifies an important variant. It doesn't explicitly distinguish itself from twdesk-update_ticket, but 'reply' strongly implies sending a message/note rather than editing ticket fields.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives helpful guidance for choosing threadType=note for internal agent notes, which is a clear within-tool usage rule. However, it does not mention when to use this tool versus alternatives like twdesk-update_ticket or other messaging tools, leaving tool selection partially implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-search_helpdoc_articlesB
Read-only
Inspect

Search help doc articles. Filter by search term, status, site, or category.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (1-based).
searchNoFree-text search term matched against article title and content.
siteIDNoFilter by help doc site ID. Use twdesk-list_helpdoc_sites to discover.
statusNoFilter by article status (e.g. "published", "draft").
pageSizeNoNumber of results per page.
categoryIDNoFilter by help doc category ID.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish a read-only, non-destructive safety profile, lowering the bar. The description consistently frames the tool as a filtered search but adds no behavioral context beyond the schema โ€” no pagination defaults, empty-search behavior, or result-set semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action, followed by the key filter dimensions. There is zero filler โ€” every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a read-only search tool: annotations cover the safety profile, the schema covers all optional parameters, and the description states the core behavior. Gaps include no return-value description (no output schema) and no guidance distinguishing search from twdesk-get_helpdoc_article.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters. The description's filter list (search term, status, site, category) largely restates schema content and adds no new meaning; page and pageSize are not even mentioned.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Search') and resource ('help doc articles'), and enumerates concrete filter dimensions (search term, status, site, category). This distinguishes it from siblings like twdesk-get_helpdoc_article (single-article fetch) and twdesk-search_tickets (different resource), though it never names them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance is given. The description never contrasts searching against fetching a single article (twdesk-get_helpdoc_article) or searching tickets (twdesk-search_tickets), and the only cross-reference ('Use twdesk-list_helpdoc_sites to discover') appears in the schema rather than the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-search_ticketsA
Read-only
Inspect

Search tickets. Filter by inbox, customer, company, tag, status, priority, user, or creation date range. Name the attributes you need in fields: a ticket returned whole carries every activity, message, file and timelog identifier it has, and a full page of those is large enough to be truncated in transit. The record and page totals saturate at 10000: a search reporting exactly that many has 10000 or more, and asking for a page past the 10000th result is rejected rather than answered empty, so narrow the filters instead of paging deeper.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each ticket, from the listed names. Omit to receive the whole record, which carries every activity, message, file and timelog identifier the ticket has and is large enough that a full page of them may be truncated before it reaches you. Name the attributes you need. "id" is always returned.
searchNoSearch term matched against subject, body, and other ticket fields.
tagIDsNoFilter by tag. Use twdesk-list_tags to discover.
orderByNoThe field to order the results by.
userIDsNoFilter by user. Use twdesk-list_users to discover.
inboxIDsNoFilter by inbox. Use twdesk-list_inboxes to discover.
pageSizeNoNumber of results per page for pagination (1-200). The API silently reduces anything above 200, so a larger value returns fewer results rather than more.
statusIDsNoFilter by status. Use twdesk-list_statuses to discover.
companyIDsNoFilter by company. Use twdesk-list_companies to discover.
omitMergedNoIf true, exclude tickets that have been merged into another ticket. Merged tickets are not a status, so they cannot be filtered out with statusIDs. Defaults to false, which returns them alongside the rest.
customerIDsNoFilter by customer. Use twdesk-list_customers to discover.
priorityIDsNoFilter by priority. Use twdesk-list_priorities to discover.
createdAfterNoFilter by ticket creation date: only tickets created on or after this day. This search filters by whole days, so a time of day is ignored. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
createdBeforeNoFilter by ticket creation date: only tickets created on or before this day. This search filters by whole days, so a time of day is ignored. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
orderDirectionNoThe direction to order the results by (asc, desc).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by disclosing two non-obvious behaviors: full tickets are truncated in transit, and result/page totals saturate at 10000 while pages beyond that are rejected. It also discloses the 'id is always returned' invariant and pageSize silent reduction. These are exactly the kind of behaviors an agent needs to know to avoid being misled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose and filters, then the important capacity/truncation warnings. The only minor inefficiency is some redundancy between the opening sentence and the 'fields' parameter description, both warning about truncation when returning whole records. But the message is important enough that repetition is defensible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter read-only search tool with no output schema, the description covers all agent-critical context: when to use it, what filters are available, the performance/truncation trap, the 10000 saturation behavior, and the practical guidance to narrow filters rather than page deep. The schema documents every parameter and the description adds the behavioral context needed to use them safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% but the description adds crucial semantics beyond the schema: it explains that a full ticket is huge and may be truncated, that fields avoids that, that 'id' is always returned, that pageSize values over 200 silently reduce, and that date filters operate on whole days. It doesn't enumerate every filter dimension twice, but it adds meaningful usage constraints that the schema alone would not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb and resource ('Search tickets') and then enumerates the distinct filter dimensions (inbox, customer, company, tag, status, priority, user, creation date range). It differentiates itself from sibling search tools like twdesk-search_helpdoc_articles and twprojects-search by being ticket-specific, and from twdesk-list_* filters by being a search with many filter dimensions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tool is self-contained with explicit guidance on when to use it (searching/filtering tickets) and what to avoid: it warns against paging past 10000 results and tells the agent to narrow filters instead. Each filter parameter also names the sibling list tool to discover valid IDs. The 'omitMerged' parameter description explicitly explains when it is needed (merged tickets cannot be filtered by status).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-update_companyCInspect

Update Desk company.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the company to update.
kindNoThe new kind of the company.
nameNoThe new name of the company.
noteNoThe new note for the company.
detailsNoThe new details of the company.
domainsNoThe new domains for the company.
websiteNoThe new website of the company.
industryNoThe new industry of the company.
permissionNoThe new permission level of the company.
descriptionNoThe new description of the company.

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey readOnlyHint=false, and the description only repeats the mutation by saying 'Update'. It adds no information about partial vs. full replacement, required permissions, validation behavior, side effects, or what is returned. Since it adds zero context beyond the annotations, this is under-disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded, but it borders on tautological: 'Update Desk company' essentially restates the tool name and title. It is concise in the sense of brevity, but under-specified for a 10-parameter mutation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 10 optional fields, no output schema, and no explanation of update semantics, a single sentence is not enough for an agent to correctly invoke the tool beyond guessing from the schema. The description does not compensate for the missing usage and behavior context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 10 parameters are already documented in the input schema. The description adds no parameter-level meaning, so the baseline of 3 applies; no penalty is warranted, but no credit beyond baseline either.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a clear verb+resource: updating a Desk company. It is more specific than the title 'Update Company' by adding the product context, though it does not describe which aspects of the company can be changed or how it differs from twdesk-create_company/twdesk-get_company.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to choose this tool over twdesk-create_company, twdesk-get_company, twdesk-list_companies, or the many other update_* siblings. An agent must infer from the tool name that it is for existing companies, which is not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-update_customerCInspect

Update customer.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the customer to update.
emailNoThe new email of the customer.
notesNoThe new notes of the customer.
phoneNoThe new phone number of the customer.
mobileNoThe new mobile number of the customer.
addressNoThe new address of the customer.
jobTitleNoThe new job title of the customer.
lastNameNoThe new last name of the customer.
extraDataNoThe new extra data of the customer.
firstNameNoThe new first name of the customer.
facebookURLNoThe new Facebook URL of the customer.
linkedinURLNoThe new LinkedIn URL of the customer.
organizationNoThe new organization of the customer.
twitterHandleNoThe new Twitter handle of the customer.

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description only says 'Update customer' and adds no behavioral context beyond what the annotations already imply. Key information is missing, such as whether this is a partial update affecting only provided fields, what happens if the id does not exist, and whether the operation is reversible or auditable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short and has no fluff, but it is under-specified rather than appropriately concise. A tool with 14 parameters and one required id would benefit from a sentence clarifying that this updates an existing customer with only the supplied fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and only sparse annotations, the description leaves significant gaps. It does not state that the customer must already exist, that updating is partial or full, what fields are commonly used, or what the caller should expect in response. The schema covers parameters, but operational context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameter descriptions already explain each field and the 'id' requirement. The tool description adds no extra meaning, but this is acceptable because the input schema fully documents all 14 parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a clear verb and resource: 'Update customer.' This is enough to distinguish it from sibling tools like twdesk-update_company or twdesk-update_ticket by resource type. However, it does not mention what aspects of a customer can be updated, leaving the full purpose to be inferred from the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as twdesk-create_customer or twdesk-update_company. No prerequisites, partial-update semantics, or conditions are provided, so the agent must infer usage entirely from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-update_helpdoc_articleBInspect

Update an existing help doc article.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the help doc article to update.
titleNoThe new title of the article.
statusNoPublication status (e.g. "published", "draft").
contentsNoThe new body content of the article.
isPrivateNoSet to true to make the article private.
descriptionNoA short description / summary of the article.

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations separately indicate the operation is not read-only, not idempotent, and not destructive, but the description adds no behavioral context such as partial-update semantics, which fields are required at call time beyond id, or what happens on success. The phrase 'existing' only repeats the notion of modifying a current resource.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with no filler, front-loading the action and object. It earns its place, though it is sparse and close to the tool title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward update tool with rich parameter descriptions and safety annotations, the description is minimally adequate. However, with no output schema, it does not state what the tool returns, and it omits partial-update behavior, a meaningful gap for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the schema already documents all six parameters. The description itself adds no extra parameter meaning; it does not clarify that only id is required or that omitted optional fields are left unchanged.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Update an existing help doc article.' This clearly distinguishes it from twdesk-create_helpdoc_article, twdesk-get_helpdoc_article, and twdesk-search_helpdoc_articles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'existing' implies this tool is for modifying an already-created article rather than creating a new one. However, it does not explicitly name alternatives or state when-not-to-use, leaving usage conditions largely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-update_priorityCInspect

Update ticket priority.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the priority to update.
nameNoThe new name of the priority.
colorNoThe color of the priority.

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey that this is a mutating, non-idempotent, non-destructive operation, and the description does not contradict them. The description adds little behavioral context beyond 'update', such as whether existing tickets using the priority are affected, but the annotation coverage prevents this from being a serious gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler or redundancy. It is appropriately short for the tool's simplicity, though 'ticket priority' is slightly misleading and could have been phrased more precisely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is too thin to resolve a key ambiguity: does it update a priority definition or change the priority on a ticket? Given the large sibling set and the existence of twdesk-update_ticket, this missing semantic context is significant. Schema coverage handles parameters, but the tool's core purpose is not fully clarified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with clear descriptions for id, name, and color. The description does not need to repeat parameter details, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description provides a verb and resource, but says 'ticket priority' rather than clarifying that this updates a priority definition (name/color). Because the parameters are name and color, the intended resource is the priority entity itself, not the priority field on a ticket. This ambiguity makes it hard to distinguish from twdesk-update_ticket.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus twdesk-update_ticket, twdesk-update_status, or other update tools. There are no conditions, exclusions, or alternatives mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-update_statusCInspect

Update ticket status.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the status to update.
nameNoThe new name of the status.
colorNoThe color of the status.
displayOrderNoThe display order of the status.

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a mutating action (readOnlyHint=false) and not destructive (destructiveHint=false). The description adds no behavioral detail beyond the generic word 'update' โ€” it does not mention partial-update semantics, whether only provided fields are changed, validation behavior, or what happens to tickets already using the status.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, but it is under-specified rather than appropriately concise. 'Update ticket status' largely restates the tool's purpose and omits the field-level and contextual detail needed to avoid ambiguity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an update tool, the description lacks clarity about what entity is updated and what effects the operation has. The schema covers parameters, but the description does not tie together the status definition concept, optional fields, or distinguish this from updating a ticket's status field. Given no output schema and no usage guidance, the description is only minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides descriptions for all four parameters (id, name, color, displayOrder), giving 100% schema description coverage. The description adds no parameter-level meaning, but the coverage baseline applies, so this is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('update') and a resource ('ticket status'), so it is not a tautology. However, 'ticket status' is ambiguous: it could mean updating a field on a ticket or updating a status definition entity. Given the schema exposes name, color, and displayOrder, it likely means the latter, but the description does not disambiguate this, nor does it distinguish itself from twdesk-update_ticket.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as twdesk-create_status, twdesk-get_status, or twdesk-update_ticket. The description provides no context about prerequisites, exclusions, or scenarios where another tool would be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-update_tagBInspect

Update Desk tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the tag to update.
nameNoThe new name of the tag.
colorNoThe color of the tag.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description only restates that the tool mutates a Desk tag, which annotations already convey via readOnlyHint=false. It adds no context about side effects, permission requirements, partial-update semantics, or behavior when optional fields are omitted. It does not contradict the annotations, but it adds no behavioral value beyond them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence with no filler, and the verb 'Update' is front-loaded. It is appropriately concise for a simple tool, though it provides no structural elaboration such as usage hints or caveats.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple update tool with complete schema coverage and annotations, the description provides just enough to identify the target resource. However, it does not address when to choose this over sibling tag-update tools, nor does it describe update behavior beyond the schema. It is minimally viable but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter (id, name, color) already has a meaningful description. The tool description adds no parameter-level detail, but none is strictly needed because the schema fully documents the parameters. A baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Update Desk tag.' The 'Desk' qualifier distinguishes this from sibling tools like twprojects-update_tag and twspaces-update_tag. An agent can immediately understand what the tool operates on.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance on when to use this tool versus alternatives such as twprojects-update_tag or twspaces-update_tag. It does not state prerequisites, exclusions, or context in which this update operation should be preferred. The only signal is the 'Desk' qualifier, which is implied rather than explained.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-update_ticketCInspect

Update ticket.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNoEmail addresses to CC.
idYesThe ID of the ticket to update.
bccNoEmail addresses to BCC.
bodyNoThe body of the ticket.
tagsNoTags to associate with the ticket. Use twdesk-list_tags to discover.
typeIdNoTicket type. Use twdesk-list_ticket_types to discover.
agentIdNoAgent the ticket is assigned to. Use twdesk-list_users to discover.
inboxIdNoInbox of the ticket. Use twdesk-list_inboxes to discover.
subjectNoThe subject of the ticket.
statusIdNoStatus of the ticket. Use twdesk-list_statuses to discover.
deleteTagsNoTags to remove from the ticket. Use twdesk-list_tags to discover.
priorityIdNoPriority of the ticket. Use twdesk-list_priorities to discover.

TDQS

C2.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, so the mutating nature is covered by structured metadata. However, the description adds no behavioral context beyond that โ€” it does not disclose whether updates are partial or full replacement, whether changing status/agent triggers notifications, or what side effects occur. It neither contradicts the annotations nor enriches them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two words is under-specification, not conciseness. The description front-loads nothing useful since there is no information to front-load. It fails to earn its place as a meaningful tool description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 12 parameters, no output schema, and nuanced semantics (partial vs. full update, required fields, tag add/remove behavior via tags vs. deleteTags), a two-word description is grossly inadequate. With no output schema, the description should at least clarify return value or side effects; it explains neither.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema descriptions are genuinely helpful โ€” they explain each field and even reference discovery tools (e.g., 'Use twdesk-list_tags to discover', 'Use twdesk-list_statuses to discover'). The description itself adds no parameter meaning, but the baseline of 3 applies because the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Update ticket.' is a tautology โ€” it restates the tool name (twdesk-update_ticket) and title ('Update Ticket') verbatim. It names a verb and resource but adds no specificity about scope, semantics, or how it differs from siblings like twdesk-create_ticket, twdesk-reply_ticket, or the many other twdesk-update_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides zero guidance on when to use this tool versus alternatives. It does not mention that twdesk-create_ticket is for new tickets, twdesk-reply_ticket for customer replies, or twdesk-get_ticket for retrieval. There is no when-to-use, when-not-to-use, or alternative routing โ€” just the bare action statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twdesk-update_ticket_typeCInspect

Update ticket type.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the ticket type to update.
nameNoThe new name of the type.
displayOrderNoThe display order of the type.
enabledForFutureInboxesNoWhether the type is enabled for future inboxes.

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral context beyond what the annotations already imply: it is an update operation and not read-only. It does not disclose whether the update is partial or full, whether an existing ticket type is required, what side effects occur, or what the response looks like. The negative annotation hints (idempotentHint=false, destructiveHint=false) do not compensate for this.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short with no wasted words, but it is under-specified rather than effectively concise. It basically restates the tool name and provides no structural or contextual value for an agent navigating among many sibling tools.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The definition is incomplete for a mutating tool with no output schema. It lacks information about return values, side effects, and when to choose this tool over related update_* tools. The parameter schema helps, but the description leaves important context unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters already have individual descriptions. The tool description adds no parameter-level meaning, but since the schema carries the full burden, the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('update') and a specific resource ('ticket type'), so an agent can tell this modifies an existing ticket type rather than creating or listing one. It does not differentiate from sibling update tools like update_status or update_priority, but the resource name provides basic purpose clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as create_ticket_type, get_ticket_type, or update_ticket. No context, prerequisites, or exclusions are mentioned, so the agent must infer usage from the name and schema alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-add_project_fileAInspect

Store an uploaded file in a project's files area, where people find it outside any one task or comment. Upload it first with twprojects-create_upload_url, then pass the reference here. Returns a numeric file ID which, unlike a reference, survives being used: pass it in attachment_file_ids on twprojects-create_task or twprojects-update_task to attach the same file to as many tasks as needed. Attaching a reference to a task, comment or message already files it here, so use this tool to store a file on its own, to describe or categorise it, or when it has to reach more than one place.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOverride the name the file was uploaded with, including its extension.
privateNoHide the file from client users.
tag_idsNoA list of tag IDs to associate with the file.
referenceYesThe reference of an uploaded file, as returned by twprojects-create_upload_url or twprojects-create_file. It is "tf_" followed by a UUID and the file extension, and can only be used once.
project_idYesThe ID of the project whose files area will hold the file.
category_idNoFile it under an existing file category. Wins over category_name.
descriptionNoA description of the file.
category_nameNoFile it under a category with this name, creating one when the project has none. Ignored when category_id is given.
auto_new_versionNoStore it as a new version of an existing file with the same name in the project, rather than as a separate file.
notify_current_userNoNotify the user adding the file. Defaults to false.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, the description explains that references are single-use, that the returned numeric file ID is reusable, and that attaching a reference already files the file in the project. This is valuable behavioral context. It does not explicitly discuss duplicate handling or non-idempotency at a behavioral level, though auto_new_version and idempotentHint are present in structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Each sentence earns its place: purpose, workflow, return-value behavior, and usage guidance. The most important information is front-loaded, and there is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 10 parameters and no output schema, the description supplies the essential return type, the prerequisite workflow, and decision rules for when this tool is appropriate. Field-level details are fully covered in the schema, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaning by explaining the reference lifecycle, the reusable numeric file ID, and how the return value connects to attachment_file_ids on task creation/update, going beyond individual parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action and resource: 'Store an uploaded file in a project's files area.' It clearly distinguishes this tool from alternatives by describing the upload prerequisite and contrasting it with attaching a reference directly to a task, comment, or message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use this tool: to store a file on its own, to describe or categorise it, or when it must reach more than one place. It also gives the workflow sequence: create_upload_url first, then pass the reference here, then use the returned file ID in attachment_file_ids.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-add_project_memberAInspect

Add a user to a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idsNoUsers to add.
project_idYesThe ID of the project to add the member to.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already indicate this is a mutating, non-destructive, non-idempotent operation. The description adds the specific action of adding a user to a project but does not disclose extra behavioral context such as whether permissions are required, what side effects occur, or how repeated calls behave. With annotations covering the basic safety profile, this is minimally adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler or redundant information. Every word earns its place, and the core action is stated immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with full schema coverage, the description is mostly sufficient. However, it does not explain the optional nature of user_ids or what happens when it is omitted, and there is no return-value guidance since no output schema exists. The description could be more helpful but is not severely incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents project_id and user_ids adequately. The description does not add further meaning, and its singular phrasing ('a user') could slightly conflict with the array type of user_ids, but the schema clarifies this.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Add') and resource ('a user to a project'), clearly identifying the operation. It differentiates from sibling tools like add_project_file and create_user by specifying the project membership context. Even without mentioning 'member' explicitly, the intent is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives, such as create_user for new users or list_users for finding user IDs. There is no mention of prerequisites, exclusions, or conditions under which another tool should be preferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-clone_projectAInspect

Clone/copy an existing project or instantiate one from a template.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the project to clone.
nameNoThe name of the new cloned project. If not provided, the name of the original project will be used with an incremental suffix (e.g., 'Project Name (1)').
company_idNoThe ID of the company associated with the new cloned project. If not provided, the company of the original project will be used.
days_offsetNoDaysOffset is the number of days to shift all scheduled dates in the cloned project relative to the base date. When cloning from a template, it defines the project duration span. When copying an existing project, it shifts the original start and end dates by this many days. If omitted, calculated automatically from the source project's date range.
descriptionNoThe description of the new cloned project. If not provided, the description of the original project will be used.
target_dateNoDesired start or end date for the cloned project (chosen by template_date_target). Only applies when new_from_template=true. Format: YYYYMMDD. Defaults to today.
to_templateNoIndicates whether the new project should be set as a template.
new_from_templateNoIndicates whether the new project should be a regular one created from a template.
template_date_targetNoSpecifies whether target_date represents the project's start or end date. When 'end', the start date is calculated by subtracting the template project's duration from target_date. Only applicable when new_from_template=true.start

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a write operation (readOnlyHint=false) and not destructive. The description adds the dual-mode behavior (cloning vs template instantiation) but does not disclose side effects such as what gets duplicated, whether timers/members are copied, or how template mode is triggered. No annotation contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler words. It immediately presents the action and the two use cases, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 9 parameters, two boolean mode switches, and no output schema, the high-level description is thin. It does not explain how an agent should indicate template vs project copying, what is returned, or what the clone includes. The schema compensates, but the description alone is not a complete entry point.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with rich per-parameter detail, so the tool description does not need to restate parameters. The description adds no parameter-level meaning beyond the schema, matching the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action (clone/copy/instantiate) and resource (project), and the two modes (copy existing, instantiate from template) are distinct enough to separate it from create_project. It clearly tells an agent what the tool does at a glance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool should be used when a project is being copied or created from a template, but it never explicitly states when to choose this over alternatives like create_project or create_project_template. No exclusion or alternative routing is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-complete_taskAInspect

Mark task complete.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the task to mark as complete.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the agent knows this is a state-changing but non-destructive operation. However, the description adds no additional behavioral context, such as whether the task must exist, if completion is reversible, or what fields are affected. It is a bare statement of the action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, direct sentence: 'Mark task complete.' It is perfectly concise, front-loaded, and contains no filler or redundant information. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple mutation with one parameter and no output schema, the description is minimally adequate. It clearly states the action and the parameter is fully documented, but it lacks any mention of return value, side effects, or preconditions beyond the annotations. The annotations provide some safety context but do not compensate for the absence of behavioral details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers the single 'id' parameter with 100% coverage, including its type and description. The tool description adds no parameter-specific meaning beyond what the schema already provides, which is the expected baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Mark task complete' clearly identifies the specific action (mark) and resource (task), and it distinguishes from sibling tools like twprojects-complete_timer and twprojects-update_task. The verb-resource combination is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through its direct wording, but it provides no explicit guidance about when to use this tool versus twprojects-update_task or other task-related operations. There are no stated alternatives, exclusions, or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-complete_timerAInspect

Stop a timer permanently and convert it to a timelog. Use pause_timer to pause without converting.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the timer to complete.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key behavioral traits beyond annotations: the action is 'permanent' and results in a conversion to a timelog. This adds meaningful context to the annotation flags. However, it does not mention permissions or further side effects, but for a simple single-id tool, this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, directly front-loaded with the action, and contains no redundant or irrelevant content. Every word serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no output schema), the description is complete enough: it states the permanent action, the conversion result, and the alternative for pausing. It could be slightly richer by explaining what happens to the resulting timelog, but not necessary for a well-scoped timer tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already fully documents the only parameter ('id' with description 'The ID of the timer to complete'), so the description adds no additional parameter semantics. Schema coverage is 100%, warranting the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Stop a timer permanently and convert it to a timelog.' It uses specific verbs ('stop', 'convert') and resources ('timer', 'timelog'), and distinguishes itself from the sibling tool pause_timer with an explicit contrast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly provides usage guidance by saying 'Use pause_timer to pause without converting,' which tells the agent exactly when to choose this tool over a direct alternative. This is clear when-to-use/when-not-to-use information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-count_milestonesA
Read-only
Inspect

Exact milestone count for any filter set: one call, one number, no rows. Use for "how many milestones" questions (per project, per tag, matching a term) instead of paging twprojects-list_milestones to count rows. Use twprojects-list_milestones when the rows are needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_idsNoA list of tag IDs to filter milestones by tags.
due_afterNoOnly include milestones with a deadline on or after this date.
due_beforeNoOnly include milestones with a deadline on or before this date.
project_idNoThe ID of the project from which to retrieve milestones. Omit to list milestones across all projects.
search_termNoA search term to filter milestones by name. Each word from the search term is used to match against the milestone name and description. The milestone will be selected if each word of the term matches the milestone name or description, not requiring that the word matches are in the same field.
match_all_tagsNoIf true, match all tags; if false, match any.
show_completedNoIf false, only return milestones that are not completed yet. Included by default, unlike the task and tasklist lists.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool read-only and non-destructive. The description adds useful behavioral context beyond the annotations: one call returns one exact number, no rows, and works for any filter set. This clarifies the core behavior without being redundant.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tightly written and front-loaded with the key purpose and behavior. Each sentence earns its place: the first states what it does, the second gives usage guidance, and the third names the alternative. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple count tool, the description covers purpose, when to use it, when not to use it, and the key behavioral trait of returning one number with no rows. An output schema exists, the annotations cover safety, and the parameters are fully documented, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents all 7 parameters. The description adds a little context by mentioning filtering per project, per tag, and by search term, but it does not need to go deeper because the schema carries the parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns an exact milestone count, with a specific verb and resource. It also distinguishes this tool from twprojects-list_milestones by emphasizing it returns a single number rather than rows.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent when to use this tool: for 'how many milestones' questions, instead of paging through twprojects-list_milestones. It also names the alternative and the condition for choosing it: use twprojects-list_milestones when the actual rows are needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-count_projectsA
Read-only
Inspect

Exact project count for any filter set: one call, one number, no rows. Use for "how many projects" questions (mine, late, per category, per tag, per company, per owner, matching a term) instead of paging twprojects-list_projects to count rows. Use twprojects-list_projects when the rows are needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_idsNoA list of tag IDs to filter projects by tags.
team_idsNoFilter projects by team, matching the projects any member of those teams belongs to.
user_idsNoFilter projects by the users holding an explicit membership of them. For "my projects", pass the ID returned by twprojects-get_user_me.
company_idsNoFilter projects by the company that owns them.
search_termNoA search term to filter projects by name or description.
only_starredNoIf true, only return the projects the calling user has starred.
hide_observedNoIf true, leave out the projects the calling user only observes, keeping the ones they actually work on.
only_archivedNoIf true, only return archived projects.
updated_afterNoOnly include projects whose last activity is strictly after this moment; the boundary itself does not match. Any activity in the project counts, not just edits to the project record. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
match_all_tagsNoIf true, match all tags; if false, match any.
project_healthsNoFilter projects by the health rating set on them, matching any of the values given. "not_set" matches the projects nobody has rated.
include_archivedNoIf true, return archived projects alongside the active ones; excluded by default.
project_statusesNoFilter projects by progress state, matching any of the values given. "late" is past its end date and not yet completed, "upcoming" has not started yet, "current" is running now, and "active" is every project that is neither completed nor archived. Omit to keep the endpoint's own default set.
include_tentativeNoIf true, return tentative projects alongside the normal ones; excluded by default.
only_admin_accessNoIf true, only return the projects the calling user administers.
project_owner_idsNoFilter projects by the user who owns them.
project_category_idsNoFilter projects by category.
include_subcategoriesNoIf true, project_category_ids also matches the categories nested under the ones given.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false; the description adds that the call returns an exact count, a single number, and no rows, and stresses 'one call' / no paging. It does not add caveats about auth or rate limits, but the read-only nature is reinforced and nothing in the description contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, all informative: output shape, usage trigger, and alternative tool. The most important fact ('one call, one number, no rows') is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even with 18 parameters, the description is complete for selection and invocation: it states return behavior, names the sibling to avoid, and the schema fully documents parameter semantics. Output schema covers return value details, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 18 parameters. The description adds a brief mapping of common question types (mine, late, per category, per tag) to the filter space, which is helpful but not new semantic detail beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('count'), a specific resource ('projects'), and the exact output semantics ('one call, one number, no rows'). It clearly distinguishes from list_projects, which returns rows, and from sibling count tools by saying 'projects'. No ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it: for 'how many projects' questions, and explicitly names the alternative (twprojects-list_projects) and when that should be used instead ('when the rows are needed'). This is model guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-count_tasksA
Read-only
Inspect

Exact task count for any filter set: one call, one number, no rows. Use for "how many" questions (totals, late, per person, per project, per tag, completed in a window) instead of paging twprojects-list_tasks to count rows. Note due_before excludes tasks with no due date, unless a related milestone due date matches. Use twprojects-list_tasks when the rows are needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_idsNoA list of tag IDs to filter tasks by tags.
due_afterNoOnly include tasks due after this date, excluding the day itself โ€” unless due_before is set too, which makes both bounds inclusive. A task with no due date is matched on its milestone's.
due_beforeNoOnly include tasks due before this date, excluding the day itself โ€” unless due_after is set too, which makes both bounds inclusive. A task with no due date is matched on its milestone's.
project_idNoThe ID of the project from which to retrieve tasks. Omit to list tasks across all projects.
date_filterNoWhere the task's dates fall relative to today, in your own timezone. This is the filter for "late", "overdue", "due today", "started" and "upcoming"; omit it for no date restriction. overdue: due before today and not completed โ€” this is "late", and it never returns completed tasks whatever show_completed says. today: due today, without adding the overdue ones. thisweek: the calendar week containing today, the days of it already past included. upcoming: due today or later. started: the start date has arrived and the due date has not passed โ€” start date on or before today, and either no due date at all or one falling today or later. within7, within14, within30, within365: due between today and that many days from today, both days included. nodate: no start date, no due date and no milestone. anytime: no date restriction, what the endpoint applies when this is omitted. Completed tasks stay hidden unless show_completed is true, and overdue never returns one even then; for completed work alone use only_completed, which combines with any value here except overdue. A task with no due date of its own is matched on its milestone's.
search_termNoA search term to filter tasks by name.
start_afterNoOnly include tasks whose own start date falls on or after this date; the day itself matches. A task with no start date never matches โ€” there is no milestone fallback. There is no upper bound on the start date, so for work that has already begun use date_filter=started instead.
tasklist_idNoThe ID of the tasklist from which to retrieve tasks. Takes precedence over project_id.
created_afterNoOnly include tasks created at or after this moment; the boundary itself matches. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
updated_afterNoOnly include tasks updated strictly after this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
created_beforeNoOnly include tasks created at or before this moment; the boundary itself matches. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
match_all_tagsNoIf true, match all tags; if false, match any.
only_completedNoIf true, return only completed tasks. It combines with every other filter, date_filter included โ€” except date_filter=overdue, which never matches a completed task and so returns nothing. Tasks in completed tasklists still need show_completed.
only_unplannedNoIf true, only return tasks that are unplanned, meaning they are missing an assignee, a due date, or estimated time.
show_completedNoIf true, include completed tasks and tasks belonging to completed tasklists; both excluded by default.
updated_beforeNoOnly include tasks updated strictly before this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
completed_afterNoOnly include tasks completed at or after this moment; the boundary itself matches. Setting it narrows the result to completed tasks. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
only_unassignedNoIf true, only return tasks that have no assignee.
completed_beforeNoOnly include tasks completed at or before this moment; the boundary itself matches. Setting it narrows the result to completed tasks. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
assignee_user_idsNoFilter tasks by assignee.
created_by_user_idsNoFilter tasks by creator.
exclude_assignee_user_idsNoLeave out tasks assigned to any of these users. A task is dropped when any one of the listed users is assigned to it, even when it also carries assignees you did not exclude. A user reached only through a team, company or job-role assignment on the task is not matched. Combines with assignee_user_ids and every other filter.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond those: the result is a single number with no rows, eliminating pagination expectations, and it flags the due_before edge case about tasks without due dates.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler. The core behavior is front-loaded in the first sentence, the use case in the second, and the critical due_before caveat plus sibling routing in the third. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only count endpoint with 22 fully described optional parameters and an output schema, the description covers the main gaps an agent needs: efficiency rationale, example filter categories, and the due-date edge case. It does not discuss auth or rate limits, but the annotations and schema already cover the operation's safety and parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema carries the detailed parameter semantics. The description still adds value by mapping common questions to filter groupsโ€”'per person, per project, per tag, completed in a window'โ€”and by restating the milestone-related due-date caveat in plain language.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a precise operation: 'Exact task count for any filter set: one call, one number, no rows.' It clearly identifies the resource (tasks) and the kind of answer (a count), and it distinguishes itself from twprojects-list_tasks by emphasizing no row data is returned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use this tool for 'how many' questions instead of paging through list_tasks, and it names the alternative: 'Use twprojects-list_tasks when the rows are needed.' This gives the agent a clear decision rule with both when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-count_timelogsA
Read-only
Inspect

Exact count of time entries for any filter set: one call, one number, no rows. This counts entries, not hours โ€” for logged, billable or billed time totals use twprojects-summarize_timelogs. Use for "how many time entries" questions (per project, per task, per person, in a date window) instead of paging twprojects-list_timelogs to count rows.

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_idsNoA list of tag IDs to filter timelogs by tags.
task_idNoThe ID of the task from which to retrieve timelogs. Omit to list timelogs across all tasks.
end_dateNoEnd of the timelog window; the boundary itself is included, and a plain date covers that whole day. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
ticketIdsNoFilter timelogs by associated desk ticket.
project_idNoThe ID of the project from which to retrieve timelogs. Omit to list timelogs across all projects.
start_dateNoStart of the timelog window; the boundary itself is included. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
billable_typeNoRestrict the results to billable or non-billable timelogs. Omit, or pass all, to include both. For billable hours rather than the entries themselves, twprojects-summarize_timelogs reports them without paging.
invoiced_typeNoRestrict the results to timelogs that have or have not been added to an invoice. Omit, or pass all, to include both. Invoiced is not the same as billed: noninvoiced answers "what is still to be invoiced" only for billable time, so pass billable_type alongside it.
match_all_tagsNoIf true, match all tags; if false, match any.
assigned_team_idsNoFilter timelogs by assigned team.
assigned_user_idsNoFilter timelogs by assigned user.
assigned_company_idsNoFilter timelogs by assigned company.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only nature is covered. The description adds meaningful behavioral context beyond that: it is a count of entries rather than hours, returns a single number, and does not page rows. This helps prevent the common mistake of treating the count as a duration total.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: the core behavior, the critical 'not hours' distinction with a named alternative, and the use case with a named alternative. The key fact is front-loaded and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the annotations cover safety, and the description routes between count, summarize, and list tools, nothing essential is missing. An agent can decide to call this tool and understand what it will receive without additional inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 12 parameters in detail, including date boundary behavior and enum meanings. The description adds the high-level notion of filtering by project, task, person, or date window, but it does not need to repeat parameter-level detail. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it returns the exact count of time entries for any filter set, 'one call, one number, no rows.' It explicitly differentiates itself from twprojects-summarize_timelogs and twprojects-list_timelogs, so an agent can immediately tell what this tool does and does not do.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance ('how many time entries' questions) and when-not-to-use guidance: use twprojects-summarize_timelogs for hour totals and avoid paging twprojects-list_timelogs just to count rows. This is strong, actionable routing among sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_allocationAInspect

Commit a user's time to a project over a date range (a scheduler allocation). This is planned time, a separate plane from task estimates and logged time.

ParametersJSON Schema
NameRequiredDescriptionDefault
colorYesThe allocation's colour as six hexadecimal digits, with or without a leading '#'.
titleYesThe name of the allocation, at most 100 characters.
end_dateYesThe last day of the allocation (format: YYYY-MM-DD). Must not precede start_date. Extending it ADDS committed time rather than spreading the existing total: the per-day rate is what is held constant, so the total is the working days in the range times that rate.
project_idYesThe ID of the project to commit the time to.
start_dateYesThe first day of the allocation (format: YYYY-MM-DD).
descriptionNoAn optional description of the allocation, at most 255 characters.
is_billableNoWhether the allocated time can be charged to a client.
linked_task_idsNoThe tasks to associate with the allocation. This REPLACES the whole set of linked tasks, so send every task that should stay linked. To add or remove one task without touching the rest, use twprojects-link_task_to_allocation or twprojects-unlink_task_from_allocation instead.
seconds_per_dayYesThe time committed on each working day of the range, in SECONDS โ€” 4 hours a day is 14400. Must be between 60 (one minute) and 86400 (24 hours). Seconds rather than hours because the hours form is a float and rounds. This rate is what is held constant: the total is the working days in the range times this, so widening the range adds committed time.
assigned_user_idYesThe ID of the user whose time is committed. Accepts a real person or a placeholder user โ€” a stand-in used to plan work before the person who will do it is known. Nothing in the response distinguishes the two, so confirm which one an ID refers to before reporting who is booked.
ignore_collisionsNoSkip the capacity check altogether. Prefer inform_of_over_allocation: this one also lets the change through, but suppresses the over-allocation report with it, so nobody is told the person is over-booked. It takes precedence when both are set.
inform_of_over_allocationNoAccept a change that puts the user over their capacity and report it, rather than rejecting it. Defaults to true, and the result says so when it happens. Turning it off means an over-allocating change is refused outright.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only provide basic false booleans, so the description carries some burden. It adds meaningful context by clarifying this is planned time, separate from actual logged time, but it does not disclose side effects like capacity checks, linked-task replacement, or that extending the date range adds committed time. Those behaviors are documented in the schema, not the description itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. The core action is front-loaded, and the clarifying distinction about planned time is concise and valuable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema is rich enough to compensate for the brief description, explaining the important nuances of end_date, seconds_per_day, linked_task_ids, and collision flags. The main gap is the lack of an output schema and no explicit statement of what the response contains, but the parameter descriptions provide strong situational completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the parameter descriptions are unusually detailed, covering units, date semantics, collision behavior, and linked-task replacement. The tool description itself adds no parameter-level meaning, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Commit a user's time to a project over a date range') and clearly identifies the resource as a scheduler allocation. It also distinguishes this from task estimates and logged time, which helps differentiate it from siblings like twprojects-create_timelog.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context that this tool is for planned/scheduler time rather than logged time or task estimates, implying when to choose it over time-logging tools. It does not explicitly name alternatives for modifications or linking tasks, but the schema parameter descriptions fill much of that gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_commentBInspect

Create comment on a task, milestone, notebook, file, or link.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesThe content of the comment. The content can be added as text or HTML.
notifyNoWho to notify of the new comment. Omit it unless the user named who to notify: the default notifies every follower of the related entity, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string "all" to notify all project members, the boolean true to notify all followers of the related entity, the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {"user_ids": [123, 456]}).
objectYesThe object to create the comment for. It can be a tasks, milestones, files or notebooks.
content_typeNoThe content type of the comment. It can be either 'TEXT' or 'HTML'.
attachment_refsNoReferences of files to attach to the comment, as returned by twprojects-create_upload_url or twprojects-create_file. Each is "tf_" followed by a UUID and the file extension, and can only be used once, so reserve an upload for each place a file should go. Files are added to whatever is already attached; nothing is removed.
notify_current_userNoWhether the current user should be notified about the new comment.

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the description adds no behavioral context beyond those flags. It does not disclose side effects like notifications, permission requirements, or the non-idempotent nature of creating a new comment.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short sentence with no filler, and the useful list of supported object types is front-loaded. Every word contributes meaning, making it an appropriately concise definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description alone is thin for a tool with six parameters, a nested object, and an enum, but the schema carries full parameter semantics. There is no mention of return behavior, and no guidance distinguishing this from the closely related twspaces-create_comment tool, leaving moderate gaps in overall context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema has detailed parameter descriptions, especially for notify and object. The tool description itself does not add any parameter-level meaning, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Create') and resource ('comment') and enumerates the five target object types (task, milestone, notebook, file, link), so the agent can tell what this tool does. It is less explicit about distinguishing itself from twspaces-create_comment, but the listed object types make the core purpose clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when creating a comment on one of the listed object types. It does not explicitly state when not to use it, nor does it name alternatives such as twspaces-create_comment for space comments or twprojects-update_comment for editing existing comments.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_companyCInspect

Create company (aka client).

ParametersJSON Schema
NameRequiredDescriptionDefault
faxNoThe fax number of the company.
zipNoThe ZIP or postal code of the company.
cityNoThe city of the company.
nameYesThe name of the company.
phoneNoThe phone number of the company.
stateNoThe state of the company.
profileNoA profile description for the company.
tag_idsNoA list of tag IDs to associate with the company.
websiteNoThe website of the company.
email_oneNoThe primary email address of the company.
email_twoNoThe secondary email address of the company.
manager_idNoThe ID of the user who manages the company.
address_oneNoThe first line of the address of the company.
address_twoNoThe second line of the address of the company.
email_threeNoThe tertiary email address of the company.
industry_idNoThe ID of the industry the company belongs to.
country_codeNoThe country code of the company, e.g., 'US' for the United States.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

All annotations are false, so the description carries the full burden of behavioral disclosure, yet it reveals nothing beyond the fact of creation. It does not mention whether duplicate names create duplicate companies, what the response contains, whether side effects occur, or any permission requirements. The description does not contradict the annotations, but it adds no behavioral context beyond them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with zero filler, and the parenthetical 'aka client' earns its place by clarifying domain terminology. It is appropriately front-loaded with the verb first, though the brevity borders on under-specification rather than deliberate conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with 17 parameters and no output schema, the description omits critical context: what the tool returns on success, how it relates to twdesk-create_company, and any uniqueness or side-effect behavior. The rich schema covers parameters, but the description fails to orient the agent on expected outcomes and tool selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all 17 parameters individually documented (e.g., 'The ID of the user who manages the company', 'A list of tag IDs to associate with the company'). Per the baseline rule, the description need not compensate when the schema is complete, and it does not add parameter-level meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Create company') and adds useful domain context with '(aka client)'. However, it does not distinguish this tool from the sibling twdesk-create_company, which performs the same apparent action, so it earns a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus twdesk-create_company, twprojects-update_company, or other related siblings. No exclusions, prerequisites, or alternative-routing conditions are provided, leaving the agent to guess based on naming conventions alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_custom_fieldCInspect

Create custom field.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe display name of the custom field.
typeYesThe data type of the custom field.
unitNoThe unit associated with the custom field, when applicable.
entityYesThe type of entity this custom field can be applied to. Use 'all' for installation-level custom fields that are available across the workspace.
formulaNoThe formula expression for 'formula' type custom fields.
optionsNoType-specific options for the custom field. For 'dropdown' and 'multiselect' types, provide {"choices": [{"value": "...", "color": "#rrggbb"}, ...]}. For 'rating' type, provide {"icon": "star|heart|...", "color": "#rrggbb"}. For 'number-decimal' type, provide {"decimals": <int>}.
requiredNoWhether the custom field must have a value when set on an entity.
project_idNoThe ID of the project to scope the custom field to. When omitted, the custom field is created at the installation level.
descriptionNoAn optional description for the custom field.
currency_codeNoThe ISO currency code for 'currency' or 'financial' type custom fields.

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal that the operation is not read-only and not idempotent, and the description adds no behavioral context beyond that. It does not disclose creation-level implications, such as whether the field can be modified later, whether unique names are enforced, or what side effects occur when the field is applied to entities.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely brief and front-loaded, but it repeats the tool name with no added information. This is under-specification rather than effective conciseness, especially given the tool's 10-parameter schema and complex type-specific options.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with 10 parameters, type-specific options, and installation versus project scoping, the description is far too thin. The schema explains parameter formats but does not replace the need for guidance on when certain types require options, how entity scoping works, or what the tool returns on success.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage and rich explanations for parameters like options, entity, and project_id, so the schema carries the semantic burden. The description itself contributes no parameter-level meaning, which keeps this at the baseline rather than above it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Create') and resource ('custom field'), so the core intent is clear. However, it does not distinguish this tool from closely related siblings such as create_custom_field_value, create_custom_item_field, or update_custom_field, so the agent must infer the boundary from the name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives. There is no mention of scoping choices, whether this is for project-level vs installation-level fields, or when update_custom_field or custom field value creation would be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_custom_field_valueAInspect

Set a custom field value on a task, project or company. The custom field must already exist and be applicable to the target entity.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueNoThe value to assign, typed per the field: string (text), number (number), boolean (checkbox), choice value string (dropdown/status; array for multiselect), ISO-8601 string (date).
entityYesThe type of entity the custom field value is attached to.
entity_idYesThe ID of the task, project or company the custom field value is attached to.
country_codeNoThe country code for currency-type custom field values.
currency_codeNoThe ISO currency code for currency-type custom field values.
custom_field_idYesThe ID of the custom field the value belongs to.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag this as a non-read-only, non-idempotent operation; the description adds the useful constraint that the field must exist and be applicable, implying failure on invalid targets. It does not disclose whether an existing value is overwritten or whether a duplicate call errors, which would be more transparent for a write operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler: the action and target are front-loaded, and the key precondition is stated immediately after. Every sentence adds information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and only minimal annotations, the description is enough to start calling the tool but omits expected behavior when a value already exists and gives no guidance on return values. The rich value parameter schema and sibling names fill some gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all parameters, including a detailed value description with types and formats, so the schema carries most parameter meaning. The description contributes only the cross-parameter constraint that the custom_field_id must be applicable to the selected entity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a direct verb ('Set') and names the resource ('a custom field value') plus the valid scopes ('task, project or company'), so an agent can tell this is a write operation on an existing custom field. It is clear but does not explicitly distinguish itself from the sibling update_custom_field_value beyond the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The prerequisite that the custom field 'must already exist and be applicable to the target entity' gives a meaningful condition for when this tool is valid. It does not name alternatives or state when to use update_custom_field_value instead, so guidance remains mostly implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_custom_itemAInspect

Create a new custom item type (e.g. Contracts, Leads, Deals) on a project. Custom items are user-defined entity types โ€” Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID that will own the new custom item type.
descriptionNoAn optional human-readable description for the custom item type.
display_nameYesThe display name of the custom item type (e.g. "Contracts").
label_pluralNoPlural label for many records (e.g. "Contracts"). Defaults to the display name when omitted.
label_singularNoSingular label for one record (e.g. "Contract"). Defaults to the display name when omitted.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey that this is not read-only, not idempotent, and not destructive. The description adds useful conceptual context that a custom item type is a user-defined entity type scoped to a project, but it does not disclose operational details such as permissions required, duplicate-name behavior, or downstream effects of creating a new type.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by useful domain and selection context. It is slightly redundant in repeating Contracts/Leads/Deals and in re-explaining custom items across two sentences, but every sentence contributes to the agent's routing decision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description, combined with a fully documented schema and non-conflicting annotations, gives an agent enough to select and invoke the tool correctly. It includes domain framing, built-in exclusions, and a verification workflow via list_custom_items. It does not cover edge cases like duplicate types or permissions, but those are not essential for basic invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents every parameter clearly. The description's examples align with display_name but do not add meaningful semantics beyond the schema. This is a baseline 3 case where the schema carries the parameter documentation burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Create a new custom item type... on a project.' It clearly distinguishes custom item types from built-in Teamwork concepts and from record-level operations by repeatedly emphasizing 'type.' Examples like Contracts, Leads, and Deals make the target concrete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use these tools when the entity is NOT a built-in Teamwork concept, and lists those built-in concepts. It also provides an explicit fallback: if unsure, call twprojects-list_custom_items on the relevant project to confirm. This gives clear when/when-not guidance and names a concrete alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_custom_item_fieldAInspect

Add a field (column) to a custom item type. Field types include text, number, dropdown, multiselect, checkbox, url, user, date, time and datetime. Custom items are user-defined entity types โ€” Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesField data type.
optionsNoChoices for dropdown/multiselect fields. Each option is {label: "Active", color: "#22c55e"}.
tw_typeNoOptional sub-classification for dropdown fields. Use "status" for a Status field.
definitionNoOptional type-specific configuration as a JSON object. Examples: for number-decimal fields {"precision": "2", "unit": {"type": "currency"}}; for user fields {"limit": 1, "source": "workspace"}. See the API docs for the exact shape per type.
display_nameYesHuman-readable name of the field (e.g. "Status").
custom_item_idYesCustom item type ID that will own the new field.
position_after_idNoPlace this field after the given field ID. Null appends to the end.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal this is not read-only and not idempotent, and the description clearly states it 'Adds' a field, matching that. It adds useful context about custom item types but does not go deeper into behavioral details such as whether dropdown/multiselect fields require options, what the response looks like, or whether fields can be removed later. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with the core action front-loaded. The second sentence enumerates supported field types, useful for quick scanning. The third sentence provides necessary conceptual context and usage routing without padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create tool with a rich, fully-described schema, the description gives enough conceptual grounding to distinguish custom items from built-in concepts and directs the agent to confirm ambiguity. The only noticeable gap is that, with no output schema, it does not describe the expected return value, but this is a minor omission for a create operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema description coverage is 100%, so each parameter is already documented. The description adds a high-level list of field types and explains the custom item concept, but it does not add meaning beyond the schema for individual parameters like options, definition, or position_after_id. Baseline 3 is appropriate given full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Add a field (column) to a custom item type.' It then explains what custom items are, distinguishing them from built-in Teamwork concepts and clarifying that this tool operates on user-defined entity types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs the agent to use these tools when an entity is NOT a built-in Teamwork concept and lists which concepts count as built-in. It also tells the agent to call twprojects-list_custom_items to confirm an unrecognized entity, which is practical routing guidance. However, it does not explicitly contrast this tool with nearby siblings like create_custom_item or create_custom_field.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_custom_item_recordAInspect

Create a record (row) on a custom item type. For example, add a Contract on the Contracts type. Pass field values by name; the tool resolves names to the API's internal IDs. Custom items are user-defined entity types โ€” Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDisplay name of the record (e.g. "Acme Inc Contract").
section_idNoOptional section ID to place the record in.
field_valuesNoField values to set on the record. Each entry is {field_name, value}. Field names are matched case-insensitively against the custom item type's fields. Values are coerced by field type: dropdown/multiselect accept option labels or option twIds; date/time/datetime accept ISO-8601 strings; checkbox accepts bool or yes/no/true/false; number accepts numeric or numeric string; user accepts a user ID (or array of IDs for multi-user fields). To clear a field, send null.
custom_item_idYesCustom item type ID that will own the new record.
position_after_idNoPlace the record after the given record ID. Null appends to the end.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds genuinely useful behavior beyond the annotations: field values are passed by display name and the tool 'resolves names to the API's internal IDs', plus the heuristic of treating unrecognized entities as custom items. It does not disclose error behavior for unknown field names or the response format, but the annotated safety profile lowers the burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and a concrete example, then moves to the routing rule and fallback. At roughly five sentences it is somewhat longer than minimal, but every sentence earns its place โ€” the example, the built-in exclusion list, and the list_custom_items fallback are all functional rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with five parameters (including a nested field_values array) and no output schema, the description provides strong conceptual coverage: what custom items are, when to use the family, an example, and a confirmation path. The main gap is that the description does not state what the call returns (e.g., created record ID) since no output schema exists, and it does not mention failure modes for invalid field names.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters, including the detailed coercion rules for field_values (dropdown option labels, ISO-8601 dates, bool for checkboxes, null to clear). The description's 'resolves names to the API's internal IDs' adds mild context for field_values, but most of the semantic weight is already carried by the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('Create a record (row) on a custom item type') and a concrete example ('add a Contract on the Contracts type'). It clarifies that custom items are user-defined entity types, but it does not explicitly distinguish this tool from close siblings like twprojects-create_custom_item (which creates the type itself) โ€” the differentiation is only implicit in the phrase 'record (row) on a custom item type'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit routing guidance: use these tools when the entity is NOT a built-in Teamwork concept, and it names an explicit fallback ('call twprojects-list_custom_items on the relevant project to confirm') for unrecognized entity names. However, the guidance applies to the whole custom-item family rather than to this specific tool versus its create/update/list siblings, so no when-not-to-use rule is given for the record tools themselves.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_fileAInspect

Upload short text you are generating yourself, such as a plan, a spec or a CSV, so it can be attached to a task, comment or message. Returns a single-use reference; pass it in attachment_refs on twprojects-create_task, twprojects-update_task, twprojects-create_comment or twprojects-create_message. Content is sent inline as base64, which means you have to emit the whole file as text, so use twprojects-create_upload_url instead for anything that already exists as a file โ€” it hands back a URL to send the bytes to directly, and is the only safe option for a document that must stay byte-for-byte identical.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesThe file content, base64-encoded with the standard alphabet. It must decode to between 1 byte and 5242880 bytes.
nameYesThe file name, including its extension, for example "plan.md". Teamwork.com works out how to display the file from the extension, so a name without one is harder to open. Any directory part is removed.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already show readOnlyHint=false, so a write is expected. The description goes beyond annotations by disclosing that content is sent inline as base64, requiring the agent to emit the whole file as text, and that the returned reference is single-use. This is useful operational context that annotations do not provide. It stops short of describing error conditions or rate limits, but for this tool the key behaviors are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each purposeful. The first sentence states the core use case, the second explains the return value and how to use it, and the third clarifies the alternative and conditions. Information is front-loaded and no filler exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with only two params. The description covers the full workflow: what to upload, how the content is transmitted, where to pass the reference, and when to use an alternative. Since there is no output schema, mentioning the single-use reference is sufficient. An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: both 'name' and 'data' have detailed descriptions, including base64 encoding and size limits. The description does not add additional parameter semantics beyond what the schema already states. It reinforces the need to emit file as text, but that is about the tool behavior rather than parameter meaning. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action (upload short text you generate), the resource type (plan, spec, CSV), and the downstream use (attaching to tasks/comments/messages). It also explicitly contrasts with twprojects-create_upload_url, making it easy to distinguish from that sibling. No ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use and when-not-to-use guidance: use this for short text you generate yourself, and use twprojects-create_upload_url for existing files that must stay byte-for-byte identical. Names the alternative directly and the condition that selects it, leaving no inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_jobroleBInspect

Create job role.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the job role.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false, confirming a write operation, but the description adds no behavioral details such as side effects, required permissions, or error conditions. It merely restates the tool's name without disclosing anything beyond what annotations already show.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence that directly states the purpose without unnecessary words. For a simple create operation with one parameter, this level of conciseness is appropriate and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create operation with no output schema and minimal annotations, the description is too sparse. It does not explain return values, potential side effects, or even typical expectations like name uniqueness. While simple, the tool still lacks necessary context for an agent to fully understand the operation's implications.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage with a clear description for the 'name' parameter. The tool description adds no extra meaning about parameters, so it provides nothing beyond the schema, which is the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Create job role' clearly specifies the action (create) and the resource (job role), making its purpose unambiguous. It distinguishes itself from sibling tools like get_jobrole, update_jobrole, and list_jobroles through the explicit verb+resource combination.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any context, prerequisites, or exclusions, making it purely a statement of action without any usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_messageCInspect

Create message in a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesThe body of the message.
titleYesThe title of the message.
notifyNoWho to notify of the new message. Omit it unless the user named who to notify: the default notifies all project members, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string "all" to notify all project members, the boolean true as an alias for "all", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {"user_ids": [123, 456]}).all
project_idYesThe ID of the project to create the message in.
attachment_refsNoReferences of files to attach to the message, as returned by twprojects-create_upload_url or twprojects-create_file. Each is "tf_" followed by a UUID and the file extension, and can only be used once, so reserve an upload for each place a file should go. Files are added to whatever is already attached; nothing is removed.
notify_current_userNoWhether the current user should be notified about the new message.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a non-read-only, non-idempotent mutation, but the description adds no behavioral context beyond that. It does not mention side effects like default notifications to all project members or that attachment_refs are single-use; those details live only in the schema, not in the tool description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It is appropriately concise, though it does not add much beyond the tool name and project context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with moderately complex parameters and no output schema, the description is minimal but the schema covers the important operational details. It is adequate for selecting the tool, though it leaves return behavior and side-effect disclosure to the parameter descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline of 3 applies. The tool description itself adds no parameter meaning, but the schema's parameter descriptions, especially for notify and attachment_refs, are detailed and self-sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Create') and resource ('message'), and the phrase 'in a project' gives a scoping context that distinguishes it from chat messaging or message replies. However, it does not explicitly name or differentiate from sibling tools like create_message_reply or update_message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives, no exclusions, and no prerequisites. The project context is implied but the description does not tell an agent when not to use it or which sibling tool to prefer in other cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_message_replyCInspect

Create message reply.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesThe body of the message reply.
notifyNoWho to notify of the new reply. Omit it unless the user named who to notify: the default notifies all project members, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string "all" to notify all project members, the boolean true as an alias for "all", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {"user_ids": [123, 456]}).all
message_idYesThe ID of the message to create the reply in.
notify_current_userNoWhether the current user should be notified about the new message reply.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnly=false, destructive=false, and idempotent=false, but the description adds no behavioral context beyond the word 'Create'. It does not mention side effects, notification behavior, permissions, or return behavior. The description does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, but it is under-specified rather than effectively concise. The single sentence merely restates the tool name and provides no useful content, so it does not earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write operation with no output schema and minimal description, an agent would need at least some contextual guidance about what creating a message reply entails. The schema covers parameter semantics, but the description leaves the tool's purpose, relationship to parent messages, and notification behavior to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema carries full responsibility for parameter meaning. The description adds no parameter-level detail, but compensation is unnecessary because the schema, especially for the 'notify' parameter, is already highly detailed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Create message reply.' is a verbatim restatement of the tool's name and title. It does not elaborate on what a message reply is, where it is created, or what distinguishes it from twprojects-create_message or twprojects-update_message_reply.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives such as create_message, update_message_reply, or list_message_replies. There is no mention of prerequisites, context, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_milestoneBInspect

Create milestone in a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the milestone.
tag_idsNoA list of tag IDs to associate with the milestone.
due_dateYesThe due date of the milestone (format: YYYYMMDD). Used for related tasks without their own due date.
assigneesYesAssignees for the milestone.
project_idYesThe ID of the project to create the milestone in.
descriptionNoA description of the milestone.
tasklist_idsNoTasklists to associate with the milestone.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral details beyond what the annotations already indicate. Annotations signal that this is a mutating, non-idempotent operation, but the description does not disclose side effects, permission requirements, uniqueness constraints, or what happens to associated tasks, tasklists, or tags. There is no contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler or redundancy. However, it is so terse that it mostly restates the tool's name and adds little distinctive information, so it does not earn a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters, a nested assignees object, and no output schema, the description is too thin to fully orient an agent. It does not mention expected response behavior, side effects, or how required fields relate to the milestone creation workflow. The schema covers inputs, but the tool-level description leaves important context unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents all 7 parameters, including the due_date format (YYYYMMDD), the assignees anyOf structure, and optional tag_ids/tasklist_ids. The description itself adds no parameter-level meaning beyond the tool's general purpose, so the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: 'Create milestone in a project.' The verb clearly distinguishes it from siblings like update_milestone, get_milestone, and list_milestones, and the phrase 'in a project' correctly scopes the operation to a project context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives. Among the sibling tools are update_milestone, list_milestones, get_milestone, and count_milestones, but the description does not mention them or explain which operation to choose under different circumstances.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_notebookCInspect

Create notebook in a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the notebook.
typeYesThe type of the notebook.
tag_idsNoA list of tag IDs to associate with the notebook.
contentsYesThe contents of the notebook.
project_idYesThe ID of the project to create the notebook in.
descriptionNoA description of the notebook.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, idempotentHint=false, and destructiveHint=false, and the description adds no behavioral context beyond the word 'Create'. It does not mention side effects, required permissions, or what happens to existing notebooks/tags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler or repetition. It is concise, though it is also very sparse and could include a bit more actionable context without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating tool with six parameters and no output schema, a five-word description is not complete. It omits what the tool returns, any important side effects, and when to prefer update_notebook, leaving the agent to rely entirely on the schema and sibling names.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all six parameters, including the required name, project_id, contents, and type. The description's 'in a project' adds no parameter semantics beyond the existing project_id description, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Create') and resource ('notebook') and states the scope ('in a project'), so an agent can tell it creates a notebook resource. It does not explicitly differentiate from sibling tools like update_notebook or get_notebook, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to choose this tool over alternatives such as update_notebook or list_notebooks, and no mention of prerequisites (e.g., an existing project ID or required contents/type). The only signal is the verb 'Create', which is implied rather than stated as a usage policy.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_projectCInspect

Create project.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the project.
end_atNoEnd date of the project (format: YYYYMMDD).
tag_idsNoA list of tag IDs to associate with the project.
owned_idNoThe ID of the user who owns the project.
start_atNoStart date of the project (format: YYYYMMDD).
company_idNoThe ID of the company associated with the project.
category_idNoThe ID of the category to which the project belongs.
descriptionNoThe description of the project.

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate that this is a non-read-only, non-destructive, non-idempotent operation. The description adds no behavioral context beyond that, such as whether duplicate names are rejected, what the response looks like, or how defaults are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, but it is under-specified rather than efficiently concise. Two words do not provide enough substance for an 8-parameter creation tool, even though the message is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 optional parameters, no output schema, and a large sibling tool family, the bare description leaves too much to inference. It does not mention what the created project response contains, how optional parameters interact, or how this differs from creating a project template or category.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter is already documented with type and meaning. The description itself adds no parameter-level insight, keeping it at the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete action and resource: 'Create project.' This is clear enough to distinguish it from sibling tools like create_project_category or create_project_template by resource type. However, it does not elaborate on what creating a project entails, so it is slightly above average but not fully informative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool instead of alternatives, nor any mention of prerequisites or selection criteria. The description gives no context about when project creation is appropriate versus other project-related operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_project_categoryCInspect

Create project category.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the project category.
colorNoThe color of the project category in hex format (e.g., #FF5733).
parent_idNoThe ID of the parent project category, if any. This allows for nested categories.

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnly=false, idempotent=false, and destructive=false, and the description adds no behavioral context beyond the fact of creation. It does not mention permissions, duplicate behavior, or effects on parent categories, so it provides no value beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded, but it is under-specified rather than appropriately sized. One sentence is enough for the core action, but the absence of any usage or behavioral context makes it feel minimal rather than complete.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no description of the return value, side effects, or prerequisites. With 3 parameters including optional parent_id, an agent needs more context than 'Create project category' to confidently invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so name, color, and parent_id are already documented, including hex format and nesting semantics. The description adds no parameter details, which is acceptable given the baseline of 3 for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action and resource: 'Create project category.' This is specific enough to distinguish creating a project category from creating a project or project template. It does not explicitly contrast with siblings, but the resource noun is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives such as update_project_category, list_project_categories, or create_project. The agent must infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_project_templateCInspect

Create project template.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the project template.
end_atNoEnd date of the project template (format: YYYYMMDD).
tag_idsNoA list of tag IDs to associate with the project template.
owned_idNoThe ID of the user who owns the project template.
start_atNoStart date of the project template (format: YYYYMMDD).
company_idNoThe ID of the company associated with the project template.
category_idNoThe ID of the category to which the project template belongs.
descriptionNoThe description of the project template.

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral context beyond what the annotations already convey; readOnlyHint, idempotentHint, and destructiveHint are already present. It does not disclose defaults, duplicate behavior, validation rules, permission requirements, or any side effects of creating a template.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single three-word sentence and is front-loaded, but it essentially restates the tool name and annotation title. It is under-specified rather than usefully concise, since it provides no additional information an agent could not already infer from the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description should explain at least what the created template is or what the agent should expect, but it does not. The schema covers parameters and annotations cover safety, yet the lack of usage guidance, return expectations, and relationship to other template/project tools leaves the definition thin.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and all eight parameters have individual descriptions and types. The tool description itself adds no parameter-level meaning, but the schema already does the heavy lifting, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Create' and the resource 'project template', so an agent can tell this tool creates a project template. It does not, however, differentiate this from closely related sibling tools such as twprojects-create_project or say what a template is or how it differs from a project.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives, no mention of prerequisites, and no exclusionary context. The description simply says 'Create project template' with no reference to related create tools or list_project_templates.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_skillCInspect

Create skill.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the skill.
user_idsNoThe user IDs associated with the skill.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate this is not read-only, not idempotent, and not destructive, but the description discloses nothing beyond those already-structured hints. It does not mention duplicate behavior, required permissions, return values, or any other observable effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The two-word description is technically concise, but the brevity reflects under-specification rather than efficient clarity. There is no front-loaded structure or supplementary information that helps an agent use the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, no usage guidance, and no behavioral context, the description is not complete enough for an agent to confidently invoke the tool. It does not explain what a 'skill' is, what the created resource represents, or what the response will contain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage with descriptions for both 'name' and 'user_ids', so the schema carries the parameter documentation burden. The description adds no additional meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is exactly 'Create skill.', which merely restates the tool name and title with the project prefix removed. It identifies a verb and resource but adds no distinguishing detail or context beyond what the name already conveys.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus related tools such as twprojects-update_skill, twprojects-get_skill, or twprojects-list_skills. No context, prerequisites, or alternative conditions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_tagCInspect

Create tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the tag. It must have less than 50 characters.
colorNoThe color of the tag. It must be a valid hex color code.
project_idNoThe ID of the project to associate the tag with. This is for project-scoped tags.

TDQS

C2.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false, destructiveHint=false, and idempotentHint=false, but the description adds no behavioral context beyond that. It does not disclose whether tags are unique per project, whether creation can overwrite existing tags, or any side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, but it is underspecified rather than appropriately concise. A single generic sentence does not provide enough substance to guide correct tool selection or invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with three parameters, no output schema, and multiple sibling create-tag tools, 'Create tag.' is completely inadequate. It fails to explain the project association, required fields, color formatting, or any behavioral expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all three parameters: name, color, and project_id. The description adds no parameter meaning, but the baseline of 3 is appropriate given the schema covers all parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Create tag.' is essentially a tautology of the tool name twprojects-create_tag and the annotation title 'Create Tag'. It states only that a tag is created, with no mention of the project scope that distinguishes it from sibling tools like twdesk-create_tag or twspaces-create_tags.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives. Multiple sibling tools also create tags, and the description does not clarify that this one is for project-scoped tags or how it differs from twdesk-create_tag or twspaces-create_tags.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_taskCInspect

Create task in a tasklist.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the task.
notifyNoWhether to notify the task's assignees and followers, which sends them an email. Defaults to true. Set it to false for bulk or housekeeping changes nobody needs to hear about.
tag_idsNoA list of tag IDs to associate with the task.
due_dateNoThe due date of the task. If omitted, falls back to the milestone due date when one is set.
priorityNoThe priority of the task.
progressNoThe progress of the task, as a percentage (0-100). Only whole numbers are allowed.
stage_idNoThe ID of the workflow stage to place the new task in. Required together with workflow_id. Omit both to leave the task in the workflow's backlog. Use twprojects-list_workflow_stages to find one.
assigneesNoAssignees for the task.
start_dateNoThe start date of the task.
descriptionNoThe description of the task. Support for plain text and Markdown formatting.
tasklist_idYesTasklist ID. Use twprojects-list_tasklists to find one.
workflow_idNoThe ID of the workflow to place the new task in a stage of. Required together with stage_id, and must be a workflow attached to the task's own project: another one is ignored and the task lands in the backlog, with nothing in the response saying so. Use twprojects-list_workflows to find one.
predecessorsNoTask dependencies that must be completed before this task can start.
parent_task_idNoThe ID of the parent task if creating a subtask.
attachment_refsNoReferences of files to attach to the task, as returned by twprojects-create_upload_url or twprojects-create_file. Each is "tf_" followed by a UUID and the file extension, and can only be used once, so reserve an upload for each place a file should go. Files are added to whatever is already attached; nothing is removed.
change_followersNoFollowers of any task changes.
comment_followersNoFollowers of any task comments.
estimated_minutesNoThe estimated time to complete the task in minutes.
complete_followersNoFollowers of any task completions.
attachment_file_idsNoIDs of files already in a project's files area to attach to the task, as returned by twprojects-add_project_file. Unlike a reference these can be used repeatedly, so this is how one file reaches several tasks. Files are added to whatever is already attached; nothing is removed.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false, destructiveHint=false, idempotentHint=false, but the description adds no additional behavioral context. It does not disclose potential side effects (e.g., notifications, automatic assignment to stages), failure modes, or what happens to existing data. Since the description adds nothing beyond the annotations, it fails to inform the agent about operational nuances.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence, which is appropriately concise and does not waste words. It is front-loaded with the core purpose. However, it is so minimal that it borders on under-specification for a tool with this complexity, but conciseness itself is well-handled.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (20 parameters, nested objects, no output schema), the description is far too brief. It does not explain what a task is, how tasklists relate, or any prerequisites beyond what is in the schema. The schema provides detailed parameter descriptions, but the tool-level description lacks the contextual guidance necessary for an agent to understand the operation's full implications, such as workflow interactions, notification behavior, or dependency handling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 20 parameters are already documented in detail within the schema. The description itself does not add any parameter semantics, but per the baseline rule for high coverage, a score of 3 is appropriate. The schema descriptions are rich, covering defaults, constraints, and cross-references to other tools, so the lack of description-level detail is not a significant gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a verb ('Create') and a resource ('task in a tasklist'), which is sufficient to convey the primary action. However, it does not differentiate from sibling tools like twprojects-update_task or twprojects-complete_task, though the name itself already provides basic differentiation. It is concise and non-tautological.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no guidance on when to use this tool versus alternatives such as update_task, move_tasks, or complete_task. It does not mention prerequisites like obtaining a tasklist_id or workflows, nor does it suggest when another tool might be more appropriate. This lack of usage guidance leaves the agent without selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_tasklistCInspect

Create tasklist in a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the tasklist.
project_idYesThe ID of the project to create the tasklist in.
descriptionNoThe description of the tasklist.
milestone_idNoThe ID of the milestone to associate with the tasklist.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds little beyond the annotations: it essentially restates the create action. It doesn't disclose side effects, required project existence, duplicate-name behavior, or return behavior. The annotations do not contradict the description, but the description also doesn't enrich them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler and the action is front-loaded. It is concise and easy to parse, though it sacrifices some useful contextual detail for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple create operation with fully documented parameters and annotations, this is minimally viable. However, with no output schema and no usage or behavioral notes, an agent must infer preconditions and return format from the tool name alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already has 100% description coverage for all four parameters, so the description doesn't need to add much. The description adds no extra parameter meaning, but the baseline of 3 applies because the schema fully documents the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Create tasklist') with a project context, which is clear and distinguishes it from siblings like create_task and list_tasklists. It doesn't explicitly differentiate from update_tasklist or explain what a tasklist is, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as create_task, update_tasklist, or get_tasklist. It also doesn't mention prerequisites like the project needing to exist or whether the tasklist name must be unique within the project.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_teamCInspect

Create team.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the team.
handleNoThe handle of the team. It is a unique identifier for the team. It must not have spaces or special characters.
user_idsNoUsers to add to the team.
company_idNoThe ID of the company. This is used to create a team scoped for a specific company.
project_idNoThe ID of the project. This is used to create a team scoped for a specific project.
descriptionNoThe description of the team.
parent_team_idNoThe ID of the parent team. This is used to create a hierarchy of teams.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the description does not need to repeat these. However, the description adds no behavioral context beyond the trivial fact that it creates a team โ€” nothing about permissions, side effects, uniqueness, or relationships.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, which could be considered concise, but it is under-specified rather than efficient. It does not earn its place by conveying useful information; it simply restates the tool name and misses the opportunity to provide context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 7 parameters, including optional scoping parameters (company_id, project_id, parent_team_id) and user assignment (user_ids), the description is too minimal to be complete. An agent must rely entirely on parameter descriptions and annotations, which are not enough to fully understand when and how to use this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter having its own descriptive text (e.g., handle uniqueness, company/project scoping, parent team hierarchy). The description itself adds no parameter information, but the schema carries the burden, so a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Create team.' is a direct restatement of the tool name 'create_team', making it a tautology. It specifies the verb and resource but provides no additional information to distinguish this tool from the many other create_* siblings or clarify what creating a team entails.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives, such as twprojects-create_project or twprojects-create_tasklist. There are no conditions, prerequisites, or exclusions mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_timelogBInspect

Create timelog entry against a project or task.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesThe date of the timelog.
timeYesThe time of the timelog in the format HH:MM:SS.
hoursYesThe number of hours spent on the timelog. Must be a positive integer.
is_utcNoIf true, the time is in UTC.
minutesYesMinutes spent on the timelog. Must be a positive integer less than 60; otherwise increment hours instead.
tag_idsNoA list of tag IDs to associate with the timelog.
task_idNoTask the timelog is logged against. Provide exactly one of project_id or task_id.
user_idNoUser the timelog is logged for. Defaults to the authenticated user.
billableNoIf true, the timelog is billable.
project_idNoProject the timelog is logged against. Provide exactly one of project_id or task_id.
descriptionNoA description of the timelog.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey that this is a mutating, non-idempotent, non-destructive operation, and the description adds no behavioral context beyond 'Create.' It does not mention duplicate risk, permission requirements, effect on project totals, or whether entries can be edited later, so it provides no real value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short, front-loaded sentence with no filler or redundancy. It states the action and the key scoping constraint ('project or task') efficiently, which is ideal for quick agent scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter creation tool, the one-sentence description is minimal, but the schema covers all parameter semantics thoroughly. Missing context includes when to use this over timer-based workflows and what the effect of a successful creation is, but the structured schema fills most invocation-critical gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% parameter descriptions, including the 'exactly one of project_id or task_id' rule, so the description does not need to explain parameter semantics in depth. The phrase 'against a project or task' loosely references the target parameters but adds little beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Create timelog entry') and scopes it with 'against a project or task,' which clearly indicates the action. It does not explicitly contrast with sibling tools like update_timelog or create_timer, but the create action and resource are unambiguous enough.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as update_timelog, create_timer, or list_timelogs. The only hint is the word 'Create,' which implies a new entry, but no exclusions, alternatives, or preconditions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_timerCInspect

Create and start a timer.

ParametersJSON Schema
NameRequiredDescriptionDefault
runningNoIf true, the timer will start running immediately.
secondsNoThe number of seconds to set the timer for.
task_idNoThe ID of the task to associate the timer with.
billableNoIf true, the timer is billable.
project_idYesThe ID of the project to associate the timer with.
descriptionNoA description of the timer.
stop_running_timersNoIf true, any other running timers will be stopped when this timer is created.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses only that a timer is created and started, but omits meaningful behavioral details: whether other running timers may be stopped, that starting depends on the 'running' parameter, or what happens on creation. Annotations only mark the operation as non-read-only, non-idempotent, and non-destructive, so they don't carry the behavioral burden. For a state-changing tool with no output schema, this is a significant transparency gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler or redundancy. It is appropriately front-loaded and earns its place without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given seven optional parameters, no output schema, and no behavioral details, the description is too thin to fully guide an agent. The schema covers parameter semantics, but the description does not explain side effects, return values, or when to use this over related timer tools. The definition is adequate only for the simplest interpretation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters are already documented with their own descriptions. The tool description adds no additional parameter-level meaning beyond the schema, which lands at the baseline of 3 for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a clear verb and resource: 'Create and start a timer.' It identifies the action (create) and the object (timer), and the addition of 'start' hints at immediate use. It is distinguishable from siblings like update_timer or pause_timer by the create verb, though it doesn't explicitly call out any sibling differences.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as update_timer, resume_timer, or complete_timer. The name and description imply creation, but an agent is given no explicit context about when this is the right choice or what conditions should trigger an alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_upload_urlAInspect

Reserve an upload for a file and get back a short-lived URL to send its bytes to, plus a single-use reference. Use this for any file that already exists โ€” a PDF, an image, a signed document โ€” because the bytes go straight from you to storage and are never read into the conversation. Send the file with the returned method and URL, setting exactly the headers returned and no authorization of your own. Then pass the reference in attachment_refs on twprojects-create_task, twprojects-update_task, twprojects-create_comment or twprojects-create_message. Prefer twprojects-create_file only for short text you are generating yourself.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe file name, including its extension, for example "contract.pdf". Teamwork.com works out how to display the file from the extension, so a name without one is harder to open. Any directory part is removed.
sizeYesThe exact size of the file in bytes. The reservation is signed against this number, so an upload of any other length is rejected.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false. The description adds substantial behavioral context: the URL is short-lived, the reference is single-use, the reservation is signed against the file size, the caller must set exactly the returned headers and no authorization of their own, and the upload bytes are never read into the conversation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then gives the use case, the exact upload/send behavior, the downstream attachment_refs usage, and the alternative tool. Each sentence earns its place; there is no repetition or filler despite covering a multi-step workflow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with no output schema, the description is remarkably complete: it covers what the response contains (method, URL, reference), how to transmit the file, authentication expectations, and where to pass the reference afterward. An agent has enough to execute the full upload flow correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents both parameters with high coverage: name includes extension guidance and directory-stripping behavior, and size is described as exact and signed. The description reinforces the upload flow but does not add significant new meaning about the parameters themselves beyond what the schema provides, so the high-coverage baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Reserve an upload for a file') and clearly describes the two-part result: a short-lived URL and a single-use reference. It explicitly differentiates from twprojects-create_file by indicating when each should be preferred, so an agent can distinguish this tool from its siblings without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance ('Use this for any file that already exists โ€” a PDF, an image, a signed document'), explains the rationale (bytes go straight to storage and are never read into the conversation), and names the alternative with a clear condition ('Prefer twprojects-create_file only for short text you are generating yourself'). It also lays out the follow-up steps for using the returned reference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_userDInspect

Create user.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoThe type of user, such as 'account', 'collaborator', or 'contact'.
adminNoIndicates whether the user is an administrator.
emailYesThe email address of the user.
titleNoThe job title of the user, such as 'Project Manager' or 'Senior Software Developer'.
last_nameYesThe last name of the user.
company_idNoThe ID of the client/company to which the user belongs.
first_nameYesThe first name of the user.

TDQS

D1.9/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral context beyond the annotations: it does not mention permissions, side effects, whether duplicate emails are rejected, or what response is returned. It neither contradicts nor supplements the readOnlyHint, idempotentHint, or destructiveHint fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two words long, which is under-specification rather than effective conciseness. There is no front-loaded useful context, and the sentence contains no information that helps an agent select or invoke the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a mutating create operation with 7 parameters and no output schema, yet the description provides zero context about required fields, constraints, side effects, or return values. The schema lists parameters but cannot compensate for the complete absence of behavioral guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully documents all 7 parameters with 100% coverage, including first_name, last_name, email, type, admin, title, and company_id. The description adds no parameter-level meaning, but the schema already handles this dimension adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Create user.' merely restates the tool name (twprojects-create_user) and its title ('Create User'). It identifies a verb and resource but adds no specifics about what kind of user or what creation entails, so it is essentially a tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives such as twprojects-update_user, twprojects-list_users, or other create_* tools. The only implication is from the name itself, with no exclusions, prerequisites, or context provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_workflowCInspect

Create workflow.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the workflow.

TDQS

C2.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate a non-read-only, non-idempotent operation, but the description adds no behavioral detail (e.g., whether a workflow requires a project, effects of naming conflicts, or permission requirements). The description is silent beyond the create action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two words are concise but represent under-specification rather than effective brevity; it does not add information beyond the tool name. The description fails to earn its place as it provides no value over the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create operation with no output schema and minimal annotations, the description leaves out essential context such as what constitutes a valid workflow, any prerequisites, or expected outcome. The tool is nearly featureless in terms of guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers the only parameter 'name' with a clear description, so baseline is 3. The description itself adds no extra parameter semantics or usage hints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Create workflow' restates the tool name and title verbatim, adding no additional specificity about what a workflow is or how it differs from related tools like create_workflow_stage or update_workflow. It conveys the basic action but is essentially tautological.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance provided on when to use this tool versus alternatives such as create_workflow_stage or update_workflow. The description is a bare instruction with no context, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-create_workflow_stageCInspect

Create workflow stage.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the workflow stage.
workflow_idYesThe ID of the workflow to add the stage to.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral context beyond what annotations already declare. It does not specify side effects, required permissions, ordering constraints, or any consequences of creation. Annotations indicate it's a write operation but the description provides no additional transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short but the single sentence is redundant with the tool name and does not earn its place. It lacks structure or added informational value, making it more under-specified than concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of many related creation tools and no output schema, the description is too minimal to fully equip an agent. It lacks information on return values, constraints (e.g., name uniqueness, ordering), or relationships to workflows, making it incomplete for effective tool selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters (name, workflow_id) are fully documented in the schema with clear descriptions, so the description adds no parameter-level value. Schema coverage is 100%, so the baseline of 3 applies; the description does not compensate or add further meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Create workflow stage' is a near-verbatim restatement of the tool name, providing no additional scope or differentiation from sibling tools like create_workflow or update_workflow_stage. It is a tautology rather than a specific purpose statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage context is provided. The description does not mention when to use this tool versus alternatives, nor any prerequisites such as the need for an existing workflow_id. There is no guidance on typical scenarios or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-download_fileA
Read-only
Inspect

Read the content of a file stored in Teamwork.com: text files come back as text, images as an image, and anything else as a base64 resource with its media type. Files over 10 MB are refused; point the user at the file's downloadURL from twprojects-get_file instead. The file ID is in a task's or message reply's attachments and a comment's files (each {id, type: "files"}), or comes from twprojects-list_files.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the file to download.
versionNoThe version number to download. Omit for the latest version.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
sizeYes
mimeTypeYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond annotations: payload shape varies by type (text/image/base64 with media type) and a hard 10 MB refusal limit with a recovery path. It does not discuss auth requirements, but the added disclosure is substantial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three front-loaded sentences with no filler: purpose/return format first, then the size limit and alternative, then ID sourcing. Every sentence carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value explanation is not required, and the description still covers format variation, the size ceiling and its workaround, and ID provenance. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both `id` and `version` are documented in the schema itself. The description adds meaning about where the `id` can be sourced (attachments, comment files, list_files) but says nothing extra about `version` semantics beyond what the schema states. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (read/download file content stored in Teamwork.com) and immediately clarifies what comes back. It explicitly distinguishes itself from the sibling `twprojects-get_file`, which returns metadata rather than content, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-not and alternative: files over 10 MB are refused and the user should be pointed at the file's `downloadURL` from `twprojects-get_file`. It also names concrete sources for a valid ID (task/message-reply attachments, comment files, `twprojects-list_files`), covering prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_allocationA
Read-only
Inspect

Get an allocation. linkedTaskEstimatedTime counts each linked task whole, and a task can sit behind more than one allocation, so it must not be summed across allocations.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the allocation to get.
fieldsNoThe attributes to return for each allocation, from the listed names.
include_financial_detailsNoInclude forecasted revenue and cost for the allocated time. Requires the scheduler rates entitlement and financial permission on the project; without either, the request still succeeds but the figures are withheld. Read canViewFinancialDetails on each row to tell a withheld figure from a zero one.

Output Schema

ParametersJSON Schema
NameRequiredDescription
includedNo
allocationNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description reveals a subtle and critical data behavior: linkedTaskEstimatedTime counts each linked task whole and must not be summed across allocations. This is genuinely non-obvious, not discoverable from the schema or annotations, and directly protects an agent from misusing a returned field.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two focused sentences: the first states the operation and the second delivers a high-value caveat. There is no filler, and the most important semantic warning is prominently placed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a full output schema, detailed parameter descriptions, and readOnlyHint and destructiveHint annotations, the only material missing context is the linkedTaskEstimatedTime aggregation caveat, which the description provides. Nothing else an agent needs to invoke this get-by-id tool correctly is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the id, fields, and include_financial_details parameters are already described well, including the entitlement caveat for financial details. The tool description adds no parameter-level detail, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with 'Get an allocation', which is a specific verb and resource that clearly states the operation. It does not explicitly contrast itself with twprojects-list_allocations, but the singular phrasing and required id parameter make the intended purpose clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The core usage is implied by 'Get an allocation', but the description gives no explicit guidance about when to choose this tool over twprojects-list_allocations or any other sibling. There are no when-not-to-use conditions or alternative recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_commentC
Read-only
Inspect

Get comment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the comment to get.
fieldsNoThe attributes to return for each comment, from the listed names.

Output Schema

ParametersJSON Schema
NameRequiredDescription
commentsNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that: no note on visibility/permissions, error behavior for missing ids, or deleted-comment handling (the fields enum hints at a 'deleted' field).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is short and front-loaded, but sized below the minimum needed to convey purpose or usage. This is under-specification rather than genuine conciseness, though it wastes no words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because an output schema exists, return values need not be explained, and 100% schema coverage documents both parameters. For a simple read-by-id tool the description could be minimal, but it still says nothing about the tool's place among the many sibling getters, leaving differentiation to the name.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both the required 'id' and the 'fields' array (including its enum) fully documented in the schema. The description provides no additional parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Get comment." restates the tool name almost verbatim and adds no distinguishing information. It does not differentiate this from siblings such as twprojects-list_comments or twspaces-get_comment, so an agent gains nothing beyond the identifier itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of prerequisites (e.g., needing a comment id from list_comments), and no reference to any alternative. The agent must infer all usage context from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_companyB
Read-only
Inspect

Get company (aka client).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the company to get.
fieldsNoThe attributes to return for each company, from the listed names.

Output Schema

ParametersJSON Schema
NameRequiredDescription
companyNo
includedNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the client alias but does not disclose additional behavioral traits such as response shape, not-found behavior, or field filtering effects. It is consistent with the annotations, with no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, front-loaded, and free of filler. Every word contributes: 'Get' states the action, 'company' identifies the resource, and 'aka client' resolves a common synonym.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-by-id tool with a fully documented schema, an output schema, and read-only annotations, the description is largely sufficient. The alias clarification adds useful context, though it could be slightly more complete by indicating that this tool retrieves a single company while listing is handled elsewhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both 'id' and 'fields' already well documented. The description itself adds no parameter-level meaning, which is acceptable given the schema already carries the burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get company', and clarifies the domain synonym with '(aka client)'. It is clear about what the tool does, though it does not explicitly distinguish itself from similar getters like twdesk-get_company or twprojects-list_companies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage guidance is provided. The description does not say when to use this tool versus twprojects-list_companies or twdesk-get_company, and it gives no context about prerequisites such as needing an existing company ID.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_custom_fieldC
Read-only
Inspect

Get custom field.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the custom field to get.

Output Schema

ParametersJSON Schema
NameRequiredDescription
customfieldYes

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral information beyond the annotations. While readOnlyHint=true and destructiveHint=false are present, the description doesn't disclose details such as error behavior when the ID doesn't exist or whether related data is included.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, but this is under-specification rather than conciseness. It doesn't provide enough context for tool selection.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, a one-parameter schema, and output schema, the basic operation is partially covered. However, the description fails to explain how this tool fits with related custom-field tools, making it minimally viable but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already fully describes the single 'id' parameter with 100% coverage. The description adds no additional meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get custom field.' is a tautological restatement of the tool name, providing no additional detail about what a 'custom field' is or how this differs from sibling tools like get_custom_field_value or get_custom_item_field.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as list_custom_fields or get_custom_field_value. The description offers no context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_custom_field_valueA
Read-only
Inspect

Get a single custom field value from a task, project or company.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityYesThe type of entity the custom field value is attached to.
value_idYesThe ID of the custom field value entry to retrieve.
entity_idYesThe ID of the task, project or company the custom field value belongs to.

Output Schema

ParametersJSON Schema
NameRequiredDescription
customfieldValueYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description simply states a read operation, which is consistent with annotations (readOnlyHint=true, destructiveHint=false). However, it does not add any behavioral context beyond the annotation, such as what happens if the value does not exist or any permissions required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one well-structured sentence that is front-loaded with the verb and resource. Every word earns its place, and there is no redundancy or padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-get tool with a complete input schema and an output schema, the minimal description is largely sufficient. It could slightly improve by explicitly pointing to list_custom_field_values for retrieving multiple values, but the current description covers the core use case adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage for all three parameters, including an enum for entity and clear descriptions for value_id and entity_id. The description does not add any additional parameter semantics beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get'), the resource ('a single custom field value'), and the scope ('from a task, project or company'). It distinguishes itself from sibling tools like list_custom_field_values and create/update custom field value tools by emphasizing 'single'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'single' implies this is for retrieving one value, which indirectly contrasts with the list sibling tool, but it does not explicitly mention when to use this over alternatives or when not to use it. No exclusions or alternative tool names are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_custom_itemA
Read-only
Inspect

Get a custom item type with its fields and sections inline, so you can see its schema before creating or updating records. Custom items are user-defined entity types โ€” Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCustom item type ID to retrieve.

Output Schema

ParametersJSON Schema
NameRequiredDescription
includedYes
customItemYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds value by explaining the returned data structure (fields and sections inline) and the purpose ('see its schema before creating or updating records'), which goes beyond the annotations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three efficiently written sentences: purpose first, then context, then usage guidance. Every sentence earns its place, with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple read-only nature, strong annotations, and presence of an output schema, the description is complete. It covers what the tool does, when to use it, how to handle ambiguous entity names, and its role in the create/update workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with the parameter clearly described as 'Custom item type ID to retrieve.' The description reinforces that the ID is for a custom item type (not a record), which helps distinguish from get_custom_item_record. This adds semantic clarity beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'Get a custom item type with its fields and sections inline' with a specific verb and resource. It distinguishes from siblings like get_custom_item_record (record vs type) and list_custom_items (list vs single get) by emphasizing schema viewing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit when-to-use guidance: 'Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept...' and even gives a fallback action ('call twprojects-list_custom_items... to confirm'). This clearly differentiates from alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_custom_item_fieldA
Read-only
Inspect

Get a single field on a custom item type. Custom items are user-defined entity types โ€” Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesField ID.
custom_item_idYesCustom item type ID the field belongs to.

Output Schema

ParametersJSON Schema
NameRequiredDescription
customItemFieldYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds useful behavioral context by defining what custom items are and how they differ from built-in entities, which helps the agent understand the notional domain. It does not describe response format, but given the output schema exists and the operation is a simple read, this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: one sentence for purpose, one for defining custom items, and one for usage guidance. It is front-loaded with the core action and contains no redundant information. Every sentence contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with full schema coverage, an output schema, and robust annotations, the description provides complete context. It explains the custom item domain, gives a decision rule for when to use these tools, and clarifies the entity scope. No critical information is missing for selecting and invoking the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both 'id' and 'custom_item_id' clearly described in the input schema. The description adds minimal extra parameter meaning, only restating that a 'field' belongs to a 'custom item type'. Since the schema does the heavy lifting, baseline 3 is appropriate; no additional semantic value is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Get a single field on a custom item type.' This specifies the verb (get), resource (field on a custom item type), and provides scope. It distinguishes from siblings by explaining custom items are user-defined entities beyond built-in Teamwork concepts, making it unique among the many get_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit usage guidance is provided: 'Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept...' and directs agents to call twprojects-list_custom_items to confirm unknown entities. This gives clear when-to-use and when-not-to-use context, plus an actionable alternative approach.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_custom_item_recordA
Read-only
Inspect

Get a single record. Field values come back keyed by display name with dropdown values translated to their human-readable labels. Custom items are user-defined entity types โ€” Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecord ID.
custom_item_idYesCustom item type ID the record belongs to.

Output Schema

ParametersJSON Schema
NameRequiredDescription
customItemRecordYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false, but the description adds meaningful behavioral detail: field values are keyed by display name and dropdown values are translated to human-readable labels. This informs the agent about response formatting beyond what the schema or annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a few sentences but each sentence serves a purpose: core action, output format, definition of custom items, and usage guidance. It front-loads the action and then provides necessary context. Slightly long but efficient for a non-obvious concept.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of custom items, the description covers what custom items are, when to use the tool, how to disambiguate unrecognized entities, and what the output looks like. Combined with rich schema and annotations, this is a complete picture for an agent. No critical gaps identified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: both 'id' and 'custom_item_id' have clear descriptions. The tool description does not add parameter-specific detail, but it does clarify that custom_item_id refers to the custom item type, which is already conveyed by the schema. The baseline of 3 is appropriate given the schema's completeness.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: 'Get a single record' refers to a custom item record. It also distinguishes this tool from related sibling tools like twprojects-get_custom_item (which gets the custom item type) and twprojects-list_custom_item_records (which lists multiple records) by focusing on a single record and explaining the custom item context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly specifies when to use these tools: when the user refers to an entity that is NOT a built-in Teamwork concept, listing those built-in concepts. It also provides a concrete alternative: if the entity is unrecognized, call twprojects-list_custom_items to confirm. This gives clear direction on tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_fileA
Read-only
Inspect

Get a file's details: name, size, uploader, version history, the tasks, messages and comments it is attached to, and its downloadURL. The downloadURL needs the caller's own Teamwork session, so hand it to a signed-in user rather than fetching it; use twprojects-download_file to read the content here.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the file to get.
fieldsNoThe attributes to return for each file, from the listed names.
versionNoThe version number whose details, size and downloadURL are returned. Omit for the latest version.
include_versionsNoWhether to include the file's whole version history under versions. Defaults to false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
fileNo
includedNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false), so the description's value-add is the downloadURL caveat โ€” that the URL cannot be fetched server-side because it requires the caller's session. That is genuine operational context beyond the annotations, though it says nothing about response size, pagination, or what happens to include_versions defaults beyond the schema note.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste. The return-content list is front-loaded, and the critical routing caveat about downloadURL and the alternative tool is packed into the second sentence without padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value shape needn't be explained. Combined with the field enumeration and the explicit session requirement for downloadURL, an agent has everything needed to call this correctly and to avoid the common mistake of fetching the URL itself.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters (id, fields, version, include_versions) are already fully documented in the schema. The description names version history and downloadURL among returns, which loosely maps to include_versions/version, but adds no syntax or format detail beyond the schema. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ("Get a file's details") and enumerates the actual payload: name, size, uploader, version history, attached tasks/messages/comments, downloadURL. It also explicitly distinguishes itself from the sibling twprojects-download_file, so an agent can choose without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Routes the agent explicitly: use this for metadata, use twprojects-download_file "to read the content here." It also states the condition under which the returned downloadURL is usable (caller's own session, hand to a signed-in user), which is exactly the when/when-not guidance an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_jobroleA
Read-only
Inspect

Get job role. The people assigned to the role come back under users, and those holding it as their primary role under primaryUsers; both are references, resolved to names under included.users.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the job role to get.
fieldsNoThe attributes to return for each job role, from the listed names.

Output Schema

ParametersJSON Schema
NameRequiredDescription
jobRoleNo
includedNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read. The description adds valuable behavior: it explains that users and primaryUsers are references that get resolved to names under included.users, which is important for processing the response correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The action 'Get job role' is front-loaded, and the second sentence efficiently packs the reference-resolution nuance. It is concise and well-ordered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema presumably documents the return structure, so the description needn't explain all return values. It adds the key non-obvious behavior about reference resolution. For a simple read tool with strong schema coverage.flags, this is complete. No mention of error handling, but that's a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers both parameters (id and fields) with 100% description coverage, so the schema already documents them. The description adds some context about the response fields users and primaryUsers, but this is about output rather than parameter semantics. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Get job role' with a clear verb and resource, making it obvious this is a single-entity fetch. The second sentence adds useful context about the response shape (users vs primaryUsers, reference resolution). It doesn't explicitly distinguish from sibling list_jobroles, but the name and title carry that distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is given on when to use this tool vs alternatives like list_jobroles. The description implies a single-role lookup by ID but does not state conditions for choosing it over other sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_messageC
Read-only
Inspect

Get message.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the message to get.
fieldsNoThe attributes to return for each message, from the listed names.

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageNo

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that - no note on what is returned, whether missing IDs error, or the sparse-fieldset behavior of the fields parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is short, but that brevity is under-specification rather than conciseness - a two-word fragment that omits everything an agent needs for selection. There is no front-loaded scope or constraint because there is effectively no content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter get tool with an output schema, the description needn't explain return values, but it should at least distinguish this tool from the other message retrieval siblings. That routing information is entirely absent, leaving the definition inadequate for correct selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and an output schema exists, so baseline 3 applies. The description adds no meaning about the required id or the fields sparse-fieldset parameter beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

'Get message' restates the tool name and title almost verbatim, adding no scope, no verb nuance, and no differentiation from siblings such as twprojects-get_message_reply or twprojects-list_messages. An agent cannot tell which message-related retrieval this covers from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of the alternative sibling tools (list_messages, get_message_reply), and no stated prerequisites. The description leaves the agent to infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_message_replyC
Read-only
Inspect

Get message reply.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the message reply to get.
fieldsNoThe attributes to return for each message reply, from the listed names.

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageReplyNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=false, and destructiveHint=false, covering the safety profile. The description adds nothing beyond this, not even noting that it returns a single reply object versus a collection, so it provides no incremental behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single short sentence with no wasted words, so it is concise. But the brevity reflects under-specification rather than efficiency, as the sentence carries almost no information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and 100% parameter description coverage, the structured fields carry most of the burden, so the sparse description is not fatal. Still, for a tool with several near-identical get/list siblings, the definition is thinner than ideal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both the 'id' and 'fields' parameters are fully documented in the schema, including the attribute enum. The description adds no meaning beyond that, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get message reply'), which is minimally clear. However, it offers no differentiation from siblings such as twprojects-get_message, twprojects-update_message_reply, or twprojects-list_message_replies, leaving the agent to infer the distinction from names alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like list_message_replies or get_message. No context, prerequisites, or exclusions are provided; usage must be inferred entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_milestoneC
Read-only
Inspect

Get milestone.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the milestone to get.
fieldsNoThe attributes to return for each milestone, from the listed names.

Output Schema

ParametersJSON Schema
NameRequiredDescription
milestoneNo

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral information beyond the readOnlyHint and destructiveHint annotations. It does not mention field filtering behavior, missing resources, access requirements, or response characteristics, and it does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short but under-specified rather than genuinely concise: 'Get milestone' carries no new information beyond the tool name and title. There is no useful front-loaded content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-by-ID operation with fully documented parameters, an output schema, and read-only annotations, the basic invocation requirements are present. However, the description is incomplete as a selection aid because it does not explain how this differs from list_milestones or other milestone operations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents both parameters completely, including the enum of available fields for the 'fields' parameter. The description itself contributes no parameter semantics, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get milestone' restates the tool name and title without adding any distinguishing detail. It names a generic verb and resource, but does not differentiate this from twprojects-list_milestones, twprojects-get_project, or other get tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus siblings like twprojects-list_milestones or twprojects-update_milestone. The agent is left to infer that get_milestone is for a single resource by ID.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_notebookC
Read-only
Inspect

Get notebook.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the notebook to get.
fieldsNoThe attributes to return for each notebook, from the listed names.

Output Schema

ParametersJSON Schema
NameRequiredDescription
notebookNo

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses nothing beyond the tool name. The readOnlyHint and destructiveHint annotations already cover the safety profile, but the description adds no behavioral context such as how the notebook is returned, what happens if the id does not exist, or how the fields parameter affects the response. It is consistent with the annotations, so there is no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The three-word description is brief but not usefully concise; it simply restates the title. Every sentence should earn its place, and this one does not add information beyond what the tool name already provides.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a simple read-only getter, and the schema plus annotations cover the required id, optional fields, and read-only safety. However, the description leaves gaps about how this tool fits with sibling notebook/list tools and what the fields parameter does beyond the schema's literal text, so the context is only minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema describes both parameters clearly: id is the notebook ID and fields enumerates the selectable attributes. Since schema coverage is 100%, the lack of parameter detail in the description is acceptable, but the description also adds no extra semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get notebook.' is a verbatim restatement of the tool name and title, adding no clarifying detail about what a notebook is, how it is identified, or what the returned object contains. It is a tautology rather than a substantive purpose statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like twprojects-list_notebooks or twprojects-get_project. The agent must infer selection purely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_projectC
Read-only
Inspect

Get project.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the project to get.
fieldsNoThe attributes to return for each project, from the listed names.

Output Schema

ParametersJSON Schema
NameRequiredDescription
projectNo
includedNo

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description contributes no additional behavior: it does not mention scope, response shape, relationship to the output schema, or any side effects. It is neutral but uninformative; no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short but under-specified rather than usefully concise. A single tautological sentence does not earn its place and provides no structured information for an agent to act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only get operation with a complete schema and an output schema, the tool is technically invocable from structured data alone. However, with no usage context, no sibling differentiation, and no description of the returned project or fields behavior, it falls short of genuinely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both id and fields documented in the input schema. The description itself adds nothing about parameters, but the baseline of 3 applies because the schema carries the full semantic burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get project.' exactly restates the tool name and title, so it is a tautology rather than an informative statement. It identifies the verb and resource but adds no distinguishing detail such as what a project record contains or how this differs from list_projects or search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call get_project versus alternatives like twprojects-list_projects, twprojects-search, or twprojects-get_task. The only implied use is fetching by id, but nothing in the description states that condition or excludes other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_project_categoryC
Read-only
Inspect

Get project category.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the project category to get.
fieldsNoThe attributes to return for each project category, from the listed names.

Output Schema

ParametersJSON Schema
NameRequiredDescription
projectCategoryNo

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description only repeats the read nature without disclosing any additional behavior, such as whether it returns a single category, whether fields is optional, or how it handles not-found cases. It adds no context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

At seven words, the description is extremely short, but the single sentence is an under-specified restatement of the name rather than a concise information packet. It saves space but fails to earn its place because it adds no operational detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the output schema and annotations cover return values and safety, the overall description is just a label; it does not clarify the single-object nature of the call or differentiate it from list_project_categories. The tool is simple, but the description alone leaves an agent without enough context to choose it confidently among many similar get_* and list_* siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has descriptive entries for both parameters: id identifies the category, and fields lists selectable attributes. Schema description coverage is 100%, so the description need not add parameter details. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get project category.' is a direct restatement of the tool name twprojects-get_project_category. It uses the same verb and object without adding scope, qualification, or distinguishing details, so it qualifies as a tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus siblings such as twprojects-list_project_categories, twprojects-create_project_category, or other get_* tools. There are no context clues about prerequisites, selection criteria, or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_skillC
Read-only
Inspect

Get skill.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the skill to get.

Output Schema

ParametersJSON Schema
NameRequiredDescription
skillYes

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral information beyond what the annotations already convey (readOnlyHint: true, destructiveHint: false). It does not describe return behavior, error handling, permissions, or any constraints. With annotations present, the bar is lower, but the description still contributes zero extra context. There is no contradiction, but also no added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise (two words), but it is under-specified rather than efficiently informative. Every word echoes the tool name without earning its place by adding context. While it is not verbose, the extreme brevity crosses the line into vagueness, similar to the 'Process' calibration example.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (one parameter, output schema present), the description could be minimal, but it still fails to explain what a 'skill' is in this context or what the tool returns. It does not state that it fetches a single skill record, which leaves the agent to guess. The presence of an output schema mitigates the need to describe return values, but the description remains too skeletal to be considered complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage, with the 'id' parameter described as 'The ID of the skill to get.' The description 'Get skill' adds no further parameter semantics. According to the guidelines, baseline is 3 when schema coverage is high, and the description does not need to add much. This score reflects the adequate schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get skill.' is essentially a restatement of the tool name (twprojects-get_skill) and title ('Get Skill'). It is a tautology that provides no additional specification, such as what a skill is or that it retrieves a single skill by ID. It does not differentiate from sibling get_* tools beyond the resource name, which is already evident from the tool name itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives like twprojects-list_skills or other get_* tools. It does not state prerequisites, typical use cases, or exclusions. The lack of any usage context leaves the agent to infer entirely from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_tagC
Read-only
Inspect

Get tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the tag to get.

Output Schema

ParametersJSON Schema
NameRequiredDescription
tagYes

TDQS

C2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds no additional behavioral context such as authentication needs, return format, or edge cases. It contributes nothing beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely brief, but this is under-specification rather than appropriate conciseness. A single vague phrase like 'Get tag.' doesn't earn its place as meaningful guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, the description is minimal but underdeveloped. It doesn't explain what a tag is in the twprojects context, nor any behavior when the tag is not found. The output schema helps, but the description itself is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully covers the single 'id' parameter with a clear description. The tool description adds no extra parameter semantics, but the baseline is 3 because schema coverage is 100%.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get tag.' simply restates the tool name and title, offering no specific details about what kind of tag or context. It fails to distinguish from sibling tools like twdesk-get_tag or twspaces-get_tag.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool vs alternatives. No exclusions, prerequisites, or alternative tool references are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_taskD
Read-only
Inspect

Get task.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the task to get.
fieldsNoThe attributes to return for each task, from the listed names.

Output Schema

ParametersJSON Schema
NameRequiredDescription
taskNo
includedNo

TDQS

D1.6/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations present, the bar is lower, but the description still fails. It does not disclose any behavioral traits beyond what annotations provide (readOnlyHint, openWorldHint, idempotentHint, destructiveHint). It doesn't mention what gets returned, pagination, permission requirements, or any other operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness1/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two words and a period. It is under-specified rather than concise. It wastes the opportunity to front-load useful context and provides no structure to aid comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of the tool (two parameters, one required) and the presence of an output schema, the description is completely inadequate. Even with annotations and schema, the description should provide enough context for an agent to select and invoke the tool correctly. It fails to do so.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents both parameters (id and fields). The description adds no meaning beyond the schema. Baseline 3 is appropriate when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get task.' is essentially a tautology that restates the tool name without adding informational value. While it technically identifies a retrieval operation on a task, it offers no differentiation from sibling tools like twprojects-get_tasklist or twprojects-get_milestone, nor does it specify scope or behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage guidance is provided. The description offers no context about when to use this tool, no prerequisites, no alternatives, and no exclusions. An agent cannot infer when this tool is appropriate versus other retrieval tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_tasklistC
Read-only
Inspect

Get tasklist.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the tasklist to get.
fieldsNoThe attributes to return for each tasklist, from the listed names.

Output Schema

ParametersJSON Schema
NameRequiredDescription
tasklistNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to restate safety traits. However, it adds no behavioral context such as whether a full tasklist object is returned, how the fields parameter affects the response, or any scoping constraints. The description contributes no transparency beyond what the name and schema already imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three words and has no fluff, so it is certainly concise. However, it is also too sparse to add meaningful value beyond the tool name/title, and it borders on under-specification. It is functional but not a well-structured, informative description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple getter with a rich output schema and safety annotations, the description is minimally adequate. But it does not mention when to prefer this tool over list_tasklists or how the fields parameter influences the result, so the agent must rely entirely on sibling names and schema details. The description leaves out contextual guidance that would make invocation decisions easier.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes both parameters with 100% coverage: id is the tasklist ID and fields selects which attributes to return. The description adds no additional parameter semantics, but none are required because the schema carries the full burden. A baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the verb and resource ('Get tasklist'), so the core purpose is clear. However, it is essentially a restatement of the tool name/title and provides no differentiation from sibling tools such as get_task or list_tasklists. It is not vague, but it adds nothing beyond the name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like list_tasklists for enumerating tasklists or get_task for tasks. No usage context, exclusions, or prerequisites are mentioned, leaving the agent to infer the tool's role from its name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_teamC
Read-only
Inspect

Get team.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the team to get.

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamYes

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and destructiveHint=false, so the safety profile is already known. The description adds no behavioral context beyond what annotations provide, such as what data is returned or any side effects. With annotations covering the safety profile, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise (one sentence, two words) and front-loaded. It is not verbose, but it is under-specified rather than efficiently concise. It earns a 4 for brevity but loses a point for lack of substance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a simple get-by-id operation with a single parameter and an output schema, so the description need not be extensive. However, it provides no context about what a team is, what fields are returned, or any related entities. Given the tool's simplicity, a 2 is slightly harsh but the description is too minimal to be considered complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single 'id' parameter, which is well-documented as 'The ID of the team to get.' The description adds no additional meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get team.' is a clear verb+resource statement, but it lacks specificity about what a 'team' is in this context (e.g., a project team, a company team) and does not distinguish it from other get_* tools. It is minimally adequate but not informative beyond the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description does not mention any context, prerequisites, or exclusions. The agent must infer usage from the tool name and schema alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_timelogC
Read-only
Inspect

Get timelog.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the timelog to get.
fieldsNoThe attributes to return for each timelog, from the listed names.

Output Schema

ParametersJSON Schema
NameRequiredDescription
timelogNo

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral information beyond what the annotations already provide. readOnlyHint=true and destructiveHint=false cover the safety profile, but the description does not mention behavior such as 404 handling, whether deleted timelogs are returned, or how the optional fields parameter affects the response.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Although the description is extremely short, it is under-specified rather than usefully concise. It merely repeats the tool title and does not earn its place by adding any clarifying detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Annotations, a full parameter schema, and an output schema cover many operational details, so this is not severely incomplete. However, the description still lacks basic context about what makes this tool distinct from list_timelogs and what 'get' implies for a single resource.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: both the id and fields parameters have clear descriptions in the schema. The tool description itself adds no parameter-level meaning, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get timelog.' is essentially a restatement of the tool name twprojects-get_timelog and the annotation title 'Get Timelog'. It provides no additional meaning, such as retrieving a single timelog by ID, and does nothing to distinguish this tool from siblings like twprojects-list_timelogs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives. An agent must infer from sibling names that twprojects-list_timelogs likely handles listing multiple timelogs, but the description itself provides no explicit context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_timerC
Read-only
Inspect

Get timer.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the timer to get.
fieldsNoThe attributes to return for each timer, from the listed names.

Output Schema

ParametersJSON Schema
NameRequiredDescription
timerNo

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral context beyond what the annotations already declare. It does not mention not-found behavior, response shape, or any scoping details. The read-only annotation covers safety, but the description itself contributes nothing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, but this is under-specification rather than effective conciseness. The single sentence merely repeats the title and does not structure any useful information for the agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a complete input schema, an output schema, and read-only annotations, the minimum invocation details are present. However, the absence of any differentiation from the many sibling timer tools makes the description only minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage for both parameters, including clear descriptions for 'id' and 'fields'. The description adds no parameter-level meaning beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get timer.' is essentially a verbatim restatement of the tool name and title, providing no additional detail such as retrieval by ID, singular vs. list semantics, or relationship to other timer tools. It is a tautology rather than an explanatory description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like twprojects-list_timers, twprojects-update_timer, or twprojects-complete_timer. There are no usage conditions, exclusions, or selection cues.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_userB
Read-only
Inspect

Get user.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the user to get.
fieldsNoThe attributes to return for each user, from the listed names.

Output Schema

ParametersJSON Schema
NameRequiredDescription
personNo

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral detail beyond what the annotations already provide. The readOnlyHint=true and destructiveHint=false cover the safety profile, but the description does not mention any additional behavior such as lookup semantics, error cases, or restrictions. There is no contradiction, but there is also no added transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with zero filler. It is appropriately compact for a simple retrieval tool, though it is so minimal that it borders on under-specification rather than genuine explanatory conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-by-id operation with one required parameter, an optional field-selection array, a full output schema, and read-only annotations, the description is nearly sufficient. The main missing element is explicit guidance distinguishing this from other user-related tools, but the schema and tool name cover most operational needs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents both 'id' and 'fields' clearly. The description itself contributes no parameter-level meaning, which keeps this at the baseline of 3 rather than lower.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get user.' While it is extremely terse and essentially mirrors the tool name, it is unambiguous about the core operation. It does not differentiate from sibling tools like twdesk-get_user or twprojects-get_user_me, so it does not earn a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives such as twprojects-list_users, twprojects-get_user_me, or twdesk-get_user. The required 'id' parameter implies retrieval of a specific user, but the description itself provides no usage context, exclusions, or comparisons.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_user_meA
Read-only
Inspect

Get the currently authenticated user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
personYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is adequately covered. The description adds no further behavioral context like auth requirements, rate limits, or response structure, but it does not contradict the annotations either.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, direct sentence that immediately conveys the tool's purpose. There is no redundant wording, and the structure is optimally front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only tool with an output schema, the description is completely sufficient. It states exactly what the tool does, and the output schema (though not shown) would handle return value details. The simple nature of the endpoint means no additional context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema is empty with 100% coverage. The description correctly implies no parameters are needed, and with 0 params the baseline score is 4; there is no missing parameter information to compensate for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get the currently authenticated user' uses a specific verb and resource, clearly distinguishing it from siblings like 'twprojects-get_user' (which implies retrieving a user by ID) and 'twchat-get_current_user' (which targets chat context). The phrase 'currently authenticated' definitively scopes the operation to the logged-in user.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to choose this tool over similar alternatives such as 'twchat-get_current_user' or 'twprojects-get_user'. The description is a one-liner with no mention of use cases, exclusions, or preferred scenarios, leaving the agent to infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_workflowC
Read-only
Inspect

Get workflow.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the workflow to get.
fieldsNoThe attributes to return for each workflow, from the listed names.

Output Schema

ParametersJSON Schema
NameRequiredDescription
workflowNo

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false; the description adds no behavioral detail beyond the word 'get'. It doesn't mention field selection behavior, default returned attributes, or anything about the operation's effects or requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short but under-specified rather than effectively concise. A two-word sentence that simply repeats the tool name does not earn its place and leaves all useful context to the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The operation is a simple get-by-id with a complete input schema and an output schema, so an agent can technically call it. However, the description provides no resource context or relationship to sibling workflow tools, leaving clear semantic gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: both id and fields have descriptions, and fields has an enum. The description itself adds no parameter meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is literally 'Get workflow.', which restates the tool name and title without adding any detail. It identifies a verb and resource, but says nothing about what a workflow is, that it is fetched by ID, or how it differs from list_workflows or get_workflow_stage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance is provided: it does not say to use this when a workflow ID is known, nor does it point to list_workflows for fetching all workflows. The agent must infer usage entirely from the tool name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-get_workflow_stageC
Read-only
Inspect

Get workflow stage.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the workflow stage to get.
fieldsNoThe attributes to return for each workflow stage, from the listed names.
workflow_idYesThe ID of the workflow that owns the stage.

Output Schema

ParametersJSON Schema
NameRequiredDescription
stageNo

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral detail beyond what the annotations already declare, such as readOnlyHint=true and destructiveHint=false. It does not explain that this is a read-only lookup, how workflow_id and id relate, or what operational behavior to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Although the description is short, it is not meaningfully concise because it simply repeats the tool title. A concise description should still earn its space by adding scoping or usage detail; this one does not.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema and output schema carry the structural details, but the description fails to orient the agent about single-stage retrieval within a workflow or how this relates to list_workflow_stages. The description is technically usable but incomplete for a tool surrounded by many similar getter/list tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with each parameter (id, fields, workflow_id) individually documented. The tool description contributes no additional parameter insight, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description "Get workflow stage." is essentially a verbatim restatement of the tool title "Get Workflow Stage", so it adds no new semantic information. It names a verb and resource but does not distinguish getting a single stage from listing workflow stages via twprojects-list_workflow_stages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool instead of alternatives like twprojects-list_workflow_stages or twprojects-get_workflow. The description gives no context, conditions, or exclusions, so the agent must infer usage from the schema and sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_activitiesA
Read-only
Inspect

List recent activity events. Scope by project_id or omit for site-wide.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each activity, from the listed names.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
end_dateNoEnd of the activity window; the boundary itself is included, and a plain date covers that whole day. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
item_idsNoFilter activities by the IDs of the items they refer to, such as task, milestone or message IDs. Item IDs are only unique within an item type, so combine this with log_item_types to avoid matching activities of other types that happen to share an ID.
order_byNoThe field to sort the activities by. Omit to keep the ordering the API applies by default.
user_idsNoFilter activities by the users who created them.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching activities, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
project_idNoThe ID of the project to retrieve activities from. Omit to list activities across all projects.
start_dateNoStart of the activity window; the boundary itself is included. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
log_item_typesNoFilter activities by item types.
exclude_user_idsNoExclude activities created by these users. Pass the current user's ID to drop their own activity from the feed.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
activitiesNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry the read-only/non-destructive profile, so the description only needs to add behavioral context. It adds 'recent' and the site-wide default, which is helpful, but it does not disclose default ordering, pagination behavior, or the fact that activities span many item types. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and resource, with no filler or repetition of the schema. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list with 14 parameters and rich schema descriptions, this is acceptable but minimal. It doesn't explain what counts as an 'activity' or that this is the cross-cutting event feed, which matters when an agent chooses among many list_* siblings. The output schema and parameter descriptions cover the details, so it is not severely incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all 14 parameters with detailed descriptions. The description's mention of project_id is a useful highlight but adds little beyond the schema's own 'Omit to list activities across all projects.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('recent activity events'), and adds a concrete scoping instruction for project_id. It is not a tautology, but it does not differentiate 'activity events' from sibling tools like list_comments or list_timelogs, so it stops short of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one clear usage hint โ€” include project_id to narrow to a project or omit for site-wide โ€” but it never tells the agent when to prefer this activity feed over related list_* tools (e.g., list_timelogs, list_comments), nor when not to use it. The context is useful but incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_allocationsA
Read-only
Inspect

List scheduler allocations โ€” who is committed to which project, and when. ALWAYS pass start_date and end_date: with neither set the endpoint returns only today through 30 days from today, and says nothing about having narrowed the range, so an unbounded call silently answers a question about a wider period with one month of data. Allocations are planned time and a separate plane from task estimates and logged time; the two are not summed. linkedTaskEstimatedTime counts each linked task whole and must not be summed across allocations.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each allocation, from the listed names.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
end_dateNoReturn allocations overlapping up to and including this day (format: YYYY-MM-DD). Defaults to 30 days from today when omitted.
order_byNoThe field to sort the allocations by. Omit to keep the ordering the API applies by default.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching allocations, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
start_dateNoReturn allocations overlapping this day onwards (format: YYYY-MM-DD). Defaults to today when omitted.
project_idsNoOnly return allocations on these projects.
search_termNoA search term to filter allocations by title.
show_deletedNoReturn ONLY deleted allocations instead of the active ones โ€” this replaces the result set rather than adding to it, so a call with this set says nothing about what is currently scheduled. Deleting an allocation is a soft delete, and this is how a deleted one is found again.
deleted_afterNoOnly return allocations deleted at or after this moment; the boundary itself matches, unlike updated_after. Pair it with show_deleted, which is what switches the results to deleted allocations. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
updated_afterNoOnly return allocations updated strictly after this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
project_statusNoOnly return allocations on projects with this status.
project_tag_idsNoOnly return allocations on projects carrying these tags.
assigned_user_idsNoOnly return allocations assigned to these users. Accepts real people and placeholder users alike.
project_owner_idsNoOnly return allocations on projects owned by these users.
project_company_idsNoOnly return allocations on projects belonging to these companies.
project_category_idsNoOnly return allocations on projects in these categories.
assigned_user_team_idsNoOnly return allocations whose assigned user belongs to one of these teams.
match_all_project_tagsNoRequire a project to carry every tag in project_tag_ids rather than any of them.
include_financial_detailsNoInclude forecasted revenue and cost for the allocated time. Requires the scheduler rates entitlement and financial permission on the project; without either, the request still succeeds but the figures are withheld. Read canViewFinancialDetails on each row to tell a withheld figure from a zero one.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
includedNo
allocationsNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses a genuinely dangerous behavior well beyond the readOnlyHint annotation: omitting both dates silently returns only today-through-30-days and "says nothing about having narrowed the range," so an unbounded call quietly misanswers a wider-period question. Also discloses the linkedTaskEstimatedTime whole-count trap and the planned-vs-logged semantic trap โ€” exactly the non-obvious traits that cause incorrect use.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, no filler. Purpose is front-loaded in sentence one, the single most dangerous operational warning (ALWAYS pass dates) comes immediately after, and the two semantic trap warnings close it out. Every sentence earns its place; the long second sentence is justified because the nuance โ€” the API gives no signal that it narrowed the range โ€” is essential.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 23-parameter, 0-required list tool with an output schema and readOnly/destructive annotations already set, the description covers everything an agent could not infer elsewhere: the date-default trap, the conceptual separation from timelogs/tasks, and the non-summing rule for linkedTaskEstimatedTime. All individual parameters are fully documented in the schema, so nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds real value on top by explaining why start_date/end_date must be passed together โ€” the silent truncation risk is not inferable from the schema's per-parameter defaults, which each look benign in isolation. It also clarifies the meaning of linkedTaskEstimatedTime beyond its bare field enum entry.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource โ€” "List scheduler allocations" โ€” and immediately defines the domain: "who is committed to which project, and when." The follow-up distinction that allocations are "planned time and a separate plane from task estimates and logged time" cleanly separates it from siblings like twprojects-list_timelogs and twprojects-list_tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear decision boundary: this tool is for planned commitments, not logged time or task estimates, and "the two are not summed," which warns an agent not to combine this data with timelog data. However, it never names the alternative tools (e.g., twprojects-list_timelogs) that should be used when logged time is the actual need โ€” the routing is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_calendar_eventsA
Read-only
Inspect

List events from a calendar, including time-blocking events that link a calendar slot to a Teamwork project, task or timelog. Omit calendar_id to read the calling user's own calendar. Use twprojects-list_calendars to name a different one; the calendar of type 'blocked_time' holds the account's time-blocking events.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of events to return.
cursorNoCursor for fetching the next page of results.
fieldsNoThe attributes to return for each calendar event, from the listed names.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
order_byNoThe field to sort the calendar events by. Omit to keep the ordering the API applies by default.
order_modeNoThe direction to sort the results in.
calendar_idNoThe ID of the calendar to list events from. Omit it for the calling user's own calendar: the connected Google or Outlook calendar when there is one, otherwise the calendar of type 'blocked_time'. Every event reports the calendar it came from.
ended_before_dateNoOnly include events ending before this day starts, so the day named here is itself excluded โ€” pass the day after the last one you want (format: YYYY-MM-DD). Note the asymmetry with started_after_date.
started_after_dateNoOnly include events starting on or after this day, which is itself included (format: YYYY-MM-DD).

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
eventsNo
includedNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as readOnly and non-destructive. The description adds useful behavioral context beyond annotations, such as the default calendar behavior when calendar_id is omitted and the fact that blocked_time calendars hold time-blocking events. No contradictions with annotations exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler. It front-loads the primary action, then provides the most decision-relevant details about default calendar selection and the sibling tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the non-obvious selection logic (default calendar, blocked_time, alternate calendar lookup) while pagination and filtering parameters are fully described in the schema. Since an output schema is present, nothing needed to invoke the tool correctly appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters are already documented. The description adds context around calendar_id's default behavior but does not materially expand parameter semantics beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb and resource: 'List events from a calendar.' It also names the distinguishing time-blocking behavior that links calendar slots to Teamwork projects, tasks, or timelogs, which separates it from sibling list tools like twprojects-list_calendars.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly explains when to omit calendar_id to read the calling user's own calendar, and it names twprojects-list_calendars as the alternative for selecting a different calendar. This gives an agent concrete decision guidance for choosing between related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_calendarsA
Read-only
Inspect

List calendars. Calendars hold events such as meetings, out-of-office periods and time-blocking entries; the calendar of type 'blocked_time' holds the account's time-blocking events.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each calendar, from the listed names.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
order_byNoThe field to sort the calendars by. Omit to keep the ordering the API applies by default.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching calendars, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
calendarsNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds domain context about calendars and the 'blocked_time' type, but it does not disclose additional behavioral traits such as result scope, default ordering, pagination behavior, or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no filler. The primary action is front-loaded, and the second sentence adds meaningful context about calendar types, earning its place without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Combined with the fully documented input schema, output schema, and read-only annotations, the description is largely complete for a simple list operation. It could be slightly stronger by explicitly indicating that events are retrieved via twprojects-list_calendar_events, but nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage across all 7 parameters, so the schema already documents parameter semantics. The description adds a helpful note about the 'blocked_time' type value, but it does not explain any parameter behavior beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description opens with a specific verb+resource: 'List calendars.' It defines what calendars are and highlights the special 'blocked_time' calendar type for time-blocking events, making it easy to distinguish from the sibling twprojects-list_calendar_events, which lists events rather than calendars.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The imperative 'List calendars' implies the intended use case, and the explanatory sentence provides useful domain context. However, it does not explicitly state when to prefer this over twprojects-list_calendar_events, nor does it mention any exclusions, prerequisites, or alternative conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_commentsA
Read-only
Inspect

List comments. Scope by one of task_id, milestone_id, notebook_id, link_id, or file_version_id; omit all for site-wide. Comment bodies are truncated at 500 characters and marked where they are cut; use twprojects-get_comment for the full text.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each comment, from the listed names.
link_idNoThe ID of the link to retrieve comments for. Provide this to scope comments to a link.
task_idNoThe ID of the task to retrieve comments for. Provide this to scope comments to a task.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
order_byNoThe field to sort the comments by. Omit to keep the ordering the API applies by default.
user_idsNoA list of user IDs to filter comments by
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching comments, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
notebook_idNoThe ID of the notebook to retrieve comments for. Provide this to scope comments to a notebook.
search_termNoA search term to filter comments by name.
milestone_idNoThe ID of the milestone to retrieve comments for. Provide this to scope comments to a milestone.
updated_afterNoOnly include comments edited strictly after this moment; the boundary itself does not match. Defaults to the last 3 months. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
file_version_idNoThe ID of the file version to retrieve comments for. Each file can have multiple versions, and comments can be associated with specific versions.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
commentsNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely new behavioral context: bodies are truncated at 500 characters with markers, and that omitting all scope parameters returns site-wide data. It does not mention the default last-3-months window, though the schema documents that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences, front-loaded with the action, followed by scoping rules and the truncation caveat. No filler and every clause carries operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value details need not be explained, and the description covers scoping, truncation, and the full-text alternative. It omits guidance on pagination and the default time window, both of which live in the schema, leaving only minor gaps for a 15-parameter list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds semantics not present in the schema: the scope parameters are mutually exclusive ('one of') and their absence produces a site-wide query. That exclusivity rule meaningfully changes how an agent would populate the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List comments') and immediately delineates the scoping mechanism from the sibling 'twprojects-get_comment' used for full text. An agent can distinguish this from the other comment tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to scope by exactly one of the five ID parameters and to omit all for site-wide results, and names the alternative (twprojects-get_comment) for retrieving untruncated bodies. It stops short of guiding pagination (page/page_size) or when to prefer count_only/search filtering versus a plain list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_companiesB
Read-only
Inspect

List companies (aka clients).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each company, from the listed names.
tag_idsNoA list of tag IDs to filter companies by tags.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
order_byNoThe field to sort the companies by. Omit to keep the ordering the API applies by default.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching companies, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
search_termNoA search term to filter companies by name. Each word from the search term is used to match against the company name.
match_all_tagsNoIf true, match all tags; if false, match any.
order_by_custom_field_idNoThe custom field to sort the companies by. Required when order_by is "customfield", and ignored otherwise.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
includedNo
companiesNo

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The read-only and non-destructive nature is already covered by annotations, but the description adds no behavioral context beyond the word 'list.' It does not mention pagination defaults, response behavior, or any side effects, so it contributes little beyond what annotations already provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single tight sentence with no filler. The alias is placed immediately after the core statement, making it easy to parse and quickly actionable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema, complete parameter descriptions, and read-only annotations, the tool is adequately specified for a simple list operation. However, it omits any explanation of pagination/filtering behavior and gives no context for choosing this over twdesk-list_companies, leaving a moderate completeness gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and every parameter has its own description, so the baseline applies. The description adds no parameter-level meaning; 'aka clients' clarifies the resource but not any of the 11 parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific verb ('List') and resource ('companies'), and adds the alias 'clients' for clarity. It does not explicitly differentiate this from the near-identical sibling twdesk-list_companies, but the resource is clear and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. Given that twdesk-list_companies also exists and lists companies, an agent is left to infer the appropriate domain from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_custom_fieldsC
Read-only
Inspect

List custom fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoCustom field IDs to retrieve.
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each custom field, from the listed names.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
entitiesNoFilter custom fields by entity type.
order_byNoThe field to sort the custom fields by. Omit to keep the ordering the API applies by default.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching custom fields, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
project_idsNoFilter custom fields by project.
search_termNoA search term to filter custom fields by name.
show_deletedNoWhether to include deleted custom fields in the results.
only_site_levelNoWhether to return only installation-level custom fields.
include_site_levelNoWhether to also include installation-level custom fields when filtering by project.
only_project_levelNoWhether to return only project-level custom fields.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
customfieldsNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true and destructiveHint=false already cover the safety profile, so the description need not restate it. But the description adds no behavioral context beyond the titleโ€”no mention of pagination, count-only mode, verbose behavior, or deleted-field inclusionโ€”so it contributes nothing beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is maximally concise with zero wasted words, but it adds little over the title 'List Custom Fields' and front-loads no discriminating or scoping information that would help an agent select the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The rich schema (100% parameter coverage), output schema, and safety annotations carry most of the burden, so the short description is not fatally incomplete. Still, for a 15-parameter tool, even one sentence clarifying scope or alternatives would meaningfully improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all 15 parameters documented (e.g., count_only returns {'count': N} and ignores other params; verbose=false returns id+name only). Per the baseline rule, the description need not add parameter details, and it does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('custom fields'), so the core purpose is clear. However, it essentially restates the tool name/title and does not differentiate from sibling tools like twprojects-get_custom_field or twprojects-list_custom_field_values.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage guidance is provided. The description offers no indication of when to use this tool over twprojects-get_custom_field for a single field, nor any mention of the rich filtering capabilities (entities, project_ids, show_deleted) that distinguish this listing tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_custom_field_valuesB
Read-only
Inspect

List the custom field values of a task, project or company.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
entityYesThe type of entity to list custom field values for.
fieldsNoThe attributes to return for each custom field value, from the listed names.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
entity_idYesThe ID of the task, project or company to list custom field values for.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching custom field values, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
custom_field_idsNoFilter by custom field.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
customfieldValuesNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is fully covered and the description's "List" action is consistent with it โ€” no contradiction. However, the description adds no behavioral context beyond the annotation coverage: nothing about pagination defaults, count_only mode, or empty-result behavior, though the schema does document the parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single 12-word sentence that leads with the verb and resource, with the entity scope front-loaded and zero filler. Every word earns its place; nothing is redundant or ornamental.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite 8 parameters with rich options (pagination, count_only, verbose, custom_field_ids filtering), the schema documents them at 100% and an output schema exists, so the description needn't rehearse mechanics or return shapes. The one-sentence description is essentially sufficient for selection, though a hint that filtering and count modes exist would make it fully self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all eight parameters carry structural documentation and the baseline of 3 applies. The description's mention of "task, project or company" echoes the entity enum without adding meaning beyond the schema, so it neither compensates for gaps nor adds value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ("List"), a precise resource ("custom field values"), and scopes it to three entity types ("task, project or company"). This distinguishes it implicitly from close siblings like twprojects-list_custom_fields (field definitions vs. values) and twprojects-get_custom_field_value (single vs. plural), though it never names those alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to choose this tool over its alternatives. The entity scope is a mild implied usage hint, but there is no when/when-not guidance โ€” e.g., nothing tells an agent to prefer twprojects-list_custom_fields for field definitions or twprojects-get_custom_field_value for a single value, and no behavior is described for entities without custom field values.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_custom_item_fieldsA
Read-only
Inspect

List fields on a custom item type. Each entry includes the twId you need when writing record values. Custom items are user-defined entity types โ€” Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoRestrict to these field IDs.
pageNoPage number for pagination of results (1-based).
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching custom item fields, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
search_termNoA search term to filter custom item fields by display name.
show_deletedNoInclude deleted fields.
custom_item_idYesCustom item type ID to list fields for.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
customItemFieldsNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by explaining that entries expose the twId needed for writing record values and by clarifying what custom items are, though it does not detail pagination or count_only behavior โ€” those are left to the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the primary action and stays reasonably compact. The custom-item definition and routing guidance earn their place, though the generic 'Use these tools' phrasing is slightly broader than this single tool and adds minor noise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, annotations cover the read-only safety profile, and the schema fully documents parameters, the description supplies the missing decision-making context: what custom items are, when to use these tools, and why the returned twId matters for subsequent record writes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all 8 parameters already documented in the input schema. The description does not add parameter-level details, but it doesn't need to compensate for gaps; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List fields on a custom item type.' It goes further by explaining what custom items are and noting that each entry includes the twId needed for writing record values, which makes the tool's purpose and domain unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use the custom-item tool family: when the user refers to an entity that is NOT a built-in Teamwork concept. It also gives a clear fallback: if an entity name is unrecognized, call twprojects-list_custom_items to confirm before assuming it is a custom item.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_custom_item_recordsA
Read-only
Inspect

List records on a custom item type. Returns each record with field values keyed by display name. Use the section_ids filter to scope to a specific section. Custom items are user-defined entity types โ€” Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoRestrict to these record IDs.
pageNoPage number for pagination of results (1-based).
order_byNoThe field to sort the custom item records by. Omit to keep the ordering the API applies by default.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching custom item records, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
search_termNoA search term to filter custom item records by name.
section_idsNoRestrict to records in these sections.
show_deletedNoInclude deleted records.
custom_item_idYesCustom item type ID to list records for.
order_by_field_idNoThe custom field to sort the records by. Required when order_by is "customitemfield", and ignored otherwise.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
customItemRecordsNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond that: records are returned with field values keyed by display name, and section_ids can scope results. It does not discuss pagination behavior or ordering defaults, but the schema covers those parameters, so the description carries a reasonable share of behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and return semantics, then adds scoping guidance, domain context, and a disambiguation workflow. Each sentence earns its place, and the custom-item definition with examples (Contracts, Leads, Deals) prevents the agent from misclassifying these entities as built-in types. It is long enough to be useful but not bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's 11 parameters and rich input schema, the description provides the essential selection context an agent needs: what custom items are, when to use this tool, and how to disambiguate unknown entity names. The output schema being present means the description need not explain return structure in detail. It is complete for both tool selection and safe invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all 11 parameters. The description highlights section_ids as a scoping mechanism, but it does not add meaning beyond the schema's own description of that parameter. With full schema coverage, the baseline of 3 is appropriate; the description adds no significant parameter-level semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific verb and resource: 'List records on a custom item type.' It also clarifies the scope of custom items relative to built-in Teamwork concepts, which helps distinguish this tool from the many built-in list tools in the sibling set. The return behavior โ€” 'field values keyed by display name' โ€” further sharpens what this tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: use custom-item tools when the entity is NOT a built-in Teamwork concept (Task, Tasklist, Project, etc.). It also provides a concrete fallback workflow: if the entity name is unrecognized, assume it is a custom item and call twprojects-list_custom_items to confirm. This is actionable and removes ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_custom_itemsA
Read-only
Inspect

List the custom item types defined on a project. Returns each type's id, display name and labels โ€” call get_custom_item to see a type's fields and sections. Custom items are user-defined entity types โ€” Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoRestrict to these custom item type IDs.
pageNoPage number for pagination of results (1-based).
order_byNoThe field to sort the custom items by. Omit to keep the ordering the API applies by default.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching custom items, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
project_idYesProject ID to list custom item types for.
search_termNoA search term to filter custom items by display name or labels.
show_deletedNoInclude deleted custom item types.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
includedNo
customItemsNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds behavioral context beyond that: it scopes what the call returns ('id, display name and labels') and explicitly states what it does NOT return (fields and sections), pointing to get_custom_item for that. This helps the agent set correct expectations. It doesn't mention pagination defaults, but the schema documents pagination thoroughly and the output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded: the primary function and return contents occupy the first sentence, followed by routing to get_custom_item, then the conceptual definition and usage rule. The enumerated list of built-in concepts is somewhat long but earns its place as it powers the when-to-use heuristic. No wasted sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists and the input schema documents all parameters with 100% coverage, the description adds precisely the missing context: the conceptual model of what a custom item is (Contracts, Leads, Deals), how it differs from built-in entities, and a concrete decision procedure for when to invoke this tool. An agent has everything needed to select and call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all 9 parameters richly documented (count_only explains its JSON shape and ignored params; page_size gives its 1-500 range; search_term states it filters by display name or labels). The description's mention of 'display name and labels' corroborates search_term but adds no new parameter-level semantics beyond the schema. Baseline 3 is appropriate since the schema carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb + resource + scope: 'List the custom item types defined on a project.' It further specifies the return payload (id, display name, labels) and explicitly differentiates from the sibling get_custom_item, telling the agent to use that tool for fields and sections instead. This fully disambiguates it from related custom-item tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance by enumerating the built-in Teamwork concepts (Task, Tasklist, Project, Milestone, etc.) and instructing that these custom-item tools apply when the entity is NOT one of them. It even gives a fallback decision rule: 'If you don't recognise an entity name... assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.' This is exemplary routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_filesA
Read-only
Inspect

List the files in a project's files area, or across every project when no project_id is given. Files attached to tasks, comments and messages live there too, so task_id answers "what is attached to this task". Deleted files are left out unless show_deleted is true. Each row carries a downloadURL that needs the caller's own Teamwork session; use twprojects-download_file to read the content here.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoOnly files with these IDs.
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each file, from the listed names.
tag_idsNoOnly files carrying any of these tags.
task_idNoOnly files attached to this task.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
order_byNoThe field to sort the files by. Omit to keep the ordering the API applies by default.
user_idsNoOnly files uploaded by these users.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching files, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
project_idNoThe ID of the project whose files area to list. Omit to list files across every project the caller can access.
category_idNoOnly files in this file category.
search_termNoOnly files whose name contains this term. Set search_all_fields to also match the extension, the category, the original name and the uploader's name.
show_deletedNoWhether to also list deleted files. Defaults to false.
updated_afterNoOnly files changed strictly after this instant, on the file or on its selected version. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
uploaded_afterNoOnly files whose selected version was uploaded on or after this day (YYYY-MM-DD). The day itself is included.
uploaded_beforeNoOnly files whose selected version was uploaded before this day (YYYY-MM-DD). The bound is the first instant of the day, so files uploaded during it are excluded; name the following day to include it.
search_all_fieldsNoWhether search_term also matches the file extension, the file category, the original file name and the name of the latest uploader. Defaults to false.
skip_external_filesNoWhether to leave out files that live in a linked cloud storage provider (Google Drive, Dropbox, Box, OneDrive, SharePoint) and list uploads only. Defaults to false. A row's fileSource tells the two apart.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
filesNo
includedNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely useful behavior beyond that: deleted files are hidden by default, and each row's downloadURL requires the caller's own Teamwork session, which is auth context an agent cannot infer from structure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the core purpose, then scoping edge cases and the download pointer. Every sentence carries information, though the downloadURL/session detail is somewhat dense in the closing line.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description still flags the downloadURL caveat. For a 20-parameter tool it covers scope, cross-project behavior, task attachment, deletion filtering and the download hand-off; pagination and filtering defaults are left to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 20 parameters thoroughly. The description adds conceptual meaning for task_id and the show_deleted default but nothing the schema doesn't already carry, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List the files") plus the exact scope: a project's files area, or every project when project_id is omitted. This distinguishes it from siblings like twprojects-get_file and twprojects-download_file without needing to open either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear selection context: omit project_id to go cross-project, use task_id to answer "what is attached to this task," and use twprojects-download_file to read content. It routes to the download sibling explicitly but doesn't contrast against get_file or search, so no full when-not set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_industriesA
Read-only
Inspect

List supported company (aka client) industries.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
industriesYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe read-only nature is established. The description adds the scope qualifier 'supported' and the alias 'client', which helps clarify the exact set returned. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that conveys the purpose instantly with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple enumeration tool with no parameters and an output schema, the description is complete. It tells the user exactly what to expect: a list of supported industries. No additional context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so parameter documentation is unnecessary. Schema coverage is trivially 100%, and the description adds no parameter semantics because there are none to describe. Baseline for 0 params is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists supported company (aka client) industries. The verb 'List' and resource 'industries' are specific, and it is distinguished from siblings like list_companies by focusing on industries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is clear: retrieve the set of supported industries for companies/clients. Since there is no competing list_industries tool among siblings and the operation is a simple enumeration, the context is sufficiently clear without explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_jobrolesA
Read-only
Inspect

List job roles. A verbose row carries the people assigned to the role under users, and those holding it as their primary role under primaryUsers; both are references, resolved to names under included.users.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each job role, from the listed names.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching job roles, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
search_termNoA search term to filter job roles by name, or assigned users. The job role will be selected if each word of the term matches the name, or assigned user first or last name, not requiring that the word matches are in the same field.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
includedNo
jobRolesNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=truehare. The description adds significant behavioral context beyond that: it explains the structure of a verbose response (users vs primaryUsers) and that references resolve to names under included.users. This tells the agent what to expect in the payload, which annotations do not cover. It doesn't address rate limits or pagination defaults, but those are less critical for a read-only list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no redundancy. The primary action is stated first, followed by a single clarifying detail about verbose mode. Every word earns its place; it is neither over- nor under-specified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and all parameters documented, the description covers the core operation adequately. It explains the nuanced difference between users and primaryUsers, which is essential for interpreting results. It doesn't mention pagination strategy or default ordering, but those are available in the schema. Given the tool's listing nature and read-only status, this is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all seven parameters (page, fields, verbose, page_size, count_only, order_mode, search_term) already have descriptive text. The description adds no new parameter semantics; its second sentence clarifies the verbose parameter's effect on the response, but that's a behavioral detail rather than parameter syntax. This matches the baseline of 3 when the schema carries the full parameter documentation burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'List job roles', a clear verb+resource combination. It distinguishes itself from get_jobrole by implying a collection return, though it doesn't explicitly contrast with sibling list_* tools. The mention of 'verbose row' adds important scope detail about what is listed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like get_jobrole, search, or count-based tools. It implies use for listing job roles but doesn't state exclusions or selection criteria. The schema descriptions for parameters like count_only and verbose do some of this work, but the description itself is silent on usage strategy.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_message_repliesA
Read-only
Inspect

List replies under a message thread. Filter by message_ids or project_ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each message reply, from the listed names.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
order_byNoThe field to sort the message replies by. Omit to keep the ordering the API applies by default.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching message replies, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
message_idsNoFilter by message.
project_idsNoFilter by project.
search_termNoA search term to filter message replies by body or title. Each word from the search term is used to match against the message reply body or title. The message reply will be selected if each word of the term matches the message reply body or title, not requiring that the word matches are in the same field.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
messageRepliesNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds only that replies are 'under a message thread' and the available filters; it does not add behavioral context such as auth needs, rate limits, or pagination behavior beyond what annotations and schema provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, front-loaded sentences with zero waste. The core action is stated first, followed immediately by the key filter options.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a fully described schema, an output schema, and annotations covering safety, the description provides enough to identify the tool and its primary filters. It does not mention pagination, count_only, search_term, or sorting, but those are documented in the schema and not required for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 10 parameters are already documented with meaning in the schema. The description mentions message_ids and project_ids but adds no syntax, format, or interaction detail beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('replies under a message thread'), and names two filtering dimensions. It implicitly distinguishes from singular get_message_reply and from list_messages, but does not explicitly name or differentiate against sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says it can be filtered by message_ids or project_ids, which is implied usage for a list tool. However, it gives no guidance on when to choose this over alternatives like list_messages or get_message_reply, and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_messagesA
Read-only
Inspect

List project messages (top-level posts). Use twprojects-list_message_replies for thread replies.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each message, from the listed names.
tag_idsNoA list of tag IDs to filter messages by tags.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
order_byNoThe field to sort the messages by. Omit to keep the ordering the API applies by default.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching messages, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
project_idsNoFilter messages by project.
search_termNoA search term to filter messages by body or title. Each word from the search term is used to match against the message body or title. The message will be selected if each word of the term matches the message body or title, not requiring that the word matches are in the same field.
match_all_tagsNoIf true, match all tags; if false, match any.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
messagesNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, covering the safety profile. The description adds only the top-level-vs-replies scope distinction and nothing about pagination, default ordering, or volume handling beyond what schema fields already convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero waste, with the scope constraint and the sibling routing front-loaded ahead of any optional detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a full output schema, complete parameter documentation, and read-only annotations, the description is essentially complete for a list tool. Only minor gaps remain (no mention of pagination or default sort behavior), which the schema largely covers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (11 of 11 params documented), so the baseline is 3. The description adds no syntax or usage detail for any parameter beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (project messages), and disambiguates the scope as 'top-level posts'. It also names the sibling tool it is not, so an agent can distinguish it from twprojects-list_message_replies without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent to twprojects-list_message_replies for thread replies, giving a clear when-to-use-this-vs-alternative rule. It stops short of broader context (e.g. filtering by project before calling), so it is strong but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_milestonesA
Read-only
Inspect

List milestones. Scope by project_id or omit for site-wide. Completed milestones are included by default; pass show_completed false to see only the outstanding ones. Use due_after and due_before to bound the deadline instead of listing everything and filtering afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each milestone, from the listed names.
tag_idsNoA list of tag IDs to filter milestones by tags.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
order_byNoThe field to sort the milestones by. Omit to keep the ordering the API applies by default.
due_afterNoOnly include milestones with a deadline on or after this date.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching milestones, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
due_beforeNoOnly include milestones with a deadline on or before this date.
order_modeNoThe direction to sort the results in.
project_idNoThe ID of the project from which to retrieve milestones. Omit to list milestones across all projects.
search_termNoA search term to filter milestones by name. Each word from the search term is used to match against the milestone name and description. The milestone will be selected if each word of the term matches the milestone name or description, not requiring that the word matches are in the same field.
match_all_tagsNoIf true, match all tags; if false, match any.
show_completedNoIf false, only return milestones that are not completed yet. Included by default, unlike the task and tasklist lists.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
milestonesNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true and destructiveHint=false, the description adds useful behavior beyond annotations: completed milestones are included by default, omitting project_id returns site-wide results, and date bounds are recommended over client-side filtering. This gives the agent actionable expectations about the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. Each sentence earns its place: the first establishes scope and resource, the second covers default completed behavior and efficient date filtering.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich 100%-covered input schema and the presence of an output schema, the description covers the most decision-relevant behavioral choices: project scope, completed filtering, and date bounding. It does not mention pagination, field selection, or sibling count tools, but those are adequately specified in the schema, making this description sufficient for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 14 parameters and their meanings. The description adds light usage emphasis on project_id, show_completed, due_after, and due_before, but does not provide semantically new parameter information beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('List milestones') and clarifies scope behavior ('Scope by project_id or omit for site-wide'). It does not explicitly distinguish from siblings like count_milestones or get_milestone, but the listing intent is clear enough to avoid major confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context: project scoping, the default inclusion of completed milestones, and the recommendation to use due_after/due_before instead of fetching everything and filtering locally. It does not mention alternative tools or exclusions such as preferring count_milestones for count-only queries, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_notebooksC
Read-only
Inspect

List notebooks.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each notebook, from the listed names.
tag_idsNoA list of tag IDs to filter notebooks by tags.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
order_byNoThe field to sort the notebooks by. Omit to keep the ordering the API applies by default.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching notebooks, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
project_idsNoFilter notebooks by project.
search_termNoA search term to filter notebooks by name or description. The notebook will be selected if each word of the term matches the notebook name or description, not requiring that the word matches are in the same field.
match_all_tagsNoIf true, match all tags; if false, match any.
include_contentsNoIf true, include notebook contents in the response.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
notebooksNo

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond thatโ€”no mention of default contents inclusion, pagination defaults, count_only behavior, or ordering semantics. It is consistent with annotations but contributes no extra transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

'List notebooks.' is maximally concise and has no fluff, but it is under-specified and provides no structural benefit over the tool name. It is acceptable, but not a genuinely helpful, well-earned description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 12 parameters, rich filtering options, pagination, and a verbose/count-only mode, yet the description gives no context about these behaviors. The output schema exists, so return values need not be explained, but an agent would benefit from knowing when to use this copy-heavy list operation and how to request leaner results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 12 parameters in detail. The description itself adds nothing beyond the schema, which matches the baseline of 3 for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'List notebooks.' It accurately conveys the basic operation. However, it does not differentiate this from the many other list_* sibling tools, so it misses the top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like twprojects-get_notebook, twprojects-list_tasks, or other list tools. The description leaves the agent to infer usage entirely from the tool name and parameter schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_project_budgetsA
Read-only
Inspect

Lists top-level project budgets. Filters: project_ids, status.Returns only budgeted projects (diff with twprojects-list_projects for budgetless).Filter server-side via project_ids when known. 1-based page pagination (pageOffset = page - 1)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
limitNoMaximum number of budgets to return. Only applies alongside cursor; ignored when paging with page/page_size.
cursorNoOpaque cursor from a previous response, for cursor pagination. This is not an offset or a page number โ€” never construct one. Setting it makes the endpoint ignore page and page_size. To walk pages, use page instead.
fieldsNoThe attributes to return for each project budget, from the listed names.
statusNoFilter budgets by status.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching project budgets, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
project_idsNoFilter budgets by project.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
budgetsNo
includedNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry the safety profile (readOnlyHint=true, destructiveHint=false), so the description's burden is lighter. It adds genuine behavioral context beyond the annotations: the selection behavior ('Returns only budgeted projects'), the efficiency recommendation for server-side filtering, and a non-obvious pagination detail ('1-based page pagination (pageOffset = page - 1)'). This pagination clarification is exactly the kind of trait an agent needs to call the tool correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences pack the essential information: purpose, filters, sibling differentiation, and pagination semantics, with the core function front-loaded first. No filler. It loses a point only for minor formatting defects (missing spaces: 'status.Returns' and 'budgetless).Filter') that slightly reduce readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (9 optional parameters, output schema present, annotations present), the description covers the key decision points: what is returned, the filter options, the sibling distinction, and pagination behavior. The one notable gap is not explaining how 'top-level' budgets relate to the closely named twprojects-list_tasklist_budgets sibling, which could leave an agent uncertain about which list tool to invoke in a given context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 9 parameters thoroughly, including cursor caveats and count_only semantics. The description reinforces that project_ids and status act as filters and hints at pagination mechanics, but adds little beyond what the schema states. Baseline 3 is appropriate since the structured data carries the parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource statement: 'Lists top-level project budgets.' The qualifier 'top-level' usefully distinguishes this from tasklist-level budget tools among the siblings, and it explicitly names twprojects-list_projects as the sibling that covers budgetless projects. An agent can tell what this tool is for and what it is not for without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit routing guidance: 'Returns only budgeted projects (diff with twprojects-list_projects for budgetless)' names the alternative and the selection condition, and 'Filter server-side via project_ids when known' advises on when to pass filters rather than post-filtering. It stops short of a 5 because it does not address the near-twin sibling twprojects-list_tasklist_budgets or state when to prefer count_only, but the core when-to-use guidance is explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_project_categoriesC
Read-only
Inspect

List project categories.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each project category, from the listed names.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching project categories, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
search_termNoA search term to filter project categories by name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
projectCategoriesNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds no additional behavioral context beyond the word 'List' โ€” it does not mention output shape, pagination behavior, or the effect of the count_only/search_term parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, direct sentence with no filler or redundant phrasing. It is front-loaded and easy to parse, though it is quite minimal and could have included a bit more context without becoming bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich input schema, output schema, and annotations, the description itself is adequate for the simplest reading: list project categories. However, it lacks any selection guidance among many list_* siblings and offers no behavior-related context, so an agent gets only the minimum needed to call the tool, not to choose it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter is individually documented with meaningful descriptions, defaults, and constraints. The tool description itself contributes no parameter information, but the schema carries the full burden, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'project categories', making the tool's basic purpose obvious. However, it does not explicitly differentiate this from sibling tools such as twprojects-get_project_category or twspaces-list_categories, leaving the agent to infer the distinction from the tool name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description does not mention filtering, pagination, count-only mode, or when a user might prefer a related tool such as twprojects-get_project_category or twspaces-list_categories.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_projectsA
Read-only
Inspect

List projects with structured filters (membership, progress state, health, category, tag, company, owner). For "my projects" pass user_ids with the ID from twprojects-get_user_me, or only_starred. For projects that have slipped pass project_statuses=["late"] โ€” a project row carries no late flag, so this filter is the only way to ask.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each project, from the listed names.
tag_idsNoA list of tag IDs to filter projects by tags.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
order_byNoThe field to sort the projects by. Omit to keep the ordering the API applies by default.
team_idsNoFilter projects by team, matching the projects any member of those teams belongs to.
user_idsNoFilter projects by the users holding an explicit membership of them. For "my projects", pass the ID returned by twprojects-get_user_me.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching projects, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
company_idsNoFilter projects by the company that owns them.
search_termNoA search term to filter projects by name or description.
only_starredNoIf true, only return the projects the calling user has starred.
hide_observedNoIf true, leave out the projects the calling user only observes, keeping the ones they actually work on.
only_archivedNoIf true, only return archived projects.
updated_afterNoOnly include projects whose last activity is strictly after this moment; the boundary itself does not match. Any activity in the project counts, not just edits to the project record. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
match_all_tagsNoIf true, match all tags; if false, match any.
project_healthsNoFilter projects by the health rating set on them, matching any of the values given. "not_set" matches the projects nobody has rated.
include_archivedNoIf true, return archived projects alongside the active ones; excluded by default.
project_statusesNoFilter projects by progress state, matching any of the values given. "late" is past its end date and not yet completed, "upcoming" has not started yet, "current" is running now, and "active" is every project that is neither completed nor archived. Omit to keep the endpoint's own default set.
include_tentativeNoIf true, return tentative projects alongside the normal ones; excluded by default.
only_admin_accessNoIf true, only return the projects the calling user administers.
project_owner_idsNoFilter projects by the user who owns them.
project_category_idsNoFilter projects by category.
include_subcategoriesNoIf true, project_category_ids also matches the categories nested under the ones given.
order_by_custom_field_idNoThe custom field to sort the projects by. Required when order_by is "customfield", and ignored otherwise.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
includedNo
projectsNo
suggestionsNoPresent only when search_term was supplied and the result list came back empty. Entities whose name matches the term, most relevant first, so the term can be recognised instead of treated as unknown. A candidate may be of another type than the one listed, or of the same type but excluded by this tool's filters โ€” completed items are searched regardless of show_completed, so a candidate says nothing about completion. Read it with the entity type's own get tool.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds behavioral nuance beyond the schema: 'a project row carries no late flag, so this filter is the only way to ask,' and clarifies the relationship between user_ids and only_starred for 'my projects.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences and every sentence carries useful information. Purpose is front-loaded, and the examples are compact and directly actionable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of a full output schema and 100% parameter coverage in the input schema, the description supplies the critical decision context: what the tool does and the two most common non-obvious filter recipes. No essential guidance is missing; annotations cover the read-only behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds value by linking user_ids to the specific ID from twprojects-get_user_me and explaining the significance of project_statuses=['late'] as the sole way to retrieve late projects. This cross-references another tool and clarifies semantics beyond the parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'List projects with structured filters,' clearly naming the endpoint's verb and resource, and enumerates the filter dimensions. This distinguishes it from sibling tools like twprojects-search and twprojects-list_tasks by emphasizing structured filtering rather than free-text search or task listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage recipes: for 'my projects' pass user_ids with the ID from twprojects-get_user_me, or use only_starred; for slipped projects pass project_statuses=['late']. It gives clear contextual guidance, though it does not explicitly name alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_project_templatesC
Read-only
Inspect

List project templates.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
tag_idsNoA list of tag IDs to filter project templates by tags.
page_sizeNoNumber of results per page for pagination (1-500).
search_termNoA search term to filter project templates by name or description.
match_all_tagsNoIf true, match all tags; if false, match any.
project_category_idsNoFilter project templates by category.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
includedNo
projectsNo
suggestionsNoPresent only when search_term was supplied and the result list came back empty. Entities whose name matches the term, most relevant first, so the term can be recognised instead of treated as unknown. A candidate may be of another type than the one listed, or of the same type but excluded by this tool's filters โ€” completed items are searched regardless of show_completed, so a candidate says nothing about completion. Read it with the entity type's own get tool.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true and destructiveHint=false, so the safety profile is covered. However, the description adds no behavioral context beyond the literal 'List' action, such as scoping, pagination behavior, or how filters affect results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at three words and contains no filler. It is front-loaded and efficient, though it is so terse that it offers little beyond the tool title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The definition is adequate for a simple list operation because the schema fully documents parameters and an output schema exists. It lacks usage context and details about when to use this tool instead of related search/list tools, leaving an agent with a minimally viable but not rich definition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for all six optional parameters, so the schema carries the parameter documentation burden. The description itself adds no parameter-level meaning, which matches the baseline for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List project templates.' It clearly conveys what the tool does. However, it does not differentiate this tool from sibling listing tools such as twprojects-list_projects or twprojects-search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives, and no mention of when filtering or pagination should be applied. Usage is only implied by the tool name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_project_updatesA
Read-only
Inspect

List project updates: the Markdown text on a project's dashboard and the health it reports. Nothing else returns either โ€” a project row carries no health, and the activity log holds a preview of the text, not the text. Newest first. Only each project's current update is returned unless active_only is false, so an unfiltered call is not the whole history. Rows carry text (Markdown, in full, emoji codes already converted to characters), health (0 not set, 1 bad, 2 ok, 3 good), healthLabel (the name this installation gives that rating โ€” read it, never build one from health) and color (hex, empty when the health is not set). The author and the project are bare IDs, sideloaded under included when verbose is true. Keep a response small with fields and page_size; verbose=false drops the text and returns the ratings.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each project update, from the listed names.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
order_byNoThe field to sort the project updates by. Omit to keep the ordering the API applies by default.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching project updates, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
active_onlyNoIf true (the default), return only each project's current update. Set it to false to read the update history, which returns every past update in full.
project_idsNoOnly return the updates of these projects. Naming any project makes the endpoint ignore every other project filter, including project_healths and include_archived.
show_deletedNoIf true, return deleted updates alongside the live ones; excluded by default.
created_afterNoOnly include updates posted at or after this moment; the boundary itself matches. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
updated_afterNoOnly include updates last edited strictly after this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
project_healthsNoOnly return the updates reporting these health ratings, matching any of the values given. "not_set" matches an update that rates nothing. Ignored when project_ids is set.
include_archivedNoIf true, return the updates of archived projects alongside those of the active ones; excluded by default. Ignored when project_ids is set.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
includedNo
projectUpdatesNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, yet the description adds substantial behavior: the active_only default silently truncating history, project_ids overriding all other project filters, health's numeric mapping (0 not set / 1 bad / 2 ok / 3 good), healthLabel being installation-specific and not to be reconstructed, color being empty when health is unset, and verbose=false dropping the text. This is well beyond what annotations supply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and default behavior, and every clause carries operational information rather than filler. It is dense and fairly long for a list tool, but the length is justified by the 14 parameters and the non-obvious active_only/project_ids interactions, so compression would cost real detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter list tool with an output schema present, the description supplies everything an agent needs: default scoping, filter-override rules, field-level return semantics, and how to shrink responses. Return-shape detail beyond rows is unnecessary given the output schema, so nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema coverage at 100%, the baseline is 3, but the description goes further by explaining the health field's numeric-to-label mapping and the instruction to read healthLabel rather than synthesize it, plus the practical interaction between verbose and the returned text. These are semantic details that the schema's per-parameter descriptions do not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("List project updates") and immediately identifies what uniquely lives here: the Markdown dashboard text and the health rating. It explicitly distinguishes itself from siblings by noting that a project row carries no health and the activity log holds only a preview of the text, so an agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operating context: "Only each project's current update is returned unless active_only is false, so an unfiltered call is not the whole history," plus guidance to keep responses small via fields/page_size. It compares against the project row and activity log as alternative sources but does not phrase it as explicit when-to-use-versus-a-named-tool guidance, so it stops just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_skillsB
Read-only
Inspect

List skills.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each skill, from the listed names.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching skills, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
search_termNoA search term to filter skills by name, or assigned users. The skill will be selected if each word of the term matches the name, or assigned user first or last name, not requiring that the word matches are in the same field.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
skillsNo

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description only restates the basic operation and adds no behavioral context beyond the annotations. The annotations already communicate readOnlyHint=true and destructiveHint=false, but the prose does not mention pagination, filtering defaults, or result-set semantics. As a safe read operation this is acceptable, but no additional behavioral disclosure is provided.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short and contains no filler, making it easy to parse and front-loaded. It is concise, though perhaps too terse to add much guidance beyond the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a full output schema, complete parameter descriptions, and read-only annotations, the structured data provides most of what an agent needs to invoke the tool correctly. The description itself is minimal, so a bit more context about typical usage or result behavior would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema fully documents all seven parameters, including defaults, enums, and the count_only behavior. The description adds no parameter-level meaning; the schema carries the load, which matches the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation ('List') and the resource ('skills'), so an agent can understand the basic purpose. However, it does not elaborate on scope or distinguish itself from sibling list_* tools beyond the resource name, making it clear but without explicit sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like twprojects-get_skill, twprojects-create_skill, or other list_* tools. There is no mention of exclusions, prerequisites, or conditions that would route an agent to this tool, so usage must be inferred entirely from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_tagsC
Read-only
Inspect

List tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each tag, from the listed names.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
order_byNoThe field to sort the tags by. Omit to keep the ordering the API applies by default.
item_typeNoFilter tags by item type.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching tags, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
project_idsNoFilter by project.
search_termNoA search term to filter tags by name. Each word from the search term is used to match against the tag name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
tagsNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond that, such as pagination behavior, default sorting, or the effect of count_only. It is consistent with the annotations but provides no additional transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

'List tags' is maximally short but under-specified: it repeats the tool name and title without adding context. For a tool with 10 parameters and multiple sibling list_tags tools, this brevity is not effective conciseness; it is omission.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, rich schema, and the presence of twdesk-list_tags and twspaces-list_tags, the description is not complete enough. It fails to clarify the project context, filtering capabilities, or relationship to other tag operations. The output schema helps, but the description itself leaves too much to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all 10 parameters thoroughly. The description adds no parameter-level meaning, but the baseline of 3 applies because the schema carries the semantic weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'List tags.' This is unambiguous at a basic level. However, it does not differentiate this tool from twdesk-list_tags or twspaces-list_tags, both of which are siblings with the same basic purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. It does not mention that this lists project tags, nor does it contrast with get_tag, create_tag, or the other list_tags siblings. The agent is left to infer usage entirely from the tool name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_tasklist_budgetsA
Read-only
Inspect

List tasklist budgets nested under a project budget. Requires project_budget_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each tasklist budget, from the listed names.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
order_byNoThe field to sort the task list budgets by. Omit to keep the ordering the API applies by default.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching tasklist budgets, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
project_budget_idYesThe ID of the project budget to list tasklist budgets for.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
includedNo
tasklistBudgetsNo

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds the nesting constraint and required ID, but does not add behavioral context such as pagination defaults or count_only behavior; however, these are covered in the rich input schema, so the minimal extra description is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler or repeated schema content. It states the core purpose and the essential prerequisite in the most compact useful form.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation, the description plus the complete input schema and output schema provide everything an agent needs: the required project_budget_id, filtering/pagination parameters, and the safety profile. No critical context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and every parameter has an explanatory description in the schema itself. The tool description only reiterates that project_budget_id is required and does not add meaning beyond what the schema already provides, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and a clear resource ('tasklist budgets nested under a project budget'), making the tool's scope unambiguous. It also distinguishes this tool from the many other list_* siblings by naming the parent entity and the required link to a project budget.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly identifies the context: tasklist budgets are nested under a project budget, and a project_budget_id is required. It does not explicitly mention alternatives or when not to use this tool, but the nesting context is enough to guide an agent toward the correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_tasklistsA
Read-only
Inspect

List tasklists. Scope by project_id or omit for site-wide.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each tasklist, from the listed names.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
order_byNoThe field to sort the task lists by. Omit to keep the ordering the API applies by default.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching tasklists, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
project_idNoThe ID of the project from which to retrieve tasklists. Omit to list tasklists across all projects.
search_termNoA search term to filter tasklists by name.
show_completedNoIf true, include completed tasklists; excluded by default.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
tasklistsNo
suggestionsNoPresent only when search_term was supplied and the result list came back empty. Entities whose name matches the term, most relevant first, so the term can be recognised instead of treated as unknown. A candidate may be of another type than the one listed, or of the same type but excluded by this tool's filters โ€” completed items are searched regardless of show_completed, so a candidate says nothing about completion. Read it with the entity type's own get tool.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds the site-wide vs project-scoped behavior, but does not disclose additional traits such as pagination defaults, completion filtering, or result size; those live in parameter descriptions. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action and a single scoping instruction. No filler or redundancy; every word contributes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list operation with rich schema (10 parameters, output schema present), the description is sufficient: it states the core action and scoping, while all parameter details and return shape are covered by structured data. It does not mention pagination defaults or filtering flags, but those are fully documented in the input schema, so the omission is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter already has a meaningful description. The tool description only reinforces project_id scoping and adds no new format, default, or interaction semantics beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('tasklists'), and states the scope parameter ('project_id') with site-wide default. However, it does not explicitly differentiate from sibling list tools such as list_tasks or get_tasklist, relying on the resource name to do so.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context: 'Scope by project_id or omit for site-wide' tells the agent how to narrow or broaden the query. It lacks explicit when-not-to-use or alternative tool references, but for a simple read-only list that is a minor omission.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_tasksA
Read-only
Inspect

List tasks with structured filters (tasklist_id, project_id, or site-wide). For keyword search use search. Completed tasks and tasks in completed tasklists are excluded unless show_completed is true, so an empty result may mean the matching work is already done rather than missing. Ask for "late", "overdue", "due today", "started" or "upcoming" work through date_filter, and leave people out through exclude_assignee_user_ids, rather than reading rows and filtering them yourself.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each task, from the listed names.
tag_idsNoA list of tag IDs to filter tasks by tags.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
order_byNoThe field to sort the tasks by. Omit to keep the ordering the API applies by default.
due_afterNoOnly include tasks due after this date, excluding the day itself โ€” unless due_before is set too, which makes both bounds inclusive. A task with no due date is matched on its milestone's.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching tasks, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
due_beforeNoOnly include tasks due before this date, excluding the day itself โ€” unless due_after is set too, which makes both bounds inclusive. A task with no due date is matched on its milestone's.
order_modeNoThe direction to sort the results in.
project_idNoThe ID of the project from which to retrieve tasks. Omit to list tasks across all projects.
date_filterNoWhere the task's dates fall relative to today, in your own timezone. This is the filter for "late", "overdue", "due today", "started" and "upcoming"; omit it for no date restriction. overdue: due before today and not completed โ€” this is "late", and it never returns completed tasks whatever show_completed says. today: due today, without adding the overdue ones. thisweek: the calendar week containing today, the days of it already past included. upcoming: due today or later. started: the start date has arrived and the due date has not passed โ€” start date on or before today, and either no due date at all or one falling today or later. within7, within14, within30, within365: due between today and that many days from today, both days included. nodate: no start date, no due date and no milestone. anytime: no date restriction, what the endpoint applies when this is omitted. Completed tasks stay hidden unless show_completed is true, and overdue never returns one even then; for completed work alone use only_completed, which combines with any value here except overdue. A task with no due date of its own is matched on its milestone's.
search_termNoA search term to filter tasks by name.
start_afterNoOnly include tasks whose own start date falls on or after this date; the day itself matches. A task with no start date never matches โ€” there is no milestone fallback. There is no upper bound on the start date, so for work that has already begun use date_filter=started instead.
tasklist_idNoThe ID of the tasklist from which to retrieve tasks. Takes precedence over project_id.
created_afterNoOnly include tasks created at or after this moment; the boundary itself matches. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
updated_afterNoOnly include tasks updated strictly after this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
created_beforeNoOnly include tasks created at or before this moment; the boundary itself matches. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
match_all_tagsNoIf true, match all tags; if false, match any.
only_completedNoIf true, return only completed tasks. It combines with every other filter, date_filter included โ€” except date_filter=overdue, which never matches a completed task and so returns nothing. Tasks in completed tasklists still need show_completed.
only_unplannedNoIf true, only return tasks that are unplanned, meaning they are missing an assignee, a due date, or estimated time.
show_completedNoIf true, include completed tasks and tasks belonging to completed tasklists; both excluded by default.
updated_beforeNoOnly include tasks updated strictly before this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
completed_afterNoOnly include tasks completed at or after this moment; the boundary itself matches. Setting it narrows the result to completed tasks. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
only_unassignedNoIf true, only return tasks that have no assignee.
completed_beforeNoOnly include tasks completed at or before this moment; the boundary itself matches. Setting it narrows the result to completed tasks. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
assignee_user_idsNoFilter tasks by assignee.
created_by_user_idsNoFilter tasks by creator.
order_by_custom_field_idNoThe custom field to sort the tasks by. Required when order_by is "customfield", and ignored otherwise.
exclude_assignee_user_idsNoLeave out tasks assigned to any of these users. A task is dropped when any one of the listed users is assigned to it, even when it also carries assignees you did not exclude. A user reached only through a team, company or job-role assignment on the task is not matched. Combines with assignee_user_ids and every other filter.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
tasksNo
includedNo
suggestionsNoPresent only when search_term was supplied and the result list came back empty. Entities whose name matches the term, most relevant first, so the term can be recognised instead of treated as unknown. A candidate may be of another type than the one listed, or of the same type but excluded by this tool's filters โ€” completed items are searched regardless of show_completed, so a candidate says nothing about completion. Read it with the entity type's own get tool.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false), so the bar is lower; the description adds real value by disclosing that completed tasks and completed-tasklist tasks are hidden by default and warning that an empty result may mean the work is already done. It does not repeat the obvious read semantics, which is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with purpose then alternative-tool routing then behavioral caveat then filter tips; each carries information. The middle sentence is dense but stays on topic, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists, return values need no explanation, and the description still covers the critical gotchas an agent needs: default exclusion of completed work, the empty-result interpretation, and where to route late/overdue and exclusion filtering. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the per-parameter text is unusually detailed, so the baseline is 3. The description adds routing intent for date_filter and exclude_assignee_user_ids but no syntax or format information beyond what the schema already supplies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with its three scopes (tasklist_id, project_id, or site-wide) and explicitly names the search sibling for keyword lookups. An agent can distinguish this from twprojects-search and twprojects-list_tasklists without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Routes the agent explicitly: use search for keyword search, date_filter for late/overdue/due today/started/upcoming, and exclude_assignee_user_ids to drop people rather than post-filtering rows client-side. These are clear when-to-use and when-to-use-another-tool instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_teamsA
Read-only
Inspect

List teams. Scope by company_id or project_id, or omit for site-wide.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each team, from the listed names.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
order_byNoThe field to sort the teams by. Omit to keep the ordering the API applies by default.
page_sizeNoNumber of results per page for pagination (1-500).
company_idNoThe ID of the company from which to retrieve teams. Omit to list teams across all companies.
order_modeNoThe direction to sort the results in.
project_idNoThe ID of the project from which to retrieve teams. Omit to list teams across all projects.
search_termNoA search term to filter teams by name or handle.

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamsNo

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint and destructiveHint annotations already cover the safety profile. The description adds useful behavior around scoping (company/project vs site-wide), but it does not disclose additional behavioral details such as pagination defaults or ordering behavior, which are left to the schema and output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence that communicates the operation and the key scoping decision. There is no filler, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the fully documented input schema, the presence of an output schema, and read-only annotations, the description is complete enough for an agent to select and invoke the tool correctly. The scoping instruction is the main decision an agent needs, and it is clearly stated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter already has a meaningful description. The tool description only summarizes the company_id/project_id scoping behavior and adds no new parameter-level semantics beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('List teams') and immediately clarifies the scoping options: company_id, project_id, or site-wide. This cleanly identifies the tool's purpose and distinguishes it from other list_* sibling tools by the resource it operates on.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete usage direction: scope by company_id or project_id, or omit both for site-wide results. It does not name alternative tools for retrieving a single team, but the scoping guidance is explicit and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_timelogsA
Read-only
Inspect

List timelogs. Scope by project_id or task_id, or omit for site-wide.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each timelog, from the listed names.
tag_idsNoA list of tag IDs to filter timelogs by tags.
task_idNoThe ID of the task from which to retrieve timelogs. Omit to list timelogs across all tasks.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
end_dateNoEnd of the timelog window; the boundary itself is included, and a plain date covers that whole day. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
order_byNoThe field to sort the timelogs by. Omit to keep the ordering the API applies by default.
page_sizeNoNumber of results per page for pagination (1-500).
ticketIdsNoFilter timelogs by associated desk ticket.
count_onlyNoIf true, return only {"count": N}: the exact number of matching timelogs, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
project_idNoThe ID of the project from which to retrieve timelogs. Omit to list timelogs across all projects.
start_dateNoStart of the timelog window; the boundary itself is included. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.
billable_typeNoRestrict the results to billable or non-billable timelogs. Omit, or pass all, to include both. For billable hours rather than the entries themselves, twprojects-summarize_timelogs reports them without paging.
invoiced_typeNoRestrict the results to timelogs that have or have not been added to an invoice. Omit, or pass all, to include both. Invoiced is not the same as billed: noninvoiced answers "what is still to be invoiced" only for billable time, so pass billable_type alongside it.
match_all_tagsNoIf true, match all tags; if false, match any.
assigned_team_idsNoFilter timelogs by assigned team.
assigned_user_idsNoFilter timelogs by assigned user.
assigned_company_idsNoFilter timelogs by assigned company.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
timelogsNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds one meaningful behavioral detail: omitting the scope yields site-wide results. However, it does not disclose other behavioral aspects such as pagination behavior, count_only mode, or the difference from summarized/aggregate results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler. It front-loads the core action ('List timelogs') and immediately provides the most important usage distinction (scoping vs site-wide). Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 19 parameters, a full input schema with 100% coverage, and an output schema, so the description does not need to explain every parameter or return value. The description provides sufficient orientation and scoping context; the main gap is the lack of an explicit pointer to summarize/count siblings in the primary description, though this is partially mitigated by parameter-level notes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already thoroughly documents all 19 parameters. The description adds marginal semantic value by highlighting project_id and task_id as the key scoping parameters, but it does not contribute meaningfully beyond what the schema already provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and a specific resource ('timelogs'), and clarifies the primary scoping options (project_id, task_id, or site-wide). It is clear, but it does not explicitly distinguish this tool from closely related siblings like twprojects-summarize_timelogs or twprojects-count_timelogs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives useful scoping guidance ('Scope by project_id or task_id, or omit for site-wide') but does not explicitly say when to use this tool versus alternatives. Some sibling routing appears inside parameter descriptions (e.g., billable_type mentions twprojects-summarize_timelogs, count_only mentions 'how many'), but the main description itself lacks direct alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_timersC
Read-only
Inspect

List timers.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each timer, from the listed names.
task_idNoThe ID of the task to filter timers by. Only timers associated with this task will be returned.
user_idNoThe ID of the user to filter timers by. Only timers associated with this user will be returned.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching timers, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
project_idNoThe ID of the project to filter timers by. Only timers associated with this project will be returned.
running_timers_onlyNoIf true, only running timers are returned.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
timersNo

TDQS

C2.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose readOnlyHint=true and destructiveHint=false, so the safety profile is covered. However, the description adds no behavioral detail beyond that, such as pagination behavior, count_only mode, or filter semantics. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is short and contains no filler, which is technically concise. But it is closer to under-specification than effective front-loading, since the single sentence restates the tool name and carries no additional orienting information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The rich input schema and output schema mitigate the terse description, making the tool minimally usable. Still, with 9 parameters covering filters, pagination, and count-only mode, a two-word description leaves key high-level context unstated and does not help distinguish this from sibling list tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and every parameter has a meaningful explanation in the input schema, so the baseline of 3 applies. The description itself says nothing about parameters, but the schema fully compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is essentially a restatement of the tool name and title ('List timers.' vs. 'twprojects-list_timers' / 'List Timers'), so it adds no new semantic content. It is not misleading, but it does not distinguish this tool from siblings like twprojects-get_timer or twprojects-list_timelogs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives, and no exclusions are mentioned. The schema contains helpful hints such as count_only for 'how many', but the description itself provides no selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_usersA
Read-only
Inspect

List users. Scope by project_id or filter by type (account/collaborator/contact).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
typeNoType of user to filter by. The available options are account, collaborator or contact.
fieldsNoThe attributes to return for each user, from the listed names.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
order_byNoThe field to sort the users by. Omit to keep the ordering the API applies by default.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching users, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
project_idNoThe ID of the project from which to retrieve users. Omit to list users across all projects.
search_termNoA search term to filter users by first or last names, or e-mail. The user will be selected if each word of the term matches the first or last name, or e-mail, not requiring that the word matches are in the same field.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
peopleNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is established; the description adds project/type scoping context. Like comparable read-only list tools, it does not mention pagination or response shape, but the output schema and parameter documentation cover those.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler. The most relevant scoping and filtering facts are front-loaded immediately after the verb, making it easy to scan and understand.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with a full output schema and complete parameter documentation, the description provides enough high-level function and key filter modes for correct selection. It is slightly less rich than the best examples because it omits the all-projects default, but the schema states that explicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every parameter has an explicit description, enum, or default. The description adds no meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('users'), plus the two key dimensions: project scope and account/collaborator/contact type. It is clear about what it does, though it does not explicitly contrast with sibling list tools such as twdesk-list_users or twprojects-get_user.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concise within-tool usage: scope by project_id or filter by type. It does not name alternatives or state when to prefer this over other user-listing tools, so the guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_workflowsC
Read-only
Inspect

List workflows.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each workflow, from the listed names.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching workflows, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
search_termNoA search term to filter workflows by name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
workflowsNo

TDQS

C2.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations declare readOnlyHint=true and destructiveHint=false, which establish the safety profile; the description's verb 'List' is consistent with those annotations and adds no behavioral detail about pagination, count_only mode, or default fields. There is no contradiction, but the description itself contributes no behavioral transparency beyond what the annotations already provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

At three words, it is short but not effectively concise: it merely restates the tool name/title rather than earning its place with additional context. A useful description would front-load the operation's scope or a key differentiator.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list with a fully described schema and an output schema, the description can be minimal. However, it misses the opportunity to orient the agent to available filtering modes (search_term, count_only) or to distinguish from list_workflow_stages, and relies entirely on structured metadata.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each of the six optional parameters has a meaningful description (e.g., count_only 'return only {"count": N}' and verbose behavior). The description adds no parameter context, but the schema already carries the full burden, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is 'List workflows.', which restates the tool name twprojects-list_workflows and the annotation title 'List Workflows' without adding scope, filtering behavior, or differentiation from siblings such as twprojects-list_workflow_stages or twprojects-get_workflow. This is a tautology rather than an informative purpose statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to choose this tool over alternatives or how to use search_term/count_only for different needs. The description offers no exclusions, prerequisites, or links to sibling tools, leaving the agent to infer usage from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-list_workflow_stagesB
Read-only
Inspect

List workflow stages.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
fieldsNoThe attributes to return for each workflow stage, from the listed names.
verboseNoIf false, returns id + name only โ€” useful when scanning many results.
order_byNoThe field to sort the workflow stages by. Omit to keep the ordering the API applies by default.
page_sizeNoNumber of results per page for pagination (1-500).
count_onlyNoIf true, return only {"count": N}: the exact number of matching workflow stages, no rows โ€” use for "how many". Ignores page, page_size, verbose, fields.
order_modeNoThe direction to sort the results in.
workflow_idYesThe ID of the workflow whose stages to list.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
countNoExact number of matches across every page. Returned instead of the rows when count_only.
stagesNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds no behavioral context beyond the word 'list' and does not contradict the annotations, but it also does not disclose pagination, count_only behavior, or other traits that are left entirely to the parameter descriptions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

At five words, the description is extremely concise with no filler. It is a grammatically complete statement, though the brevity borders on under-specification rather than serving as a useful overview of the tool's options.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With eight parameters, a required workflow_id, and a large sibling toolset, a single sentence is insufficient context. The description does not explain when to use this tool, that workflow_id is mandatory, or how the tool fits into workflows like moving tasks between stages, leaving the agent to infer this from the schema and siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema coverage is 100% and the parameter descriptions are detailed, covering pagination, sorting, fields, and count_only. The one-sentence description adds no parameter semantics of its own, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' and the resource 'workflow stages,' clearly identifying the operation. However, it does not mention that stages are scoped to a specific workflow_id, nor does it explicitly distinguish itself from siblings like twprojects-list_workflows or twprojects-get_workflow_stage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage guidance is provided beyond the bare sentence. The description does not state when to choose this tool over alternatives such as twprojects-list_workflows or twprojects-get_workflow_stage, nor does it mention the need to supply a workflow_id.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-move_tasksAInspect

Move tasks and all their subtasks to another tasklist, preserving the parent/child structure. Subtasks move with their parent automatically, so only the topmost task of each subtree needs to be listed. A task whose parent is not part of the move is detached from it, becoming a top-level task in the destination.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idsYesThe IDs of the tasks to move. Subtasks are moved automatically.
tasklist_idYesThe ID of the destination tasklist.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate a write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds valuable behavioral context beyond annotations: it clarifies that subtasks follow parents, and that a task whose parent isn't moved is detached into a top-level task. This directly informs the agent of side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, two sentences, front-loaded with the main purpose, and clearly explains subtask and detachment nuances. Every sentence carries meaning with no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for the core behavior: it states what happens to subtasks and parentless tasks. It does not mention return values or error cases, but given no output schema and sufficient behavioral coverage, it is adequately complete for a move operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema provides descriptions for both parameters and 100% coverage. The description reinforces the subtask behavior already in the schema and adds semantic nuance about the detach edge case, which goes beyond the raw schema. This enhances understanding without redundancy.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'move' and resource 'tasks to another tasklist', with explicit mention of subtasks and preservation of parent/child structure. This distinguishes it from the sibling tool 'move_task_to_workflow_stage', which moves to a workflow stage instead.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context: only topmost tasks need to be listed, subtasks move automatically, and task with parent not included becomes top-level. It implies when to use this tool (moving tasks between tasklists) but does not explicitly mention alternatives or exclusion scenarios. The behavior is well-covered for a mutation tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-move_task_to_workflow_stageBInspect

Move one or more tasks to a workflow stage.

ParametersJSON Schema
NameRequiredDescriptionDefault
stage_idYesThe ID of the workflow stage to move the tasks to.
task_idsNoThe IDs of the tasks to move. At least one is needed; each is appended to the end of the stage in the order given. The workflow must be attached to the project the task belongs to.
workflow_idYesThe ID of the workflow that contains the target stage.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal that this operation is not read-only, not idempotent, and not destructive, so the description adds little beyond that. It does not disclose task ordering semantics, workflow-to-project attachment requirements, or consequences for task state; those details live only in the parameter descriptions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler or redundant wording. It is appropriately sized for the operation it names and is easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All parameters are documented and the core operation is unambiguous, but there is no output schema and no mention of expected return values, error conditions, or relationship to similar move tools. The description is adequate for a straightforward invocation but not fully complete for an agent navigating a large sibling toolset.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of parameters with useful descriptions, including the key constraint that the workflow must be attached to the project of the task. The main description adds no additional parameter meaning beyond 'one or more tasks', so it meets the baseline but does not exceed it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the verb ('Move') and resource ('tasks to a workflow stage'), and it correctly indicates the operation handles more than one task. However, it does not explicitly distinguish this tool from the similarly named sibling twprojects-move_tasks, so purpose is clear but sibling differentiation is left to the agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool instead of alternatives such as twprojects-move_tasks or twprojects-update_task. No preconditions, exclusions, or context about appropriate use cases are provided beyond the bare action itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-pause_timerAInspect

Pause a running timer; can be resumed later. Use complete_timer to stop permanently.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the timer to pause.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a mutating, non-destructive, non-idempotent operation. The description adds useful context: it requires a 'running timer' and that the action is reversible ('can be resumed later'). It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no superfluous words. It front-loads the core action and then contrasts with the alternative, maximizing information density.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter action with good annotations and no output schema, the description conveys the essential behavior and the alternative. It could mention what happens if the timer is not running or whether the pause is immediate, but these are minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter `id` is already described as 'The ID of the timer to pause.' The description adds no additional parameter semantics beyond the schema, so a baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Pause') and resource ('a running timer'), clearly distinguishing it from sibling tools like complete_timer and resume_timer. The phrase 'can be resumed later' further clarifies the temporal state change.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use this tool (to pause a running timer) and provides an alternative: 'Use complete_timer to stop permanently.' This gives clear decision criteria against a sibling tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-restore_allocationAInspect

Restore a deleted allocation. Find the ID first with twprojects-list_allocations and show_deleted set, since a deleted allocation is otherwise not returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the allocation to restore.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already indicate this is a mutating operation (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the description doesn't need to restate that. The description adds valuable behavioral context: it explains that the target allocation is deleted and that it won't appear in normal list results, which is a non-obvious behavioral trait. It doesn't mention error cases (e.g., what happens if the ID doesn't exist or is already restored), but the core behavior is well disclosed. The description does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, tight sentence that front-loads the primary action ('Restore a deleted allocation') and then provides the essential prerequisite. Every word earns its place; there is no fluff or repetition. It is concise without sacrificing critical guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with a clear schema and no output schema, the description covers the essential context: what the tool does, when to use it, and how to get the required input. It doesn't describe the return value or error handling, but given the simplicity of the operation and the absence of an output schema, this is a minor gap. The description is complete enough for an agent to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% coverage for the single parameter 'id' with a clear description ('The ID of the allocation to restore'). The description adds context by explaining how to obtain that ID (via twprojects-list_allocations with show_deleted), which is valuable beyond the schema. Since the schema is complete and the description reinforces the parameter's purpose, a score of 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Restore a deleted allocation') and the resource ('allocation'). It also provides a critical scoping detail: the allocation must be deleted, and it distinguishes this from the normal listing behavior by referencing the sibling tool twprojects-list_allocations with the show_deleted parameter. This makes the purpose unambiguous and differentiates it from related tools like twprojects-update_allocation or twprojects-create_allocation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent when to use this tool: when restoring a deleted allocation. It also provides a clear prerequisite: find the ID first using twprojects-list_allocations with show_deleted set, because a deleted allocation is otherwise not returned. This is direct, actionable guidance that prevents the agent from attempting to restore an allocation without the correct ID or from using the wrong tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-resume_timerAInspect

Resume a paused timer back to running.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the timer to resume.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a non-readonly, non-destructive operation. The description adds the precondition that the timer must be paused and the resulting state, providing context beyond the name and structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no redundant words. Every part contributes to understanding the operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter mutation with clear annotations, the description provides enough context. It does not explain error behavior (e.g., if the timer is already running), but this is a minor omission given no output schema is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single 'id' parameter is fully described in the schema ('The ID of the timer to resume'), and the description does not add additional meaning. Baseline of 3 is appropriate given 100% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Resume' with a specific object 'a paused timer' and the outcome 'back to running', clearly distinguishing it from sibling tools like pause_timer and complete_timer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for paused timers but does not explicitly state when to use it vs alternatives or any exclusions. The context is clear enough for simple state transitions, but no explicit guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-summarize_timelogsA
Read-only
Inspect

Complete time totals for a date window, grouped by user, project or task (rows in groups) or by day, week or month (rows in periods). One call returns every row, in exact minutes and hours to 2 decimals. Prefer it over twprojects-list_timelogs for any total, sum or breakdown; list_timelogs is for individual entries. Minutes are authoritative, unbilledBillable = billable โˆ’ billed, and rows sum to totals. One dimension per call: for hours per user per week, call once per user with user_ids. Task rows omit project-level and subtask time, so never add totals across group_by values. Period rows cover every period in order, zeros included, first and last clipped to the window; weeks follow the caller's start-of-week setting, so buckets can differ per user, and a weekend-only week with no time is dropped.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYesInclusive end of the report window (YYYY-MM-DD).
group_byNoDimension to group by. Defaults to user. user, project and task fill groups; day, week and month fill periods. Filter a task grouping on a busy account.user
order_byNoThe field to sort the summary rows by. Omit to keep the ordering the API applies by default. Rejected for day, week and month: period rows are chronological.
task_idsNoFilter to timelogs on these tasks.
team_idsNoFilter to timelogs logged by members of these teams.
user_idsNoFilter to timelogs logged for these users.
order_modeNoThe direction to sort the results in. Rejected for day, week and month: period rows are chronological.
start_dateYesInclusive start of the report window (YYYY-MM-DD).
company_idsNoFilter to timelogs on projects of these companies/clients.
project_idsNoFilter to timelogs on these projects.
tasklist_idsNoFilter to timelogs on these task lists.
timelog_tag_idsNoFilter to timelogs carrying these tags.
include_archived_projectsNoInclude time from archived projects. Defaults to false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
scopeYes
groupsYesEntity rows; empty for a day, week or month grouping.
totalsYes
periodsYesPeriod rows, chronological; empty for an entity grouping.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations' readOnlyHint and destructiveHint, the description discloses rich behavioral details: exact minutes and hours to 2 decimals, minutes as authoritative, unbilledBillable calculation, row summation, task-row omissions, period ordering with zero-filled buckets, clipping to the window, and start-of-week differences. This dramatically improves an agent's understanding of results and edge cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but tightly organized: purpose first, then usage, then numerical semantics, then grouping rules and period behavior. Every sentence contributes necessary information, and none of it is redundant with the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 13 parameters, enums, an output schema, and subtle aggregation rules, the description is exceptionally complete. It covers output coverage, grouping semantics, filtering guidance, cross-user week differences, and correctness warnings, leaving no material gap for an agent to call or interpret the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the schema descriptions already cover parameters well, the description adds critical meaning beyond them: one dimension per call, how to combine user_ids with weekly grouping, the semantic distinction between groups and periods, and the warning against summing across group_by values. These are exactly the kind of non-obvious parameter interactions an agent needs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise statement of the tool's function: producing complete time totals for a date window, grouped by user/project/task or day/week/month. It names the exact resource and operation and explicitly differentiates itself from twprojects-list_timelogs, so an agent can distinguish it from the closest sibling without inspecting schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance: prefer this tool over twprojects-list_timelogs for totals, sums, and breakdowns, while list_timelogs is for individual entries. It also provides practical usage advice, such as calling once per user when hours per user per week are needed, making selection and invocation straightforward.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_allocationAInspect

Update an allocation. Changing end_date ADDS or REMOVES committed time rather than redistributing it, because the per-day rate is what is held constant.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the allocation to update.
colorNoThe allocation's colour as six hexadecimal digits, with or without a leading '#'.
titleNoThe name of the allocation, at most 100 characters.
end_dateNoThe last day of the allocation (format: YYYY-MM-DD). Must not precede start_date. Extending it ADDS committed time rather than spreading the existing total: the per-day rate is what is held constant, so the total is the working days in the range times that rate.
project_idNoThe ID of the project to commit the time to.
start_dateNoThe first day of the allocation (format: YYYY-MM-DD).
descriptionNoAn optional description of the allocation, at most 255 characters.
is_billableNoWhether the allocated time can be charged to a client.
linked_task_idsNoThe tasks to associate with the allocation. This REPLACES the whole set of linked tasks, so send every task that should stay linked. To add or remove one task without touching the rest, use twprojects-link_task_to_allocation or twprojects-unlink_task_from_allocation instead.
seconds_per_dayNoThe time committed on each working day of the range, in SECONDS โ€” 4 hours a day is 14400. Must be between 60 (one minute) and 86400 (24 hours). Seconds rather than hours because the hours form is a float and rounds. This rate is what is held constant: the total is the working days in the range times this, so widening the range adds committed time.
assigned_user_idNoThe ID of the user whose time is committed. Accepts a real person or a placeholder user โ€” a stand-in used to plan work before the person who will do it is known. Nothing in the response distinguishes the two, so confirm which one an ID refers to before reporting who is booked.
ignore_collisionsNoSkip the capacity check altogether. Prefer inform_of_over_allocation: this one also lets the change through, but suppresses the over-allocation report with it, so nobody is told the person is over-booked. It takes precedence when both are set.
inform_of_over_allocationNoAccept a change that puts the user over their capacity and report it, rather than rejecting it. Defaults to true, and the result says so when it happens. Turning it off means an over-allocating change is refused outright.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint=false, destructiveHint=false), it discloses a non-obvious behavioral trait: extending end_date ADDS committed time rather than redistributing it. This is material behavior not visible in the annotations. It does not discuss over-allocation handling or task replacement, but the schema's detailed parameter descriptions cover those.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, with the core operation first and the critical caveat second. No filler or redundant restatement, and the most consequential behavioral note is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter mutation tool with no output schema, the description alone is thin, but the input schema is unusually rich, covering collision flags, task-list replacement semantics, placeholder-user warnings, and value formats. Together with the description's key end_date caveat, an agent has enough contextual information to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so every parameter is already documented in the input schema. The description repeats the end_date/per-day-rate semantics that the schema's end_date and seconds_per_day entries already explain, adding little new parameter-level meaning. A baseline of 3 is appropriate given the high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Update an allocation,' a specific verb and resource, and immediately identifies the operation as a mutation of an existing allocation. This distinguishes it from siblings like create_allocation, get_allocation, and restore_allocation without needing to inspect their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear, actionable context: changing end_date changes committed time because the per-day rate is held constant, so an agent knows the capacity consequence before calling. It does not explicitly state when-not-to-use or name alternatives such as create_allocation for new allocations, though the linked_task_ids parameter description does route single-task changes to link/unlink tools. This is clear context but not complete alternative routing, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_commentCInspect

Update comment.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the comment to update.
bodyYesThe content of the comment. The content can be added as text or HTML.
notifyNoWho to notify of the comment change. Omit it unless the user named who to notify: the default notifies every follower of the related entity, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string "all" to notify all project members, the boolean true to notify all followers of the related entity, the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {"user_ids": [123, 456]}).
content_typeNoThe content type of the comment. It can be either 'TEXT' or 'HTML'.
notify_current_userNoWhether the current user should be notified about the comment change.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a non-read-only, non-destructive mutation, and the description adds no behavioral traits beyond that. It does not disclose side effects such as follower notifications (though the notify parameter description covers some semantics) or whether updates are reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The phrase is extremely short and front-loaded, but it is under-specification rather than meaningful conciseness: it contributes no information beyond the title and tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and only a two-word description, the definition lacks context about return values, notification side effects, and when an update is appropriate. The rich schema partially compensates, but the description itself is not complete enough for confident tool selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema's notify parameter is very detailed. The description itself offers no parameter information, so it sits at the baseline 3 rather than compensating further.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is 'Update comment.', which exactly restates the title 'Update Comment' and the action encoded in the tool name. It identifies a verb and resource but does not specify scope, fields, or how it differs from twspaces-update_comment or comment creation/retrieval tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus create/get/list or the twspaces comment update. There are no prerequisites, exclusions, or alternatives mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_companyCInspect

Update company (aka client).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the company to update.
faxNoThe fax number of the company.
zipNoThe ZIP or postal code of the company.
cityNoThe city of the company.
nameNoThe name of the company.
phoneNoThe phone number of the company.
stateNoThe state of the company.
profileNoA profile description for the company.
tag_idsNoA list of tag IDs to associate with the company.
websiteNoThe website of the company.
email_oneNoThe primary email address of the company.
email_twoNoThe secondary email address of the company.
manager_idNoThe ID of the user who manages the company.
address_oneNoThe first line of the address of the company.
address_twoNoThe second line of the address of the company.
email_threeNoThe tertiary email address of the company.
industry_idNoThe ID of the industry the company belongs to.
country_codeNoThe country code of the company, e.g., 'US' for the United States.

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish this is a non-read-only, non-idempotent mutation (readOnlyHint=false, idempotentHint=false), and the description adds zero behavioral context beyond that. It doesn't disclose whether updates are partial (only supplied fields change) or full replacement, nor whether linked data like tag_ids or manager_id is affected. No contradiction with annotations, but no added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five words, front-loaded, zero filler โ€” efficient in the narrow sense. But at this length the brevity looks more like under-specification than disciplined economy, since it conveys barely more than the tool name itself plus one alias.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 18-parameter mutating tool with no output schema and a same-named sibling in the toolset, the description omits essential orientation: update semantics, domain scope (projects vs helpdesk), and return behavior. The 'twprojects' prefix in the tool name is the only thing separating this from twdesk-update_company, and the description itself provides no such disambiguation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% โ€” all 18 parameters carry individual descriptions, so the schema does the explanatory heavy lifting and the baseline of 3 applies. The 'aka client' note adds modest overall-domain context for interpreting what the company record represents, but no parameter-level detail or relationships.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Update') and resource ('company'), and the parenthetical 'aka client' adds genuinely useful domain semantics clarifying that companies are client records. However, it fails to differentiate from twdesk-update_company, a same-named sibling operating on a different domain, so it doesn't fully distinguish the tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. The sibling list includes twdesk-update_company (same name, different domain), twprojects-create_company, and twprojects-get_company, yet nothing explains selection criteria. The 'aka client' hint is the only domain signal and it does not resolve the twprojects/twdesk ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_custom_fieldCInspect

Update custom field.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the custom field to update.
nameNoThe display name of the custom field.
unitNoThe unit associated with the custom field, when applicable.
formulaNoThe formula expression for 'formula' type custom fields.
optionsNoType-specific options for the custom field. For 'dropdown' and 'multiselect' types, provide {"choices": [{"value": "...", "color": "#rrggbb"}, ...]}. For 'rating' type, provide {"icon": "star|heart|...", "color": "#rrggbb"}. For 'number-decimal' type, provide {"decimals": <int>}.
requiredNoWhether the custom field must have a value when set on an entity.
descriptionNoAn optional description for the custom field.
currency_codeNoThe ISO currency code for 'currency' or 'financial' type custom fields.

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is not a read-only or idempotent operation and not particularly destructive. The description adds no behavioral context beyond the word 'Update'โ€”it doesn't mention side effects, type-specific constraints, permission needs, or what happens to existing field settings.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

At three words, the description is extremely terse, but this is under-specification rather than effective conciseness. It conveys no more than the tool name and title, and fails to use the available space to add context for a tool with 8 parameters and a nested options structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there is no output schema and this is a mutation tool with a rich input schema, the description is far too minimal. It doesn't explain update semantics, which fields cannot be changed, whether omitted fields are preserved, or what the response looks like, so an agent lacks operational context for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter already has a meaningful description. The tool description itself adds no parameter-level meaning, but the baseline of 3 is appropriate because the schema carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Update' targeting the resource 'custom field', so an agent can tell this is an update operation on a custom field. However, it does not differentiate among sibling tools like update_custom_field_value or update_custom_item_field, so the purpose is clear but not contextually distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage context is provided. The description doesn't explain when to use this tool versus create_custom_field, update_custom_field_value, or other custom-field-related siblings, and it gives no exclusions or alternative routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_custom_field_valueAInspect

Update a custom field value on a task, project or company.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueNoThe value to assign, typed per the field: string (text), number (number), boolean (checkbox), choice value string (dropdown/status; array for multiselect), ISO-8601 string (date).
entityYesThe type of entity the custom field value is attached to.
value_idYesThe ID of the custom field value entry to update.
entity_idYesThe ID of the task, project or company the custom field value belongs to.
country_codeNoThe country code for currency-type custom field values.
currency_codeNoThe ISO currency code for currency-type custom field values.
custom_field_idYesThe ID of the custom field the value belongs to.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and idempotentHint=false, so the mutation aspect is covered. The description adds no behavioral context beyond the generic update semantics, such as overwrite behavior, whether the value must already exist, conditional currency fields, or error handling. With no unique behavioral disclosure, this is below adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the action and resource, and contains no filler. It is appropriately concise for a tool whose parameter details are already fully documented in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter, 4-required mutation with no output schema, the one-line description is adequate but leaves gaps: no guidance on when to update vs create, no mention of return value or side effects, and no elaboration on entity-specific behavior. The rich schema covers parameters, so completeness is medium rather than low.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema and property descriptions already document entity, entity_id, value_id, custom_field_id, value, and the currency fields thoroughly. The tool description adds nothing about parameters, but the schema carries the full burden; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Update') and resource ('custom field value') and scopes it to 'task, project or company.' This clearly differentiates it from create/get/list custom field value tools and from update_custom_field, which manages field definitions rather than values.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or alternative routing; the description merely states the action. The verb 'Update' implies it is for modifying an existing custom field value, but it does not mention create_custom_field_value as the alternative for new values or clarify prerequisites. This is implied usage, not explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_custom_itemAInspect

Update a custom item type's display name, description, or labels. Custom items are user-defined entity types โ€” Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCustom item type ID to update.
descriptionNoNew description for the custom item type.
display_nameNoNew display name for the custom item type.
label_pluralNoNew plural label.
label_singularNoNew singular label.

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only indicate that this is a non-read-only, non-destructive, non-idempotent mutation. The description adds conceptual context but no behavioral detail: it does not say whether omitted fields are preserved, whether this affects existing custom item records, whether permissions are required, or what happens when only the required id is provided. For a mutating tool without an output schema, this is a significant transparency gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Each of the four sentences earns its place: the first states the action, the second defines custom items, the third gives entity-category guidance, and the fourth provides a confirmation workflow. The content is front-loaded and contains no redundant restatement of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is strong for tool selection and domain understanding, but it leaves key invocation details unstated. In particular, it does not clarify that although only id is required by the schema, at least one optional field should generally be supplied for a meaningful update. It also does not mention partial-update behavior or return values, which matters more because there is no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all five parameters with 100% coverage, so the description is not obligated to deeply elaborate on each parameter. It does reinforce that display_name, description, and labels are the updatable attributes, but it adds no constraints, formatting rules, or behavioral semantics beyond what the schema provides, making baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action and target: 'Update a custom item type's display name, description, or labels.' It also explains what custom items are with concrete examples and clarifies that these are not built-in Teamwork entities, which helps distinguish this tool from ordinary project tools and from custom item record/field tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent when to use custom-item tools: when the user refers to an entity that is NOT a built-in Teamwork concept, and it lists those built-in concepts. It also provides a concrete fallback: call twprojects-list_custom_items to confirm an unrecognized entity. It does not explicitly contrast this tool with twprojects-update_custom_item_record, but the 'custom item type' wording makes that distinction inferable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_custom_item_fieldAInspect

Update a field on a custom item type. Custom items are user-defined entity types โ€” Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesField ID to update.
definitionNoReplacement type-specific configuration as a JSON object.
display_nameNoNew display name.
custom_item_idYesCustom item type ID the field belongs to.
position_after_idNoMove this field after the given field ID.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and destructiveHint=false, so the description doesn't need to restate mutation safety. The description adds useful context about custom items being user-defined, but it doesn't disclose details like whether the update replaces the entire field definition, whether the 'definition' object is merged or fully replaced, or whether there are constraints on which fields can be updated. For a mutation tool with no output schema and a nested 'definition' object, a bit more behavioral detail would help.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a compact paragraph that front-loads the core purpose and then explains custom items and usage routing. Every sentence earns its place, though it could be slightly tighter by moving the long list of built-in concepts to a shorter phrase. The information density is high and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (5 params, one nested object), the description plus full schema coverage provides a solid basis for calling it. The main missing piece is what happens on a successful update (no output schema) and whether the 'definition' object is required conditionally. But the description clearly identifies the domain and the confirmation workflow (list_custom_items), so an agent has enough context to invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter has a concise description (Field ID to update, Replacement type-specific configuration, New display name, Custom item type ID, Move this field after the given field ID). The description above the schema adds meaning by explaining what a custom item is, which helps the agent understand that custom_item_id refers to a project's custom entity type. The only minor gap is that 'definition' remains a bit opaque (what does 'type-specific configuration' mean?), but the schema already does most of the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Update a field on a custom item type') and provides helpful context by defining what custom items are. It doesn't explicitly distinguish itself from the closely related twprojects-update_custom_field or twprojects-update_custom_field_value, but the 'field on a custom item type' phrasing and the use of custom_item_id and id help orient the agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: use these tools when the user refers to an entity that is NOT a built-in Teamwork concept, and if the entity name isn't recognized, assume it is a custom item and call twprojects-list_custom_items to confirm. This clearly routes the agent between custom-item tools and built-in entity tools, which is valuable given the large sibling tool list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_custom_item_recordAInspect

Update a record on a custom item type. Only the fields you supply are changed; others are left as-is. Set section_id to null to remove the record from any section. Custom items are user-defined entity types โ€” Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecord ID to update.
nameNoNew display name for the record.
section_idNoNew section ID, or null to remove the record from any section.
field_valuesNoField values to set on the record. Each entry is {field_name, value}. Field names are matched case-insensitively against the custom item type's fields. Values are coerced by field type: dropdown/multiselect accept option labels or option twIds; date/time/datetime accept ISO-8601 strings; checkbox accepts bool or yes/no/true/false; number accepts numeric or numeric string; user accepts a user ID (or array of IDs for multi-user fields). To clear a field, send null.
clear_sectionNoSet to true to explicitly clear the record's section. Use this instead of section_id when you want null semantics.
custom_item_idYesCustom item type ID the record belongs to.
position_after_idNoMove the record after the given record ID.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only provide generic hints (readOnlyHint=false, idempotentHint=false, destructiveHint=false). The description adds meaningful behavioral context: partial update semantics ('Only the fields you supply are changed'), section removal via null, and field value coercion rules. It doesn't describe output or error behavior, but the mutation semantics are well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: it leads with the operation and update semantics, then explains the custom item concept and usage guidance. It is slightly redundant with schema details about section_id and clear_section, but the organization is logical and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers when to use it, how to identify custom items, what partial update means, and how to handle sections. It omits return format and error cases, but given the rich parameter schema and clear selection guidance, this is a minor gap rather than a serious deficiency.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all seven parameters in detail. The description adds value by emphasizing the partial-update behavior and clarifying the custom-item context, which helps the agent reason about which parameters to supply. This goes slightly beyond the baseline expected for fully covered schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Update a record on a custom item type.' It clarifies that custom items are user-defined entity types and contrasts them with built-in Teamwork concepts, making it easy to distinguish this tool from sibling update tools that target tasks, projects, companies, and other built-ins.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent when to use this tool: when the user refers to an entity that is not a built-in Teamwork concept. It also instructs the agent to call twprojects-list_custom_items when an entity name is unrecognized, providing a concrete fallback path and clear decision guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_jobroleCInspect

Update job role.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the job role to update.
nameNoThe name of the job role.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description simply restates the mutation and adds no behavioral context beyond what annotations already convey (readOnlyHint=false, destructiveHint=false). It does not disclose partial-update semantics, permission needs, or effects beyond the fact of updating.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence with no wasted words. It is front-loaded and appropriately sized for a simple two-parameter update tool, though it is too bare to add much value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity, full schema coverage, and annotations, this is a minimally viable description. It is missing any note about optional fields or expected usage context, but an agent can likely operate it correctly with the schema alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents id and name. The description adds no further meaning about how these parameters behave, but the baseline is acceptable because the schema carries the burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource ('Update job role'), so an agent can tell this is the mutation counterpart to get_jobrole and list_jobroles. It lacks any scope or effect details, but the core purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus other update_* tools or when updating a job role is appropriate. The description only states the action and leaves all usage decisions to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_messageCInspect

Update message.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the message to update.
bodyNoThe body of the message.
titleNoThe title of the message.
notifyNoWho to notify of the message update. Omit it unless the user named who to notify: the default notifies all project members, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string "all" to notify all project members, the boolean true as an alias for "all", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {"user_ids": [123, 456]}).all
notify_current_userNoWhether the current user should be notified about the new message.

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate this is a mutating, non-destructive, non-idempotent operation, but the description adds no behavioral context beyond that. It does not mention side effects such as notifications, partial-update semantics, permissions, or what is returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short but under-specified; 'Update message.' is essentially a restatement of the title and name. It does not earn its place by adding any new information or structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no description of return values, partial-update behavior, or the relationship to related message tools, the definition is not contextually complete. The rich notify parameter schema covers parameter meaning but not the tool-level context an agent needs for selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameter semantics are fully documented in the schema and the description does not need to compensate. The description itself adds no additional parameter meaning, which warrants the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a verb ('Update') and a resource ('message'), so it is minimally clear what operation is performed. But it repeats the tool name/title and does not specify what kind of message, which fields can be changed, or how it differs from the sibling update_message_reply.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this tool versus create_message, update_message_reply, get_message, or list_messages. No exclusions, prerequisites, or alternative selection criteria are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_message_replyCInspect

Update message reply.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the message reply to update.
bodyNoThe body of the message reply.
notifyNoWho to notify of the reply update. Omit it unless the user named who to notify: the default notifies all project members, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string "all" to notify all project members, the boolean true as an alias for "all", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {"user_ids": [123, 456]}).all
notify_current_userNoWhether the current user should be notified about the new messageReply.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate this is not read-only, but the description adds no behavioral context beyond the word 'update.' It does not disclose side effects, such as modifying the reply's body or triggering notifications, nor does it explain what happens to existing reply data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, but it is under-specified rather than efficiently concise. It restates the tool name and omits information an agent needs to select and invoke the tool correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite a rich schema, the tool-level description is missing essential context such as what a message reply is, how this differs from updating a message, and what outcome or return value to expect. For an update operation with no output schema and four parameters, this is insufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, including a very detailed explanation of the notify parameter. The tool description itself adds no parameter meaning, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Update message reply' is a near-verbatim restatement of the tool name, providing no additional explanation of what a message reply is or how updating it differs from updating a message. It qualifies as a tautology rather than a clarifying purpose statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no guidance on when to use this tool versus alternatives such as twprojects-update_message, twprojects-create_message_reply, or twprojects-get_message_reply. An agent must infer the appropriate context entirely from the tool name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_milestoneCInspect

Update milestone.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the milestone to update.
nameNoThe name of the milestone.
tag_idsNoA list of tag IDs to associate with the milestone.
due_dateNoThe due date of the milestone (format: YYYYMMDD). Used for related tasks without their own due date.
assigneesNoAssignees for the milestone.
descriptionNoA description of the milestone.
tasklist_idsNoTasklists to associate with the milestone.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral context beyond what annotations already state. It does not explain whether the update merges or replaces fields, whether relationships like tag_ids or assignees are overwritten, what side effects occur, or what succeeds the operation. The 'Update' verb is consistent with readOnlyHint=false, but no additional behavioral information is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two words is under-specification rather than effective conciseness. The sentence merely echoes the title and fails to earn its place by providing any additional usable information. A good concise description would still include at least a scope or behavior clue.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with seven parameters, a nested assignees object, and no output schema, the description is far too thin. It omits critical update semantics such as partial vs. full replacement, behavior for absent parameters, or constraints on relationships. The schema covers field meaning but not the overall operation contract, leaving an agent guessing about invocation behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each of the seven parameters is already documented with meaningful descriptions. The tool description adds no parameter-level insight, but it doesn't need to because the schema carries the burden adequately. A baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Update milestone.' is a direct restatement of the tool name and title, adding no new information. It names the verb and resource but doesn't describe what updating entails or differentiate itself from the many sibling update_* tools beyond the resource name already present in the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives such as create_milestone, list_milestones, get_milestone, or update_task. The description contains no context about prerequisites, typical use cases, or exclusions, leaving the agent to infer applicability entirely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_notebookCInspect

Update notebook.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the notebook to update.
nameNoThe name of the notebook.
typeNoThe type of the notebook.
tag_idsNoA list of tag IDs to associate with the notebook.
contentsNoThe contents of the notebook.
descriptionNoA description of the notebook.

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is not read-only and not marked destructive, so the description's 'Update' is consistent. But it discloses no additional behavior such as partial-update semantics, whether omitted fields are preserved or reset, tag replacement behavior, or required permissions. With annotations present, the description adds essentially no behavioral context beyond the word 'Update.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short and front-loaded, but it is under-specified rather than usefully concise. It contains no information beyond what the tool name and title already communicate, so it does not earn its place as a value-adding description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given six parameters, an enum, and no output schema, the description is incomplete for confident use. It does not clarify whether updates are partial, how tag_ids are applied, what constraints exist on type, or what happens after a successful update. An agent would have to guess critical behavioral details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for all six parameters, so the schema already explains id, name, type, tag_ids, contents, and description. The description itself adds no parameter-level meaning, but the baseline of 3 applies because the schema carries the documentation burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: updating a notebook. However, it simply restates the tool title and does not add detail about what 'update notebook' involves or how it differs from other update_* sibling tools beyond the resource name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives like twprojects-create_notebook, twprojects-get_notebook, or other update tools. The description gives no context, prerequisites, or exclusions, leaving the agent to infer usage solely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_projectCInspect

Update project.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the project to update.
nameNoThe name of the project.
end_atNoEnd date of the project (format: YYYYMMDD).
statusNoThe status of the project.
tag_idsNoA list of tag IDs to associate with the project.
owned_idNoThe ID of the user who owns the project.
start_atNoStart date of the project (format: YYYYMMDD).
company_idNoThe ID of the company associated with the project.
category_idNoThe ID of the category to which the project belongs.
descriptionNoThe description of the project.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations show this is not read-only and not destructive, but the description adds no behavioral context beyond that. It does not disclose what happens to omitted fields, whether changes are reversible, or what the response contains, so it fails to add value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short, but for a 10-parameter mutation tool this is under-specification rather than effective conciseness. Important usage and behavioral information is omitted entirely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex tool with 10 parameters and no output schema, yet the description provides no information about update semantics, return values, required identifiers, or usage context. The schema covers field details, but the description leaves too much for the agent to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 10 parameters already have meaningful descriptions in the schema. The tool description contributes nothing extra, but the baseline of 3 is appropriate because the schema carries the parameter-semantics burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Update project.' is essentially a tautology of the tool name and title. It names a verb and resource but provides no specifics about what updating entails and does not distinguish this tool from the many sibling update_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool, how it differs from alternatives, or whether it performs partial updates or full replacements. It also does not mention that an existing project ID is required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_project_categoryCInspect

Update project category.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the project category to update.
nameNoThe name of the project category.
colorNoThe color of the project category in hex format (e.g., #FF5733).
parent_idNoThe ID of the parent project category, if any. This allows for nested categories.

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already communicate that this is not read-only and not destructive, but the description adds no additional behavioral context such as whether updates are partial, how parent_id changes affect the category tree, or what response to expect. It does not contradict the annotations, but it also does not reveal anything about side effects or semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short and free of fluff, which is concise. However, it essentially restates the tool name and title, providing no additional structured information. It is more under-specified than usefully compact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description is too sparse. It fails to explain update semantics, whether fields are optional in practice, how to unset parent_id, or what the expected outcome is. The schema covers parameters, but the overall context needed to invoke and interpret the tool correctly is not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all four parameters clearly. The description itself adds no clarification about parameter meaning, usage, or constraints beyond what the schema provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Update project category.' This clearly communicates the action, and the resource name distinguishes it from update_* tools in other domains. However, it largely repeats the tool name and title, offering no additional scope or specificity, so it does not earn a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as create_project_category, get_project_category, or list_project_categories. It also does not state prerequisites, such as the need for the category to already exist or how updates relate to other operations. The usage context must be entirely inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_skillCInspect

Update skill.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the skill to update.
nameNoThe name of the skill.
user_idsNoThe user IDs associated with the skill.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate this is a non-read-only, non-idempotent mutation, but the description adds no behavioral details such as whether omitted fields are cleared, whether user_ids replaces existing associations, or whether an existing skill is required. The description does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two words, but this is under-specification rather than effective conciseness. It contains no informative content that earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with three parameters and no output schema, the description is far too sparse. It fails to explain update semantics, required preconditions, or what happens when optional fields are omitted, leaving all contextual burden on the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents id, name, and user_ids. The description does not add any semantic meaning beyond the schema, warranting the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Update skill.' is a near-verbatim restatement of the tool name and title, providing no additional information. It identifies the resource but does not distinguish this tool from the many other update_* siblings or clarify what aspects of a skill can be updated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus create_skill, get_skill, list_skills, or other update tools. No context, prerequisites, or exclusions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_tagCInspect

Update tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the tag to update.
nameNoThe name of the tag. It must have less than 50 characters.
colorNoThe color of the tag. It must be a valid hex color code.
project_idNoThe ID of the project to associate the tag with. This is for project-scoped tags.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral detail beyond what annotations already indicate. It is consistent with readOnlyHint=false, but it does not explain partial-update semantics, side effects, permissions, or what happens when optional fields are omitted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

'Update tag.' is short but under-specified rather than effectively concise. It does not earn its place because it merely repeats the title and omits useful context that an agent would need to select and invoke the tool correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating tool with four parameters and no output schema, the description is incomplete. It does not state the return value, whether the update is partial or full replacement, or how this project tag update relates to the similar teamdesk and spaces tag updates. The schema helps, but the description still leaves important operational gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter already has a clear description in the input schema. The tool description contributes no additional parameter semantics, but this is acceptable because the schema carries the necessary detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is simply 'Update tag.', which restates the tool name and title without adding meaningful scope or behavior. It also fails to distinguish this tool from twdesk-update_tag and twspaces-update_tag, which are clearly related but operate on different tag domains.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as twprojects-create_tag, twprojects-get_tag, or twdesk-update_tag. There are no prerequisites, exclusions, or contextual hints beyond the tool name itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_taskCInspect

Update task.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the task to update.
nameNoThe name/title of the task.
notifyNoWhether to notify the task's assignees and followers, which sends them an email. Defaults to true. Set it to false for bulk or housekeeping changes nobody needs to hear about.
tag_idsNoA list of tag IDs to associate with the task.
due_dateNoThe due date of the task. If omitted, falls back to the milestone due date when one is set.
priorityNoThe priority of the task.
progressNoThe progress of the task, as a percentage (0-100). Only whole numbers are allowed.
assigneesNoAssignees for the task. To remove all assignees, use clear_assignees instead.
start_dateNoThe start date of the task.
descriptionNoThe description of the task. Support for plain text and Markdown formatting.
tasklist_idNoThe ID of the tasklist. Moving the task carries its subtasks along and detaches it from any parent staying behind. Use twprojects-move_tasks to move several tasks at once.
predecessorsNoTask dependencies that must be completed before this task can start.
parent_task_idNoThe ID of the parent task, making this task a subtask. A subtask must live in the same tasklist as its parent, so moving one with tasklist_id fails until the parent has moved or the link is cleared. To detach the task from its parent, use clear_parent_task instead.
attachment_refsNoReferences of files to attach to the task, as returned by twprojects-create_upload_url or twprojects-create_file. Each is "tf_" followed by a UUID and the file extension, and can only be used once, so reserve an upload for each place a file should go. Files are added to whatever is already attached; nothing is removed.
clear_assigneesNoIf true, removes all assignees from the task, leaving it unassigned. Cannot be combined with a non-empty assignees value.
change_followersNoFollowers of any task changes.
clear_parent_taskNoIf true, detaches the task from its parent, promoting it to a top-level task. Cannot be combined with parent_task_id.
comment_followersNoFollowers of any task comments.
estimated_minutesNoThe estimated time to complete the task in minutes.
complete_followersNoFollowers of any task completions.
attachment_file_idsNoIDs of files already in a project's files area to attach to the task, as returned by twprojects-add_project_file. Unlike a reference these can be used repeatedly, so this is how one file reaches several tasks. Files are added to whatever is already attached; nothing is removed.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses no behavioral traits beyond the word 'Update.' It does not mention partial-update semantics, whether omitted fields are reset, notification side effects, or return behavior. It does not contradict the annotations, so there is no annotation contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short but not usefully concise; 'Update task.' duplicates the tool title and fails to summarize key behavior. For a 21-parameter tool with nested objects, this is under-specification rather than effective front-loading.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, lack of an output schema, and minimal top-level description, an agent cannot infer return values, merge-versus-replace behavior, or when to route to related task tools. The parameter descriptions compensate partially, but the overall definition remains incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the input schema contains detailed parameter notes covering defaults, one-time-use refs, move cascades, and constraints. The description itself adds no parameter information, but the baseline of 3 applies due to complete schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Update task.' simply restates the tool name/title. It gives no additional scope, field detail, or distinction from sibling tools like complete_task or move_tasks, making it a tautology rather than an informative purpose statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no top-level guidance on when to use this tool versus alternatives. Some alternatives appear only within parameter descriptions (e.g., clear_assignees, twprojects-move_tasks), but the description itself provides no decision context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_tasklistCInspect

Update tasklist.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the tasklist to update.
nameNoThe name of the tasklist.
descriptionNoThe description of the tasklist.
milestone_idNoThe ID of the milestone to associate with the tasklist.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses no behavioral traits beyond what annotations already provide. Annotations indicate non-read-only and non-destructive, and the description adds no context about side effects, whether omitted fields are preserved, auth requirements, or success/error behavior. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence is maximally short, but this is under-specification rather than conciseness; it merely repeats the tool name. There is room for at least a sentence clarifying scope or behavior without adding clutter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description should clarify what changes are made and what the caller receives. The current text provides none of that, and it doesn't leverage sibling distinctions or partial-update semantics. The schema covers parameter names but not behavioral context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: id, name, description, and milestone_id each have meaningful descriptions in the input schema. The tool description itself adds no parameter details, but the baseline of 3 is appropriate because the schema carries the parameter documentation burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Update tasklist.' is a verb+resource but exactly restates the tool name and title, adding no explanatory value. It identifies the resource but doesn't describe what updating entails or how it differs from nearby tools like create_tasklist or update_task.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool instead of alternatives. There are no usage conditions, prerequisites, or exclusions; the only signal is the verb 'update,' from which the agent must infer intent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_teamCInspect

Update team.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the team to update.
nameNoThe name of the team.
handleNoThe handle of the team. It is a unique identifier for the team. It must not have spaces or special characters.
user_idsNoUsers to add to the team.
company_idNoThe ID of the company. This is used to create a team scoped for a specific company.
project_idNoThe ID of the project. This is used to create a team scoped for a specific project.
descriptionNoThe description of the team.
parent_team_idNoThe ID of the parent team, which places this team in a hierarchy. Pass 0 to move the team back to the top level.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only indicate that this is not read-only and not destructive, but the description adds no behavioral context. It does not clarify whether omitted fields are preserved, whether user_ids replaces or appends team members, or what response or error behavior to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, but this is under-specification rather than useful conciseness. A single sentence that merely restates the title does not earn its place and leaves the tool's purpose and behavior almost entirely to the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 parameters, 1 required, and no output schema, the description should explain the update operation's scope, partial-update behavior, and side effects. None are present, making the description inadequate for an agent to reliably invoke this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The tool description adds no parameter meaning; it merely names the action. Some parameter descriptions (company_id, project_id) oddly refer to 'create a team', which the brief description fails to correct or clarify.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Update team.' exactly restates the title 'Update Team' and adds no information beyond the tool name. It is a tautology, providing no specificity about what team aspects can be updated or how this relates to sibling tools like create_team, get_team, or list_teams.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives such as twprojects-create_team or twprojects-get_team. No preconditions (e.g., the team must exist) or exclusions are mentioned, leaving the agent without any selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_timelogBInspect

Update timelog. It can also be moved to another project or task.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the timelog to update.
dateNoThe date of the timelog.
timeNoThe time of the timelog in the format HH:MM:SS.
hoursNoThe number of hours spent on the timelog. Must be a positive integer.
is_utcNoIf true, the time is in UTC.
minutesNoMinutes spent on the timelog. Must be a positive integer less than 60; otherwise increment hours instead.
tag_idsNoA list of tag IDs to associate with the timelog.
task_idNoMove the timelog to this task, and with it to the task's own project.
user_idNoUser the timelog is logged for. Defaults to the authenticated user.
billableNoIf true, the timelog is billable.
clear_taskNoSet to true to detach the timelog from its task, leaving it logged against the project. Cannot be combined with task_id.
project_idNoMove the timelog to this project. The API takes the project from the task whenever the timelog is logged against one, so pass clear_task alongside it to move a timelog off its task.
descriptionNoA description of the timelog.

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a mutating operation (readOnlyHint=false), so the description need not restate that. It adds the useful fact that the tool can reassign timelogs to another project or task. However, it does not disclose partial-update semantics, permission requirements, or downstream effects of moving a timelog.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short and front-loads the main action; the second sentence adds the non-obvious move capability. The first sentence merely restates the tool name/title, so it does not fully earn its place, but there is no wordiness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 13 parameters, no output schema, and only basic annotations, this description is too sparse. It does not state whether omitted fields are left unchanged, how moving to a task/project interacts with existing assignments, or what the response looks like, leaving important invocation context to the schema alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the input schema already documents all 13 parameters. The description's mention of moving to a project or task aligns with task_id/project_id but adds no syntax or interaction details beyond what the schema already provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource ('Update timelog') and adds a second behavior ('moved to another project or task') that is not obvious from the name. It does not explicitly distinguish itself from sibling update tools or list/create timelog tools, but the resource and action are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus create_timelog, list_timelogs, get_timelog, or update_timer. The moving capability is mentioned but not framed as a condition for choosing this tool, and no exclusions or prerequisites are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_timerCInspect

Update timer.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the timer to update.
runningNoIf true, the timer will start running immediately.
task_idNoThe ID of the task to associate the timer with.
billableNoIf true, the timer is billable.
project_idNoThe ID of the project to associate the timer with.
descriptionNoA description of the timer.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only indicate readOnlyHint=false, idempotentHint=false, and destructiveHint=false; the description adds no behavioral context beyond that. It does not explain what happens when a timer is updated, whether it can be started/stopped, or what side effects may occur.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, but this is under-specification rather than effective conciseness. 'Update timer.' adds no information beyond the tool name and does not earn its place as a descriptive sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with six parameters and no output schema, this description is far from complete. It does not clarify what 'update' means in practical terms, which fields are commonly used together, or what happens after invocation. The rich schema helps but cannot compensate for the absence of behavioral and usage context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter already has a meaningful description in the schema. The tool description itself adds no parameter-level meaning, but the schema carries the burden, supporting a baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Update timer.' simply restates the tool name and title with no additional detail. It identifies the verb and resource but does nothing to distinguish this timer update operation from related siblings like pause_timer, resume_timer, or complete_timer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention pause, resume, complete, or create timer operations, leaving the agent to infer the appropriate context entirely from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_userCInspect

Update user.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the user to update.
typeNoThe type of user, such as 'account', 'collaborator', or 'contact'.
adminNoIndicates whether the user is an administrator.
emailNoThe email address of the user.
titleNoThe job title of the user, such as 'Project Manager' or 'Senior Software Developer'.
last_nameNoThe last name of the user.
company_idNoThe ID of the client/company to which the user belongs.
first_nameNoThe first name of the user.

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already communicate that this is not read-only, not idempotent, and not destructive. The description adds no behavioral context beyond the word 'Update', such as whether fields are partially updated, whether updates are reversible, or what happens after a successful update.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short and free of fluff, but it is under-specified rather than appropriately concise. Two words do not provide enough useful context for a tool with eight parameters and a write operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that this is a mutation tool with eight parameters, no output schema, and minimal annotations, the description is far too sparse. It fails to explain update semantics, which fields are available for update, or any operational context an agent would need beyond the raw schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all eight parameters are already documented with types and descriptions. The description itself contributes no additional parameter meaning, but the schema does the necessary work, making a baseline score of 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('Update') and a clear resource ('user'), so an agent can identify this as a user-mutation tool. However, it does not differentiate it from the many other update_* sibling tools beyond the resource name, and it adds no detail about the scope of the update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives. The description does not mention prerequisites, whether this is the canonical way to modify a user, or any conditions under which another tool should be used instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_workflowCInspect

Update workflow.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the workflow to update.
nameNoThe new name of the workflow.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations indicate this is not read-only and not idempotent, but the description adds no behavioral context beyond that. It does not mention side effects, required permissions, or what happens to unspecified workflow settings.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short but under-specified rather than usefully concise. The single sentence restates the tool name and does not earn its place because it contributes no information beyond the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the schema covers parameter semantics, the description fails to provide the purpose clarity and usage context needed to select this tool correctly among many update_* siblings. It is minimally viable but leaves the agent to infer why, when, and how this update should be performed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema gives clear meaning to both id and name. The description itself adds no parameter-level detail, which is acceptable at the baseline of 3 given the schema's completeness.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Update workflow." is a near-verbatim restatement of the tool name and provides no detail about what updating a workflow entails. It also does not distinguish this tool from siblings like twprojects-update_workflow_stage or twprojects-create_workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus creating a workflow, updating a workflow stage, or moving tasks between stages. The description offers no context, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-update_workflow_stageCInspect

Update workflow stage.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the workflow stage to update.
nameNoThe new name of the workflow stage.
workflow_idYesThe ID of the workflow that owns the stage.

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already indicate this is not read-only, and the description only repeats the 'update' action without describing side effects, partial-update semantics, or whether renaming a stage affects tasks in that stage. No behavioral context is added beyond what the annotations and tool name convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

At three words, the description has no filler, but the brevity is under-specification rather than efficient information packing. The sentence restates the tool name and contributes no new decision-relevant content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The operation is simple and the schema plus annotations cover parameters and safety, so absence of an output schema is not critical. However, without any statement about the scope of the update or when it applies, the description is only minimally complete for an agent choosing among many update_* tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters (id, name, workflow_id) are already documented precisely. The tool description adds no parameter-level meaning, which is acceptable because the schema carries the burden; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Update workflow stage.' is a near-verbatim restatement of the tool name and title, adding no specifics about what aspect of the stage is updated (e.g., its name) or what the effect is. It identifies a resource but does not elaborate enough to stand apart from other workflow-stage operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this tool versus siblings such as twprojects-move_task_to_workflow_stage or twprojects-update_workflow. An agent would have to infer usage from the schema alone, which is risky because moving a task to a stage is a different operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twprojects-users_workloadA
Read-only
Inspect

Get task allocation across users for a date range. (workload of users)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination of results (1-based).
end_dateYesEnd of the workload period; the boundary day itself is included.
user_idsNoFilter workload by user.
page_sizeNoNumber of results per page for pagination (1-500).
start_dateYesStart of the workload period; the boundary day itself is included.
project_idsNoFilter workload by project.
user_team_idsNoFilter workload by users' team.
user_company_idsNoFilter workload by users' client/company.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYes
includedYes
workloadYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation as read-only and non-destructive, and the description's 'Get' is consistent with that. The description adds the semantic scope (workload per user over a period) but no further behavioral traits such as aggregation, pagination defaults, or result limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The main sentence is front-loaded and compact, stating what the tool returns and the key constraint. The parenthetical is slightly redundant but harmless.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a fully described schema and an output schema present, the minimal description is adequate for a read-only workload query. It could be more complete by naming the filtering/pagination options, but those are already in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so all eight parameters are already documented with their meanings. The description mentions only the date-range dimension in plain language and adds no semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a clear action ('Get') and a specific resource ('task allocation across users') scoped to a date range, and the parenthetical 'workload of users' reinforces the intent. It is unambiguous on its own, though it does not explicitly contrast itself with related siblings such as twprojects-list_allocations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for a date range' gives a clear query context and the required start_date/end_date pair, so the intended use is implied. However, there is no explicit guidance about when to prefer this over allocations/timelog/workload-related siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-create_categoryBInspect

Create space category.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the category.
colorNoA hex color code for the category (e.g. "#FF5733").

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, signaling a write operation. The description only repeats the creation intent without adding behavioral context such as side effects, uniqueness constraints, whether associated spaces are required, or what happens on duplicate names. No additional transparency beyond the annotations is provided.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no wasted words. It is front-loaded with the action and object. However, while appropriately short, it offers almost no additional context or structure, so it does not reach the highest mark for effectively using its limited length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple create tool with two parameters and no output schema, the definition is minimally adequate: an agent can infer that it creates a category with a name and optional color. However, it lacks any explanation of what a space category is, when to create one, or what the API returns, leaving clear gaps for an agent unfamiliar with the domain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents both the 'name' and 'color' parameters. The description adds no extra meaning about these parameters or how they relate to creating a category, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Create space category' states a specific verb and a specific resource. It clearly distinguishes this tool from siblings like twspaces-get_category, twspaces-list_categories, and twspaces-update_category, and from the analogous twprojects-create_project_category by using 'space' instead of 'project'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention that this should be used to create a new category for organizing spaces, nor does it exclude cases like updating or listing existing categories. Usage must be inferred entirely from the verb 'create'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-create_commentBInspect

Create comment on a page. Use parentId for replies.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesThe ID of the page to comment on.
contentYesThe content of the comment.
spaceIdYesThe ID of the space containing the page.
parentIdNoThe ID of the parent comment (for creating a reply).
isPrivateNoSet to true to create a private comment visible only to space members.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false, consistent with a create operation, and the description does not contradict them. The description adds one behavioral detail: 'Use parentId for replies,' but this is already captured in the schema parameter description. It does not disclose outcomes such as visibility rules, notifications, or duplicate behavior, though the idempotentHint=false annotation partially covers that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two short sentences, front-loaded with the action and resource, and the reply guidance is a useful one-liner. No wasted words or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple create-comment tool, the description plus schema provide enough to make a correct call. However, the lack of any mention of how this differs from twprojects-create_comment, and no indication of required relationships (e.g., space must contain the page), leaves some context gaps. Since there is no output schema, a bit more behavioral context would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so a baseline of 3 is appropriate. The description's 'Use parentId for replies' does not add meaning beyond the schema's own description for parentId ('for creating a reply'). No additional parameter semantics are provided, so value over the schema is minimal.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create comment') and resource ('a page'), identifying the core purpose. It does not explicitly differentiate from the sibling tool twprojects-create_comment, though the 'page' wording hints at the spaces domain. Overall, clear but lacks explicit sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives like twprojects-create_comment or twspaces-list_comments. The only instruction, 'Use parentId for replies,' addresses parameter usage for replies rather than tool selection. This leaves the agent without context for choosing among comment-related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-create_pageCInspect

Create page in a space.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoA URL-friendly slug for the page.
titleYesThe title of the page.
contentNoThe HTML content of the page.
spaceIdYesThe ID of the space to create the page in.
parentIdNoThe ID of the parent page (for creating a sub-page).
isPublishNoSet to true to publish the page immediately (default: draft).
isFullWidthNoDisplay the page in full-width layout.
changeMessageNoA message describing the changes made in this version.
isRequiredReadingNoMark this page as required reading for space members.
readerInlineCommentsEnabledNoAllow readers to add inline comments on this page.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral context beyond the annotations; it simply restates the create action already visible in the name. It does not disclose defaults such as draft vs. publish, parent-page hierarchy behavior, or what the response contains, so the agent gets minimal insight into side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no wasted words and the action front-loaded. It is appropriately concise, though it offers no additional structure or elaboration that could improve usability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema fully documents the parameters, making basic invocation feasible, but the description omits useful context like draft-vs-publish defaults, sub-page creation via parentId, and expected return behavior. It is minimally adequate but leaves several gaps an agent would have to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 10 parameters have descriptions in the schema, so schema coverage is 100% and the description does not need to explain parameter meaning. The tool description adds nothing beyond the schema, which fits the baseline of 3 for complete schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Create') and resource ('page in a space'), which is clear and generally distinguishes it from get/update/list/duplicate page tools at the verb level. However, it is largely a restatement of the tool name and does not explicitly differentiate itself from sibling tools like duplicate_page.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as duplicate_page, create_category, or update_page. The only usage signal is the generic 'Create page in a space,' leaving the agent to infer selection criteria without explicit context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-create_spaceCInspect

Create space.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesA short unique code/identifier for the space (e.g. "ENG", "DOCS").
iconNoAn icon identifier for the space.
titleYesThe title of the space.
purposeNoA brief description of the space's purpose.
projectIdNoThe ID of a Teamwork project to link to this space.
categoryIdNoCategory to assign. Use twspaces-list_categories to discover.
spaceColorNoA hex color code for the space (e.g. "#FF5733").

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is not a read-only operation and is not idempotent, but the description adds no behavioral context beyond the word 'create.' It does not mention uniqueness of the code, permissions, side effects, or what happens when the space is created.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, but this reads as under-specification rather than effective conciseness. It merely restates the tool's function in two words and provides no structured or front-loaded information for the agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given seven parameters, two required fields, and no output schema, the description is too sparse to fully contextualize the operation. It does not explain the required title and code, the optional project/category links, or what a successful response contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameter meanings are fully documented in the input schema. The description itself adds no parameter-level insight, but the high coverage supports the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('Create') and resource ('space'), which matches the tool name and distinguishes it from sibling tools like twspaces-create_category and twspaces-create_page. It lacks any scoping or qualifying detail, so it does not quite reach a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives such as twspaces-update_space, twspaces-list_spaces, or twspaces-create_page. The text only says 'Create space,' which gives no explicit context, prerequisites, or exclusion conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-create_tagsAInspect

Create one or more Spaces tags in a single request.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsYesTags to create.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, indicating a non-destructive write. The description adds the batch creation aspect ('one or more') and single-request behavior, which is useful beyond annotations. However, it does not disclose potential error conditions (e.g., duplicate tag names) or return value, leaving some gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, efficient sentence that gets straight to the point with no filler. It is front-loaded with the verb and resource, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one parameter, no output schema), and the description plus schema provide enough to invoke it. However, the lack of details about response format or duplicate handling leaves some gaps, making it adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully describes the 'tags' parameter and its item properties (name, color), so the description adds limited semantic value. It reinforces that one or more tags can be created and contextualizes them as Spaces tags, but this mostly duplicates the tool name. Baseline 3 is appropriate given 100% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action (create), resource (Spaces tags), and scope (one or more in a single request), distinguishing it from sibling tag-creation tools in other modules (e.g., twdesk-create_tag, twprojects-create_tag).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: it is for creating Spaces tags, possibly multiple at once. It does not explicitly discuss exclusions or alternatives, but the resource and batching behavior are clear enough for a simple CRUD tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-duplicate_pageBInspect

Duplicate page with a new title.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoA URL-friendly slug for the duplicated page.
titleYesThe title for the duplicated page.
pageIdYesThe ID of the page to duplicate.
spaceIdYesThe ID of the space containing the page.
parentIdNoThe ID of the parent page for the duplicate (defaults to same parent).

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already convey the mutation and non-destructive profile (readOnlyHint=false, destructiveHint=false), and the description adds no behavior beyond the literal word 'duplicate'. It doesn't disclose what is copied (children, attachments, comments), whether the original is left untouched, or what the operation returns. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler or redundancy. 'Duplicate page' leads with the action, and 'with a new title' adds the relevant distinguishing detail. It is compact without being vague.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a 5-parameter mutating tool with no output schema, the one-line description is minimally adequate but has clear gaps. The schema and annotations cover parameter meaning and safety, but the description does not explain the return value or the scope of what gets duplicated, which matters for an agent invoking this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are already documented. The description's 'with a new title' merely restates the title parameter's purpose and adds no new semantics for slug, parentId, or relationships between parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Duplicate page') and adds the key parameter context ('with a new title'), which clearly distinguishes it from create/update page operations. It doesn't explicitly name an alternative, so it doesn't quite reach the highest bar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus twspaces-create_page, twspaces-update_page, or other page-related siblings. There are no conditions, prerequisites, or exclusions stated, leaving the agent to infer the appropriate context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-get_categoryB
Read-only
Inspect

Get space category.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the category to retrieve.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description merely restates the operation without adding behavioral details beyond the annotations. Annotations already declare readOnlyHint and destructiveHint, but no additional context such as return behavior, error conditions, or pagination is provided.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no wasted words. It is front-loaded and appropriately sized for a simple get operation with one parameter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (one parameter, no output schema) and annotations, the description is minimally adequate. However, it lacks any mention of the return value or behavior in case of error, which would be helpful for completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of the parameter with a clear description ('The ID of the category to retrieve'). The tool description adds no extra parameter detail, but since the schema is sufficient, the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get' and resource 'space category', which clearly indicates the operation. It distinguishes from sibling tools like get_page or get_space by naming the resource type, but does not provide additional context about what a space category is.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like list_categories or get_space. The description gives no exclusions or alternative recommendations, leaving the agent without usage decision support.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-get_commentB
Read-only
Inspect

Get page comment.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesThe ID of the page containing the comment.
spaceIdYesThe ID of the space containing the page.
commentIdYesThe ID of the comment to retrieve.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond what annotations provide, but it doesn't contradict them either. No extra detail about return format or error cases is given.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence, front-loaded and free of filler. It is concise, but perhaps too terseโ€”it omits potentially useful context while still being grammatically efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get tool with three fully described parameters and readOnly annotations, the description is minimally adequate. However, since there is no output schema, the description could have mentioned that the return value is the comment object, which would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter (pageId, spaceId, commentId) fully described. The description adds no additional parameter meaning, so it relies entirely on the schema. Baseline 3 is appropriate given the high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get page comment.' clearly identifies the action (get) and resource (page comment), which is specific enough for a retrieval tool. However, it doesn't explicitly distinguish from sibling tools like twprojects-get_comment or twspaces-list_comments, though the tool name provides the 'twspaces' context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It doesn't mention that this retrieves a single comment by ID, contrast with listing comments, or note any prerequisites. The user must infer usage from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-get_homepageB
Read-only
Inspect

Get a space's homepage.

ParametersJSON Schema
NameRequiredDescriptionDefault
spaceIdYesThe ID of the space to retrieve the homepage for.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. However, the description adds no additional behavioral contextโ€”nothing about return format, error behavior, or what a 'homepage' contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence, front-loaded, with zero wasted words. It communicates the essential purpose efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only getter with one well-documented parameter, the description is minimally sufficient. However, with no output schema, it doesn't describe the return value or any special behavior, and usage guidance is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides 100% coverage for the single parameter (spaceId) with a clear description. The tool description adds no extra semantic meaning beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get a space's homepage' clearly specifies the verb (get) and resource (space's homepage), distinguishing it from sibling tools like get_space or get_page. It's unambiguous, though it doesn't explicitly contrast with alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like twspaces-get_space or twspaces-get_page. There is no mention of context, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-get_pageA
Read-only
Inspect

Get page. Returns content, metadata, tags, and revision info.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesThe ID of the page to retrieve.
spaceIdYesThe ID of the space containing the page.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds that it returns content, metadata, tags, and revision info, which is return-value information rather than behavioral traits. No extra context is given about authorization, rate limits, or other side effects, but the annotation coverage lowers the burden on the description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences that are front-loaded with the action and resource. Every word adds value, and there is no redundant or filler content. It is a model of conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple getter with fully documented parameters and no output schema, the description conveys the essential purpose and return scope. It does not need to explain return values in detail because the enum of returned data is given. The lack of an output schema is not a gap since the description lists the content categories.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage with clear descriptions for both pageId and spaceId. The description adds no additional parameter semantics, so it does not go beyond what the schema already offers. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get page' with a specific verb and resource, and adds value by enumerating what is returned (content, metadata, tags, revision info). It does not explicitly distinguish from sibling getters like get_space or get_comment, but the tool name already identifies the resource, so the purpose is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended usage is implied by the description and annotations (read-only retrieval of a page by IDs), but there is no explicit guidance on when to use this tool versus alternatives such as twspaces-list_pages or twspaces-get_homepage. The lack of exclusions or alternative recommendations leaves the agent to infer from context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-get_spaceC
Read-only
Inspect

Get space.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the space to retrieve.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. However, the description adds no behavioral context beyond that, such as return format, errors, or authentication requirements, which would be helpful for a simple get tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two words, which is concise but under-specified. It carries no information beyond the tool name and does not earn its place as a useful description. This is closer to under-specification than appropriate conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple GET tool with one parameter, no output schema, and minimal annotations, the description is inadequate. It does not explain what a space is, what fields the response contains, or any edge cases. Sibling tools like twspaces-get_page have similar brevity, but the description still fails to provide necessary context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the only parameter 'id' is clearly described as 'The ID of the space to retrieve.' The description 'Get space.' adds no additional parameter meaning, but the schema fully covers the semantics, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get space.' is essentially a tautology of the tool name and title, restating the resource without any additional detail. It does not specify that it retrieves a single space by ID or distinguish itself from twspaces-list_spaces.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like twspaces-list_spaces or twspaces-get_page. No context or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-get_tagC
Read-only
Inspect

Get Spaces tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the tag to retrieve.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds no behavioral information beyond the tool nameโ€”no mention of authentication, return payload, or any edge cases. It fails to add value beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with no fluff, but it is under-specified. It lacks any explanation that would help an agent understand the tool's purpose or context. Conciseness should not come at the expense of essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-by-id tool, the description is minimally adequate. The schema covers the parameter, annotations cover safety, and no output schema exists. However, the description fails to explain what a 'Spaces tag' is, whether the operation returns the tag directly, or any related context. Still, given the simplicity and good schema/annotation coverage, completeness is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: the single parameter 'id' has a clear description ('The ID of the tag to retrieve.'). The tool description adds no parameter semantics, but the schema fully documents the parameter, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get Spaces tag.' clearly identifies the action (get) and the resource (Spaces tag), distinguishing it from tag tools in other modules like twprojects-get_tag or twdesk-get_tag. However, it lacks any additional context about what a Spaces tag is or how it relates to Spaces.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as twspaces-list_tags or twspaces-update_tag. The description gives no context, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-list_categoriesB
Read-only
Inspect

List space categories.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageSizeNoNumber of results per page for pagination (1-500).
pageOffsetNoThe index position to start retrieving results from (not a page number).

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and destructiveHint=false, matching the read-only nature of a list operation, so there is no contradiction. The description adds no extra behavioral context such as pagination behavior, sorting, or global-vs-scoped scope, but with the safety profile covered by annotations this is adequate rather than misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single clear, front-loaded phrase with no filler or redundancy. It is as concise as a list operation description can be, even though the brevity trades off some contextual depth captured in other dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple paginated list operation, the schema covers parameters and annotations cover safety, but the description does not clarify whether categories are global or space-scoped, what the response shape is, or default paging behavior since no output schema exists. These are meaningful gaps, but the core invocation is still understandable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: both pageSize and pageOffset are already explained in the input schema with ranges and meaning. The description contributes no additional parameter-level detail, so it earns the baseline score for a schema-covered tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the operation with a specific verb ('List') and resource ('space categories'), making it easy to distinguish from twspaces-list_spaces, twspaces-list_pages, and twspaces-list_tags. It does not explicitly contrast itself with twspaces-get_category or twspaces-create_category, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance on when to choose this tool over alternatives, such as twspaces-get_category for a single category or twspaces-search for filtered results. Usage must be inferred entirely from the tool name and the verb 'List'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-list_commentsA
Read-only
Inspect

List comments on a page. Returns top-level comments with replies.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageIdYesThe ID of the page to list comments for.
spaceIdYesThe ID of the space containing the page.
pageSizeNoNumber of results per page for pagination (1-500).
pageOffsetNoThe index position to start retrieving results from (not a page number).

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety with readOnlyHint=true and destructiveHint=false. The description adds beyond that by explaining the response contains top-level comments with replies. It does not disclose pagination behavior or ordering, but those are not safety-critical.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the core action and return shape front-loaded. No filler or redundant restatement of the title or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool, the required parameters and general return shape are covered. However, with no output schema, the description could better clarify pagination behavior, ordering, and exactly how replies are nested within top-level comments.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters clearly. The description adds no extra parameter-level meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List'), resource ('comments'), and scope ('on a page'). Also discloses the return shape ('top-level comments with replies'), which helps distinguish it from twprojects-list_comments and from twspaces-get_comment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is for page comments via 'on a page', but it does not explicitly name alternatives or state when-not-to-use conditions. It does not mention twprojects-list_comments or twspaces-get_comment as distinct options.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-list_pagesA
Read-only
Inspect

List pages in a space as a hierarchical tree. Returns the space's open pages under pages; set includePrivate to also receive, under a sibling private key, the restricted pages the calling user has access to. Returns at most 100 pages per call by default, up to 500 with pageSize, counted across both trees. A space with more pages than that is cut in depth-first order and the response carries a truncated marker naming the total page count, the pageOffset that returns the next set, and twspaces-get_page for a single page in full.

ParametersJSON Schema
NameRequiredDescriptionDefault
spaceIdYesThe ID of the space to list pages for.
pageSizeNoMaximum number of pages to return (1-500). Defaults to 100.
pageOffsetNoNumber of pages to skip, counted in depth-first order (not a page number), across the open tree and then the private one. Use the value the `truncated` marker names to read the next set.
includePrivateNoReturn the restricted pages the calling user has access to as well, under a `private` key beside `pages`. Defaults to false, so an unfiltered call answers with the open pages only and a private page is missing rather than reported as inaccessible. Both trees share one pageSize budget and one pageOffset.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true and destructiveHint=false, but the description adds substantial behavioral detail beyond that: pagination limits (default 100, max 500), depth-first ordering, shared pageSize/pageOffset budget across both trees, truncation marker fields, and the exact behavior when includePrivate is false. This greatly exceeds what annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with no fluff. Each clause earns its place: the core purpose, optional private behavior, pagination limits, truncation mechanics, and the pointer to the single-page alternative. Front-loaded with the main resource, well-structured for scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by explaining the return structure (`pages`, `private`, `truncated`), pagination behavior, count limits, depth-first order, and how to page through results. It also mentions the alternative for a single page. Nothing essential is missing for a safe, effective call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all parameters already documented in detail (including depth-first ordering and shared budget). The tool description adds no novel parameter semantics beyond what the schema providesโ€”it essentially repeats the same info. As the schema carries the load, the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with 'List pages in a space as a hierarchical tree,' a specific verb and resource that immediately distinguishes this from siblings like twspaces-get_page (single page) and twspaces-list_spaces (list spaces). It also clarifies the optional inclusion of private pages, making the scope unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly routes to 'twspaces-get_page for a single page in full,' offering a concrete alternative. However, it doesn't explicitly state when not to use this tool versus other list tools (e.g., list_spaces), relying on the obvious name and context. It gives clear context for pagination and private pages but lacks broader exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-list_space_collaboratorsA
Read-only
Inspect

List space collaborators (users and teams).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the space to retrieve collaborators for.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the result includes both users and teams, which is useful context beyond the annotations. However, it does not disclose other behavioral details like pagination, authentication requirements, or whether hidden/inactive collaborators are included.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that conveys the essential information without any filler. It is appropriately concise for a simple list operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (one required parameter, read-only operation), the description sufficiently explains what the tool returns ('users and teams') and the schema fully documents the input. The lack of an output schema or extensive behavioral notes is acceptable for this simple list tool, though a note about the return structure could push it to a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides 100% coverage for the single parameter 'id' with a clear description. The tool description does not add any additional parameter semantics beyond what the schema already states, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' with the specific resource 'space collaborators' and clarifies the scope with '(users and teams)'. This distinguishes it from similar tools like twspaces-get_space and twspaces-list_spaces, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you need to retrieve the list of users and teams associated with a space, but it provides no explicit guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. The usage context is inferred from the name and description rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-list_spacesC
Read-only
Inspect

List spaces.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageSizeNoNumber of results per page for pagination (1-500).
pageOffsetNoThe index position to start retrieving results from (not a page number).

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose readOnlyHint, destructiveHint, and idempotentHint, so the safety profile is covered. The description adds no behavioral context such as pagination semantics, result ordering, scope, or what the returned list contains. There is no annotation contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and has no filler, but it is so minimal that it duplicates the existing title rather than adding useful structure or context. It is under-specified more than elegantly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should at least clarify what a space is, whether all accessible spaces are returned, and what fields are included. 'List spaces.' leaves too much unstated, though the pagination parameters are adequately covered in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema documents both pageSize and pageOffset with 100% description coverage, including ranges and semantics. The description itself adds nothing about parameters, but the schema carries the burden, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'List spaces.' simply restates the title 'List Spaces' and the action implied by the tool name 'twspaces-list_spaces'. It is effectively a tautology and adds no distinguishing detail against sibling tools like twspaces-get_space or twspaces-search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives. Sibling tools such as twspaces-get_space, twspaces-list_space_collaborators, and twspaces-search exist, but the description gives no criteria for choosing list_spaces over them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-list_tagsB
Read-only
Inspect

List Spaces tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageSizeNoNumber of results per page for pagination (1-500).
pageOffsetNoThe index position to start retrieving results from (not a page number).

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds no behavioral context beyond the word 'List' โ€” it does not mention pagination behavior, ordering, response shape, or any side effects. Thus it contributes nothing beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with zero filler. For a simple list operation with no required parameters, this is appropriately sized, and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is minimally adequate for a simple, read-only list operation with fully documented optional pagination parameters. However, there is no output schema and the description does not hint at response format, tag object fields, or any filtering or ordering behavior, leaving some context missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both pageSize and pageOffset described in the input schema itself. The description is silent on parameters, but at this coverage level the schema carries the semantic burden effectively, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'List Spaces tags.' It distinguishes the tool from twdesk-list_tags and twprojects-list_tags by scoping it to the Spaces domain. It is not a tautology, though it is terse and does not elaborate on what a tag is or the exact scope of the listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: an agent would use this tool when it needs to enumerate tags in Spaces. However, there is no explicit guidance compared to twspaces-get_tag for single-tag lookup, twspaces-create_tags for creating tags, or any when-not-to-use conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-update_categoryCInspect

Update space category.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the category to update.
nameNoThe new name for the category.
colorNoA new hex color code for the category.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide basic flags (readOnlyHint=false, destructiveHint=false), but the description adds no behavioral context beyond the word 'update'. It does not state whether omitted fields are preserved, whether partial updates are supported, or what happens if the id does not exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no fluff and is front-loaded with the action. However, at only three words it is so terse that it borders on under-specification, adding little beyond the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple update with fully documented parameters, the description is mostly adequate: an agent can infer it should pass an id and optionally name or color. But it lacks clarity on partial-update behavior, how to find the id, and what the response will contain, especially since no output schema is provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so id, name, and color are already documented in the input schema. The description adds no parameter-level detail, but none is needed because the schema carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('Update') and resource ('space category'), which is clear and matches the tool's twspaces namespace. It is unambiguous, though it does not explicitly distinguish itself from sibling update tools like twspaces-update_space or twspaces-update_tag.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives such as twspaces-create_category, twspaces-list_categories, or other update tools. It also does not mention prerequisites like obtaining the category id first or that this tool is only for updating existing categories.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-update_commentCInspect

Update page comment.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoThe new state of the comment (e.g. "active", "resolved").
pageIdYesThe ID of the page containing the comment.
contentNoThe new content of the comment.
spaceIdYesThe ID of the space containing the page.
commentIdYesThe ID of the comment to update.
isPrivateNoChange the privacy setting of the comment.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds nothing beyond the mutating nature already conveyed by readOnlyHint=false. It does not disclose whether the update is partial or full, how optional fields like state, content, or isPrivate behave, what gets overwritten, or any permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single terse sentence with no wasted words and no unnecessary preamble. It is concise and front-loaded, though the brevity borders on under-specification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema and annotations cover parameter definitions and basic safety traits, but the description lacks the behavioral context needed to invoke a 6-parameter update tool correctly. The agent is left to guess how optional fields interact, whether empty values are accepted, and what the outcome of an update is.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters are already documented with clear descriptions. The tool description adds no additional parameter semantics or usage details, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Update') and a resource ('page comment'), which distinguishes it from get/create/list comment tools. However, it does not differentiate it from twprojects-update_comment, and 'page comment' is slightly vague without the tool name context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. With multiple comment-related tools available, such as twprojects-update_comment and twspaces-create_comment, an agent receives no explicit routing cues or exclusion conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-update_pageBInspect

Update page. Note: content and publish changes update the published page only, not the live collaborative editor draft; if the page has an active editor draft, re-publishing from the Spaces web editor can overwrite these changes (known Spaces limitation).

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoA new URL-friendly slug for the page.
titleNoThe new title of the page.
pageIdYesThe ID of the page to update.
contentNoThe new HTML content of the page.
spaceIdYesThe ID of the space containing the page.
parentIdNoThe ID of the new parent page (to move the page).
isPublishNoSet to true to publish the page, false to revert to draft.
isFullWidthNoToggle full-width layout for this page.
draftVersionNoOptimistic concurrency token for the page's draft content. Required when updating `content`; optional otherwise. Obtain the current value from the `draftVersion` field with twspaces-get_page or twspaces-list_pages tools.
changeMessageNoA message describing the changes made in this version.
isMinorChangeNoMark this update as a minor change (won't notify watchers).
isRequiredReadingNoMark or unmark this page as required reading.
readerInlineCommentsEnabledNoAllow or disallow readers from adding inline comments.

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish this is a mutating operation. The description adds non-obvious behavioral context: content and publish changes affect only the published page, not the live editor draft, and re-publishing from the Spaces web editor can overwrite updates. This is meaningful transparency beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with no filler. The critical caveat is front-loaded after the verb phrase, making the most important behavioral warning immediately visible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The draft/publish caveat is valuable, but with 13 parameters and no output schema, the description leaves the full update behavior largely to the schema. It is adequate for a mutating page-update tool, but not a complete standalone explanation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented and the baseline is 3. The description adds a small amount of cross-parameter context by linking content/publish changes to the draft caveat, but it does not substantially enrich parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb and resource ('Update page'), and the tool name clearly distinguishes it from twspaces-update_category/comment/space/tag siblings. However, it doesn't enumerate the scope of updatable fields, leaving some specificity to the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives, nor any preconditions or conditions. The draft/publish caveat is useful operational context but does not help an agent choose this tool over twspaces-create_page or other update tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-update_spaceCInspect

Update space.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the space to update.
codeNoA new short unique code/identifier for the space.
iconNoA new icon identifier for the space.
stateNoThe state of the space (e.g. "active", "archived").
titleNoThe new title of the space.
purposeNoA new brief description of the space's purpose.
projectIdNoThe ID of a Teamwork project to link to this space.
categoryIdNoCategory to assign. Use twspaces-list_categories to discover.
spaceColorNoA new hex color code for the space.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate that the operation is not read-only, not destructive, and not idempotent, but the description adds no additional behavioral context. It does not mention partial-update semantics, permission requirements, side effects, or what happens to omitted fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, but this is under-specification rather than effective conciseness. 'Update space.' carries no information beyond the tool name and title, so the sentence does not earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a mutating operation with nine optional parameters and no output schema, yet the description explains none of the operational context. It does not clarify whether this is a partial update, how to discover valid IDs, or what the response contains. The schema covers parameter meaning but not tool behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all nine parameters in sufficient detail. The description adds no parameter-level meaning, but with complete schema coverage the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Update space.' is a tautology that restates the tool name and title. It names the resource but provides no detail about what updating involves, what fields are affected, or how it differs from the many other update tools in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool, when not to use it, or which alternative tools might be relevant. The agent must infer usage entirely from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

twspaces-update_tagBInspect

Update Spaces tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the tag to update.
nameNoThe new name for the tag.
colorNoA new hex color code for the tag.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already indicate that this is a non-read-only, non-idempotent update operation, and the description merely repeats the verb 'Update' without adding behavioral context. It does not disclose partial-update semantics, validation behavior, required permissions, or side effects, and it does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler or unnecessary words. It is concise, though slightly too terse to convey more than the basic action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward update tool, the fully documented parameters and annotations make the definition minimally sufficient to invoke correctly: id is required, and name and color are optional. However, missing usage guidance and return/behavior notes prevent it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter (id, name, color) clearly documented in the input schema. The description adds no additional parameter meaning, but because the schema already handles this, the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Update') and a specific resource ('Spaces tag'), making the action and target clear. This distinguishes it from sibling tag operations such as twspaces-create_tags, twspaces-get_tag, and twspaces-list_tags, as well as from update_tag in other domains like twdesk and twprojects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not say that it is for existing tags, that twspaces-create_tags should be used for creating new tags, or how it differs from twdesk-update_tag or twprojects-update_tag.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv1.43.2
    • Changedtwprojects-get_jobrole1 field changed
      • addedOutput schema / properties / included
        Added value: +{
        +  "properties": {
        +    "currencies": {
        +      "type": "object"
        +    },
        +    "users": {
        +      "type": "object"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedtwprojects-list_jobroles1 field changed
      • addedOutput schema / properties / included
        Added value: +{
        +  "properties": {
        +    "currencies": {
        +      "type": "object"
        +    },
        +    "users": {
        +      "type": "object"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedtwspaces-list_pages4 fields changed
      • addedInput schema / properties / includePrivate
        Added value: +{
        +  "description": "Return the restricted pages the calling user has access to as well, under a `private` key beside `pages`. Defaults to false, so an unfiltered call answers with the open pages only and a private page is missing rather than reported as inaccessible. Both trees share one pageSize budget and one pageOffset.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / pageOffset / description
        Previous value: -"The index position to start retrieving results from (not a page number)."New value: +"Number of pages to skip, counted in depth-first order (not a page number), across the open tree and then the private one. Use the value the `truncated` marker names to read the next set."
      • addedInput schema / properties / pageOffset / minimum
        Added value: +0
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination (1-500)."New value: +"Maximum number of pages to return (1-500). Defaults to 100."
  2. 12 tool updatesv1.41.0
    • Addedtwprojects-download_file
    • Changedtwprojects-get_comment2 fields changed
      • changedInput schema / properties / fields / items / enum
        Previous value: -[
        -  "id",
        -  "body",
        -  "htmlBody",
        -  "contentType",
        -  "object",
        -  "project",
        -  "postedBy",
        -  "postedDateTime",
        -  "lastEditedBy",
        -  "dateLastEdited",
        -  "deleted",
        -  "deletedBy",
        -  "dateDeleted"
        -]New value: +[
        +  "id",
        +  "body",
        +  "htmlBody",
        +  "contentType",
        +  "object",
        +  "project",
        +  "postedBy",
        +  "postedDateTime",
        +  "lastEditedBy",
        +  "dateLastEdited",
        +  "deleted",
        +  "deletedBy",
        +  "dateDeleted",
        +  "files"
        +]
      • addedOutput schema / properties / comments / properties / files
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "id": {
        +        "type": "integer"
        +      },
        +      "meta": {
        +        "type": "object"
        +      },
        +      "type": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
    • Addedtwprojects-get_file
    • Changedtwprojects-get_message2 fields changed
      • changedInput schema / properties / fields / items / enum
        Previous value: -[
        -  "id",
        -  "title",
        -  "project",
        -  "tags",
        -  "lastReply",
        -  "replyStatus",
        -  "status",
        -  "body",
        -  "author",
        -  "message",
        -  "meta",
        -  "createdAt",
        -  "updatedAt"
        -]New value: +[
        +  "id",
        +  "title",
        +  "project",
        +  "tags",
        +  "lastReply",
        +  "replyStatus",
        +  "status",
        +  "body",
        +  "author",
        +  "message",
        +  "meta",
        +  "createdAt",
        +  "updatedAt",
        +  "attachments"
        +]
      • addedOutput schema / properties / message / properties / attachments
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "id": {
        +        "type": "integer"
        +      },
        +      "meta": {
        +        "type": "object"
        +      },
        +      "type": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
    • Changedtwprojects-get_message_reply2 fields changed
      • changedInput schema / properties / fields / items / enum
        Previous value: -[
        -  "id",
        -  "body",
        -  "author",
        -  "message",
        -  "meta",
        -  "createdAt",
        -  "updatedAt",
        -  "status"
        -]New value: +[
        +  "id",
        +  "body",
        +  "author",
        +  "message",
        +  "meta",
        +  "createdAt",
        +  "updatedAt",
        +  "status",
        +  "attachments"
        +]
      • addedOutput schema / properties / messageReply / properties / attachments
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "id": {
        +        "type": "integer"
        +      },
        +      "meta": {
        +        "type": "object"
        +      },
        +      "type": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
    • Changedtwprojects-get_task2 fields changed
      • changedInput schema / properties / fields / items / enum
        Previous value: -[
        -  "id",
        -  "name",
        -  "description",
        -  "descriptionContentType",
        -  "priority",
        -  "progress",
        -  "startDate",
        -  "dueDate",
        -  "estimateMinutes",
        -  "tasklist",
        -  "parentTask",
        -  "assignees",
        -  "tags",
        -  "predecessors",
        -  "subTaskIds",
        -  "workflowStages",
        -  "createdBy",
        -  "createdAt",
        -  "updatedBy",
        -  "updatedAt",
        -  "deletedBy",
        -  "deletedAt",
        -  "completedBy",
        -  "completedAt",
        -  "status"
        -]New value: +[
        +  "id",
        +  "name",
        +  "description",
        +  "descriptionContentType",
        +  "priority",
        +  "progress",
        +  "startDate",
        +  "dueDate",
        +  "estimateMinutes",
        +  "tasklist",
        +  "parentTask",
        +  "assignees",
        +  "tags",
        +  "attachments",
        +  "predecessors",
        +  "subTaskIds",
        +  "workflowStages",
        +  "createdBy",
        +  "createdAt",
        +  "updatedBy",
        +  "updatedAt",
        +  "deletedBy",
        +  "deletedAt",
        +  "completedBy",
        +  "completedAt",
        +  "status"
        +]
      • addedOutput schema / properties / task / properties / attachments
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "id": {
        +        "type": "integer"
        +      },
        +      "meta": {
        +        "type": "object"
        +      },
        +      "type": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
    • Changedtwprojects-list_comments2 fields changed
      • changedInput schema / properties / fields / items / enum
        Previous value: -[
        -  "id",
        -  "body",
        -  "htmlBody",
        -  "contentType",
        -  "object",
        -  "project",
        -  "postedBy",
        -  "postedDateTime",
        -  "lastEditedBy",
        -  "dateLastEdited",
        -  "deleted",
        -  "deletedBy",
        -  "dateDeleted"
        -]New value: +[
        +  "id",
        +  "body",
        +  "htmlBody",
        +  "contentType",
        +  "object",
        +  "project",
        +  "postedBy",
        +  "postedDateTime",
        +  "lastEditedBy",
        +  "dateLastEdited",
        +  "deleted",
        +  "deletedBy",
        +  "dateDeleted",
        +  "files"
        +]
      • addedOutput schema / properties / comments / items / properties / files
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "id": {
        +        "type": "integer"
        +      },
        +      "meta": {
        +        "type": "object"
        +      },
        +      "type": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
    • Addedtwprojects-list_files
    • Changedtwprojects-list_message_replies2 fields changed
      • changedInput schema / properties / fields / items / enum
        Previous value: -[
        -  "id",
        -  "body",
        -  "author",
        -  "message",
        -  "meta",
        -  "createdAt",
        -  "updatedAt",
        -  "status"
        -]New value: +[
        +  "id",
        +  "body",
        +  "author",
        +  "message",
        +  "meta",
        +  "createdAt",
        +  "updatedAt",
        +  "status",
        +  "attachments"
        +]
      • addedOutput schema / properties / messageReplies / items / properties / attachments
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "id": {
        +        "type": "integer"
        +      },
        +      "meta": {
        +        "type": "object"
        +      },
        +      "type": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
    • Changedtwprojects-list_messages2 fields changed
      • changedInput schema / properties / fields / items / enum
        Previous value: -[
        -  "id",
        -  "title",
        -  "project",
        -  "tags",
        -  "lastReply",
        -  "replyStatus",
        -  "status",
        -  "body",
        -  "author",
        -  "message",
        -  "meta",
        -  "createdAt",
        -  "updatedAt"
        -]New value: +[
        +  "id",
        +  "title",
        +  "project",
        +  "tags",
        +  "lastReply",
        +  "replyStatus",
        +  "status",
        +  "body",
        +  "author",
        +  "message",
        +  "meta",
        +  "createdAt",
        +  "updatedAt",
        +  "attachments"
        +]
      • addedOutput schema / properties / messages / items / properties / attachments
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "id": {
        +        "type": "integer"
        +      },
        +      "meta": {
        +        "type": "object"
        +      },
        +      "type": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
    • Changedtwprojects-list_project_updates3 fields changed
      • changedInput schema / properties / fields / items / enum
        Previous value: -[
        -  "id",
        -  "text",
        -  "health",
        -  "healthLabel",
        -  "color",
        -  "projectId",
        -  "project",
        -  "createdBy",
        -  "createdAt",
        -  "updatedAt",
        -  "isActive",
        -  "deleted",
        -  "deletedAt",
        -  "deletedBy",
        -  "likeFromUserIDs",
        -  "likeFromUsers",
        -  "reactions"
        -]New value: +[
        +  "id",
        +  "text",
        +  "health",
        +  "healthLabel",
        +  "color",
        +  "project",
        +  "createdBy",
        +  "createdAt",
        +  "updatedAt",
        +  "isActive",
        +  "deleted",
        +  "deletedAt",
        +  "deletedBy",
        +  "likeFromUsers",
        +  "reactions"
        +]
      • removedOutput schema / properties / projectUpdates / items / properties / likeFromUserIDs
        Removed value: -{
        -  "items": {
        -    "type": "integer"
        -  },
        -  "type": [
        -    "null",
        -    "array"
        -  ]
        -}
      • removedOutput schema / properties / projectUpdates / items / properties / projectId
        Removed value: -{
        -  "type": "integer"
        -}
    • Changedtwprojects-list_tasks2 fields changed
      • changedInput schema / properties / fields / items / enum
        Previous value: -[
        -  "id",
        -  "name",
        -  "description",
        -  "descriptionContentType",
        -  "priority",
        -  "progress",
        -  "startDate",
        -  "dueDate",
        -  "estimateMinutes",
        -  "tasklist",
        -  "parentTask",
        -  "assignees",
        -  "tags",
        -  "predecessors",
        -  "subTaskIds",
        -  "workflowStages",
        -  "createdBy",
        -  "createdAt",
        -  "updatedBy",
        -  "updatedAt",
        -  "deletedBy",
        -  "deletedAt",
        -  "completedBy",
        -  "completedAt",
        -  "status"
        -]New value: +[
        +  "id",
        +  "name",
        +  "description",
        +  "descriptionContentType",
        +  "priority",
        +  "progress",
        +  "startDate",
        +  "dueDate",
        +  "estimateMinutes",
        +  "tasklist",
        +  "parentTask",
        +  "assignees",
        +  "tags",
        +  "attachments",
        +  "predecessors",
        +  "subTaskIds",
        +  "workflowStages",
        +  "createdBy",
        +  "createdAt",
        +  "updatedBy",
        +  "updatedAt",
        +  "deletedBy",
        +  "deletedAt",
        +  "completedBy",
        +  "completedAt",
        +  "status"
        +]
      • addedOutput schema / properties / tasks / items / properties / attachments
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "id": {
        +        "type": "integer"
        +      },
        +      "meta": {
        +        "type": "object"
        +      },
        +      "type": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
  3. 2 tool updatesv1.40.0
    • Changedtwprojects-create_task1 field changed
      • addedInput schema / properties / notify
        Added value: +{
        +  "default": true,
        +  "description": "Whether to notify the task's assignees and followers, which sends them an email. Defaults to true. Set it to false for bulk or housekeeping changes nobody needs to hear about.",
        +  "type": "boolean"
        +}
    • Changedtwprojects-update_task1 field changed
      • addedInput schema / properties / notify
        Added value: +{
        +  "default": true,
        +  "description": "Whether to notify the task's assignees and followers, which sends them an email. Defaults to true. Set it to false for bulk or housekeeping changes nobody needs to hear about.",
        +  "type": "boolean"
        +}
  4. 171 tool updatesv1.39.3
    • Changedtwchat-get_or_create_dm1 field changed
      • changedInput schema / properties / user_id / description
        Previous value: -"The ID of the person to get the direct-message conversation with."New value: +"The ID of the person to get the direct-message conversation with. Must be somebody other than the authenticated user; see get_current_user."
    • Changedtwchat-list_conversations17 fields changed
      • removedInput schema / properties / include_message_data / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / include_message_data / type
        Added value: +"boolean"
      • removedInput schema / properties / page_limit / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_limit / type
        Added value: +"integer"
      • removedInput schema / properties / page_offset / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_offset / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / sort / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "name",
        -      "lastActivityAt",
        -      "createdAt",
        -      "updatedAt",
        -      "relevance"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / sort / enum
        Added value: +[
        +  "name",
        +  "lastActivityAt",
        +  "createdAt",
        +  "updatedAt",
        +  "relevance"
        +]
      • addedInput schema / properties / sort / type
        Added value: +"string"
      • removedInput schema / properties / status / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "all",
        -      "active"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / status / enum
        Added value: +[
        +  "all",
        +  "active"
        +]
      • addedInput schema / properties / status / type
        Added value: +"string"
      • removedInput schema / properties / type / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "rooms",
        -      "pair"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / type / enum
        Added value: +[
        +  "rooms",
        +  "pair"
        +]
      • addedInput schema / properties / type / type
        Added value: +"string"
    • Changedtwchat-list_messages13 fields changed
      • removedInput schema / properties / after_message_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / after_message_id / type
        Added value: +"integer"
      • removedInput schema / properties / before_message_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / before_message_id / type
        Added value: +"integer"
      • changedInput schema / properties / created_after / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / created_before / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
    • Changedtwchat-list_people6 fields changed
      • removedInput schema / properties / page_limit / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_limit / type
        Added value: +"integer"
      • removedInput schema / properties / page_offset / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_offset / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
    • Changedtwchat-send_dm1 field changed
      • changedInput schema / properties / user_id / description
        Previous value: -"The ID of the person to send the direct message to."New value: +"The ID of the person to send the direct message to. Must be somebody other than the authenticated user; see get_current_user."
    • Changedtwdesk-create_company20 fields changed
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / details / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / details / type
        Added value: +"string"
      • removedInput schema / properties / domains / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / domains / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / domains / type
        Added value: +"array"
      • removedInput schema / properties / industry / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / industry / type
        Added value: +"string"
      • removedInput schema / properties / kind / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "company",
        -      "group"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / kind / enum
        Added value: +[
        +  "company",
        +  "group"
        +]
      • addedInput schema / properties / kind / type
        Added value: +"string"
      • removedInput schema / properties / note / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / note / type
        Added value: +"string"
      • removedInput schema / properties / permission / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "own",
        -      "all"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / permission / enum
        Added value: +[
        +  "own",
        +  "all"
        +]
      • addedInput schema / properties / permission / type
        Added value: +"string"
      • removedInput schema / properties / website / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / website / type
        Added value: +"string"
      • changedInput schema / required
        Previous value: -[
        -  "name",
        -  "description",
        -  "details",
        -  "industry",
        -  "website",
        -  "permission",
        -  "kind",
        -  "note",
        -  "domains"
        -]New value: +[
        +  "name"
        +]
    • Changedtwdesk-create_customer27 fields changed
      • removedInput schema / properties / address / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / address / type
        Added value: +"string"
      • removedInput schema / properties / email / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / email / type
        Added value: +"string"
      • removedInput schema / properties / extraData / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / extraData / type
        Added value: +"string"
      • removedInput schema / properties / facebookURL / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / facebookURL / type
        Added value: +"string"
      • removedInput schema / properties / firstName / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / firstName / type
        Added value: +"string"
      • removedInput schema / properties / jobTitle / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / jobTitle / type
        Added value: +"string"
      • removedInput schema / properties / lastName / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / lastName / type
        Added value: +"string"
      • removedInput schema / properties / linkedinURL / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / linkedinURL / type
        Added value: +"string"
      • removedInput schema / properties / mobile / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mobile / type
        Added value: +"string"
      • removedInput schema / properties / notes / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / notes / type
        Added value: +"string"
      • removedInput schema / properties / organization / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / organization / type
        Added value: +"string"
      • removedInput schema / properties / phone / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / phone / type
        Added value: +"string"
      • removedInput schema / properties / twitterHandle / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / twitterHandle / type
        Added value: +"string"
      • removedInput schema / required
        Removed value: -[
        -  "firstName",
        -  "lastName",
        -  "email",
        -  "organization",
        -  "extraData",
        -  "notes",
        -  "linkedinURL",
        -  "facebookURL",
        -  "twitterHandle",
        -  "jobTitle",
        -  "phone",
        -  "mobile",
        -  "address"
        -]
    • Changedtwdesk-create_file4 fields changed
      • removedInput schema / properties / disposition / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "attachment",
        -      "attachment-inline"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / disposition / enum
        Added value: +[
        +  "attachment",
        +  "attachment-inline"
        +]
      • addedInput schema / properties / disposition / type
        Added value: +"string"
      • changedInput schema / required
        Previous value: -[
        -  "name",
        -  "mimeType",
        -  "data",
        -  "disposition"
        -]New value: +[
        +  "name",
        +  "mimeType",
        +  "data"
        +]
    • Changedtwdesk-create_helpdoc_article9 fields changed
      • removedInput schema / properties / contents / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / contents / type
        Added value: +"string"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / isPrivate / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / isPrivate / type
        Added value: +"boolean"
      • removedInput schema / properties / status / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / status / type
        Added value: +"string"
      • changedInput schema / required
        Previous value: -[
        -  "siteID",
        -  "title",
        -  "contents",
        -  "description",
        -  "status",
        -  "isPrivate"
        -]New value: +[
        +  "siteID",
        +  "title"
        +]
    • Changedtwdesk-create_priority3 fields changed
      • removedInput schema / properties / color / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / color / type
        Added value: +"string"
      • changedInput schema / required
        Previous value: -[
        -  "name",
        -  "color"
        -]New value: +[
        +  "name"
        +]
    • Changedtwdesk-create_status5 fields changed
      • removedInput schema / properties / color / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / color / type
        Added value: +"string"
      • removedInput schema / properties / displayOrder / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / displayOrder / type
        Added value: +"integer"
      • changedInput schema / required
        Previous value: -[
        -  "name",
        -  "color",
        -  "displayOrder"
        -]New value: +[
        +  "name"
        +]
    • Changedtwdesk-create_tag3 fields changed
      • removedInput schema / properties / color / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / color / type
        Added value: +"string"
      • changedInput schema / required
        Previous value: -[
        -  "name",
        -  "color"
        -]New value: +[
        +  "name"
        +]
    • Changedtwdesk-create_ticket27 fields changed
      • removedInput schema / properties / agentId / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / agentId / type
        Added value: +"integer"
      • removedInput schema / properties / bcc / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / bcc / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / bcc / type
        Added value: +"array"
      • removedInput schema / properties / cc / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / cc / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / cc / type
        Added value: +"array"
      • removedInput schema / properties / customerEmail / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / customerEmail / type
        Added value: +"string"
      • removedInput schema / properties / customerId / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / customerId / type
        Added value: +"integer"
      • removedInput schema / properties / files / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / files / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / files / type
        Added value: +"array"
      • removedInput schema / properties / notifyCustomer / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / notifyCustomer / type
        Added value: +"boolean"
      • removedInput schema / properties / priorityId / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / priorityId / type
        Added value: +"integer"
      • removedInput schema / properties / statusId / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / statusId / type
        Added value: +"integer"
      • removedInput schema / properties / tags / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tags / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tags / type
        Added value: +"array"
      • removedInput schema / properties / typeId / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / typeId / type
        Added value: +"integer"
      • changedInput schema / required
        Previous value: -[
        -  "subject",
        -  "body",
        -  "inboxId",
        -  "notifyCustomer",
        -  "bcc",
        -  "cc",
        -  "files",
        -  "tags",
        -  "priorityId",
        -  "statusId",
        -  "customerId",
        -  "customerEmail",
        -  "typeId",
        -  "agentId"
        -]New value: +[
        +  "subject",
        +  "body",
        +  "inboxId"
        +]
    • Changedtwdesk-create_ticket_type5 fields changed
      • removedInput schema / properties / displayOrder / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / displayOrder / type
        Added value: +"integer"
      • removedInput schema / properties / enabledForFutureInboxes / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / enabledForFutureInboxes / type
        Added value: +"boolean"
      • changedInput schema / required
        Previous value: -[
        -  "name",
        -  "displayOrder",
        -  "enabledForFutureInboxes"
        -]New value: +[
        +  "name"
        +]
    • Changedtwdesk-get_company4 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "fields"
        -]New value: +[
        +  "id"
        +]
    • Changedtwdesk-get_customer4 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "fields"
        -]New value: +[
        +  "id"
        +]
    • Changedtwdesk-get_helpdoc_article4 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "fields"
        -]New value: +[
        +  "id"
        +]
    • Changedtwdesk-get_helpdoc_site4 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "fields"
        -]New value: +[
        +  "id"
        +]
    • Changedtwdesk-get_inbox4 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "fields"
        -]New value: +[
        +  "id"
        +]
    • Changedtwdesk-get_priority4 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "fields"
        -]New value: +[
        +  "id"
        +]
    • Changedtwdesk-get_status4 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "fields"
        -]New value: +[
        +  "id"
        +]
    • Changedtwdesk-get_tag4 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "fields"
        -]New value: +[
        +  "id"
        +]
    • Changedtwdesk-get_ticket4 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "fields"
        -]New value: +[
        +  "id"
        +]
    • Changedtwdesk-get_ticket_type4 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "fields"
        -]New value: +[
        +  "id"
        +]
    • Changedtwdesk-get_user4 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "fields"
        -]New value: +[
        +  "id"
        +]
    • Changedtwdesk-list_companies24 fields changed
      • removedInput schema / properties / domains / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / domains / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / domains / type
        Added value: +"array"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / kind / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "company",
        -      "group"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / kind / enum
        Added value: +[
        +  "company",
        +  "group"
        +]
      • addedInput schema / properties / kind / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / orderBy / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / orderBy / type
        Added value: +"string"
      • removedInput schema / properties / orderDirection / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / orderDirection / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / orderDirection / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / pageSize / anyOf
        Removed value: -[
        -  {
        -    "maximum": 100,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageSize / maximum
        Added value: +100
      • addedInput schema / properties / pageSize / minimum
        Added value: +1
      • addedInput schema / properties / pageSize / type
        Added value: +"integer"
      • removedInput schema / required
        Removed value: -[
        -  "page",
        -  "pageSize",
        -  "orderBy",
        -  "orderDirection",
        -  "fields",
        -  "name",
        -  "domains",
        -  "kind"
        -]
    • Changedtwdesk-list_customers25 fields changed
      • removedInput schema / properties / companyIDs / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / companyIDs / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / companyIDs / type
        Added value: +"array"
      • removedInput schema / properties / companyNames / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / companyNames / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / companyNames / type
        Added value: +"array"
      • removedInput schema / properties / emails / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / emails / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / emails / type
        Added value: +"array"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / orderBy / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / orderBy / type
        Added value: +"string"
      • removedInput schema / properties / orderDirection / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / orderDirection / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / orderDirection / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / pageSize / anyOf
        Removed value: -[
        -  {
        -    "maximum": 100,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageSize / maximum
        Added value: +100
      • addedInput schema / properties / pageSize / minimum
        Added value: +1
      • addedInput schema / properties / pageSize / type
        Added value: +"integer"
      • removedInput schema / required
        Removed value: -[
        -  "page",
        -  "pageSize",
        -  "orderBy",
        -  "orderDirection",
        -  "fields",
        -  "companyIDs",
        -  "companyNames",
        -  "emails"
        -]
    • Changedtwdesk-list_helpdoc_sites22 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / name / type
        Added value: +"array"
      • removedInput schema / properties / orderBy / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / orderBy / type
        Added value: +"string"
      • removedInput schema / properties / orderDirection / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / orderDirection / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / orderDirection / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / pageSize / anyOf
        Removed value: -[
        -  {
        -    "maximum": 100,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageSize / maximum
        Added value: +100
      • addedInput schema / properties / pageSize / minimum
        Added value: +1
      • addedInput schema / properties / pageSize / type
        Added value: +"integer"
      • removedInput schema / properties / subdomain / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / subdomain / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / subdomain / type
        Added value: +"array"
      • removedInput schema / required
        Removed value: -[
        -  "page",
        -  "pageSize",
        -  "orderBy",
        -  "orderDirection",
        -  "fields",
        -  "name",
        -  "subdomain"
        -]
    • Changedtwdesk-list_inboxes22 fields changed
      • removedInput schema / properties / email / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / email / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / email / type
        Added value: +"array"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / name / type
        Added value: +"array"
      • removedInput schema / properties / orderBy / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / orderBy / type
        Added value: +"string"
      • removedInput schema / properties / orderDirection / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / orderDirection / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / orderDirection / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / pageSize / anyOf
        Removed value: -[
        -  {
        -    "maximum": 100,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageSize / maximum
        Added value: +100
      • addedInput schema / properties / pageSize / minimum
        Added value: +1
      • addedInput schema / properties / pageSize / type
        Added value: +"integer"
      • removedInput schema / required
        Removed value: -[
        -  "page",
        -  "pageSize",
        -  "orderBy",
        -  "orderDirection",
        -  "fields",
        -  "name",
        -  "email"
        -]
    • Changedtwdesk-list_priorities22 fields changed
      • removedInput schema / properties / color / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / color / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / color / type
        Added value: +"array"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / name / type
        Added value: +"array"
      • removedInput schema / properties / orderBy / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / orderBy / type
        Added value: +"string"
      • removedInput schema / properties / orderDirection / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / orderDirection / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / orderDirection / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / pageSize / anyOf
        Removed value: -[
        -  {
        -    "maximum": 100,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageSize / maximum
        Added value: +100
      • addedInput schema / properties / pageSize / minimum
        Added value: +1
      • addedInput schema / properties / pageSize / type
        Added value: +"integer"
      • removedInput schema / required
        Removed value: -[
        -  "page",
        -  "pageSize",
        -  "orderBy",
        -  "orderDirection",
        -  "fields",
        -  "name",
        -  "color"
        -]
    • Changedtwdesk-list_statuses25 fields changed
      • removedInput schema / properties / code / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / code / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / code / type
        Added value: +"array"
      • removedInput schema / properties / color / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / color / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / color / type
        Added value: +"array"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / name / type
        Added value: +"array"
      • removedInput schema / properties / orderBy / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / orderBy / type
        Added value: +"string"
      • removedInput schema / properties / orderDirection / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / orderDirection / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / orderDirection / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / pageSize / anyOf
        Removed value: -[
        -  {
        -    "maximum": 100,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageSize / maximum
        Added value: +100
      • addedInput schema / properties / pageSize / minimum
        Added value: +1
      • addedInput schema / properties / pageSize / type
        Added value: +"integer"
      • removedInput schema / required
        Removed value: -[
        -  "page",
        -  "pageSize",
        -  "orderBy",
        -  "orderDirection",
        -  "fields",
        -  "name",
        -  "color",
        -  "code"
        -]
    • Changedtwdesk-list_tags23 fields changed
      • removedInput schema / properties / color / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / color / type
        Added value: +"string"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / inboxIDs / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / inboxIDs / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / inboxIDs / type
        Added value: +"array"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / orderBy / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / orderBy / type
        Added value: +"string"
      • removedInput schema / properties / orderDirection / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / orderDirection / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / orderDirection / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / pageSize / anyOf
        Removed value: -[
        -  {
        -    "maximum": 100,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageSize / maximum
        Added value: +100
      • addedInput schema / properties / pageSize / minimum
        Added value: +1
      • addedInput schema / properties / pageSize / type
        Added value: +"integer"
      • removedInput schema / required
        Removed value: -[
        -  "page",
        -  "pageSize",
        -  "orderBy",
        -  "orderDirection",
        -  "fields",
        -  "name",
        -  "color",
        -  "inboxIDs"
        -]
    • Changedtwdesk-list_ticket_types22 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / inboxIDs / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / inboxIDs / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / inboxIDs / type
        Added value: +"array"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / name / type
        Added value: +"array"
      • removedInput schema / properties / orderBy / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / orderBy / type
        Added value: +"string"
      • removedInput schema / properties / orderDirection / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / orderDirection / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / orderDirection / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / pageSize / anyOf
        Removed value: -[
        -  {
        -    "maximum": 100,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageSize / maximum
        Added value: +100
      • addedInput schema / properties / pageSize / minimum
        Added value: +1
      • addedInput schema / properties / pageSize / type
        Added value: +"integer"
      • removedInput schema / required
        Removed value: -[
        -  "page",
        -  "pageSize",
        -  "orderBy",
        -  "orderDirection",
        -  "fields",
        -  "name",
        -  "inboxIDs"
        -]
    • Changedtwdesk-list_users30 fields changed
      • removedInput schema / properties / email / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / email / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / email / type
        Added value: +"array"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / firstName / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / firstName / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / firstName / type
        Added value: +"array"
      • removedInput schema / properties / inboxIDs / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / inboxIDs / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / inboxIDs / type
        Added value: +"array"
      • removedInput schema / properties / isPartTime / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / isPartTime / type
        Added value: +"boolean"
      • removedInput schema / properties / lastName / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / lastName / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / lastName / type
        Added value: +"array"
      • removedInput schema / properties / orderBy / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / orderBy / type
        Added value: +"string"
      • removedInput schema / properties / orderDirection / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / orderDirection / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / orderDirection / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / pageSize / anyOf
        Removed value: -[
        -  {
        -    "maximum": 100,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageSize / maximum
        Added value: +100
      • addedInput schema / properties / pageSize / minimum
        Added value: +1
      • addedInput schema / properties / pageSize / type
        Added value: +"integer"
      • removedInput schema / required
        Removed value: -[
        -  "page",
        -  "pageSize",
        -  "orderBy",
        -  "orderDirection",
        -  "fields",
        -  "firstName",
        -  "lastName",
        -  "email",
        -  "inboxIDs",
        -  "isPartTime"
        -]
    • Changedtwdesk-reply_ticket10 fields changed
      • removedInput schema / properties / bcc / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / bcc / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / bcc / type
        Added value: +"array"
      • removedInput schema / properties / cc / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / cc / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / cc / type
        Added value: +"array"
      • removedInput schema / properties / threadType / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "message",
        -      "note"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / threadType / enum
        Added value: +[
        +  "message",
        +  "note"
        +]
      • addedInput schema / properties / threadType / type
        Added value: +"string"
      • changedInput schema / required
        Previous value: -[
        -  "ticketID",
        -  "body",
        -  "threadType",
        -  "bcc",
        -  "cc"
        -]New value: +[
        +  "ticketID",
        +  "body"
        +]
    • Changedtwdesk-search_helpdoc_articles13 fields changed
      • removedInput schema / properties / categoryID / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / categoryID / type
        Added value: +"integer"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / pageSize / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageSize / type
        Added value: +"integer"
      • removedInput schema / properties / search / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search / type
        Added value: +"string"
      • removedInput schema / properties / siteID / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / siteID / type
        Added value: +"integer"
      • removedInput schema / properties / status / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / status / type
        Added value: +"string"
      • removedInput schema / required
        Removed value: -[
        -  "search",
        -  "status",
        -  "siteID",
        -  "categoryID",
        -  "page",
        -  "pageSize"
        -]
    • Changedtwdesk-search_tickets43 fields changed
      • removedInput schema / properties / companyIDs / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / companyIDs / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / companyIDs / type
        Added value: +"array"
      • changedInput schema / properties / createdAfter / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / createdBefore / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / customerIDs / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / customerIDs / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / customerIDs / type
        Added value: +"array"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedInput schema / properties / fields / description
        Previous value: -"Sparse fieldset: field names to include (e.g. [\"id\",\"name\"]). Omit to receive all fields."New value: +"The attributes to return for each ticket, from the listed names. Omit to receive the whole record, which carries every activity, message, file and timelog identifier the ticket has and is large enough that a full page of them may be truncated before it reaches you. Name the attributes you need. \"id\" is always returned."
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "activities",
        +    "agent",
        +    "bcc",
        +    "message",
        +    "cc",
        +    "contact",
        +    "customer",
        +    "files",
        +    "happinessSurveySentAt",
        +    "imagesHidden",
        +    "inbox",
        +    "isRead",
        +    "messageCount",
        +    "messages",
        +    "notifyCustomer",
        +    "originalRecipient",
        +    "previewText",
        +    "priority",
        +    "readonly",
        +    "resolutionTimeMins",
        +    "responseTimeMins",
        +    "source",
        +    "spam_rules",
        +    "spam_score",
        +    "status",
        +    "subject",
        +    "suggestions",
        +    "tags",
        +    "tasks",
        +    "timelogs",
        +    "type",
        +    "id",
        +    "createdAt",
        +    "updatedAt",
        +    "createdBy",
        +    "updatedBy",
        +    "state"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / inboxIDs / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / inboxIDs / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / inboxIDs / type
        Added value: +"array"
      • addedInput schema / properties / omitMerged
        Added value: +{
        +  "default": false,
        +  "description": "If true, exclude tickets that have been merged into another ticket. Merged tickets are not a status, so they cannot be filtered out with statusIDs. Defaults to false, which returns them alongside the rest.",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / orderBy / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / orderBy / type
        Added value: +"string"
      • removedInput schema / properties / orderDirection / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / orderDirection / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / orderDirection / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / pageSize / anyOf
        Removed value: -[
        -  {
        -    "maximum": 200,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageSize / maximum
        Added value: +200
      • addedInput schema / properties / pageSize / minimum
        Added value: +1
      • addedInput schema / properties / pageSize / type
        Added value: +"integer"
      • removedInput schema / properties / priorityIDs / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / priorityIDs / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / priorityIDs / type
        Added value: +"array"
      • removedInput schema / properties / search / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search / type
        Added value: +"string"
      • removedInput schema / properties / statusIDs / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / statusIDs / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / statusIDs / type
        Added value: +"array"
      • removedInput schema / properties / tagIDs / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tagIDs / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tagIDs / type
        Added value: +"array"
      • removedInput schema / properties / userIDs / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / userIDs / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / userIDs / type
        Added value: +"array"
      • removedInput schema / required
        Removed value: -[
        -  "page",
        -  "pageSize",
        -  "orderBy",
        -  "orderDirection",
        -  "fields",
        -  "search",
        -  "inboxIDs",
        -  "customerIDs",
        -  "companyIDs",
        -  "tagIDs",
        -  "statusIDs",
        -  "priorityIDs",
        -  "userIDs",
        -  "createdAfter",
        -  "createdBefore"
        -]
    • Changedtwdesk-update_company22 fields changed
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / details / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / details / type
        Added value: +"string"
      • removedInput schema / properties / domains / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / domains / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / domains / type
        Added value: +"array"
      • removedInput schema / properties / industry / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / industry / type
        Added value: +"string"
      • removedInput schema / properties / kind / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "company",
        -      "group"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / kind / enum
        Added value: +[
        +  "company",
        +  "group"
        +]
      • addedInput schema / properties / kind / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / note / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / note / type
        Added value: +"string"
      • removedInput schema / properties / permission / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "own",
        -      "all"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / permission / enum
        Added value: +[
        +  "own",
        +  "all"
        +]
      • addedInput schema / properties / permission / type
        Added value: +"string"
      • removedInput schema / properties / website / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / website / type
        Added value: +"string"
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "description",
        -  "details",
        -  "industry",
        -  "website",
        -  "permission",
        -  "kind",
        -  "note",
        -  "domains"
        -]New value: +[
        +  "id"
        +]
    • Changedtwdesk-update_customer27 fields changed
      • removedInput schema / properties / address / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / address / type
        Added value: +"string"
      • removedInput schema / properties / email / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / email / type
        Added value: +"string"
      • removedInput schema / properties / extraData / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / extraData / type
        Added value: +"string"
      • removedInput schema / properties / facebookURL / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / facebookURL / type
        Added value: +"string"
      • removedInput schema / properties / firstName / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / firstName / type
        Added value: +"string"
      • removedInput schema / properties / jobTitle / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / jobTitle / type
        Added value: +"string"
      • removedInput schema / properties / lastName / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / lastName / type
        Added value: +"string"
      • removedInput schema / properties / linkedinURL / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / linkedinURL / type
        Added value: +"string"
      • removedInput schema / properties / mobile / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / mobile / type
        Added value: +"string"
      • removedInput schema / properties / notes / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / notes / type
        Added value: +"string"
      • removedInput schema / properties / organization / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / organization / type
        Added value: +"string"
      • removedInput schema / properties / phone / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / phone / type
        Added value: +"string"
      • removedInput schema / properties / twitterHandle / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / twitterHandle / type
        Added value: +"string"
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "firstName",
        -  "lastName",
        -  "email",
        -  "organization",
        -  "extraData",
        -  "notes",
        -  "linkedinURL",
        -  "facebookURL",
        -  "twitterHandle",
        -  "jobTitle",
        -  "phone",
        -  "mobile",
        -  "address"
        -]New value: +[
        +  "id"
        +]
    • Changedtwdesk-update_helpdoc_article11 fields changed
      • removedInput schema / properties / contents / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / contents / type
        Added value: +"string"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / isPrivate / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / isPrivate / type
        Added value: +"boolean"
      • removedInput schema / properties / status / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / status / type
        Added value: +"string"
      • removedInput schema / properties / title / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / title / type
        Added value: +"string"
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "title",
        -  "contents",
        -  "description",
        -  "status",
        -  "isPrivate"
        -]New value: +[
        +  "id"
        +]
    • Changedtwdesk-update_priority5 fields changed
      • removedInput schema / properties / color / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / color / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "color"
        -]New value: +[
        +  "id"
        +]
    • Changedtwdesk-update_status7 fields changed
      • removedInput schema / properties / color / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / color / type
        Added value: +"string"
      • removedInput schema / properties / displayOrder / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / displayOrder / type
        Added value: +"integer"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "color",
        -  "displayOrder"
        -]New value: +[
        +  "id"
        +]
    • Changedtwdesk-update_tag5 fields changed
      • removedInput schema / properties / color / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / color / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "color"
        -]New value: +[
        +  "id"
        +]
    • Changedtwdesk-update_ticket27 fields changed
      • removedInput schema / properties / agentId / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / agentId / type
        Added value: +"integer"
      • removedInput schema / properties / bcc / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / bcc / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / bcc / type
        Added value: +"array"
      • removedInput schema / properties / body / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / body / type
        Added value: +"string"
      • removedInput schema / properties / cc / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / cc / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / cc / type
        Added value: +"array"
      • removedInput schema / properties / deleteTags / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / deleteTags / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / deleteTags / type
        Added value: +"array"
      • removedInput schema / properties / inboxId / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / inboxId / type
        Added value: +"integer"
      • removedInput schema / properties / priorityId / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / priorityId / type
        Added value: +"integer"
      • removedInput schema / properties / statusId / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / statusId / type
        Added value: +"integer"
      • removedInput schema / properties / subject / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / subject / type
        Added value: +"string"
      • removedInput schema / properties / tags / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tags / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tags / type
        Added value: +"array"
      • removedInput schema / properties / typeId / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / typeId / type
        Added value: +"integer"
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "subject",
        -  "body",
        -  "tags",
        -  "deleteTags",
        -  "bcc",
        -  "cc",
        -  "inboxId",
        -  "priorityId",
        -  "statusId",
        -  "typeId",
        -  "agentId"
        -]New value: +[
        +  "id"
        +]
    • Changedtwdesk-update_ticket_type7 fields changed
      • removedInput schema / properties / displayOrder / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / displayOrder / type
        Added value: +"integer"
      • removedInput schema / properties / enabledForFutureInboxes / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / enabledForFutureInboxes / type
        Added value: +"boolean"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "displayOrder",
        -  "enabledForFutureInboxes"
        -]New value: +[
        +  "id"
        +]
    • Changedtwprojects-add_project_file17 fields changed
      • removedInput schema / properties / auto_new_version / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / auto_new_version / type
        Added value: +"boolean"
      • removedInput schema / properties / category_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / category_id / type
        Added value: +"integer"
      • removedInput schema / properties / category_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / category_name / type
        Added value: +"string"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / notify_current_user / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / notify_current_user / type
        Added value: +"boolean"
      • removedInput schema / properties / private / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / private / type
        Added value: +"boolean"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
    • Changedtwprojects-add_project_member3 fields changed
      • removedInput schema / properties / user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / user_ids / type
        Added value: +"array"
    • Changedtwprojects-clone_project17 fields changed
      • removedInput schema / properties / company_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / company_id / type
        Added value: +"integer"
      • removedInput schema / properties / days_offset / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / days_offset / type
        Added value: +"integer"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / new_from_template / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / new_from_template / type
        Added value: +"boolean"
      • removedInput schema / properties / target_date / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / target_date / type
        Added value: +"string"
      • removedInput schema / properties / template_date_target / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "start",
        -      "end"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / template_date_target / enum
        Added value: +[
        +  "start",
        +  "end"
        +]
      • addedInput schema / properties / template_date_target / type
        Added value: +"string"
      • removedInput schema / properties / to_template / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / to_template / type
        Added value: +"boolean"
    • Changedtwprojects-count_milestones17 fields changed
      • removedInput schema / properties / due_after / anyOf
        Removed value: -[
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / due_after / format
        Added value: +"date"
      • addedInput schema / properties / due_after / type
        Added value: +"string"
      • removedInput schema / properties / due_before / anyOf
        Removed value: -[
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / due_before / format
        Added value: +"date"
      • addedInput schema / properties / due_before / type
        Added value: +"string"
      • removedInput schema / properties / match_all_tags / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / match_all_tags / type
        Added value: +"boolean"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / show_completed / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / show_completed / type
        Added value: +"boolean"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
    • Changedtwprojects-count_projects43 fields changed
      • removedInput schema / properties / company_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / company_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / company_ids / type
        Added value: +"array"
      • removedInput schema / properties / hide_observed / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / hide_observed / type
        Added value: +"boolean"
      • removedInput schema / properties / include_archived / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / include_archived / type
        Added value: +"boolean"
      • removedInput schema / properties / include_subcategories / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / include_subcategories / type
        Added value: +"boolean"
      • removedInput schema / properties / include_tentative / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / include_tentative / type
        Added value: +"boolean"
      • removedInput schema / properties / match_all_tags / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / match_all_tags / type
        Added value: +"boolean"
      • removedInput schema / properties / only_admin_access / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / only_admin_access / type
        Added value: +"boolean"
      • removedInput schema / properties / only_archived / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / only_archived / type
        Added value: +"boolean"
      • removedInput schema / properties / only_starred / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / only_starred / type
        Added value: +"boolean"
      • removedInput schema / properties / project_category_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_category_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_category_ids / type
        Added value: +"array"
      • removedInput schema / properties / project_healths / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "good",
        -        "ok",
        -        "bad",
        -        "not_set"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_healths / items
        Added value: +{
        +  "enum": [
        +    "good",
        +    "ok",
        +    "bad",
        +    "not_set"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / project_healths / type
        Added value: +"array"
      • removedInput schema / properties / project_owner_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_owner_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_owner_ids / type
        Added value: +"array"
      • removedInput schema / properties / project_statuses / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "active",
        -        "current",
        -        "late",
        -        "upcoming",
        -        "completed",
        -        "deleted"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_statuses / items
        Added value: +{
        +  "enum": [
        +    "active",
        +    "current",
        +    "late",
        +    "upcoming",
        +    "completed",
        +    "deleted"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / project_statuses / type
        Added value: +"array"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / team_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / team_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / team_ids / type
        Added value: +"array"
      • changedInput schema / properties / updated_after / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / user_ids / type
        Added value: +"array"
    • Changedtwprojects-count_tasks46 fields changed
      • removedInput schema / properties / assignee_user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / assignee_user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / assignee_user_ids / type
        Added value: +"array"
      • changedInput schema / properties / completed_after / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / completed_before / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / created_after / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / created_before / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / created_by_user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / created_by_user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / created_by_user_ids / type
        Added value: +"array"
      • removedInput schema / properties / date_filter / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "anytime",
        -      "overdue",
        -      "today",
        -      "tomorrow",
        -      "yesterday",
        -      "thisweek",
        -      "upcoming",
        -      "started",
        -      "within7",
        -      "within14",
        -      "within30",
        -      "within365",
        -      "nodate",
        -      "noduedate",
        -      "nostartdate",
        -      "hasdate"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / date_filter / enum
        Added value: +[
        +  "anytime",
        +  "overdue",
        +  "today",
        +  "tomorrow",
        +  "yesterday",
        +  "thisweek",
        +  "upcoming",
        +  "started",
        +  "within7",
        +  "within14",
        +  "within30",
        +  "within365",
        +  "nodate",
        +  "noduedate",
        +  "nostartdate",
        +  "hasdate"
        +]
      • addedInput schema / properties / date_filter / type
        Added value: +"string"
      • removedInput schema / properties / due_after / anyOf
        Removed value: -[
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / due_after / format
        Added value: +"date"
      • addedInput schema / properties / due_after / type
        Added value: +"string"
      • removedInput schema / properties / due_before / anyOf
        Removed value: -[
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / due_before / format
        Added value: +"date"
      • addedInput schema / properties / due_before / type
        Added value: +"string"
      • removedInput schema / properties / exclude_assignee_user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / exclude_assignee_user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / exclude_assignee_user_ids / type
        Added value: +"array"
      • removedInput schema / properties / match_all_tags / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / match_all_tags / type
        Added value: +"boolean"
      • removedInput schema / properties / only_completed / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / only_completed / type
        Added value: +"boolean"
      • removedInput schema / properties / only_unassigned / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / only_unassigned / type
        Added value: +"boolean"
      • removedInput schema / properties / only_unplanned / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / only_unplanned / type
        Added value: +"boolean"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / show_completed / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / show_completed / type
        Added value: +"boolean"
      • removedInput schema / properties / start_after / anyOf
        Removed value: -[
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / start_after / format
        Added value: +"date"
      • addedInput schema / properties / start_after / type
        Added value: +"string"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / tasklist_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tasklist_id / type
        Added value: +"integer"
      • changedInput schema / properties / updated_after / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / updated_before / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
    • Changedtwprojects-count_timelogs29 fields changed
      • removedInput schema / properties / assigned_company_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / assigned_company_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / assigned_company_ids / type
        Added value: +"array"
      • removedInput schema / properties / assigned_team_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / assigned_team_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / assigned_team_ids / type
        Added value: +"array"
      • removedInput schema / properties / assigned_user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / assigned_user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / assigned_user_ids / type
        Added value: +"array"
      • removedInput schema / properties / billable_type / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "all",
        -      "billable",
        -      "nonbillable"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / billable_type / enum
        Added value: +[
        +  "all",
        +  "billable",
        +  "nonbillable"
        +]
      • addedInput schema / properties / billable_type / type
        Added value: +"string"
      • changedInput schema / properties / end_date / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / invoiced_type / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "all",
        -      "invoiced",
        -      "noninvoiced"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / invoiced_type / enum
        Added value: +[
        +  "all",
        +  "invoiced",
        +  "noninvoiced"
        +]
      • addedInput schema / properties / invoiced_type / type
        Added value: +"string"
      • removedInput schema / properties / match_all_tags / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / match_all_tags / type
        Added value: +"boolean"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
      • changedInput schema / properties / start_date / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / task_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / task_id / type
        Added value: +"integer"
      • removedInput schema / properties / ticketIds / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / ticketIds / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / ticketIds / type
        Added value: +"array"
    • Changedtwprojects-create_allocation12 fields changed
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "maxLength": 255,
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / maxLength
        Added value: +255
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / ignore_collisions / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / ignore_collisions / type
        Added value: +"boolean"
      • removedInput schema / properties / inform_of_over_allocation / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / inform_of_over_allocation / type
        Added value: +"boolean"
      • removedInput schema / properties / is_billable / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / is_billable / type
        Added value: +"boolean"
      • removedInput schema / properties / linked_task_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / linked_task_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / linked_task_ids / type
        Added value: +"array"
    • Changedtwprojects-create_comment9 fields changed
      • removedInput schema / properties / attachment_refs / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / attachment_refs / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / attachment_refs / type
        Added value: +"array"
      • removedInput schema / properties / content_type / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "TEXT",
        -      "HTML"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / content_type / enum
        Added value: +[
        +  "TEXT",
        +  "HTML"
        +]
      • addedInput schema / properties / content_type / type
        Added value: +"string"
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "description": "Notify all project members.",
        -    "enum": [
        -      "all"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "description": "true notifies all followers of the entity this comment is related to. false notifies nobody.",
        -    "type": "boolean"
        -  },
        -  {
        -    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        -    "items": {
        -      "type": "integer"
        -    },
        -    "minItems": 1,
        -    "type": "array"
        -  },
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "job_role_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 4,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "job_role_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "Notify all project members.",
        +    "enum": [
        +      "all"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "description": "true notifies all followers of the entity this comment is related to. false notifies nobody.",
        +    "type": "boolean"
        +  },
        +  {
        +    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / notify_current_user / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / notify_current_user / type
        Added value: +"boolean"
    • Changedtwprojects-create_company33 fields changed
      • removedInput schema / properties / address_one / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / address_one / type
        Added value: +"string"
      • removedInput schema / properties / address_two / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / address_two / type
        Added value: +"string"
      • removedInput schema / properties / city / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / city / type
        Added value: +"string"
      • removedInput schema / properties / country_code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / country_code / type
        Added value: +"string"
      • removedInput schema / properties / email_one / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / email_one / type
        Added value: +"string"
      • removedInput schema / properties / email_three / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / email_three / type
        Added value: +"string"
      • removedInput schema / properties / email_two / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / email_two / type
        Added value: +"string"
      • removedInput schema / properties / fax / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fax / type
        Added value: +"string"
      • removedInput schema / properties / industry_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / industry_id / type
        Added value: +"integer"
      • removedInput schema / properties / manager_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / manager_id / type
        Added value: +"integer"
      • removedInput schema / properties / phone / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / phone / type
        Added value: +"string"
      • removedInput schema / properties / profile / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / profile / type
        Added value: +"string"
      • removedInput schema / properties / state / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / state / type
        Added value: +"string"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / website / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / website / type
        Added value: +"string"
      • removedInput schema / properties / zip / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / zip / type
        Added value: +"string"
    • Changedtwprojects-create_custom_field14 fields changed
      • removedInput schema / properties / currency_code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / currency_code / type
        Added value: +"string"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / formula / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / formula / type
        Added value: +"string"
      • changedInput schema / properties / options / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "choices": {
        -        "items": {
        -          "properties": {
        -            "color": {
        -              "description": "The hex color code for the choice (e.g. #ff0000).",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "The display value of the choice. For 'dropdown' fields, this is the value that will be set on entities when this choice is selected.",
        -              "type": "string"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "color": {
        -        "description": "The hex color code for the rating icons (e.g. #ff0000).",
        -        "type": "string"
        -      },
        -      "icon": {
        -        "description": "The icon to use for the rating, e.g. 'star', 'heart', etc.",
        -        "type": "string"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "decimals": {
        -        "description": "The number of decimal places to allow for number-decimal custom fields.",
        -        "type": "integer"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "choices": {
        +        "items": {
        +          "properties": {
        +            "color": {
        +              "description": "The hex color code for the choice (e.g. #ff0000).",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "The display value of the choice. For 'dropdown' fields, this is the value that will be set on entities when this choice is selected.",
        +              "type": "string"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "color": {
        +        "description": "The hex color code for the rating icons (e.g. #ff0000).",
        +        "type": "string"
        +      },
        +      "icon": {
        +        "description": "The icon to use for the rating, e.g. 'star', 'heart', etc.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "decimals": {
        +        "description": "The number of decimal places to allow for number-decimal custom fields.",
        +        "type": "integer"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
      • removedInput schema / properties / required / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / required / type
        Added value: +"boolean"
      • removedInput schema / properties / unit / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "currency",
        -      "duration",
        -      "date",
        -      "percent",
        -      "currency/duration",
        -      "duration/currency"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / unit / enum
        Added value: +[
        +  "currency",
        +  "duration",
        +  "date",
        +  "percent",
        +  "currency/duration",
        +  "duration/currency"
        +]
      • addedInput schema / properties / unit / type
        Added value: +"string"
    • Changedtwprojects-create_custom_field_value6 fields changed
      • removedInput schema / properties / country_code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / country_code / type
        Added value: +"string"
      • removedInput schema / properties / currency_code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / currency_code / type
        Added value: +"string"
      • changedInput schema / properties / value / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "items": {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "number"
        -        }
        -      ]
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "items": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        }
        +      ]
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / required
        Previous value: -[
        -  "entity",
        -  "entity_id",
        -  "custom_field_id",
        -  "value"
        -]New value: +[
        +  "entity",
        +  "entity_id",
        +  "custom_field_id"
        +]
    • Changedtwprojects-create_custom_item6 fields changed
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / label_plural / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / label_plural / type
        Added value: +"string"
      • removedInput schema / properties / label_singular / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / label_singular / type
        Added value: +"string"
    • Changedtwprojects-create_custom_item_field10 fields changed
      • removedInput schema / properties / definition / anyOf
        Removed value: -[
        -  {
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / definition / type
        Added value: +"object"
      • removedInput schema / properties / options / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "properties": {
        -        "color": {
        -          "type": "string"
        -        },
        -        "label": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "label"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / options / items
        Added value: +{
        +  "properties": {
        +    "color": {
        +      "type": "string"
        +    },
        +    "label": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "label"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / options / type
        Added value: +"array"
      • removedInput schema / properties / position_after_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / position_after_id / type
        Added value: +"integer"
      • removedInput schema / properties / tw_type / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "status"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tw_type / enum
        Added value: +[
        +  "status"
        +]
      • addedInput schema / properties / tw_type / type
        Added value: +"string"
    • Changedtwprojects-create_custom_item_record7 fields changed
      • removedInput schema / properties / field_values / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "properties": {
        -        "field_name": {
        -          "description": "Display name of the field, case-insensitive.",
        -          "type": "string"
        -        },
        -        "value": {
        -          "anyOf": [
        -            {
        -              "type": "string"
        -            },
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "boolean"
        -            },
        -            {
        -              "items": {
        -                "anyOf": [
        -                  {
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "number"
        -                  }
        -                ]
        -              },
        -              "type": "array"
        -            },
        -            {
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Value to set. Type depends on the field โ€” see the tool description."
        -        }
        -      },
        -      "required": [
        -        "field_name",
        -        "value"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / field_values / items
        Added value: +{
        +  "properties": {
        +    "field_name": {
        +      "description": "Display name of the field, case-insensitive.",
        +      "type": "string"
        +    },
        +    "value": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "items": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "number"
        +              }
        +            ]
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "object"
        +        }
        +      ],
        +      "description": "Value to set. Type depends on the field โ€” see the tool description."
        +    }
        +  },
        +  "required": [
        +    "field_name"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / field_values / type
        Added value: +"array"
      • removedInput schema / properties / position_after_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / position_after_id / type
        Added value: +"integer"
      • removedInput schema / properties / section_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / section_id / type
        Added value: +"integer"
    • Changedtwprojects-create_link10 fields changed
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "description": "Notify all project members.",
        -    "enum": [
        -      "all"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "description": "true is the same as \"all\": notify all project members. false notifies nobody.",
        -    "type": "boolean"
        -  },
        -  {
        -    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        -    "items": {
        -      "type": "integer"
        -    },
        -    "minItems": 1,
        -    "type": "array"
        -  },
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "job_role_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 4,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "job_role_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "Notify all project members.",
        +    "enum": [
        +      "all"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "description": "true is the same as \"all\": notify all project members. false notifies nobody.",
        +    "type": "boolean"
        +  },
        +  {
        +    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / notify_current_user / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / notify_current_user / type
        Added value: +"boolean"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / title / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / title / type
        Added value: +"string"
    • Changedtwprojects-create_message6 fields changed
      • removedInput schema / properties / attachment_refs / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / attachment_refs / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / attachment_refs / type
        Added value: +"array"
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "description": "Notify all project members.",
        -    "enum": [
        -      "all"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "description": "true is the same as \"all\": notify all project members. false notifies nobody.",
        -    "type": "boolean"
        -  },
        -  {
        -    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        -    "items": {
        -      "type": "integer"
        -    },
        -    "minItems": 1,
        -    "type": "array"
        -  },
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "job_role_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 4,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "job_role_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "Notify all project members.",
        +    "enum": [
        +      "all"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "description": "true is the same as \"all\": notify all project members. false notifies nobody.",
        +    "type": "boolean"
        +  },
        +  {
        +    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / notify_current_user / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / notify_current_user / type
        Added value: +"boolean"
    • Changedtwprojects-create_message_reply3 fields changed
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "description": "Notify all project members.",
        -    "enum": [
        -      "all"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "description": "true is the same as \"all\": notify all project members. false notifies nobody.",
        -    "type": "boolean"
        -  },
        -  {
        -    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        -    "items": {
        -      "type": "integer"
        -    },
        -    "minItems": 1,
        -    "type": "array"
        -  },
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "job_role_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 4,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "job_role_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "Notify all project members.",
        +    "enum": [
        +      "all"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "description": "true is the same as \"all\": notify all project members. false notifies nobody.",
        +    "type": "boolean"
        +  },
        +  {
        +    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / notify_current_user / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / notify_current_user / type
        Added value: +"boolean"
    • Changedtwprojects-create_milestone8 fields changed
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / tasklist_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tasklist_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tasklist_ids / type
        Added value: +"array"
    • Changedtwprojects-create_notebook5 fields changed
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
    • Changedtwprojects-create_project15 fields changed
      • removedInput schema / properties / category_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / category_id / type
        Added value: +"integer"
      • removedInput schema / properties / company_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / company_id / type
        Added value: +"integer"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / end_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / end_at / type
        Added value: +"string"
      • removedInput schema / properties / owned_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / owned_id / type
        Added value: +"integer"
      • removedInput schema / properties / start_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / start_at / type
        Added value: +"string"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
    • Changedtwprojects-create_project_category4 fields changed
      • removedInput schema / properties / color / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / color / type
        Added value: +"string"
      • removedInput schema / properties / parent_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / parent_id / type
        Added value: +"integer"
    • Changedtwprojects-create_project_template15 fields changed
      • removedInput schema / properties / category_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / category_id / type
        Added value: +"integer"
      • removedInput schema / properties / company_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / company_id / type
        Added value: +"integer"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / end_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / end_at / type
        Added value: +"string"
      • removedInput schema / properties / owned_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / owned_id / type
        Added value: +"integer"
      • removedInput schema / properties / start_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / start_at / type
        Added value: +"string"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
    • Changedtwprojects-create_skill3 fields changed
      • removedInput schema / properties / user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / user_ids / type
        Added value: +"array"
    • Changedtwprojects-create_tag4 fields changed
      • removedInput schema / properties / color / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / color / type
        Added value: +"string"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
    • Changedtwprojects-create_task55 fields changed
      • removedInput schema / properties / assignees / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "job_role_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 4,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "job_role_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / assignees / maxProperties
        Added value: +4
      • addedInput schema / properties / assignees / minProperties
        Added value: +1
      • addedInput schema / properties / assignees / properties
        Added value: +{
        +  "company_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "job_role_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "team_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "user_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +}
      • addedInput schema / properties / assignees / type
        Added value: +"object"
      • removedInput schema / properties / attachment_file_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / attachment_file_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / attachment_file_ids / type
        Added value: +"array"
      • removedInput schema / properties / attachment_refs / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / attachment_refs / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / attachment_refs / type
        Added value: +"array"
      • removedInput schema / properties / change_followers / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "job_role_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 4,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "job_role_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / change_followers / maxProperties
        Added value: +4
      • addedInput schema / properties / change_followers / minProperties
        Added value: +1
      • addedInput schema / properties / change_followers / properties
        Added value: +{
        +  "company_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "job_role_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "team_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "user_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +}
      • addedInput schema / properties / change_followers / type
        Added value: +"object"
      • removedInput schema / properties / comment_followers / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "job_role_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 4,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "job_role_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / comment_followers / maxProperties
        Added value: +4
      • addedInput schema / properties / comment_followers / minProperties
        Added value: +1
      • addedInput schema / properties / comment_followers / properties
        Added value: +{
        +  "company_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "job_role_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "team_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "user_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +}
      • addedInput schema / properties / comment_followers / type
        Added value: +"object"
      • removedInput schema / properties / complete_followers / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "job_role_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 4,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "job_role_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / complete_followers / maxProperties
        Added value: +4
      • addedInput schema / properties / complete_followers / minProperties
        Added value: +1
      • addedInput schema / properties / complete_followers / properties
        Added value: +{
        +  "company_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "job_role_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "team_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "user_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +}
      • addedInput schema / properties / complete_followers / type
        Added value: +"object"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / due_date / anyOf
        Removed value: -[
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / due_date / format
        Added value: +"date"
      • addedInput schema / properties / due_date / type
        Added value: +"string"
      • removedInput schema / properties / estimated_minutes / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / estimated_minutes / type
        Added value: +"integer"
      • removedInput schema / properties / parent_task_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / parent_task_id / type
        Added value: +"integer"
      • removedInput schema / properties / predecessors / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "properties": {
        -        "task_id": {
        -          "description": "The ID of the predecessor task.",
        -          "type": "integer"
        -        },
        -        "type": {
        -          "description": "'start' means this task can complete when the predecessor starts; 'complete' means this task can complete when the predecessor completes.",
        -          "enum": [
        -            "start",
        -            "complete"
        -          ],
        -          "type": "string"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / predecessors / items
        Added value: +{
        +  "properties": {
        +    "task_id": {
        +      "description": "The ID of the predecessor task.",
        +      "type": "integer"
        +    },
        +    "type": {
        +      "description": "'start' means this task can complete when the predecessor starts; 'complete' means this task can complete when the predecessor completes.",
        +      "enum": [
        +        "start",
        +        "complete"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / predecessors / type
        Added value: +"array"
      • removedInput schema / properties / priority / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "low",
        -      "medium",
        -      "high"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / priority / enum
        Added value: +[
        +  "low",
        +  "medium",
        +  "high"
        +]
      • addedInput schema / properties / priority / type
        Added value: +"string"
      • removedInput schema / properties / progress / anyOf
        Removed value: -[
        -  {
        -    "maximum": 100,
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / progress / maximum
        Added value: +100
      • addedInput schema / properties / progress / minimum
        Added value: +0
      • addedInput schema / properties / progress / type
        Added value: +"integer"
      • removedInput schema / properties / stage_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / stage_id / type
        Added value: +"integer"
      • removedInput schema / properties / start_date / anyOf
        Removed value: -[
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / start_date / format
        Added value: +"date"
      • addedInput schema / properties / start_date / type
        Added value: +"string"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / workflow_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / workflow_id / type
        Added value: +"integer"
    • Changedtwprojects-create_tasklist4 fields changed
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / milestone_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / milestone_id / type
        Added value: +"integer"
    • Changedtwprojects-create_team13 fields changed
      • removedInput schema / properties / company_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / company_id / type
        Added value: +"integer"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / handle / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / handle / type
        Added value: +"string"
      • removedInput schema / properties / parent_team_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / parent_team_id / type
        Added value: +"integer"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
      • removedInput schema / properties / user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / user_ids / type
        Added value: +"array"
    • Changedtwprojects-create_timelog15 fields changed
      • removedInput schema / properties / billable / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / billable / type
        Added value: +"boolean"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / is_utc / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / is_utc / type
        Added value: +"boolean"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / task_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / task_id / type
        Added value: +"integer"
      • removedInput schema / properties / user_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / user_id / type
        Added value: +"integer"
    • Changedtwprojects-create_timer12 fields changed
      • removedInput schema / properties / billable / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / billable / type
        Added value: +"boolean"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / running / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / running / type
        Added value: +"boolean"
      • removedInput schema / properties / seconds / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / seconds / type
        Added value: +"integer"
      • removedInput schema / properties / stop_running_timers / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / stop_running_timers / type
        Added value: +"boolean"
      • removedInput schema / properties / task_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / task_id / type
        Added value: +"integer"
    • Changedtwprojects-create_user8 fields changed
      • removedInput schema / properties / admin / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / admin / type
        Added value: +"boolean"
      • removedInput schema / properties / company_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / company_id / type
        Added value: +"integer"
      • removedInput schema / properties / title / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / title / type
        Added value: +"string"
      • removedInput schema / properties / type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / type / type
        Added value: +"string"
    • Changedtwprojects-get_allocation5 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "project",
        -        "assignedUser",
        -        "title",
        -        "description",
        -        "startedAt",
        -        "endedAt",
        -        "duration",
        -        "availableDuration",
        -        "allocatedDuration",
        -        "hoursPerDay",
        -        "secondsPerDay",
        -        "color",
        -        "status",
        -        "isBillable",
        -        "overAllocated",
        -        "recurringRule",
        -        "linkedTaskIDs",
        -        "linkedTaskEstimatedTime",
        -        "financialDetails",
        -        "canViewFinancialDetails",
        -        "createdAt",
        -        "createdBy",
        -        "updatedAt",
        -        "updatedBy",
        -        "deletedAt",
        -        "deletedBy"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "project",
        +    "assignedUser",
        +    "title",
        +    "description",
        +    "startedAt",
        +    "endedAt",
        +    "duration",
        +    "availableDuration",
        +    "allocatedDuration",
        +    "hoursPerDay",
        +    "secondsPerDay",
        +    "color",
        +    "status",
        +    "isBillable",
        +    "overAllocated",
        +    "recurringRule",
        +    "linkedTaskIDs",
        +    "linkedTaskEstimatedTime",
        +    "financialDetails",
        +    "canViewFinancialDetails",
        +    "createdAt",
        +    "createdBy",
        +    "updatedAt",
        +    "updatedBy",
        +    "deletedAt",
        +    "deletedBy"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / include_financial_details / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / include_financial_details / type
        Added value: +"boolean"
    • Changedtwprojects-get_comment3 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "body",
        -        "htmlBody",
        -        "contentType",
        -        "object",
        -        "project",
        -        "postedBy",
        -        "postedDateTime",
        -        "lastEditedBy",
        -        "dateLastEdited",
        -        "deleted",
        -        "deletedBy",
        -        "dateDeleted"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "body",
        +    "htmlBody",
        +    "contentType",
        +    "object",
        +    "project",
        +    "postedBy",
        +    "postedDateTime",
        +    "lastEditedBy",
        +    "dateLastEdited",
        +    "deleted",
        +    "deletedBy",
        +    "dateDeleted"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
    • Changedtwprojects-get_company3 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "addressOne",
        -        "addressTwo",
        -        "city",
        -        "countryCode",
        -        "emailOne",
        -        "emailTwo",
        -        "emailThree",
        -        "fax",
        -        "name",
        -        "phone",
        -        "profileText",
        -        "state",
        -        "website",
        -        "zip",
        -        "clientManagedBy",
        -        "industry",
        -        "tags",
        -        "createdAt",
        -        "updatedAt",
        -        "status"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "addressOne",
        +    "addressTwo",
        +    "city",
        +    "countryCode",
        +    "emailOne",
        +    "emailTwo",
        +    "emailThree",
        +    "fax",
        +    "name",
        +    "phone",
        +    "profileText",
        +    "state",
        +    "website",
        +    "zip",
        +    "clientManagedBy",
        +    "industry",
        +    "tags",
        +    "createdAt",
        +    "updatedAt",
        +    "status"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
    • Changedtwprojects-get_jobrole3 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "isActive",
        -        "createdByUser",
        -        "createdAt",
        -        "updatedByUser",
        -        "updatedAt",
        -        "deletedByUser",
        -        "deletedAt",
        -        "users",
        -        "primaryUsers"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "isActive",
        +    "createdByUser",
        +    "createdAt",
        +    "updatedByUser",
        +    "updatedAt",
        +    "deletedByUser",
        +    "deletedAt",
        +    "users",
        +    "primaryUsers"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
    • Changedtwprojects-get_message3 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "title",
        -        "project",
        -        "tags",
        -        "lastReply",
        -        "replyStatus",
        -        "status",
        -        "body",
        -        "author",
        -        "message",
        -        "meta",
        -        "createdAt",
        -        "updatedAt"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "title",
        +    "project",
        +    "tags",
        +    "lastReply",
        +    "replyStatus",
        +    "status",
        +    "body",
        +    "author",
        +    "message",
        +    "meta",
        +    "createdAt",
        +    "updatedAt"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
    • Changedtwprojects-get_message_reply3 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "body",
        -        "author",
        -        "message",
        -        "meta",
        -        "createdAt",
        -        "updatedAt",
        -        "status"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "body",
        +    "author",
        +    "message",
        +    "meta",
        +    "createdAt",
        +    "updatedAt",
        +    "status"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
    • Changedtwprojects-get_milestone3 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "description",
        -        "deadline",
        -        "project",
        -        "tasklists",
        -        "tags",
        -        "responsibleParties",
        -        "createdOn",
        -        "lastChangedOn",
        -        "deletedOn",
        -        "completedOn",
        -        "completedBy",
        -        "completed",
        -        "status"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "description",
        +    "deadline",
        +    "project",
        +    "tasklists",
        +    "tags",
        +    "responsibleParties",
        +    "createdOn",
        +    "lastChangedOn",
        +    "deletedOn",
        +    "completedOn",
        +    "completedBy",
        +    "completed",
        +    "status"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
    • Changedtwprojects-get_notebook3 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "description",
        -        "contents",
        -        "type",
        -        "project",
        -        "tags",
        -        "createdAt",
        -        "createdBy",
        -        "updatedAt",
        -        "updatedBy",
        -        "deletedAt",
        -        "deletedBy",
        -        "deleted"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "description",
        +    "contents",
        +    "type",
        +    "project",
        +    "tags",
        +    "createdAt",
        +    "createdBy",
        +    "updatedAt",
        +    "updatedBy",
        +    "deletedAt",
        +    "deletedBy",
        +    "deleted"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
    • Changedtwprojects-get_project3 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "description",
        -        "name",
        -        "startAt",
        -        "endAt",
        -        "category",
        -        "company",
        -        "projectOwner",
        -        "tags",
        -        "update",
        -        "lastWorkedOn",
        -        "createdAt",
        -        "createdBy",
        -        "updatedAt",
        -        "updatedBy",
        -        "completedAt",
        -        "completedBy",
        -        "status",
        -        "isBillable",
        -        "type"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "description",
        +    "name",
        +    "startAt",
        +    "endAt",
        +    "category",
        +    "company",
        +    "projectOwner",
        +    "tags",
        +    "update",
        +    "lastWorkedOn",
        +    "createdAt",
        +    "createdBy",
        +    "updatedAt",
        +    "updatedBy",
        +    "completedAt",
        +    "completedBy",
        +    "status",
        +    "isBillable",
        +    "type"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
    • Changedtwprojects-get_project_category3 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "color",
        -        "parent",
        -        "count"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "color",
        +    "parent",
        +    "count"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
    • Changedtwprojects-get_task3 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "description",
        -        "descriptionContentType",
        -        "priority",
        -        "progress",
        -        "startDate",
        -        "dueDate",
        -        "estimateMinutes",
        -        "tasklist",
        -        "parentTask",
        -        "assignees",
        -        "tags",
        -        "predecessors",
        -        "subTaskIds",
        -        "workflowStages",
        -        "createdBy",
        -        "createdAt",
        -        "updatedBy",
        -        "updatedAt",
        -        "deletedBy",
        -        "deletedAt",
        -        "completedBy",
        -        "completedAt",
        -        "status"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "description",
        +    "descriptionContentType",
        +    "priority",
        +    "progress",
        +    "startDate",
        +    "dueDate",
        +    "estimateMinutes",
        +    "tasklist",
        +    "parentTask",
        +    "assignees",
        +    "tags",
        +    "predecessors",
        +    "subTaskIds",
        +    "workflowStages",
        +    "createdBy",
        +    "createdAt",
        +    "updatedBy",
        +    "updatedAt",
        +    "deletedBy",
        +    "deletedAt",
        +    "completedBy",
        +    "completedAt",
        +    "status"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
    • Changedtwprojects-get_tasklist3 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "description",
        -        "project",
        -        "milestone",
        -        "createdAt",
        -        "updatedAt",
        -        "status"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "description",
        +    "project",
        +    "milestone",
        +    "createdAt",
        +    "updatedAt",
        +    "status"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
    • Changedtwprojects-get_timelog3 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "description",
        -        "billable",
        -        "minutes",
        -        "timeLogged",
        -        "user",
        -        "task",
        -        "project",
        -        "tags",
        -        "deskTicketId",
        -        "createdAt",
        -        "loggedBy",
        -        "updatedAt",
        -        "updatedBy",
        -        "deletedAt",
        -        "deletedBy",
        -        "deleted"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "description",
        +    "billable",
        +    "minutes",
        +    "timeLogged",
        +    "user",
        +    "task",
        +    "project",
        +    "tags",
        +    "deskTicketId",
        +    "createdAt",
        +    "loggedBy",
        +    "updatedAt",
        +    "updatedBy",
        +    "deletedAt",
        +    "deletedBy",
        +    "deleted"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
    • Changedtwprojects-get_timer3 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "description",
        -        "running",
        -        "billable",
        -        "user",
        -        "task",
        -        "project",
        -        "timelog",
        -        "createdAt",
        -        "updatedAt",
        -        "deletedAt",
        -        "deleted",
        -        "duration",
        -        "lastStartedAt",
        -        "timerLastIntervalEnd",
        -        "intervals"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "description",
        +    "running",
        +    "billable",
        +    "user",
        +    "task",
        +    "project",
        +    "timelog",
        +    "createdAt",
        +    "updatedAt",
        +    "deletedAt",
        +    "deleted",
        +    "duration",
        +    "lastStartedAt",
        +    "timerLastIntervalEnd",
        +    "intervals"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
    • Changedtwprojects-get_user3 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "firstName",
        -        "lastName",
        -        "title",
        -        "email",
        -        "isAdmin",
        -        "type",
        -        "userCost",
        -        "userRate",
        -        "company",
        -        "jobRoles",
        -        "skills",
        -        "workingHour",
        -        "lengthOfDay",
        -        "deleted",
        -        "createdBy",
        -        "createdAt",
        -        "updatedBy",
        -        "updatedAt"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "firstName",
        +    "lastName",
        +    "title",
        +    "email",
        +    "isAdmin",
        +    "type",
        +    "userCost",
        +    "userRate",
        +    "company",
        +    "jobRoles",
        +    "skills",
        +    "workingHour",
        +    "lengthOfDay",
        +    "deleted",
        +    "createdBy",
        +    "createdAt",
        +    "updatedBy",
        +    "updatedAt"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
    • Changedtwprojects-get_workflow3 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "defaultWorkflow"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "defaultWorkflow"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
    • Changedtwprojects-get_workflow_stage3 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "workflow"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "workflow"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
    • Changedtwprojects-list_activities36 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • changedInput schema / properties / end_date / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / exclude_user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / exclude_user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / exclude_user_ids / type
        Added value: +"array"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "activityType",
        -        "latestActivityType",
        -        "dateTime",
        -        "description",
        -        "extraDescription",
        -        "publicInfo",
        -        "dueDate",
        -        "forUserName",
        -        "itemLink",
        -        "link",
        -        "user",
        -        "forUser",
        -        "project",
        -        "company",
        -        "item"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "activityType",
        +    "latestActivityType",
        +    "dateTime",
        +    "description",
        +    "extraDescription",
        +    "publicInfo",
        +    "dueDate",
        +    "forUserName",
        +    "itemLink",
        +    "link",
        +    "user",
        +    "forUser",
        +    "project",
        +    "company",
        +    "item"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / item_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / item_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / item_ids / type
        Added value: +"array"
      • removedInput schema / properties / log_item_types / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "message",
        -        "comment",
        -        "task",
        -        "tasklist",
        -        "taskgroup",
        -        "milestone",
        -        "file",
        -        "form",
        -        "notebook",
        -        "timelog",
        -        "task_comment",
        -        "notebook_comment",
        -        "file_comment",
        -        "link_comment",
        -        "milestone_comment",
        -        "project",
        -        "link",
        -        "billingInvoice",
        -        "risk",
        -        "projectUpdate",
        -        "reacted",
        -        "budget"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / log_item_types / items
        Added value: +{
        +  "enum": [
        +    "message",
        +    "comment",
        +    "task",
        +    "tasklist",
        +    "taskgroup",
        +    "milestone",
        +    "file",
        +    "form",
        +    "notebook",
        +    "timelog",
        +    "task_comment",
        +    "notebook_comment",
        +    "file_comment",
        +    "link_comment",
        +    "milestone_comment",
        +    "project",
        +    "link",
        +    "billingInvoice",
        +    "risk",
        +    "projectUpdate",
        +    "reacted",
        +    "budget"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / log_item_types / type
        Added value: +"array"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "date",
        -      "projectId",
        -      "userId",
        -      "activityTypes",
        -      "id"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "date",
        +  "projectId",
        +  "userId",
        +  "activityTypes",
        +  "id"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
      • changedInput schema / properties / start_date / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / user_ids / type
        Added value: +"array"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_allocations60 fields changed
      • removedInput schema / properties / assigned_user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / assigned_user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / assigned_user_ids / type
        Added value: +"array"
      • removedInput schema / properties / assigned_user_team_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / assigned_user_team_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / assigned_user_team_ids / type
        Added value: +"array"
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • changedInput schema / properties / deleted_after / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / end_date / anyOf
        Removed value: -[
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / end_date / format
        Added value: +"date"
      • addedInput schema / properties / end_date / type
        Added value: +"string"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "project",
        -        "assignedUser",
        -        "title",
        -        "description",
        -        "startedAt",
        -        "endedAt",
        -        "duration",
        -        "availableDuration",
        -        "allocatedDuration",
        -        "hoursPerDay",
        -        "secondsPerDay",
        -        "color",
        -        "status",
        -        "isBillable",
        -        "overAllocated",
        -        "recurringRule",
        -        "linkedTaskIDs",
        -        "linkedTaskEstimatedTime",
        -        "financialDetails",
        -        "canViewFinancialDetails",
        -        "createdAt",
        -        "createdBy",
        -        "updatedAt",
        -        "updatedBy",
        -        "deletedAt",
        -        "deletedBy"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "project",
        +    "assignedUser",
        +    "title",
        +    "description",
        +    "startedAt",
        +    "endedAt",
        +    "duration",
        +    "availableDuration",
        +    "allocatedDuration",
        +    "hoursPerDay",
        +    "secondsPerDay",
        +    "color",
        +    "status",
        +    "isBillable",
        +    "overAllocated",
        +    "recurringRule",
        +    "linkedTaskIDs",
        +    "linkedTaskEstimatedTime",
        +    "financialDetails",
        +    "canViewFinancialDetails",
        +    "createdAt",
        +    "createdBy",
        +    "updatedAt",
        +    "updatedBy",
        +    "deletedAt",
        +    "deletedBy"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / include_financial_details / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / include_financial_details / type
        Added value: +"boolean"
      • removedInput schema / properties / match_all_project_tags / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / match_all_project_tags / type
        Added value: +"boolean"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "startdate",
        -      "enddate",
        -      "project",
        -      "assigneduser",
        -      "id"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "startdate",
        +  "enddate",
        +  "project",
        +  "assigneduser",
        +  "id"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / project_category_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_category_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_category_ids / type
        Added value: +"array"
      • removedInput schema / properties / project_company_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_company_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_company_ids / type
        Added value: +"array"
      • removedInput schema / properties / project_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_ids / type
        Added value: +"array"
      • removedInput schema / properties / project_owner_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_owner_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_owner_ids / type
        Added value: +"array"
      • removedInput schema / properties / project_status / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "active",
        -      "current",
        -      "late",
        -      "upcoming",
        -      "completed",
        -      "deleted"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_status / enum
        Added value: +[
        +  "active",
        +  "current",
        +  "late",
        +  "upcoming",
        +  "completed",
        +  "deleted"
        +]
      • addedInput schema / properties / project_status / type
        Added value: +"string"
      • removedInput schema / properties / project_tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / show_deleted / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / show_deleted / type
        Added value: +"boolean"
      • removedInput schema / properties / start_date / anyOf
        Removed value: -[
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / start_date / format
        Added value: +"date"
      • addedInput schema / properties / start_date / type
        Added value: +"string"
      • changedInput schema / properties / updated_after / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_calendar_events23 fields changed
      • removedInput schema / properties / calendar_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / calendar_id / type
        Added value: +"integer"
      • removedInput schema / properties / cursor / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / cursor / type
        Added value: +"string"
      • removedInput schema / properties / ended_before_date / anyOf
        Removed value: -[
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / ended_before_date / format
        Added value: +"date"
      • addedInput schema / properties / ended_before_date / type
        Added value: +"string"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "summary",
        -        "description",
        -        "organizer",
        -        "eventCreator",
        -        "start",
        -        "end",
        -        "allDay",
        -        "location",
        -        "type",
        -        "recurrence",
        -        "guestsCanInviteOthers",
        -        "guestsCanModify",
        -        "guestsCanSeeOtherGuests",
        -        "transparency",
        -        "visibility",
        -        "videoCallLink",
        -        "calOwnerCanEdit",
        -        "timeblock",
        -        "attendees",
        -        "attendeesOmitted",
        -        "calendar",
        -        "status",
        -        "createdBy",
        -        "createdAt",
        -        "updatedAt"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "summary",
        +    "description",
        +    "organizer",
        +    "eventCreator",
        +    "start",
        +    "end",
        +    "allDay",
        +    "location",
        +    "type",
        +    "recurrence",
        +    "guestsCanInviteOthers",
        +    "guestsCanModify",
        +    "guestsCanSeeOtherGuests",
        +    "transparency",
        +    "visibility",
        +    "videoCallLink",
        +    "calOwnerCanEdit",
        +    "timeblock",
        +    "attendees",
        +    "attendeesOmitted",
        +    "calendar",
        +    "status",
        +    "createdBy",
        +    "createdAt",
        +    "updatedAt"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / limit / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / limit / type
        Added value: +"integer"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "startTime",
        -      "updated",
        -      "id"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "startTime",
        +  "updated",
        +  "id"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / started_after_date / anyOf
        Removed value: -[
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / started_after_date / format
        Added value: +"date"
      • addedInput schema / properties / started_after_date / type
        Added value: +"string"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_calendars20 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "type",
        -        "createdAt",
        -        "updatedAt"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "type",
        +    "createdAt",
        +    "updatedAt"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "name",
        -      "id"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "name",
        +  "id"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_comments36 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "body",
        -        "htmlBody",
        -        "contentType",
        -        "object",
        -        "project",
        -        "postedBy",
        -        "postedDateTime",
        -        "lastEditedBy",
        -        "dateLastEdited",
        -        "deleted",
        -        "deletedBy",
        -        "dateDeleted"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "body",
        +    "htmlBody",
        +    "contentType",
        +    "object",
        +    "project",
        +    "postedBy",
        +    "postedDateTime",
        +    "lastEditedBy",
        +    "dateLastEdited",
        +    "deleted",
        +    "deletedBy",
        +    "dateDeleted"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / file_version_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / file_version_id / type
        Added value: +"integer"
      • removedInput schema / properties / link_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / link_id / type
        Added value: +"integer"
      • removedInput schema / properties / milestone_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / milestone_id / type
        Added value: +"integer"
      • removedInput schema / properties / notebook_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / notebook_id / type
        Added value: +"integer"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "all",
        -      "date",
        -      "project",
        -      "user",
        -      "type",
        -      "id"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "all",
        +  "date",
        +  "project",
        +  "user",
        +  "type",
        +  "id"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / task_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / task_id / type
        Added value: +"integer"
      • changedInput schema / properties / updated_after / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / user_ids / type
        Added value: +"array"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_companies30 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "addressOne",
        -        "addressTwo",
        -        "city",
        -        "countryCode",
        -        "emailOne",
        -        "emailTwo",
        -        "emailThree",
        -        "fax",
        -        "name",
        -        "phone",
        -        "profileText",
        -        "state",
        -        "website",
        -        "zip",
        -        "clientManagedBy",
        -        "industry",
        -        "tags",
        -        "createdAt",
        -        "updatedAt",
        -        "status"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "addressOne",
        +    "addressTwo",
        +    "city",
        +    "countryCode",
        +    "emailOne",
        +    "emailTwo",
        +    "emailThree",
        +    "fax",
        +    "name",
        +    "phone",
        +    "profileText",
        +    "state",
        +    "website",
        +    "zip",
        +    "clientManagedBy",
        +    "industry",
        +    "tags",
        +    "createdAt",
        +    "updatedAt",
        +    "status"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / match_all_tags / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / match_all_tags / type
        Added value: +"boolean"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "name",
        -      "accounts",
        -      "clients",
        -      "collaborators",
        -      "contacts",
        -      "projects",
        -      "tasks",
        -      "country",
        -      "health",
        -      "website",
        -      "email",
        -      "phone",
        -      "fax",
        -      "industry",
        -      "dateadded",
        -      "ownercompany",
        -      "ownername",
        -      "taskscompletion",
        -      "customfield",
        -      "id"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "name",
        +  "accounts",
        +  "clients",
        +  "collaborators",
        +  "contacts",
        +  "projects",
        +  "tasks",
        +  "country",
        +  "health",
        +  "website",
        +  "email",
        +  "phone",
        +  "fax",
        +  "industry",
        +  "dateadded",
        +  "ownercompany",
        +  "ownername",
        +  "taskscompletion",
        +  "customfield",
        +  "id"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_by_custom_field_id / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by_custom_field_id / minimum
        Added value: +1
      • addedInput schema / properties / order_by_custom_field_id / type
        Added value: +"integer"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_custom_field_values17 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / custom_field_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / custom_field_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / custom_field_ids / type
        Added value: +"array"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "value",
        -        "currencySymbol",
        -        "countryCode",
        -        "customfield",
        -        "task",
        -        "project",
        -        "company",
        -        "createdBy",
        -        "createdAt",
        -        "updatedBy",
        -        "updatedAt"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "value",
        +    "currencySymbol",
        +    "countryCode",
        +    "customfield",
        +    "task",
        +    "project",
        +    "company",
        +    "createdBy",
        +    "createdAt",
        +    "updatedBy",
        +    "updatedAt"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_custom_fields39 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / entities / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "project",
        -        "task",
        -        "company"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / entities / items
        Added value: +{
        +  "enum": [
        +    "project",
        +    "task",
        +    "company"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / entities / type
        Added value: +"array"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "options",
        -        "id",
        -        "name",
        -        "description",
        -        "type",
        -        "entity",
        -        "required",
        -        "formula",
        -        "currencyCode",
        -        "unitId",
        -        "project",
        -        "createdBy",
        -        "createdAt",
        -        "updatedBy",
        -        "updatedAt",
        -        "deleted",
        -        "deletedBy",
        -        "deletedAt"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "options",
        +    "id",
        +    "name",
        +    "description",
        +    "type",
        +    "entity",
        +    "required",
        +    "formula",
        +    "currencyCode",
        +    "unitId",
        +    "project",
        +    "createdBy",
        +    "createdAt",
        +    "updatedBy",
        +    "updatedAt",
        +    "deleted",
        +    "deletedBy",
        +    "deletedAt"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / ids / type
        Added value: +"array"
      • removedInput schema / properties / include_site_level / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / include_site_level / type
        Added value: +"boolean"
      • removedInput schema / properties / only_project_level / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / only_project_level / type
        Added value: +"boolean"
      • removedInput schema / properties / only_site_level / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / only_site_level / type
        Added value: +"boolean"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "name",
        -      "project",
        -      "datecreated",
        -      "dateupdated",
        -      "id"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "name",
        +  "project",
        +  "datecreated",
        +  "dateupdated",
        +  "id"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / project_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_ids / type
        Added value: +"array"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / show_deleted / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / show_deleted / type
        Added value: +"boolean"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_custom_item_fields19 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / ids / type
        Added value: +"array"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / show_deleted / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / show_deleted / type
        Added value: +"boolean"
    • Changedtwprojects-list_custom_item_records28 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / ids / type
        Added value: +"array"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "displayorder",
        -      "name",
        -      "customitemfield",
        -      "id"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "displayorder",
        +  "name",
        +  "customitemfield",
        +  "id"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_by_field_id / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by_field_id / minimum
        Added value: +1
      • addedInput schema / properties / order_by_field_id / type
        Added value: +"integer"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / section_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / section_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / section_ids / type
        Added value: +"array"
      • removedInput schema / properties / show_deleted / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / show_deleted / type
        Added value: +"boolean"
    • Changedtwprojects-list_custom_items22 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / ids / type
        Added value: +"array"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "name",
        -      "id"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "name",
        +  "id"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / show_deleted / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / show_deleted / type
        Added value: +"boolean"
    • Changedtwprojects-list_jobroles19 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "isActive",
        -        "createdByUser",
        -        "createdAt",
        -        "updatedByUser",
        -        "updatedAt",
        -        "deletedByUser",
        -        "deletedAt",
        -        "users",
        -        "primaryUsers"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "isActive",
        +    "createdByUser",
        +    "createdAt",
        +    "updatedByUser",
        +    "updatedAt",
        +    "deletedByUser",
        +    "deletedAt",
        +    "users",
        +    "primaryUsers"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_links21 fields changed
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "description",
        -        "code",
        -        "project-id",
        -        "tags",
        -        "created-by-userId",
        -        "created-date",
        -        "updated-by-userId",
        -        "updated-date"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "description",
        +    "code",
        +    "project-id",
        +    "tags",
        +    "created-by-userId",
        +    "created-date",
        +    "updated-by-userId",
        +    "updated-date"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / match_all_tags / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / match_all_tags / type
        Added value: +"boolean"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_message_replies28 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "body",
        -        "author",
        -        "message",
        -        "meta",
        -        "createdAt",
        -        "updatedAt",
        -        "status"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "body",
        +    "author",
        +    "message",
        +    "meta",
        +    "createdAt",
        +    "updatedAt",
        +    "status"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / message_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / message_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / message_ids / type
        Added value: +"array"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "createdat",
        -      "id"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "createdat",
        +  "id"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / project_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_ids / type
        Added value: +"array"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_messages30 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "title",
        -        "project",
        -        "tags",
        -        "lastReply",
        -        "replyStatus",
        -        "status",
        -        "body",
        -        "author",
        -        "message",
        -        "meta",
        -        "createdAt",
        -        "updatedAt"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "title",
        +    "project",
        +    "tags",
        +    "lastReply",
        +    "replyStatus",
        +    "status",
        +    "body",
        +    "author",
        +    "message",
        +    "meta",
        +    "createdAt",
        +    "updatedAt"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / match_all_tags / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / match_all_tags / type
        Added value: +"boolean"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "createdat",
        -      "updatedat",
        -      "category",
        -      "project",
        -      "createdby",
        -      "unread",
        -      "id"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "createdat",
        +  "updatedat",
        +  "category",
        +  "project",
        +  "createdby",
        +  "unread",
        +  "id"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / project_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_ids / type
        Added value: +"array"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_milestones37 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / due_after / anyOf
        Removed value: -[
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / due_after / format
        Added value: +"date"
      • addedInput schema / properties / due_after / type
        Added value: +"string"
      • removedInput schema / properties / due_before / anyOf
        Removed value: -[
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / due_before / format
        Added value: +"date"
      • addedInput schema / properties / due_before / type
        Added value: +"string"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "description",
        -        "deadline",
        -        "project",
        -        "tasklists",
        -        "tags",
        -        "responsibleParties",
        -        "createdOn",
        -        "lastChangedOn",
        -        "deletedOn",
        -        "completedOn",
        -        "completedBy",
        -        "completed",
        -        "status"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "description",
        +    "deadline",
        +    "project",
        +    "tasklists",
        +    "tags",
        +    "responsibleParties",
        +    "createdOn",
        +    "lastChangedOn",
        +    "deletedOn",
        +    "completedOn",
        +    "completedBy",
        +    "completed",
        +    "status"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / match_all_tags / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / match_all_tags / type
        Added value: +"boolean"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "date",
        -      "dateonly",
        -      "name",
        -      "project",
        -      "user",
        -      "dateCreated",
        -      "dateUpdated",
        -      "id"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "date",
        +  "dateonly",
        +  "name",
        +  "project",
        +  "user",
        +  "dateCreated",
        +  "dateUpdated",
        +  "id"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / show_completed / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / show_completed / type
        Added value: +"boolean"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_notebooks32 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "description",
        -        "contents",
        -        "type",
        -        "project",
        -        "tags",
        -        "createdAt",
        -        "createdBy",
        -        "updatedAt",
        -        "updatedBy",
        -        "deletedAt",
        -        "deletedBy",
        -        "deleted"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "description",
        +    "contents",
        +    "type",
        +    "project",
        +    "tags",
        +    "createdAt",
        +    "createdBy",
        +    "updatedAt",
        +    "updatedBy",
        +    "deletedAt",
        +    "deletedBy",
        +    "deleted"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / include_contents / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / include_contents / type
        Added value: +"boolean"
      • removedInput schema / properties / match_all_tags / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / match_all_tags / type
        Added value: +"boolean"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "name",
        -      "project",
        -      "dateCreated",
        -      "dateUpdated",
        -      "category",
        -      "id"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "name",
        +  "project",
        +  "dateCreated",
        +  "dateUpdated",
        +  "category",
        +  "id"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / project_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_ids / type
        Added value: +"array"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_project_budgets24 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / cursor / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / cursor / type
        Added value: +"string"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "projectId",
        -        "type",
        -        "status",
        -        "capacity",
        -        "capacityUsed",
        -        "originatorBudgetId",
        -        "isRepeating",
        -        "repeatPeriod",
        -        "repeatUnit",
        -        "repeatsRemaining",
        -        "sequenceNumber",
        -        "startDateTime",
        -        "endDateTime",
        -        "currencyCode",
        -        "timelogType",
        -        "expenseType",
        -        "defaultRate",
        -        "notificationIds",
        -        "createdByUserId",
        -        "dateCreated",
        -        "updatedBy",
        -        "dateUpdated",
        -        "completedByUserId",
        -        "dateCompleted",
        -        "deletedByUserId",
        -        "dateDeleted"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "projectId",
        +    "type",
        +    "status",
        +    "capacity",
        +    "capacityUsed",
        +    "originatorBudgetId",
        +    "isRepeating",
        +    "repeatPeriod",
        +    "repeatUnit",
        +    "repeatsRemaining",
        +    "sequenceNumber",
        +    "startDateTime",
        +    "endDateTime",
        +    "currencyCode",
        +    "timelogType",
        +    "expenseType",
        +    "defaultRate",
        +    "notificationIds",
        +    "createdByUserId",
        +    "dateCreated",
        +    "updatedBy",
        +    "dateUpdated",
        +    "completedByUserId",
        +    "dateCompleted",
        +    "deletedByUserId",
        +    "dateDeleted"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / limit / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / limit / type
        Added value: +"integer"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / project_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_ids / type
        Added value: +"array"
      • removedInput schema / properties / status / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "UPCOMING",
        -      "ACTIVE",
        -      "COMPLETED"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / status / enum
        Added value: +[
        +  "UPCOMING",
        +  "ACTIVE",
        +  "COMPLETED"
        +]
      • addedInput schema / properties / status / type
        Added value: +"string"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_project_categories16 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "color",
        -        "parent",
        -        "count"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "color",
        +    "parent",
        +    "count"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_project_templates17 fields changed
      • removedInput schema / properties / match_all_tags / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / match_all_tags / type
        Added value: +"boolean"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / project_category_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_category_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_category_ids / type
        Added value: +"array"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
    • Changedtwprojects-list_project_updates34 fields changed
      • removedInput schema / properties / active_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / active_only / type
        Added value: +"boolean"
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • changedInput schema / properties / created_after / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "text",
        -        "health",
        -        "healthLabel",
        -        "color",
        -        "projectId",
        -        "project",
        -        "createdBy",
        -        "createdAt",
        -        "updatedAt",
        -        "isActive",
        -        "deleted",
        -        "deletedAt",
        -        "deletedBy",
        -        "likeFromUserIDs",
        -        "likeFromUsers",
        -        "reactions"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "text",
        +    "health",
        +    "healthLabel",
        +    "color",
        +    "projectId",
        +    "project",
        +    "createdBy",
        +    "createdAt",
        +    "updatedAt",
        +    "isActive",
        +    "deleted",
        +    "deletedAt",
        +    "deletedBy",
        +    "likeFromUserIDs",
        +    "likeFromUsers",
        +    "reactions"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / include_archived / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / include_archived / type
        Added value: +"boolean"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "date",
        -      "color",
        -      "health",
        -      "project",
        -      "user",
        -      "id"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "date",
        +  "color",
        +  "health",
        +  "project",
        +  "user",
        +  "id"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / project_healths / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "good",
        -        "ok",
        -        "bad",
        -        "not_set"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_healths / items
        Added value: +{
        +  "enum": [
        +    "good",
        +    "ok",
        +    "bad",
        +    "not_set"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / project_healths / type
        Added value: +"array"
      • removedInput schema / properties / project_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_ids / type
        Added value: +"array"
      • removedInput schema / properties / show_deleted / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / show_deleted / type
        Added value: +"boolean"
      • changedInput schema / properties / updated_after / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_projects66 fields changed
      • removedInput schema / properties / company_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / company_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / company_ids / type
        Added value: +"array"
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "description",
        -        "name",
        -        "startAt",
        -        "endAt",
        -        "category",
        -        "company",
        -        "projectOwner",
        -        "tags",
        -        "update",
        -        "lastWorkedOn",
        -        "createdAt",
        -        "createdBy",
        -        "updatedAt",
        -        "updatedBy",
        -        "completedAt",
        -        "completedBy",
        -        "status",
        -        "isBillable",
        -        "type"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "description",
        +    "name",
        +    "startAt",
        +    "endAt",
        +    "category",
        +    "company",
        +    "projectOwner",
        +    "tags",
        +    "update",
        +    "lastWorkedOn",
        +    "createdAt",
        +    "createdBy",
        +    "updatedAt",
        +    "updatedBy",
        +    "completedAt",
        +    "completedBy",
        +    "status",
        +    "isBillable",
        +    "type"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / hide_observed / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / hide_observed / type
        Added value: +"boolean"
      • removedInput schema / properties / include_archived / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / include_archived / type
        Added value: +"boolean"
      • removedInput schema / properties / include_subcategories / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / include_subcategories / type
        Added value: +"boolean"
      • removedInput schema / properties / include_tentative / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / include_tentative / type
        Added value: +"boolean"
      • removedInput schema / properties / match_all_tags / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / match_all_tags / type
        Added value: +"boolean"
      • removedInput schema / properties / only_admin_access / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / only_admin_access / type
        Added value: +"boolean"
      • removedInput schema / properties / only_archived / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / only_archived / type
        Added value: +"boolean"
      • removedInput schema / properties / only_starred / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / only_starred / type
        Added value: +"boolean"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "budgetused",
        -      "categoryname",
        -      "companyname",
        -      "creatorname",
        -      "customfield",
        -      "datecreated",
        -      "duedate",
        -      "health",
        -      "lastactivity",
        -      "lastworkedon",
        -      "mobilespecial",
        -      "name",
        -      "namecaseinsensitive",
        -      "ownercompany",
        -      "ownername",
        -      "starred",
        -      "starredcompanyname",
        -      "starredfirst",
        -      "startdate",
        -      "status",
        -      "taskcompletion",
        -      "id"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "budgetused",
        +  "categoryname",
        +  "companyname",
        +  "creatorname",
        +  "customfield",
        +  "datecreated",
        +  "duedate",
        +  "health",
        +  "lastactivity",
        +  "lastworkedon",
        +  "mobilespecial",
        +  "name",
        +  "namecaseinsensitive",
        +  "ownercompany",
        +  "ownername",
        +  "starred",
        +  "starredcompanyname",
        +  "starredfirst",
        +  "startdate",
        +  "status",
        +  "taskcompletion",
        +  "id"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_by_custom_field_id / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by_custom_field_id / minimum
        Added value: +1
      • addedInput schema / properties / order_by_custom_field_id / type
        Added value: +"integer"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / project_category_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_category_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_category_ids / type
        Added value: +"array"
      • removedInput schema / properties / project_healths / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "good",
        -        "ok",
        -        "bad",
        -        "not_set"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_healths / items
        Added value: +{
        +  "enum": [
        +    "good",
        +    "ok",
        +    "bad",
        +    "not_set"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / project_healths / type
        Added value: +"array"
      • removedInput schema / properties / project_owner_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_owner_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_owner_ids / type
        Added value: +"array"
      • removedInput schema / properties / project_statuses / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "active",
        -        "current",
        -        "late",
        -        "upcoming",
        -        "completed",
        -        "deleted"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_statuses / items
        Added value: +{
        +  "enum": [
        +    "active",
        +    "current",
        +    "late",
        +    "upcoming",
        +    "completed",
        +    "deleted"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / project_statuses / type
        Added value: +"array"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / team_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / team_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / team_ids / type
        Added value: +"array"
      • changedInput schema / properties / updated_after / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / user_ids / type
        Added value: +"array"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_skills19 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "createdByUser",
        -        "createdAt",
        -        "updatedByUser",
        -        "updatedAt",
        -        "deletedByUser",
        -        "deletedAt",
        -        "users"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "createdByUser",
        +    "createdAt",
        +    "updatedByUser",
        +    "updatedAt",
        +    "deletedByUser",
        +    "deletedAt",
        +    "users"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_tags28 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "color",
        -        "project"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "color",
        +    "project"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / item_type / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "PROJECT",
        -      "TASK",
        -      "TASKLIST",
        -      "MILESTONE",
        -      "MESSAGE",
        -      "TIMELOG",
        -      "NOTEBOOK",
        -      "FILE",
        -      "COMPANY",
        -      "LINK"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / item_type / enum
        Added value: +[
        +  "PROJECT",
        +  "TASK",
        +  "TASKLIST",
        +  "MILESTONE",
        +  "MESSAGE",
        +  "TIMELOG",
        +  "NOTEBOOK",
        +  "FILE",
        +  "COMPANY",
        +  "LINK"
        +]
      • addedInput schema / properties / item_type / type
        Added value: +"string"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "name",
        -      "count",
        -      "project",
        -      "color",
        -      "datelastupdated",
        -      "projectdatelastused",
        -      "id"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "name",
        +  "count",
        +  "project",
        +  "color",
        +  "datelastupdated",
        +  "projectdatelastused",
        +  "id"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / project_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_ids / type
        Added value: +"array"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_tasklist_budgets20 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "type",
        -        "capacity",
        -        "capacityUsed",
        -        "projectId",
        -        "projectbudget",
        -        "tasklist",
        -        "milestone",
        -        "notifications",
        -        "createdAt",
        -        "createdBy",
        -        "updatedAt",
        -        "updatedBy",
        -        "deletedAt",
        -        "deletedBy"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "type",
        +    "capacity",
        +    "capacityUsed",
        +    "projectId",
        +    "projectbudget",
        +    "tasklist",
        +    "milestone",
        +    "notifications",
        +    "createdAt",
        +    "createdBy",
        +    "updatedAt",
        +    "updatedBy",
        +    "deletedAt",
        +    "deletedBy"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "dateCreated",
        -      "displayOrder",
        -      "id"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "dateCreated",
        +  "displayOrder",
        +  "id"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_tasklists26 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "description",
        -        "project",
        -        "milestone",
        -        "createdAt",
        -        "updatedAt",
        -        "status"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "description",
        +    "project",
        +    "milestone",
        +    "createdAt",
        +    "updatedAt",
        +    "status"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "displayorder",
        -      "name",
        -      "status",
        -      "createdat",
        -      "updatedat",
        -      "project",
        -      "id"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "displayorder",
        +  "name",
        +  "status",
        +  "createdat",
        +  "updatedat",
        +  "project",
        +  "id"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / show_completed / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / show_completed / type
        Added value: +"boolean"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_tasks69 fields changed
      • removedInput schema / properties / assignee_user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / assignee_user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / assignee_user_ids / type
        Added value: +"array"
      • changedInput schema / properties / completed_after / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / completed_before / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • changedInput schema / properties / created_after / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / created_before / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / created_by_user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / created_by_user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / created_by_user_ids / type
        Added value: +"array"
      • removedInput schema / properties / date_filter / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "anytime",
        -      "overdue",
        -      "today",
        -      "tomorrow",
        -      "yesterday",
        -      "thisweek",
        -      "upcoming",
        -      "started",
        -      "within7",
        -      "within14",
        -      "within30",
        -      "within365",
        -      "nodate",
        -      "noduedate",
        -      "nostartdate",
        -      "hasdate"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / date_filter / enum
        Added value: +[
        +  "anytime",
        +  "overdue",
        +  "today",
        +  "tomorrow",
        +  "yesterday",
        +  "thisweek",
        +  "upcoming",
        +  "started",
        +  "within7",
        +  "within14",
        +  "within30",
        +  "within365",
        +  "nodate",
        +  "noduedate",
        +  "nostartdate",
        +  "hasdate"
        +]
      • addedInput schema / properties / date_filter / type
        Added value: +"string"
      • removedInput schema / properties / due_after / anyOf
        Removed value: -[
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / due_after / format
        Added value: +"date"
      • addedInput schema / properties / due_after / type
        Added value: +"string"
      • removedInput schema / properties / due_before / anyOf
        Removed value: -[
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / due_before / format
        Added value: +"date"
      • addedInput schema / properties / due_before / type
        Added value: +"string"
      • removedInput schema / properties / exclude_assignee_user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / exclude_assignee_user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / exclude_assignee_user_ids / type
        Added value: +"array"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "description",
        -        "descriptionContentType",
        -        "priority",
        -        "progress",
        -        "startDate",
        -        "dueDate",
        -        "estimateMinutes",
        -        "tasklist",
        -        "parentTask",
        -        "assignees",
        -        "tags",
        -        "predecessors",
        -        "subTaskIds",
        -        "workflowStages",
        -        "createdBy",
        -        "createdAt",
        -        "updatedBy",
        -        "updatedAt",
        -        "deletedBy",
        -        "deletedAt",
        -        "completedBy",
        -        "completedAt",
        -        "status"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "description",
        +    "descriptionContentType",
        +    "priority",
        +    "progress",
        +    "startDate",
        +    "dueDate",
        +    "estimateMinutes",
        +    "tasklist",
        +    "parentTask",
        +    "assignees",
        +    "tags",
        +    "predecessors",
        +    "subTaskIds",
        +    "workflowStages",
        +    "createdBy",
        +    "createdAt",
        +    "updatedBy",
        +    "updatedAt",
        +    "deletedBy",
        +    "deletedAt",
        +    "completedBy",
        +    "completedAt",
        +    "status"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / match_all_tags / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / match_all_tags / type
        Added value: +"boolean"
      • removedInput schema / properties / only_completed / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / only_completed / type
        Added value: +"boolean"
      • removedInput schema / properties / only_unassigned / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / only_unassigned / type
        Added value: +"boolean"
      • removedInput schema / properties / only_unplanned / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / only_unplanned / type
        Added value: +"boolean"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "id",
        -      "startdate",
        -      "createdat",
        -      "priority",
        -      "project",
        -      "flattenedtasklist",
        -      "company",
        -      "manual",
        -      "active",
        -      "completedat",
        -      "duestartdate",
        -      "alldates",
        -      "tasklistname",
        -      "tasklistdisplayorder",
        -      "tasklistid",
        -      "duedate",
        -      "updatedat",
        -      "taskname",
        -      "createdby",
        -      "completedby",
        -      "assignedto",
        -      "taskstatus",
        -      "taskduedate",
        -      "customfield",
        -      "estimatedtime",
        -      "boardcolumn",
        -      "taskgroupid",
        -      "taskgroupname",
        -      "taskgroup",
        -      "displayorder",
        -      "projectmanual",
        -      "stagedisplayorder",
        -      "stage",
        -      "parenttask"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "id",
        +  "startdate",
        +  "createdat",
        +  "priority",
        +  "project",
        +  "flattenedtasklist",
        +  "company",
        +  "manual",
        +  "active",
        +  "completedat",
        +  "duestartdate",
        +  "alldates",
        +  "tasklistname",
        +  "tasklistdisplayorder",
        +  "tasklistid",
        +  "duedate",
        +  "updatedat",
        +  "taskname",
        +  "createdby",
        +  "completedby",
        +  "assignedto",
        +  "taskstatus",
        +  "taskduedate",
        +  "customfield",
        +  "estimatedtime",
        +  "boardcolumn",
        +  "taskgroupid",
        +  "taskgroupname",
        +  "taskgroup",
        +  "displayorder",
        +  "projectmanual",
        +  "stagedisplayorder",
        +  "stage",
        +  "parenttask"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_by_custom_field_id / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by_custom_field_id / minimum
        Added value: +1
      • addedInput schema / properties / order_by_custom_field_id / type
        Added value: +"integer"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / show_completed / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / show_completed / type
        Added value: +"boolean"
      • removedInput schema / properties / start_after / anyOf
        Removed value: -[
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / start_after / format
        Added value: +"date"
      • addedInput schema / properties / start_after / type
        Added value: +"string"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / tasklist_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tasklist_id / type
        Added value: +"integer"
      • changedInput schema / properties / updated_after / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • changedInput schema / properties / updated_before / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_teams24 fields changed
      • removedInput schema / properties / company_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / company_id / type
        Added value: +"integer"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "description",
        -        "handle",
        -        "logoUrl",
        -        "logoIcon",
        -        "logoColor",
        -        "projectId",
        -        "company",
        -        "parentTeam",
        -        "rootTeam",
        -        "members",
        -        "createdByUserId",
        -        "dateCreated",
        -        "updatedByUserId",
        -        "dateUpdated",
        -        "deleted",
        -        "deletedDate"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "description",
        +    "handle",
        +    "logoUrl",
        +    "logoIcon",
        +    "logoColor",
        +    "projectId",
        +    "company",
        +    "parentTeam",
        +    "rootTeam",
        +    "members",
        +    "createdByUserId",
        +    "dateCreated",
        +    "updatedByUserId",
        +    "dateUpdated",
        +    "deleted",
        +    "deletedDate"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "name",
        -      "picker",
        -      "dateAdded"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "name",
        +  "picker",
        +  "dateAdded"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_timelogs49 fields changed
      • removedInput schema / properties / assigned_company_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / assigned_company_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / assigned_company_ids / type
        Added value: +"array"
      • removedInput schema / properties / assigned_team_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / assigned_team_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / assigned_team_ids / type
        Added value: +"array"
      • removedInput schema / properties / assigned_user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / assigned_user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / assigned_user_ids / type
        Added value: +"array"
      • removedInput schema / properties / billable_type / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "all",
        -      "billable",
        -      "nonbillable"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / billable_type / enum
        Added value: +[
        +  "all",
        +  "billable",
        +  "nonbillable"
        +]
      • addedInput schema / properties / billable_type / type
        Added value: +"string"
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • changedInput schema / properties / end_date / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "description",
        -        "billable",
        -        "minutes",
        -        "timeLogged",
        -        "user",
        -        "task",
        -        "project",
        -        "tags",
        -        "deskTicketId",
        -        "createdAt",
        -        "loggedBy",
        -        "updatedAt",
        -        "updatedBy",
        -        "deletedAt",
        -        "deletedBy",
        -        "deleted"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "description",
        +    "billable",
        +    "minutes",
        +    "timeLogged",
        +    "user",
        +    "task",
        +    "project",
        +    "tags",
        +    "deskTicketId",
        +    "createdAt",
        +    "loggedBy",
        +    "updatedAt",
        +    "updatedBy",
        +    "deletedAt",
        +    "deletedBy",
        +    "deleted"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / invoiced_type / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "all",
        -      "invoiced",
        -      "noninvoiced"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / invoiced_type / enum
        Added value: +[
        +  "all",
        +  "invoiced",
        +  "noninvoiced"
        +]
      • addedInput schema / properties / invoiced_type / type
        Added value: +"string"
      • removedInput schema / properties / match_all_tags / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / match_all_tags / type
        Added value: +"boolean"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "company",
        -      "date",
        -      "dateupdated",
        -      "project",
        -      "task",
        -      "tasklist",
        -      "user",
        -      "description",
        -      "billed",
        -      "billable",
        -      "timespent",
        -      "id"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "company",
        +  "date",
        +  "dateupdated",
        +  "project",
        +  "task",
        +  "tasklist",
        +  "user",
        +  "description",
        +  "billed",
        +  "billable",
        +  "timespent",
        +  "id"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
      • changedInput schema / properties / start_date / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / task_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / task_id / type
        Added value: +"integer"
      • removedInput schema / properties / ticketIds / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / ticketIds / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / ticketIds / type
        Added value: +"array"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_timers22 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "description",
        -        "running",
        -        "billable",
        -        "user",
        -        "task",
        -        "project",
        -        "timelog",
        -        "createdAt",
        -        "updatedAt",
        -        "deletedAt",
        -        "deleted",
        -        "duration",
        -        "lastStartedAt",
        -        "timerLastIntervalEnd",
        -        "intervals"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "description",
        +    "running",
        +    "billable",
        +    "user",
        +    "task",
        +    "project",
        +    "timelog",
        +    "createdAt",
        +    "updatedAt",
        +    "deletedAt",
        +    "deleted",
        +    "duration",
        +    "lastStartedAt",
        +    "timerLastIntervalEnd",
        +    "intervals"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
      • removedInput schema / properties / running_timers_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / running_timers_only / type
        Added value: +"boolean"
      • removedInput schema / properties / task_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / task_id / type
        Added value: +"integer"
      • removedInput schema / properties / user_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / user_id / type
        Added value: +"integer"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_users26 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "firstName",
        -        "lastName",
        -        "title",
        -        "email",
        -        "isAdmin",
        -        "type",
        -        "userCost",
        -        "userRate",
        -        "company",
        -        "jobRoles",
        -        "skills",
        -        "workingHour",
        -        "lengthOfDay",
        -        "deleted",
        -        "createdBy",
        -        "createdAt",
        -        "updatedBy",
        -        "updatedAt"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "firstName",
        +    "lastName",
        +    "title",
        +    "email",
        +    "isAdmin",
        +    "type",
        +    "userCost",
        +    "userRate",
        +    "company",
        +    "jobRoles",
        +    "skills",
        +    "workingHour",
        +    "lengthOfDay",
        +    "deleted",
        +    "createdBy",
        +    "createdAt",
        +    "updatedBy",
        +    "updatedAt"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "name",
        -      "namecaseinsensitive",
        -      "company",
        -      "id"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "name",
        +  "namecaseinsensitive",
        +  "company",
        +  "id"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / type / type
        Added value: +"string"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_workflow_stages20 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "workflow"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "workflow"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "id",
        -      "name",
        -      "displayorder"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "id",
        +  "name",
        +  "displayorder"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-list_workflows16 fields changed
      • removedInput schema / properties / count_only / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / count_only / type
        Added value: +"boolean"
      • removedInput schema / properties / fields / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "defaultWorkflow"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fields / items
        Added value: +{
        +  "enum": [
        +    "id",
        +    "name",
        +    "defaultWorkflow"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fields / type
        Added value: +"array"
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
    • Changedtwprojects-search24 fields changed
      • removedInput schema / properties / cursor / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / cursor / type
        Added value: +"string"
      • removedInput schema / properties / extended_search / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / extended_search / type
        Added value: +"boolean"
      • removedInput schema / properties / include_completed_items / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / include_completed_items / type
        Added value: +"boolean"
      • removedInput schema / properties / include_highlights / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / include_highlights / type
        Added value: +"boolean"
      • removedInput schema / properties / limit / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / limit / type
        Added value: +"integer"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
      • removedInput schema / properties / search_term / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / search_term / type
        Added value: +"string"
      • removedInput schema / properties / sideload / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "comments",
        -        "companies",
        -        "links",
        -        "messages",
        -        "milestones",
        -        "notebooks",
        -        "projects",
        -        "tasklists",
        -        "tasks",
        -        "teams",
        -        "timelogs",
        -        "users"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / sideload / items
        Added value: +{
        +  "enum": [
        +    "comments",
        +    "companies",
        +    "links",
        +    "messages",
        +    "milestones",
        +    "notebooks",
        +    "projects",
        +    "tasklists",
        +    "tasks",
        +    "teams",
        +    "timelogs",
        +    "users"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / sideload / type
        Added value: +"array"
      • removedInput schema / properties / types / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "projects",
        -        "tasks",
        -        "tasklists",
        -        "milestones",
        -        "messages",
        -        "notebooks",
        -        "links",
        -        "comments",
        -        "taskcomments",
        -        "milestonecomments",
        -        "filecomments",
        -        "linkcomments",
        -        "notebookcomments",
        -        "timelogs",
        -        "users",
        -        "teams",
        -        "companies"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / types / items
        Added value: +{
        +  "enum": [
        +    "projects",
        +    "tasks",
        +    "tasklists",
        +    "milestones",
        +    "messages",
        +    "notebooks",
        +    "links",
        +    "comments",
        +    "taskcomments",
        +    "milestonecomments",
        +    "filecomments",
        +    "linkcomments",
        +    "notebookcomments",
        +    "timelogs",
        +    "users",
        +    "teams",
        +    "companies"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / types / type
        Added value: +"array"
      • changedInput schema / properties / updated_after / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  }
        +]
      • removedInput schema / properties / verbose / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / verbose / type
        Added value: +"boolean"
      • removedInput schema / required
        Removed value: -[
        -  "search_term"
        -]
    • Changedtwprojects-summarize_timelogs29 fields changed
      • removedInput schema / properties / company_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / company_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / company_ids / type
        Added value: +"array"
      • removedInput schema / properties / include_archived_projects / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / include_archived_projects / type
        Added value: +"boolean"
      • removedInput schema / properties / order_by / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "name",
        -      "loggedtime",
        -      "billabletime",
        -      "nonbillabletime",
        -      "billedtime",
        -      "budget"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_by / enum
        Added value: +[
        +  "name",
        +  "loggedtime",
        +  "billabletime",
        +  "nonbillabletime",
        +  "billedtime",
        +  "budget"
        +]
      • addedInput schema / properties / order_by / type
        Added value: +"string"
      • removedInput schema / properties / order_mode / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "asc",
        -      "desc"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / order_mode / enum
        Added value: +[
        +  "asc",
        +  "desc"
        +]
      • addedInput schema / properties / order_mode / type
        Added value: +"string"
      • removedInput schema / properties / project_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_ids / type
        Added value: +"array"
      • removedInput schema / properties / task_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / task_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / task_ids / type
        Added value: +"array"
      • removedInput schema / properties / tasklist_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tasklist_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tasklist_ids / type
        Added value: +"array"
      • removedInput schema / properties / team_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / team_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / team_ids / type
        Added value: +"array"
      • removedInput schema / properties / timelog_tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / timelog_tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / timelog_tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / user_ids / type
        Added value: +"array"
    • Changedtwprojects-update_allocation30 fields changed
      • removedInput schema / properties / assigned_user_id / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / assigned_user_id / minimum
        Added value: +1
      • addedInput schema / properties / assigned_user_id / type
        Added value: +"integer"
      • removedInput schema / properties / color / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / color / type
        Added value: +"string"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "maxLength": 255,
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / maxLength
        Added value: +255
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / end_date / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / end_date / type
        Added value: +"string"
      • removedInput schema / properties / ignore_collisions / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / ignore_collisions / type
        Added value: +"boolean"
      • removedInput schema / properties / inform_of_over_allocation / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / inform_of_over_allocation / type
        Added value: +"boolean"
      • removedInput schema / properties / is_billable / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / is_billable / type
        Added value: +"boolean"
      • removedInput schema / properties / linked_task_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / linked_task_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / linked_task_ids / type
        Added value: +"array"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / minimum
        Added value: +1
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
      • removedInput schema / properties / seconds_per_day / anyOf
        Removed value: -[
        -  {
        -    "minimum": 60,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / seconds_per_day / minimum
        Added value: +60
      • addedInput schema / properties / seconds_per_day / type
        Added value: +"integer"
      • removedInput schema / properties / start_date / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / start_date / type
        Added value: +"string"
      • removedInput schema / properties / title / anyOf
        Removed value: -[
        -  {
        -    "maxLength": 100,
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / title / maxLength
        Added value: +100
      • addedInput schema / properties / title / type
        Added value: +"string"
    • Changedtwprojects-update_comment6 fields changed
      • removedInput schema / properties / content_type / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "TEXT",
        -      "HTML"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / content_type / enum
        Added value: +[
        +  "TEXT",
        +  "HTML"
        +]
      • addedInput schema / properties / content_type / type
        Added value: +"string"
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "description": "Notify all project members.",
        -    "enum": [
        -      "all"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "description": "true notifies all followers of the entity this comment is related to. false notifies nobody.",
        -    "type": "boolean"
        -  },
        -  {
        -    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        -    "items": {
        -      "type": "integer"
        -    },
        -    "minItems": 1,
        -    "type": "array"
        -  },
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "job_role_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 4,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "job_role_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "Notify all project members.",
        +    "enum": [
        +      "all"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "description": "true notifies all followers of the entity this comment is related to. false notifies nobody.",
        +    "type": "boolean"
        +  },
        +  {
        +    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / notify_current_user / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / notify_current_user / type
        Added value: +"boolean"
    • Changedtwprojects-update_company35 fields changed
      • removedInput schema / properties / address_one / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / address_one / type
        Added value: +"string"
      • removedInput schema / properties / address_two / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / address_two / type
        Added value: +"string"
      • removedInput schema / properties / city / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / city / type
        Added value: +"string"
      • removedInput schema / properties / country_code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / country_code / type
        Added value: +"string"
      • removedInput schema / properties / email_one / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / email_one / type
        Added value: +"string"
      • removedInput schema / properties / email_three / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / email_three / type
        Added value: +"string"
      • removedInput schema / properties / email_two / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / email_two / type
        Added value: +"string"
      • removedInput schema / properties / fax / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / fax / type
        Added value: +"string"
      • removedInput schema / properties / industry_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / industry_id / type
        Added value: +"integer"
      • removedInput schema / properties / manager_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / manager_id / type
        Added value: +"integer"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / phone / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / phone / type
        Added value: +"string"
      • removedInput schema / properties / profile / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / profile / type
        Added value: +"string"
      • removedInput schema / properties / state / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / state / type
        Added value: +"string"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / website / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / website / type
        Added value: +"string"
      • removedInput schema / properties / zip / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / zip / type
        Added value: +"string"
    • Changedtwprojects-update_custom_field14 fields changed
      • removedInput schema / properties / currency_code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / currency_code / type
        Added value: +"string"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / formula / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / formula / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
      • changedInput schema / properties / options / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "choices": {
        -        "items": {
        -          "properties": {
        -            "color": {
        -              "description": "The hex color code for the choice (e.g. #ff0000).",
        -              "type": "string"
        -            },
        -            "value": {
        -              "description": "The display value of the choice. For 'dropdown' fields, this is the value that will be set on entities when this choice is selected.",
        -              "type": "string"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "color": {
        -        "description": "The hex color code for the rating icons (e.g. #ff0000).",
        -        "type": "string"
        -      },
        -      "icon": {
        -        "description": "The icon to use for the rating, e.g. 'star', 'heart', etc.",
        -        "type": "string"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "decimals": {
        -        "description": "The number of decimal places to allow for number-decimal custom fields.",
        -        "type": "integer"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "choices": {
        +        "items": {
        +          "properties": {
        +            "color": {
        +              "description": "The hex color code for the choice (e.g. #ff0000).",
        +              "type": "string"
        +            },
        +            "value": {
        +              "description": "The display value of the choice. For 'dropdown' fields, this is the value that will be set on entities when this choice is selected.",
        +              "type": "string"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "color": {
        +        "description": "The hex color code for the rating icons (e.g. #ff0000).",
        +        "type": "string"
        +      },
        +      "icon": {
        +        "description": "The icon to use for the rating, e.g. 'star', 'heart', etc.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "decimals": {
        +        "description": "The number of decimal places to allow for number-decimal custom fields.",
        +        "type": "integer"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / required / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / required / type
        Added value: +"boolean"
      • removedInput schema / properties / unit / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "currency",
        -      "duration",
        -      "date",
        -      "percent",
        -      "currency/duration",
        -      "duration/currency"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / unit / enum
        Added value: +[
        +  "currency",
        +  "duration",
        +  "date",
        +  "percent",
        +  "currency/duration",
        +  "duration/currency"
        +]
      • addedInput schema / properties / unit / type
        Added value: +"string"
    • Changedtwprojects-update_custom_field_value5 fields changed
      • removedInput schema / properties / country_code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / country_code / type
        Added value: +"string"
      • removedInput schema / properties / currency_code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / currency_code / type
        Added value: +"string"
      • changedInput schema / properties / value / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "items": {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "number"
        -        }
        -      ]
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "items": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        }
        +      ]
        +    },
        +    "type": "array"
        +  }
        +]
    • Changedtwprojects-update_custom_item8 fields changed
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / display_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / display_name / type
        Added value: +"string"
      • removedInput schema / properties / label_plural / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / label_plural / type
        Added value: +"string"
      • removedInput schema / properties / label_singular / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / label_singular / type
        Added value: +"string"
    • Changedtwprojects-update_custom_item_field6 fields changed
      • removedInput schema / properties / definition / anyOf
        Removed value: -[
        -  {
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / definition / type
        Added value: +"object"
      • removedInput schema / properties / display_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / display_name / type
        Added value: +"string"
      • removedInput schema / properties / position_after_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / position_after_id / type
        Added value: +"integer"
    • Changedtwprojects-update_custom_item_record11 fields changed
      • removedInput schema / properties / clear_section / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / clear_section / type
        Added value: +"boolean"
      • removedInput schema / properties / field_values / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "properties": {
        -        "field_name": {
        -          "description": "Display name of the field, case-insensitive.",
        -          "type": "string"
        -        },
        -        "value": {
        -          "anyOf": [
        -            {
        -              "type": "string"
        -            },
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "boolean"
        -            },
        -            {
        -              "items": {
        -                "anyOf": [
        -                  {
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "number"
        -                  }
        -                ]
        -              },
        -              "type": "array"
        -            },
        -            {
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Value to set. Type depends on the field โ€” see the tool description."
        -        }
        -      },
        -      "required": [
        -        "field_name",
        -        "value"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / field_values / items
        Added value: +{
        +  "properties": {
        +    "field_name": {
        +      "description": "Display name of the field, case-insensitive.",
        +      "type": "string"
        +    },
        +    "value": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "items": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "number"
        +              }
        +            ]
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "object"
        +        }
        +      ],
        +      "description": "Value to set. Type depends on the field โ€” see the tool description."
        +    }
        +  },
        +  "required": [
        +    "field_name"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / field_values / type
        Added value: +"array"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / position_after_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / position_after_id / type
        Added value: +"integer"
      • removedInput schema / properties / section_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / section_id / type
        Added value: +"integer"
    • Changedtwprojects-update_jobrole2 fields changed
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
    • Changedtwprojects-update_link12 fields changed
      • removedInput schema / properties / code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / code / type
        Added value: +"string"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "description": "Notify all project members.",
        -    "enum": [
        -      "all"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "description": "true is the same as \"all\": notify all project members. false notifies nobody.",
        -    "type": "boolean"
        -  },
        -  {
        -    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        -    "items": {
        -      "type": "integer"
        -    },
        -    "minItems": 1,
        -    "type": "array"
        -  },
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "job_role_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 4,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "job_role_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "Notify all project members.",
        +    "enum": [
        +      "all"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "description": "true is the same as \"all\": notify all project members. false notifies nobody.",
        +    "type": "boolean"
        +  },
        +  {
        +    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / notify_current_user / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / notify_current_user / type
        Added value: +"boolean"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / title / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / title / type
        Added value: +"string"
    • Changedtwprojects-update_message7 fields changed
      • removedInput schema / properties / body / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / body / type
        Added value: +"string"
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "description": "Notify all project members.",
        -    "enum": [
        -      "all"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "description": "true is the same as \"all\": notify all project members. false notifies nobody.",
        -    "type": "boolean"
        -  },
        -  {
        -    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        -    "items": {
        -      "type": "integer"
        -    },
        -    "minItems": 1,
        -    "type": "array"
        -  },
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "job_role_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 4,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "job_role_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "Notify all project members.",
        +    "enum": [
        +      "all"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "description": "true is the same as \"all\": notify all project members. false notifies nobody.",
        +    "type": "boolean"
        +  },
        +  {
        +    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / notify_current_user / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / notify_current_user / type
        Added value: +"boolean"
      • removedInput schema / properties / title / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / title / type
        Added value: +"string"
    • Changedtwprojects-update_message_reply5 fields changed
      • removedInput schema / properties / body / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / body / type
        Added value: +"string"
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "description": "Notify all project members.",
        -    "enum": [
        -      "all"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "description": "true is the same as \"all\": notify all project members. false notifies nobody.",
        -    "type": "boolean"
        -  },
        -  {
        -    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        -    "items": {
        -      "type": "integer"
        -    },
        -    "minItems": 1,
        -    "type": "array"
        -  },
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "job_role_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 4,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "job_role_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "Notify all project members.",
        +    "enum": [
        +      "all"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "description": "true is the same as \"all\": notify all project members. false notifies nobody.",
        +    "type": "boolean"
        +  },
        +  {
        +    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / notify_current_user / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / notify_current_user / type
        Added value: +"boolean"
    • Changedtwprojects-update_milestone17 fields changed
      • removedInput schema / properties / assignees / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 3,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / assignees / maxProperties
        Added value: +3
      • addedInput schema / properties / assignees / minProperties
        Added value: +1
      • addedInput schema / properties / assignees / properties
        Added value: +{
        +  "company_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "team_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "user_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +}
      • addedInput schema / properties / assignees / type
        Added value: +"object"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / due_date / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / due_date / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / tasklist_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tasklist_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tasklist_ids / type
        Added value: +"array"
    • Changedtwprojects-update_notebook12 fields changed
      • removedInput schema / properties / contents / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / contents / type
        Added value: +"string"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / type / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "MARKDOWN",
        -      "HTML"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / type / enum
        Added value: +[
        +  "MARKDOWN",
        +  "HTML"
        +]
      • addedInput schema / properties / type / type
        Added value: +"string"
    • Changedtwprojects-update_project20 fields changed
      • removedInput schema / properties / category_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / category_id / type
        Added value: +"integer"
      • removedInput schema / properties / company_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / company_id / type
        Added value: +"integer"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / end_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / end_at / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / owned_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / owned_id / type
        Added value: +"integer"
      • removedInput schema / properties / start_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / start_at / type
        Added value: +"string"
      • removedInput schema / properties / status / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "active",
        -      "archived"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / status / enum
        Added value: +[
        +  "active",
        +  "archived"
        +]
      • addedInput schema / properties / status / type
        Added value: +"string"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
    • Changedtwprojects-update_project_category6 fields changed
      • removedInput schema / properties / color / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / color / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / parent_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / parent_id / type
        Added value: +"integer"
    • Changedtwprojects-update_skill5 fields changed
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / user_ids / type
        Added value: +"array"
    • Changedtwprojects-update_tag6 fields changed
      • removedInput schema / properties / color / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / color / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
    • Changedtwprojects-update_task59 fields changed
      • removedInput schema / properties / assignees / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "job_role_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 4,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "job_role_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / assignees / maxProperties
        Added value: +4
      • addedInput schema / properties / assignees / minProperties
        Added value: +1
      • addedInput schema / properties / assignees / properties
        Added value: +{
        +  "company_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "job_role_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "team_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "user_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +}
      • addedInput schema / properties / assignees / type
        Added value: +"object"
      • removedInput schema / properties / attachment_file_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / attachment_file_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / attachment_file_ids / type
        Added value: +"array"
      • removedInput schema / properties / attachment_refs / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / attachment_refs / items
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / attachment_refs / type
        Added value: +"array"
      • removedInput schema / properties / change_followers / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "job_role_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 4,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "job_role_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / change_followers / maxProperties
        Added value: +4
      • addedInput schema / properties / change_followers / minProperties
        Added value: +1
      • addedInput schema / properties / change_followers / properties
        Added value: +{
        +  "company_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "job_role_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "team_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "user_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +}
      • addedInput schema / properties / change_followers / type
        Added value: +"object"
      • removedInput schema / properties / clear_assignees / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / clear_assignees / type
        Added value: +"boolean"
      • removedInput schema / properties / clear_parent_task / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / clear_parent_task / type
        Added value: +"boolean"
      • removedInput schema / properties / comment_followers / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "job_role_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 4,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "job_role_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / comment_followers / maxProperties
        Added value: +4
      • addedInput schema / properties / comment_followers / minProperties
        Added value: +1
      • addedInput schema / properties / comment_followers / properties
        Added value: +{
        +  "company_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "job_role_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "team_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "user_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +}
      • addedInput schema / properties / comment_followers / type
        Added value: +"object"
      • removedInput schema / properties / complete_followers / anyOf
        Removed value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "job_role_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 4,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "job_role_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / complete_followers / maxProperties
        Added value: +4
      • addedInput schema / properties / complete_followers / minProperties
        Added value: +1
      • addedInput schema / properties / complete_followers / properties
        Added value: +{
        +  "company_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "job_role_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "team_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "user_ids": {
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +}
      • addedInput schema / properties / complete_followers / type
        Added value: +"object"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / due_date / anyOf
        Removed value: -[
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / due_date / format
        Added value: +"date"
      • addedInput schema / properties / due_date / type
        Added value: +"string"
      • removedInput schema / properties / estimated_minutes / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / estimated_minutes / type
        Added value: +"integer"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / parent_task_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / parent_task_id / type
        Added value: +"integer"
      • removedInput schema / properties / predecessors / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "properties": {
        -        "task_id": {
        -          "description": "The ID of the predecessor task.",
        -          "type": "integer"
        -        },
        -        "type": {
        -          "description": "'start' means this task can complete when the predecessor starts; 'complete' means this task can complete when the predecessor completes.",
        -          "enum": [
        -            "start",
        -            "complete"
        -          ],
        -          "type": "string"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / predecessors / items
        Added value: +{
        +  "properties": {
        +    "task_id": {
        +      "description": "The ID of the predecessor task.",
        +      "type": "integer"
        +    },
        +    "type": {
        +      "description": "'start' means this task can complete when the predecessor starts; 'complete' means this task can complete when the predecessor completes.",
        +      "enum": [
        +        "start",
        +        "complete"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / predecessors / type
        Added value: +"array"
      • removedInput schema / properties / priority / anyOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "low",
        -      "medium",
        -      "high"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / priority / enum
        Added value: +[
        +  "low",
        +  "medium",
        +  "high"
        +]
      • addedInput schema / properties / priority / type
        Added value: +"string"
      • removedInput schema / properties / progress / anyOf
        Removed value: -[
        -  {
        -    "maximum": 100,
        -    "minimum": 0,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / progress / maximum
        Added value: +100
      • addedInput schema / properties / progress / minimum
        Added value: +0
      • addedInput schema / properties / progress / type
        Added value: +"integer"
      • removedInput schema / properties / start_date / anyOf
        Removed value: -[
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / start_date / format
        Added value: +"date"
      • addedInput schema / properties / start_date / type
        Added value: +"string"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / tasklist_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tasklist_id / type
        Added value: +"integer"
    • Changedtwprojects-update_tasklist6 fields changed
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / milestone_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / milestone_id / type
        Added value: +"integer"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
    • Changedtwprojects-update_team15 fields changed
      • removedInput schema / properties / company_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / company_id / type
        Added value: +"integer"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / handle / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / handle / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
      • removedInput schema / properties / parent_team_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / parent_team_id / type
        Added value: +"integer"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
      • removedInput schema / properties / user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / user_ids / type
        Added value: +"array"
    • Changedtwprojects-update_timelog27 fields changed
      • removedInput schema / properties / billable / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / billable / type
        Added value: +"boolean"
      • removedInput schema / properties / clear_task / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / clear_task / type
        Added value: +"boolean"
      • removedInput schema / properties / date / anyOf
        Removed value: -[
        -  {
        -    "format": "date",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / date / format
        Added value: +"date"
      • addedInput schema / properties / date / type
        Added value: +"string"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / hours / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / hours / type
        Added value: +"integer"
      • removedInput schema / properties / is_utc / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / is_utc / type
        Added value: +"boolean"
      • removedInput schema / properties / minutes / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / minutes / type
        Added value: +"integer"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
      • removedInput schema / properties / tag_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / tag_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / tag_ids / type
        Added value: +"array"
      • removedInput schema / properties / task_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / task_id / type
        Added value: +"integer"
      • removedInput schema / properties / time / anyOf
        Removed value: -[
        -  {
        -    "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d$",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / time / pattern
        Added value: +"^(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d$"
      • addedInput schema / properties / time / type
        Added value: +"string"
      • removedInput schema / properties / user_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / user_id / type
        Added value: +"integer"
    • Changedtwprojects-update_timer10 fields changed
      • removedInput schema / properties / billable / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / billable / type
        Added value: +"boolean"
      • removedInput schema / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / description / type
        Added value: +"string"
      • removedInput schema / properties / project_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_id / type
        Added value: +"integer"
      • removedInput schema / properties / running / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / running / type
        Added value: +"boolean"
      • removedInput schema / properties / task_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / task_id / type
        Added value: +"integer"
    • Changedtwprojects-update_user14 fields changed
      • removedInput schema / properties / admin / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / admin / type
        Added value: +"boolean"
      • removedInput schema / properties / company_id / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / company_id / type
        Added value: +"integer"
      • removedInput schema / properties / email / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / email / type
        Added value: +"string"
      • removedInput schema / properties / first_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / first_name / type
        Added value: +"string"
      • removedInput schema / properties / last_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / last_name / type
        Added value: +"string"
      • removedInput schema / properties / title / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / title / type
        Added value: +"string"
      • removedInput schema / properties / type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / type / type
        Added value: +"string"
    • Changedtwprojects-update_workflow2 fields changed
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
    • Changedtwprojects-update_workflow_stage2 fields changed
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
    • Changedtwprojects-users_workload19 fields changed
      • removedInput schema / properties / page / anyOf
        Removed value: -[
        -  {
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page / minimum
        Added value: +1
      • addedInput schema / properties / page / type
        Added value: +"integer"
      • removedInput schema / properties / page_size / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / page_size / maximum
        Added value: +500
      • addedInput schema / properties / page_size / minimum
        Added value: +1
      • addedInput schema / properties / page_size / type
        Added value: +"integer"
      • removedInput schema / properties / project_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / project_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / project_ids / type
        Added value: +"array"
      • removedInput schema / properties / user_company_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / user_company_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / user_company_ids / type
        Added value: +"array"
      • removedInput schema / properties / user_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / user_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / user_ids / type
        Added value: +"array"
      • removedInput schema / properties / user_team_ids / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / user_team_ids / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / user_team_ids / type
        Added value: +"array"
    • Changedtwspaces-create_category2 fields changed
      • removedInput schema / properties / color / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / color / type
        Added value: +"string"
    • Changedtwspaces-create_comment4 fields changed
      • removedInput schema / properties / isPrivate / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / isPrivate / type
        Added value: +"boolean"
      • removedInput schema / properties / parentId / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / parentId / type
        Added value: +"integer"
    • Changedtwspaces-create_page16 fields changed
      • removedInput schema / properties / changeMessage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / changeMessage / type
        Added value: +"string"
      • removedInput schema / properties / content / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / content / type
        Added value: +"string"
      • removedInput schema / properties / isFullWidth / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / isFullWidth / type
        Added value: +"boolean"
      • removedInput schema / properties / isPublish / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / isPublish / type
        Added value: +"boolean"
      • removedInput schema / properties / isRequiredReading / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / isRequiredReading / type
        Added value: +"boolean"
      • removedInput schema / properties / parentId / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / parentId / type
        Added value: +"integer"
      • removedInput schema / properties / readerInlineCommentsEnabled / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / readerInlineCommentsEnabled / type
        Added value: +"boolean"
      • removedInput schema / properties / slug / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / slug / type
        Added value: +"string"
    • Changedtwspaces-create_space10 fields changed
      • removedInput schema / properties / categoryId / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / categoryId / type
        Added value: +"integer"
      • removedInput schema / properties / icon / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / icon / type
        Added value: +"string"
      • removedInput schema / properties / projectId / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / projectId / type
        Added value: +"integer"
      • removedInput schema / properties / purpose / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / purpose / type
        Added value: +"string"
      • removedInput schema / properties / spaceColor / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / spaceColor / type
        Added value: +"string"
    • Changedtwspaces-duplicate_page4 fields changed
      • removedInput schema / properties / parentId / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / parentId / type
        Added value: +"integer"
      • removedInput schema / properties / slug / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / slug / type
        Added value: +"string"
    • Changedtwspaces-list_categories6 fields changed
      • removedInput schema / properties / pageOffset / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageOffset / type
        Added value: +"integer"
      • removedInput schema / properties / pageSize / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageSize / maximum
        Added value: +500
      • addedInput schema / properties / pageSize / minimum
        Added value: +1
      • addedInput schema / properties / pageSize / type
        Added value: +"integer"
    • Changedtwspaces-list_comments6 fields changed
      • removedInput schema / properties / pageOffset / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageOffset / type
        Added value: +"integer"
      • removedInput schema / properties / pageSize / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageSize / maximum
        Added value: +500
      • addedInput schema / properties / pageSize / minimum
        Added value: +1
      • addedInput schema / properties / pageSize / type
        Added value: +"integer"
    • Changedtwspaces-list_pages6 fields changed
      • removedInput schema / properties / pageOffset / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageOffset / type
        Added value: +"integer"
      • removedInput schema / properties / pageSize / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageSize / maximum
        Added value: +500
      • addedInput schema / properties / pageSize / minimum
        Added value: +1
      • addedInput schema / properties / pageSize / type
        Added value: +"integer"
    • Changedtwspaces-list_spaces6 fields changed
      • removedInput schema / properties / pageOffset / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageOffset / type
        Added value: +"integer"
      • removedInput schema / properties / pageSize / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageSize / maximum
        Added value: +500
      • addedInput schema / properties / pageSize / minimum
        Added value: +1
      • addedInput schema / properties / pageSize / type
        Added value: +"integer"
    • Changedtwspaces-list_tags6 fields changed
      • removedInput schema / properties / pageOffset / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageOffset / type
        Added value: +"integer"
      • removedInput schema / properties / pageSize / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageSize / maximum
        Added value: +500
      • addedInput schema / properties / pageSize / minimum
        Added value: +1
      • addedInput schema / properties / pageSize / type
        Added value: +"integer"
    • Changedtwspaces-search11 fields changed
      • removedInput schema / properties / includeDeleted / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / includeDeleted / type
        Added value: +"boolean"
      • removedInput schema / properties / pageOffset / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageOffset / type
        Added value: +"integer"
      • removedInput schema / properties / pageSize / anyOf
        Removed value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / pageSize / maximum
        Added value: +500
      • addedInput schema / properties / pageSize / minimum
        Added value: +1
      • addedInput schema / properties / pageSize / type
        Added value: +"integer"
      • removedInput schema / properties / spaceIds / anyOf
        Removed value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / spaceIds / items
        Added value: +{
        +  "type": "integer"
        +}
      • addedInput schema / properties / spaceIds / type
        Added value: +"array"
    • Changedtwspaces-update_category4 fields changed
      • removedInput schema / properties / color / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / color / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
    • Changedtwspaces-update_comment6 fields changed
      • removedInput schema / properties / content / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / content / type
        Added value: +"string"
      • removedInput schema / properties / isPrivate / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / isPrivate / type
        Added value: +"boolean"
      • removedInput schema / properties / state / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / state / type
        Added value: +"string"
    • Changedtwspaces-update_page22 fields changed
      • removedInput schema / properties / changeMessage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / changeMessage / type
        Added value: +"string"
      • removedInput schema / properties / content / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / content / type
        Added value: +"string"
      • removedInput schema / properties / draftVersion / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / draftVersion / type
        Added value: +"integer"
      • removedInput schema / properties / isFullWidth / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / isFullWidth / type
        Added value: +"boolean"
      • removedInput schema / properties / isMinorChange / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / isMinorChange / type
        Added value: +"boolean"
      • removedInput schema / properties / isPublish / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / isPublish / type
        Added value: +"boolean"
      • removedInput schema / properties / isRequiredReading / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / isRequiredReading / type
        Added value: +"boolean"
      • removedInput schema / properties / parentId / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / parentId / type
        Added value: +"integer"
      • removedInput schema / properties / readerInlineCommentsEnabled / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / readerInlineCommentsEnabled / type
        Added value: +"boolean"
      • removedInput schema / properties / slug / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / slug / type
        Added value: +"string"
      • removedInput schema / properties / title / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / title / type
        Added value: +"string"
    • Changedtwspaces-update_space16 fields changed
      • removedInput schema / properties / categoryId / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / categoryId / type
        Added value: +"integer"
      • removedInput schema / properties / code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / code / type
        Added value: +"string"
      • removedInput schema / properties / icon / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / icon / type
        Added value: +"string"
      • removedInput schema / properties / projectId / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / projectId / type
        Added value: +"integer"
      • removedInput schema / properties / purpose / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / purpose / type
        Added value: +"string"
      • removedInput schema / properties / spaceColor / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / spaceColor / type
        Added value: +"string"
      • removedInput schema / properties / state / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / state / type
        Added value: +"string"
      • removedInput schema / properties / title / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / title / type
        Added value: +"string"
    • Changedtwspaces-update_tag4 fields changed
      • removedInput schema / properties / color / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / color / type
        Added value: +"string"
      • removedInput schema / properties / name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / name / type
        Added value: +"string"
  5. 2 tool updatesv1.39.0
    • Changedtwprojects-count_tasks4 fields changed
      • addedInput schema / properties / date_filter
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "anytime",
        +        "overdue",
        +        "today",
        +        "tomorrow",
        +        "yesterday",
        +        "thisweek",
        +        "upcoming",
        +        "started",
        +        "within7",
        +        "within14",
        +        "within30",
        +        "within365",
        +        "nodate",
        +        "noduedate",
        +        "nostartdate",
        +        "hasdate"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Where the task's dates fall relative to today, in your own timezone. This is the filter for \"late\", \"overdue\", \"due today\", \"started\" and \"upcoming\"; omit it for no date restriction. overdue: due before today and not completed โ€” this is \"late\", and it never returns completed tasks whatever show_completed says. today: due today, without adding the overdue ones. thisweek: the calendar week containing today, the days of it already past included. upcoming: due today or later. started: the start date has arrived and the due date has not passed โ€” start date on or before today, and either no due date at all or one falling today or later. within7, within14, within30, within365: due between today and that many days from today, both days included. nodate: no start date, no due date and no milestone. anytime: no date restriction, what the endpoint applies when this is omitted. Completed tasks stay hidden unless show_completed is true, and overdue never returns one even then; for completed work alone use only_completed, which combines with any value here except overdue. A task with no due date of its own is matched on its milestone's."
        +}
      • addedInput schema / properties / exclude_assignee_user_ids
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Leave out tasks assigned to any of these users. A task is dropped when any one of the listed users is assigned to it, even when it also carries assignees you did not exclude. A user reached only through a team, company or job-role assignment on the task is not matched. Combines with assignee_user_ids and every other filter."
        +}
      • addedInput schema / properties / only_completed
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "If true, return only completed tasks. It combines with every other filter, date_filter included โ€” except date_filter=overdue, which never matches a completed task and so returns nothing. Tasks in completed tasklists still need show_completed."
        +}
      • addedInput schema / properties / start_after
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Only include tasks whose own start date falls on or after this date; the day itself matches. A task with no start date never matches โ€” there is no milestone fallback. There is no upper bound on the start date, so for work that has already begun use date_filter=started instead.",
        +  "examples": [
        +    "2023-01-01"
        +  ]
        +}
    • Changedtwprojects-list_tasks4 fields changed
      • addedInput schema / properties / date_filter
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "anytime",
        +        "overdue",
        +        "today",
        +        "tomorrow",
        +        "yesterday",
        +        "thisweek",
        +        "upcoming",
        +        "started",
        +        "within7",
        +        "within14",
        +        "within30",
        +        "within365",
        +        "nodate",
        +        "noduedate",
        +        "nostartdate",
        +        "hasdate"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Where the task's dates fall relative to today, in your own timezone. This is the filter for \"late\", \"overdue\", \"due today\", \"started\" and \"upcoming\"; omit it for no date restriction. overdue: due before today and not completed โ€” this is \"late\", and it never returns completed tasks whatever show_completed says. today: due today, without adding the overdue ones. thisweek: the calendar week containing today, the days of it already past included. upcoming: due today or later. started: the start date has arrived and the due date has not passed โ€” start date on or before today, and either no due date at all or one falling today or later. within7, within14, within30, within365: due between today and that many days from today, both days included. nodate: no start date, no due date and no milestone. anytime: no date restriction, what the endpoint applies when this is omitted. Completed tasks stay hidden unless show_completed is true, and overdue never returns one even then; for completed work alone use only_completed, which combines with any value here except overdue. A task with no due date of its own is matched on its milestone's."
        +}
      • addedInput schema / properties / exclude_assignee_user_ids
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Leave out tasks assigned to any of these users. A task is dropped when any one of the listed users is assigned to it, even when it also carries assignees you did not exclude. A user reached only through a team, company or job-role assignment on the task is not matched. Combines with assignee_user_ids and every other filter."
        +}
      • addedInput schema / properties / only_completed
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "If true, return only completed tasks. It combines with every other filter, date_filter included โ€” except date_filter=overdue, which never matches a completed task and so returns nothing. Tasks in completed tasklists still need show_completed."
        +}
      • addedInput schema / properties / start_after
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Only include tasks whose own start date falls on or after this date; the day itself matches. A task with no start date never matches โ€” there is no milestone fallback. There is no upper bound on the start date, so for work that has already begun use date_filter=started instead.",
        +  "examples": [
        +    "2023-01-01"
        +  ]
        +}
  6. 1 tool updatev1.38.1
    • Changedtwprojects-list_calendar_events4 fields changed
      • addedInput schema / properties / calendar_id / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / calendar_id / description
        Previous value: -"The ID of the calendar to list events from."New value: +"The ID of the calendar to list events from. Omit it for the calling user's own calendar: the connected Google or Outlook calendar when there is one, otherwise the calendar of type 'blocked_time'. Every event reports the calendar it came from."
      • removedInput schema / properties / calendar_id / type
        Removed value: -"integer"
      • removedInput schema / required
        Removed value: -[
        -  "calendar_id"
        -]
  7. 13 tool updatesv1.38.0
    • Changedtwprojects-create_comment1 field changed
      • changedInput schema / properties / notify / description
        Previous value: -"Who to notify of the new comment. Accepts the string \"all\" to notify all project members, the boolean true to notify all followers of the related entity, the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."New value: +"Who to notify of the new comment. Omit it unless the user named who to notify: the default notifies every follower of the related entity, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string \"all\" to notify all project members, the boolean true to notify all followers of the related entity, the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
    • Changedtwprojects-create_link1 field changed
      • changedInput schema / properties / notify / description
        Previous value: -"Who to notify of the new link. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."New value: +"Who to notify of the new link. Omit it unless the user named who to notify: the default notifies all project members, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
    • Changedtwprojects-create_message1 field changed
      • changedInput schema / properties / notify / description
        Previous value: -"Who to notify of the new message. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."New value: +"Who to notify of the new message. Omit it unless the user named who to notify: the default notifies all project members, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
    • Changedtwprojects-create_message_reply1 field changed
      • changedInput schema / properties / notify / description
        Previous value: -"Who to notify of the new reply. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."New value: +"Who to notify of the new reply. Omit it unless the user named who to notify: the default notifies all project members, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
    • Changedtwprojects-get_project3 fields changed
      • changedInput schema / properties / fields / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "description",
        -        "name",
        -        "startAt",
        -        "endAt",
        -        "category",
        -        "company",
        -        "projectOwner",
        -        "tags",
        -        "lastWorkedOn",
        -        "createdAt",
        -        "createdBy",
        -        "updatedAt",
        -        "updatedBy",
        -        "completedAt",
        -        "completedBy",
        -        "status",
        -        "isBillable",
        -        "type"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "enum": [
        +        "id",
        +        "description",
        +        "name",
        +        "startAt",
        +        "endAt",
        +        "category",
        +        "company",
        +        "projectOwner",
        +        "tags",
        +        "update",
        +        "lastWorkedOn",
        +        "createdAt",
        +        "createdBy",
        +        "updatedAt",
        +        "updatedBy",
        +        "completedAt",
        +        "completedBy",
        +        "status",
        +        "isBillable",
        +        "type"
        +      ],
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / included / properties / projectUpdates
        Added value: +{
        +  "type": "object"
        +}
      • addedOutput schema / properties / project / properties / update
        Added value: +{
        +  "properties": {
        +    "id": {
        +      "type": "integer"
        +    },
        +    "meta": {
        +      "type": "object"
        +    },
        +    "type": {
        +      "type": "string"
        +    }
        +  },
        +  "type": [
        +    "null",
        +    "object"
        +  ]
        +}
    • Changedtwprojects-list_activities2 fields changed
      • addedInput schema / properties / exclude_user_ids
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Exclude activities created by these users. Pass the current user's ID to drop their own activity from the feed."
        +}
      • addedInput schema / properties / user_ids
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Filter activities by the users who created them."
        +}
    • Changedtwprojects-list_project_templates2 fields changed
      • addedOutput schema / properties / included / properties / projectUpdates
        Added value: +{
        +  "type": "object"
        +}
      • addedOutput schema / properties / projects / items / properties / update
        Added value: +{
        +  "properties": {
        +    "id": {
        +      "type": "integer"
        +    },
        +    "meta": {
        +      "type": "object"
        +    },
        +    "type": {
        +      "type": "string"
        +    }
        +  },
        +  "type": [
        +    "null",
        +    "object"
        +  ]
        +}
    • Addedtwprojects-list_project_updates
    • Changedtwprojects-list_projects3 fields changed
      • changedInput schema / properties / fields / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "description",
        -        "name",
        -        "startAt",
        -        "endAt",
        -        "category",
        -        "company",
        -        "projectOwner",
        -        "tags",
        -        "lastWorkedOn",
        -        "createdAt",
        -        "createdBy",
        -        "updatedAt",
        -        "updatedBy",
        -        "completedAt",
        -        "completedBy",
        -        "status",
        -        "isBillable",
        -        "type"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "enum": [
        +        "id",
        +        "description",
        +        "name",
        +        "startAt",
        +        "endAt",
        +        "category",
        +        "company",
        +        "projectOwner",
        +        "tags",
        +        "update",
        +        "lastWorkedOn",
        +        "createdAt",
        +        "createdBy",
        +        "updatedAt",
        +        "updatedBy",
        +        "completedAt",
        +        "completedBy",
        +        "status",
        +        "isBillable",
        +        "type"
        +      ],
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / included / properties / projectUpdates
        Added value: +{
        +  "type": "object"
        +}
      • addedOutput schema / properties / projects / items / properties / update
        Added value: +{
        +  "properties": {
        +    "id": {
        +      "type": "integer"
        +    },
        +    "meta": {
        +      "type": "object"
        +    },
        +    "type": {
        +      "type": "string"
        +    }
        +  },
        +  "type": [
        +    "null",
        +    "object"
        +  ]
        +}
    • Changedtwprojects-update_comment1 field changed
      • changedInput schema / properties / notify / description
        Previous value: -"Who to notify of the comment change. Accepts the string \"all\" to notify all project members, the boolean true to notify all followers of the related entity, the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."New value: +"Who to notify of the comment change. Omit it unless the user named who to notify: the default notifies every follower of the related entity, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string \"all\" to notify all project members, the boolean true to notify all followers of the related entity, the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
    • Changedtwprojects-update_link1 field changed
      • changedInput schema / properties / notify / description
        Previous value: -"Who to notify of the link update. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."New value: +"Who to notify of the link update. Omit it unless the user named who to notify: the default notifies all project members, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
    • Changedtwprojects-update_message1 field changed
      • changedInput schema / properties / notify / description
        Previous value: -"Who to notify of the message update. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."New value: +"Who to notify of the message update. Omit it unless the user named who to notify: the default notifies all project members, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
    • Changedtwprojects-update_message_reply1 field changed
      • changedInput schema / properties / notify / description
        Previous value: -"Who to notify of the reply update. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."New value: +"Who to notify of the reply update. Omit it unless the user named who to notify: the default notifies all project members, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
  8. 21 tool updatesv1.37.0
    • Changedtwprojects-add_project_file1 field changed
      • changedInput schema / properties / reference / description
        Previous value: -"The reference of an uploaded file, as returned by twprojects-create_upload_url or twprojects-create_file. It looks like \"tf_1a2b\" and can only be used once."New value: +"The reference of an uploaded file, as returned by twprojects-create_upload_url or twprojects-create_file. It is \"tf_\" followed by a UUID and the file extension, and can only be used once."
    • Changedtwprojects-count_projects1 field changed
      • changedInput schema / properties / updated_after / description
        Previous value: -"Filter projects updated after. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Only include projects whose last activity is strictly after this moment; the boundary itself does not match. Any activity in the project counts, not just edits to the project record. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
    • Changedtwprojects-count_tasks8 fields changed
      • changedInput schema / properties / completed_after / description
        Previous value: -"Filter tasks completed after. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Only include tasks completed at or after this moment; the boundary itself matches. Setting it narrows the result to completed tasks. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / completed_before / description
        Previous value: -"Filter tasks completed before. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Only include tasks completed at or before this moment; the boundary itself matches. Setting it narrows the result to completed tasks. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / created_after / description
        Previous value: -"Filter tasks created after. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Only include tasks created at or after this moment; the boundary itself matches. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / created_before / description
        Previous value: -"Filter tasks created before. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Only include tasks created at or before this moment; the boundary itself matches. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / due_after / description
        Previous value: -"Filter tasks due after."New value: +"Only include tasks due after this date, excluding the day itself โ€” unless due_before is set too, which makes both bounds inclusive. A task with no due date is matched on its milestone's."
      • changedInput schema / properties / due_before / description
        Previous value: -"Filter tasks due before."New value: +"Only include tasks due before this date, excluding the day itself โ€” unless due_after is set too, which makes both bounds inclusive. A task with no due date is matched on its milestone's."
      • changedInput schema / properties / updated_after / description
        Previous value: -"Filter tasks updated after. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Only include tasks updated strictly after this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / updated_before / description
        Previous value: -"Filter tasks updated before. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Only include tasks updated strictly before this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
    • Changedtwprojects-count_timelogs2 fields changed
      • changedInput schema / properties / end_date / description
        Previous value: -"End of the timelog window. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"End of the timelog window; the boundary itself is included, and a plain date covers that whole day. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / start_date / description
        Previous value: -"Start of the timelog window. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Start of the timelog window; the boundary itself is included. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
    • Changedtwprojects-create_comment1 field changed
      • changedInput schema / properties / attachment_refs / description
        Previous value: -"References of files to attach to the comment, as returned by twprojects-create_file. Each looks like \"tf_1a2b\" and can only be used once, so upload a file for each place it should go. Files are added to whatever is already attached; nothing is removed."New value: +"References of files to attach to the comment, as returned by twprojects-create_upload_url or twprojects-create_file. Each is \"tf_\" followed by a UUID and the file extension, and can only be used once, so reserve an upload for each place a file should go. Files are added to whatever is already attached; nothing is removed."
    • Changedtwprojects-create_message1 field changed
      • changedInput schema / properties / attachment_refs / description
        Previous value: -"References of files to attach to the message, as returned by twprojects-create_file. Each looks like \"tf_1a2b\" and can only be used once, so upload a file for each place it should go. Files are added to whatever is already attached; nothing is removed."New value: +"References of files to attach to the message, as returned by twprojects-create_upload_url or twprojects-create_file. Each is \"tf_\" followed by a UUID and the file extension, and can only be used once, so reserve an upload for each place a file should go. Files are added to whatever is already attached; nothing is removed."
    • Changedtwprojects-create_milestone3 fields changed
      • changedInput schema / properties / assignees / anyOf
        Previous value: -[
        -  {
        -    "required": [
        -      "user_ids"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "company_ids"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "team_ids"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "job_role_ids"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "required": [
        +      "user_ids"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "company_ids"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "team_ids"
        +    ]
        +  }
        +]
      • changedInput schema / properties / assignees / maxProperties
        Previous value: -4New value: +3
      • removedInput schema / properties / assignees / properties / job_role_ids
        Removed value: -{
        -  "items": {
        -    "type": "integer"
        -  },
        -  "minItems": 1,
        -  "type": "array"
        -}
    • Changedtwprojects-create_task3 fields changed
      • changedInput schema / properties / attachment_refs / description
        Previous value: -"References of files to attach to the task, as returned by twprojects-create_file. Each looks like \"tf_1a2b\" and can only be used once, so upload a file for each place it should go. Files are added to whatever is already attached; nothing is removed."New value: +"References of files to attach to the task, as returned by twprojects-create_upload_url or twprojects-create_file. Each is \"tf_\" followed by a UUID and the file extension, and can only be used once, so reserve an upload for each place a file should go. Files are added to whatever is already attached; nothing is removed."
      • addedInput schema / properties / stage_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The ID of the workflow stage to place the new task in. Required together with workflow_id. Omit both to leave the task in the workflow's backlog. Use twprojects-list_workflow_stages to find one."
        +}
      • addedInput schema / properties / workflow_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The ID of the workflow to place the new task in a stage of. Required together with stage_id, and must be a workflow attached to the task's own project: another one is ignored and the task lands in the backlog, with nothing in the response saying so. Use twprojects-list_workflows to find one."
        +}
    • Changedtwprojects-list_activities2 fields changed
      • changedInput schema / properties / end_date / description
        Previous value: -"End of the activity window. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"End of the activity window; the boundary itself is included, and a plain date covers that whole day. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / start_date / description
        Previous value: -"Start of the activity window. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Start of the activity window; the boundary itself is included. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
    • Changedtwprojects-list_allocations2 fields changed
      • changedInput schema / properties / deleted_after / description
        Previous value: -"Only return allocations deleted after this moment. Pair it with show_deleted, which is what switches the results to deleted allocations. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Only return allocations deleted at or after this moment; the boundary itself matches, unlike updated_after. Pair it with show_deleted, which is what switches the results to deleted allocations. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / updated_after / description
        Previous value: -"Only return allocations updated after this moment. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Only return allocations updated strictly after this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
    • Changedtwprojects-list_calendar_events2 fields changed
      • changedInput schema / properties / ended_before_date / description
        Previous value: -"Filter events that end before this date (format: YYYY-MM-DD)."New value: +"Only include events ending before this day starts, so the day named here is itself excluded โ€” pass the day after the last one you want (format: YYYY-MM-DD). Note the asymmetry with started_after_date."
      • changedInput schema / properties / started_after_date / description
        Previous value: -"Filter events that start after this date (format: YYYY-MM-DD)."New value: +"Only include events starting on or after this day, which is itself included (format: YYYY-MM-DD)."
    • Changedtwprojects-list_comments1 field changed
      • changedInput schema / properties / updated_after / description
        Previous value: -"Filter comments updated after. Defaults to the last 3 months. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Only include comments edited strictly after this moment; the boundary itself does not match. Defaults to the last 3 months. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
    • Changedtwprojects-list_projects1 field changed
      • changedInput schema / properties / updated_after / description
        Previous value: -"Filter projects updated after. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Only include projects whose last activity is strictly after this moment; the boundary itself does not match. Any activity in the project counts, not just edits to the project record. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
    • Changedtwprojects-list_tasks8 fields changed
      • changedInput schema / properties / completed_after / description
        Previous value: -"Filter tasks completed after. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Only include tasks completed at or after this moment; the boundary itself matches. Setting it narrows the result to completed tasks. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / completed_before / description
        Previous value: -"Filter tasks completed before. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Only include tasks completed at or before this moment; the boundary itself matches. Setting it narrows the result to completed tasks. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / created_after / description
        Previous value: -"Filter tasks created after. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Only include tasks created at or after this moment; the boundary itself matches. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / created_before / description
        Previous value: -"Filter tasks created before. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Only include tasks created at or before this moment; the boundary itself matches. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / due_after / description
        Previous value: -"Filter tasks due after."New value: +"Only include tasks due after this date, excluding the day itself โ€” unless due_before is set too, which makes both bounds inclusive. A task with no due date is matched on its milestone's."
      • changedInput schema / properties / due_before / description
        Previous value: -"Filter tasks due before."New value: +"Only include tasks due before this date, excluding the day itself โ€” unless due_after is set too, which makes both bounds inclusive. A task with no due date is matched on its milestone's."
      • changedInput schema / properties / updated_after / description
        Previous value: -"Filter tasks updated after. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Only include tasks updated strictly after this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / updated_before / description
        Previous value: -"Filter tasks updated before. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Only include tasks updated strictly before this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
    • Changedtwprojects-list_timelogs2 fields changed
      • changedInput schema / properties / end_date / description
        Previous value: -"End of the timelog window. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"End of the timelog window; the boundary itself is included, and a plain date covers that whole day. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / start_date / description
        Previous value: -"Start of the timelog window. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Start of the timelog window; the boundary itself is included. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
    • Changedtwprojects-move_task_to_workflow_stage1 field changed
      • changedInput schema / properties / task_ids / description
        Previous value: -"The IDs of the tasks to move. At least one is needed; all of them move in a single call."New value: +"The IDs of the tasks to move. At least one is needed; each is appended to the end of the stage in the order given. The workflow must be attached to the project the task belongs to."
    • Changedtwprojects-search4 fields changed
      • removedInput schema / properties / include
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {
        -        "enum": [
        -          "comments",
        -          "companies",
        -          "links",
        -          "messages",
        -          "milestones",
        -          "notebooks",
        -          "projects",
        -          "tasklists",
        -          "tasks",
        -          "teams",
        -          "timelogs",
        -          "users"
        -        ],
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Entity types to return as full records in the response sideloads. Defaults to all supported types; narrow it to the types of interest to keep the response small."
        -}
      • addedInput schema / properties / sideload
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "comments",
        +          "companies",
        +          "links",
        +          "messages",
        +          "milestones",
        +          "notebooks",
        +          "projects",
        +          "tasklists",
        +          "tasks",
        +          "teams",
        +          "timelogs",
        +          "users"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Which of the matched records are expanded into full records under the response's included section. It never changes which records are found โ€” use types for that. Defaults to every type listed; a hit whose type is left out comes back as a bare {id, type} pair with no name."
        +}
      • addedInput schema / properties / types
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "projects",
        +          "tasks",
        +          "tasklists",
        +          "milestones",
        +          "messages",
        +          "notebooks",
        +          "links",
        +          "comments",
        +          "taskcomments",
        +          "milestonecomments",
        +          "filecomments",
        +          "linkcomments",
        +          "notebookcomments",
        +          "timelogs",
        +          "users",
        +          "teams",
        +          "companies"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Entity types to search. Only records of these types are found. Omit it to search every type."
        +}
      • changedInput schema / properties / updated_after / description
        Previous value: -"Only include items updated after this date. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."New value: +"Only include items updated strictly after this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
    • Changedtwprojects-summarize_timelogs8 fields changed
      • changedInput schema / properties / group_by / description
        Previous value: -"Dimension to group totals by. Defaults to user."New value: +"Dimension to group by. Defaults to user. user, project and task fill groups; day, week and month fill periods. Filter a task grouping on a busy account."
      • changedInput schema / properties / group_by / enum
        Previous value: -[
        -  "user",
        -  "project"
        -]New value: +[
        +  "user",
        +  "project",
        +  "task",
        +  "day",
        +  "week",
        +  "month"
        +]
      • changedInput schema / properties / order_by / description
        Previous value: -"The field to sort the summary rows by. Omit to keep the ordering the API applies by default."New value: +"The field to sort the summary rows by. Omit to keep the ordering the API applies by default. Rejected for day, week and month: period rows are chronological."
      • changedInput schema / properties / order_mode / description
        Previous value: -"The direction to sort the results in."New value: +"The direction to sort the results in. Rejected for day, week and month: period rows are chronological."
      • addedOutput schema / properties / groups / description
        Added value: +"Entity rows; empty for a day, week or month grouping."
      • addedOutput schema / properties / periods
        Added value: +{
        +  "description": "Period rows, chronological; empty for an entity grouping.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "billableHours": {
        +        "type": "number"
        +      },
        +      "billableMinutes": {
        +        "type": "integer"
        +      },
        +      "billedHours": {
        +        "type": "number"
        +      },
        +      "billedMinutes": {
        +        "type": "integer"
        +      },
        +      "endDate": {
        +        "type": "string"
        +      },
        +      "loggedHours": {
        +        "type": "number"
        +      },
        +      "loggedMinutes": {
        +        "type": "integer"
        +      },
        +      "nonBillableHours": {
        +        "type": "number"
        +      },
        +      "nonBillableMinutes": {
        +        "type": "integer"
        +      },
        +      "startDate": {
        +        "type": "string"
        +      },
        +      "unbilledBillableHours": {
        +        "type": "number"
        +      },
        +      "unbilledBillableMinutes": {
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "startDate",
        +      "endDate",
        +      "loggedMinutes",
        +      "loggedHours",
        +      "billableMinutes",
        +      "billableHours",
        +      "nonBillableMinutes",
        +      "nonBillableHours",
        +      "billedMinutes",
        +      "billedHours",
        +      "unbilledBillableMinutes",
        +      "unbilledBillableHours"
        +    ],
        +    "type": "object"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
      • addedOutput schema / properties / totals / properties / groupCount / description
        Added value: +"Number of rows returned."
      • changedOutput schema / required
        Previous value: -[
        -  "scope",
        -  "totals",
        -  "groups"
        -]New value: +[
        +  "scope",
        +  "totals",
        +  "groups",
        +  "periods"
        +]
    • Changedtwprojects-update_milestone1 field changed
      • changedInput schema / properties / assignees / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "job_role_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 4,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "job_role_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 3,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedtwprojects-update_task1 field changed
      • changedInput schema / properties / attachment_refs / description
        Previous value: -"References of files to attach to the task, as returned by twprojects-create_file. Each looks like \"tf_1a2b\" and can only be used once, so upload a file for each place it should go. Files are added to whatever is already attached; nothing is removed."New value: +"References of files to attach to the task, as returned by twprojects-create_upload_url or twprojects-create_file. Each is \"tf_\" followed by a UUID and the file extension, and can only be used once, so reserve an upload for each place a file should go. Files are added to whatever is already attached; nothing is removed."
    • Changedtwprojects-users_workload2 fields changed
      • changedInput schema / properties / end_date / description
        Previous value: -"End of the workload period."New value: +"End of the workload period; the boundary day itself is included."
      • changedInput schema / properties / start_date / description
        Previous value: -"Start of the workload period."New value: +"Start of the workload period; the boundary day itself is included."
  9. 11 tool updatesv1.35.0
    • Addedtwprojects-add_project_file
    • Changedtwprojects-count_milestones3 fields changed
      • addedInput schema / properties / due_after
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Only include milestones with a deadline on or after this date."
        +}
      • addedInput schema / properties / due_before
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Only include milestones with a deadline on or before this date."
        +}
      • addedInput schema / properties / show_completed
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": true,
        +  "description": "If false, only return milestones that are not completed yet. Included by default, unlike the task and tasklist lists."
        +}
    • Changedtwprojects-count_timelogs2 fields changed
      • addedInput schema / properties / billable_type
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "all",
        +        "billable",
        +        "nonbillable"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Restrict the results to billable or non-billable timelogs. Omit, or pass all, to include both. For billable hours rather than the entries themselves, twprojects-summarize_timelogs reports them without paging."
        +}
      • addedInput schema / properties / invoiced_type
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "all",
        +        "invoiced",
        +        "noninvoiced"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Restrict the results to timelogs that have or have not been added to an invoice. Omit, or pass all, to include both. Invoiced is not the same as billed: noninvoiced answers \"what is still to be invoiced\" only for billable time, so pass billable_type alongside it."
        +}
    • Changedtwprojects-create_task1 field changed
      • addedInput schema / properties / attachment_file_ids
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "IDs of files already in a project's files area to attach to the task, as returned by twprojects-add_project_file. Unlike a reference these can be used repeatedly, so this is how one file reaches several tasks. Files are added to whatever is already attached; nothing is removed."
        +}
    • Addedtwprojects-create_upload_url
    • Changedtwprojects-list_milestones3 fields changed
      • addedInput schema / properties / due_after
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Only include milestones with a deadline on or after this date."
        +}
      • addedInput schema / properties / due_before
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Only include milestones with a deadline on or before this date."
        +}
      • addedInput schema / properties / show_completed
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": true,
        +  "description": "If false, only return milestones that are not completed yet. Included by default, unlike the task and tasklist lists."
        +}
    • Changedtwprojects-list_timelogs2 fields changed
      • addedInput schema / properties / billable_type
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "all",
        +        "billable",
        +        "nonbillable"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Restrict the results to billable or non-billable timelogs. Omit, or pass all, to include both. For billable hours rather than the entries themselves, twprojects-summarize_timelogs reports them without paging."
        +}
      • addedInput schema / properties / invoiced_type
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "all",
        +        "invoiced",
        +        "noninvoiced"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Restrict the results to timelogs that have or have not been added to an invoice. Omit, or pass all, to include both. Invoiced is not the same as billed: noninvoiced answers \"what is still to be invoiced\" only for billable time, so pass billable_type alongside it."
        +}
    • Changedtwprojects-update_message1 field changed
      • removedInput schema / properties / project_id
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "The ID of the project to create the message in."
        -}
    • Changedtwprojects-update_task1 field changed
      • addedInput schema / properties / attachment_file_ids
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "IDs of files already in a project's files area to attach to the task, as returned by twprojects-add_project_file. Unlike a reference these can be used repeatedly, so this is how one file reaches several tasks. Files are added to whatever is already attached; nothing is removed."
        +}
    • Changedtwprojects-update_team1 field changed
      • changedInput schema / properties / parent_team_id / description
        Previous value: -"The ID of the parent team. This is used to create a hierarchy of teams."New value: +"The ID of the parent team, which places this team in a hierarchy. Pass 0 to move the team back to the top level."
    • Changedtwprojects-update_timelog3 fields changed
      • addedInput schema / properties / clear_task
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Set to true to detach the timelog from its task, leaving it logged against the project. Cannot be combined with task_id."
        +}
      • changedInput schema / properties / project_id / description
        Previous value: -"Project the timelog is logged against. Provide exactly one of project_id or task_id."New value: +"Move the timelog to this project. The API takes the project from the task whenever the timelog is logged against one, so pass clear_task alongside it to move a timelog off its task."
      • changedInput schema / properties / task_id / description
        Previous value: -"Task the timelog is logged against. Provide exactly one of project_id or task_id."New value: +"Move the timelog to this task, and with it to the task's own project."
  10. 13 tool updatesv1.33.1
    • Addedtwprojects-create_allocation
    • Addedtwprojects-get_allocation
    • Changedtwprojects-get_task2 fields changed
      • changedInput schema / properties / fields / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "description",
        -        "descriptionContentType",
        -        "priority",
        -        "progress",
        -        "startDate",
        -        "dueDate",
        -        "estimateMinutes",
        -        "tasklist",
        -        "parentTask",
        -        "assignees",
        -        "tags",
        -        "predecessors",
        -        "workflowStages",
        -        "createdBy",
        -        "createdAt",
        -        "updatedBy",
        -        "updatedAt",
        -        "deletedBy",
        -        "deletedAt",
        -        "completedBy",
        -        "completedAt",
        -        "status"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "enum": [
        +        "id",
        +        "name",
        +        "description",
        +        "descriptionContentType",
        +        "priority",
        +        "progress",
        +        "startDate",
        +        "dueDate",
        +        "estimateMinutes",
        +        "tasklist",
        +        "parentTask",
        +        "assignees",
        +        "tags",
        +        "predecessors",
        +        "subTaskIds",
        +        "workflowStages",
        +        "createdBy",
        +        "createdAt",
        +        "updatedBy",
        +        "updatedAt",
        +        "deletedBy",
        +        "deletedAt",
        +        "completedBy",
        +        "completedAt",
        +        "status"
        +      ],
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / task / properties / subTaskIds
        Added value: +{
        +  "items": {
        +    "type": "integer"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
    • Addedtwprojects-link_task_to_allocation
    • Addedtwprojects-list_allocations
    • Changedtwprojects-list_project_templates1 field changed
      • addedOutput schema / properties / suggestions
        Added value: +{
        +  "description": "Present only when search_term was supplied and the result list came back empty. Entities whose name matches the term, most relevant first, so the term can be recognised instead of treated as unknown. A candidate may be of another type than the one listed, or of the same type but excluded by this tool's filters โ€” completed items are searched regardless of show_completed, so a candidate says nothing about completion. Read it with the entity type's own get tool.",
        +  "items": {
        +    "properties": {
        +      "id": {
        +        "description": "The ID of the candidate.",
        +        "type": "integer"
        +      },
        +      "name": {
        +        "description": "The name of the candidate.",
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "The entity type of the candidate.",
        +        "enum": [
        +          "project",
        +          "task",
        +          "tasklist",
        +          "milestone",
        +          "notebook",
        +          "message",
        +          "link",
        +          "company",
        +          "team",
        +          "user"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedtwprojects-list_projects1 field changed
      • addedOutput schema / properties / suggestions
        Added value: +{
        +  "description": "Present only when search_term was supplied and the result list came back empty. Entities whose name matches the term, most relevant first, so the term can be recognised instead of treated as unknown. A candidate may be of another type than the one listed, or of the same type but excluded by this tool's filters โ€” completed items are searched regardless of show_completed, so a candidate says nothing about completion. Read it with the entity type's own get tool.",
        +  "items": {
        +    "properties": {
        +      "id": {
        +        "description": "The ID of the candidate.",
        +        "type": "integer"
        +      },
        +      "name": {
        +        "description": "The name of the candidate.",
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "The entity type of the candidate.",
        +        "enum": [
        +          "project",
        +          "task",
        +          "tasklist",
        +          "milestone",
        +          "notebook",
        +          "message",
        +          "link",
        +          "company",
        +          "team",
        +          "user"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedtwprojects-list_tasklists1 field changed
      • addedOutput schema / properties / suggestions
        Added value: +{
        +  "description": "Present only when search_term was supplied and the result list came back empty. Entities whose name matches the term, most relevant first, so the term can be recognised instead of treated as unknown. A candidate may be of another type than the one listed, or of the same type but excluded by this tool's filters โ€” completed items are searched regardless of show_completed, so a candidate says nothing about completion. Read it with the entity type's own get tool.",
        +  "items": {
        +    "properties": {
        +      "id": {
        +        "description": "The ID of the candidate.",
        +        "type": "integer"
        +      },
        +      "name": {
        +        "description": "The name of the candidate.",
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "The entity type of the candidate.",
        +        "enum": [
        +          "project",
        +          "task",
        +          "tasklist",
        +          "milestone",
        +          "notebook",
        +          "message",
        +          "link",
        +          "company",
        +          "team",
        +          "user"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedtwprojects-list_tasks3 fields changed
      • changedInput schema / properties / fields / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "description",
        -        "descriptionContentType",
        -        "priority",
        -        "progress",
        -        "startDate",
        -        "dueDate",
        -        "estimateMinutes",
        -        "tasklist",
        -        "parentTask",
        -        "assignees",
        -        "tags",
        -        "predecessors",
        -        "workflowStages",
        -        "createdBy",
        -        "createdAt",
        -        "updatedBy",
        -        "updatedAt",
        -        "deletedBy",
        -        "deletedAt",
        -        "completedBy",
        -        "completedAt",
        -        "status"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "enum": [
        +        "id",
        +        "name",
        +        "description",
        +        "descriptionContentType",
        +        "priority",
        +        "progress",
        +        "startDate",
        +        "dueDate",
        +        "estimateMinutes",
        +        "tasklist",
        +        "parentTask",
        +        "assignees",
        +        "tags",
        +        "predecessors",
        +        "subTaskIds",
        +        "workflowStages",
        +        "createdBy",
        +        "createdAt",
        +        "updatedBy",
        +        "updatedAt",
        +        "deletedBy",
        +        "deletedAt",
        +        "completedBy",
        +        "completedAt",
        +        "status"
        +      ],
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / suggestions
        Added value: +{
        +  "description": "Present only when search_term was supplied and the result list came back empty. Entities whose name matches the term, most relevant first, so the term can be recognised instead of treated as unknown. A candidate may be of another type than the one listed, or of the same type but excluded by this tool's filters โ€” completed items are searched regardless of show_completed, so a candidate says nothing about completion. Read it with the entity type's own get tool.",
        +  "items": {
        +    "properties": {
        +      "id": {
        +        "description": "The ID of the candidate.",
        +        "type": "integer"
        +      },
        +      "name": {
        +        "description": "The name of the candidate.",
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "The entity type of the candidate.",
        +        "enum": [
        +          "project",
        +          "task",
        +          "tasklist",
        +          "milestone",
        +          "notebook",
        +          "message",
        +          "link",
        +          "company",
        +          "team",
        +          "user"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / tasks / items / properties / subTaskIds
        Added value: +{
        +  "items": {
        +    "type": "integer"
        +  },
        +  "type": [
        +    "null",
        +    "array"
        +  ]
        +}
    • Addedtwprojects-restore_allocation
    • Changedtwprojects-search1 field changed
      • changedInput schema / properties / include_completed_items / description
        Previous value: -"Whether to include completed items in the search results."New value: +"Whether to include completed items in the search results. Excluded by default."
    • Addedtwprojects-unlink_task_from_allocation
    • Addedtwprojects-update_allocation
  11. 50 tool updatesv1.31.0
    • Addedtwdesk-link_task_to_ticket
    • Addedtwdesk-unlink_task_from_ticket
    • Addedtwprojects-count_milestones
    • Addedtwprojects-count_projects
    • Addedtwprojects-count_tasks
    • Addedtwprojects-count_timelogs
    • Changedtwprojects-create_comment1 field changed
      • addedInput schema / properties / attachment_refs
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "References of files to attach to the comment, as returned by twprojects-create_file. Each looks like \"tf_1a2b\" and can only be used once, so upload a file for each place it should go. Files are added to whatever is already attached; nothing is removed."
        +}
    • Addedtwprojects-create_file
    • Changedtwprojects-create_message1 field changed
      • addedInput schema / properties / attachment_refs
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "References of files to attach to the message, as returned by twprojects-create_file. Each looks like \"tf_1a2b\" and can only be used once, so upload a file for each place it should go. Files are added to whatever is already attached; nothing is removed."
        +}
    • Changedtwprojects-create_tag1 field changed
      • addedInput schema / properties / color
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The color of the tag. It must be a valid hex color code."
        +}
    • Changedtwprojects-create_task1 field changed
      • addedInput schema / properties / attachment_refs
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "References of files to attach to the task, as returned by twprojects-create_file. Each looks like \"tf_1a2b\" and can only be used once, so upload a file for each place it should go. Files are added to whatever is already attached; nothing is removed."
        +}
    • Changedtwprojects-get_tag2 fields changed
      • addedOutput schema / properties / tag / properties / color
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / properties / tag / required
        Previous value: -[
        -  "id",
        -  "name",
        -  "project"
        -]New value: +[
        +  "id",
        +  "name",
        +  "color",
        +  "project"
        +]
    • Changedtwprojects-get_team5 fields changed
      • removedOutput schema / properties / team / properties / deletedDate / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / team / properties / deletedDate / description
        Added value: +"Null or RFC3339 date-time string. Null when the value is unset."
      • addedOutput schema / properties / team / properties / deletedDate / format
        Added value: +"date-time"
      • removedOutput schema / properties / team / properties / deletedDate / properties
        Removed value: -{}
      • changedOutput schema / properties / team / properties / deletedDate / type
        Previous value: -[
        -  "null",
        -  "object"
        -]New value: +[
        +  "null",
        +  "string"
        +]
    • Changedtwprojects-list_activities6 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching activities, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedInput schema / properties / item_ids
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Filter activities by the IDs of the items they refer to, such as task, milestone or message IDs. Item IDs are only unique within an item type, so combine this with log_item_types to avoid matching activities of other types that happen to share an ID."
        +}
      • addedInput schema / properties / order_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "date",
        +        "projectId",
        +        "userId",
        +        "activityTypes",
        +        "id"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The field to sort the activities by. Omit to keep the ordering the API applies by default."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_calendar_events2 fields changed
      • addedInput schema / properties / order_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "startTime",
        +        "updated",
        +        "id"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The field to sort the calendar events by. Omit to keep the ordering the API applies by default."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
    • Changedtwprojects-list_calendars5 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching calendars, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedInput schema / properties / order_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "name",
        +        "id"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The field to sort the calendars by. Omit to keep the ordering the API applies by default."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_comments5 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching comments, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedInput schema / properties / order_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "all",
        +        "date",
        +        "project",
        +        "user",
        +        "type",
        +        "id"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The field to sort the comments by. Omit to keep the ordering the API applies by default."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_companies6 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching companies, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedInput schema / properties / order_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "name",
        +        "accounts",
        +        "clients",
        +        "collaborators",
        +        "contacts",
        +        "projects",
        +        "tasks",
        +        "country",
        +        "health",
        +        "website",
        +        "email",
        +        "phone",
        +        "fax",
        +        "industry",
        +        "dateadded",
        +        "ownercompany",
        +        "ownername",
        +        "taskscompletion",
        +        "customfield",
        +        "id"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The field to sort the companies by. Omit to keep the ordering the API applies by default."
        +}
      • addedInput schema / properties / order_by_custom_field_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The custom field to sort the companies by. Required when order_by is \"customfield\", and ignored otherwise."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_custom_field_values3 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching custom field values, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_custom_fields5 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching custom fields, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • changedInput schema / properties / order_by / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "name",
        -      "project",
        -      "datecreated",
        -      "dateupdated"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "name",
        +      "project",
        +      "datecreated",
        +      "dateupdated",
        +      "id"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / order_by / description
        Previous value: -"The field to sort the results by."New value: +"The field to sort the custom fields by. Omit to keep the ordering the API applies by default."
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_custom_item_fields4 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching custom item fields, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • changedInput schema / properties / order_mode / description
        Previous value: -"The direction to order the results by (asc, desc)."New value: +"The direction to sort the results in."
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_custom_item_records7 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching custom item records, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • changedInput schema / properties / order_by / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "name",
        -      "displayorder",
        -      "customitemfield"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "displayorder",
        +      "name",
        +      "customitemfield",
        +      "id"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / order_by / description
        Previous value: -"Field to sort by."New value: +"The field to sort the custom item records by. Omit to keep the ordering the API applies by default."
      • addedInput schema / properties / order_by_field_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The custom field to sort the records by. Required when order_by is \"customitemfield\", and ignored otherwise."
        +}
      • changedInput schema / properties / order_mode / description
        Previous value: -"The direction to order the results by (asc, desc)."New value: +"The direction to sort the results in."
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_custom_items6 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching custom items, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • changedInput schema / properties / order_by / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "name"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "name",
        +      "id"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / order_by / description
        Previous value: -"Field to sort by."New value: +"The field to sort the custom items by. Omit to keep the ordering the API applies by default."
      • changedInput schema / properties / order_mode / description
        Previous value: -"The direction to order the results by (asc, desc)."New value: +"The direction to sort the results in."
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_jobroles4 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching job roles, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_message_replies5 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching message replies, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedInput schema / properties / order_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "createdat",
        +        "id"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The field to sort the message replies by. Omit to keep the ordering the API applies by default."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_messages5 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching messages, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedInput schema / properties / order_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "createdat",
        +        "updatedat",
        +        "category",
        +        "project",
        +        "createdby",
        +        "unread",
        +        "id"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The field to sort the messages by. Omit to keep the ordering the API applies by default."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_milestones5 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching milestones, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedInput schema / properties / order_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "date",
        +        "dateonly",
        +        "name",
        +        "project",
        +        "user",
        +        "dateCreated",
        +        "dateUpdated",
        +        "id"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The field to sort the milestones by. Omit to keep the ordering the API applies by default."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_notebooks5 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching notebooks, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedInput schema / properties / order_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "name",
        +        "project",
        +        "dateCreated",
        +        "dateUpdated",
        +        "category",
        +        "id"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The field to sort the notebooks by. Omit to keep the ordering the API applies by default."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_project_budgets5 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching project budgets, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • changedOutput schema / properties / meta / properties / page / properties / count / type
        Previous value: -"integer"New value: +[
        +  "null",
        +  "integer"
        +]
      • removedOutput schema / properties / meta / properties / page / properties / pageOffset
        Removed value: -{
        -  "type": "integer"
        -}
      • removedOutput schema / properties / meta / properties / page / properties / pageSize
        Removed value: -{
        -  "type": "integer"
        -}
    • Changedtwprojects-list_project_categories3 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching project categories, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_project_templates2 fields changed
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_projects20 fields changed
      • addedInput schema / properties / company_ids
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Filter projects by the company that owns them."
        +}
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching projects, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedInput schema / properties / hide_observed
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "If true, leave out the projects the calling user only observes, keeping the ones they actually work on."
        +}
      • addedInput schema / properties / include_archived
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "If true, return archived projects alongside the active ones; excluded by default."
        +}
      • addedInput schema / properties / include_subcategories
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "If true, project_category_ids also matches the categories nested under the ones given."
        +}
      • addedInput schema / properties / include_tentative
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "If true, return tentative projects alongside the normal ones; excluded by default."
        +}
      • addedInput schema / properties / only_admin_access
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "If true, only return the projects the calling user administers."
        +}
      • addedInput schema / properties / only_archived
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "If true, only return archived projects."
        +}
      • addedInput schema / properties / only_starred
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "If true, only return the projects the calling user has starred."
        +}
      • addedInput schema / properties / order_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "budgetused",
        +        "categoryname",
        +        "companyname",
        +        "creatorname",
        +        "customfield",
        +        "datecreated",
        +        "duedate",
        +        "health",
        +        "lastactivity",
        +        "lastworkedon",
        +        "mobilespecial",
        +        "name",
        +        "namecaseinsensitive",
        +        "ownercompany",
        +        "ownername",
        +        "starred",
        +        "starredcompanyname",
        +        "starredfirst",
        +        "startdate",
        +        "status",
        +        "taskcompletion",
        +        "id"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The field to sort the projects by. Omit to keep the ordering the API applies by default."
        +}
      • addedInput schema / properties / order_by_custom_field_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The custom field to sort the projects by. Required when order_by is \"customfield\", and ignored otherwise."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
      • addedInput schema / properties / project_healths
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "good",
        +          "ok",
        +          "bad",
        +          "not_set"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Filter projects by the health rating set on them, matching any of the values given. \"not_set\" matches the projects nobody has rated."
        +}
      • addedInput schema / properties / project_owner_ids
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Filter projects by the user who owns them."
        +}
      • addedInput schema / properties / project_statuses
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "active",
        +          "current",
        +          "late",
        +          "upcoming",
        +          "completed",
        +          "deleted"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Filter projects by progress state, matching any of the values given. \"late\" is past its end date and not yet completed, \"upcoming\" has not started yet, \"current\" is running now, and \"active\" is every project that is neither completed nor archived. Omit to keep the endpoint's own default set."
        +}
      • addedInput schema / properties / team_ids
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Filter projects by team, matching the projects any member of those teams belongs to."
        +}
      • addedInput schema / properties / updated_after
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date-time",
        +      "type": "string"
        +    },
        +    {
        +      "format": "date",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Filter projects updated after. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.",
        +  "examples": [
        +    "2026-08-03",
        +    "2026-08-03T14:30:00Z"
        +  ]
        +}
      • addedInput schema / properties / user_ids
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Filter projects by the users holding an explicit membership of them. For \"my projects\", pass the ID returned by twprojects-get_user_me."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_skills4 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching skills, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_tags7 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching tags, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • changedInput schema / properties / fields / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "enum": [
        -        "id",
        -        "name",
        -        "project"
        -      ],
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "enum": [
        +        "id",
        +        "name",
        +        "color",
        +        "project"
        +      ],
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / order_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "name",
        +        "count",
        +        "project",
        +        "color",
        +        "datelastupdated",
        +        "projectdatelastused",
        +        "id"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The field to sort the tags by. Omit to keep the ordering the API applies by default."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
      • addedOutput schema / properties / tags / items / properties / color
        Added value: +{
        +  "type": "string"
        +}
    • Changedtwprojects-list_tasklist_budgets5 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching tasklist budgets, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedInput schema / properties / order_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "dateCreated",
        +        "displayOrder",
        +        "id"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The field to sort the task list budgets by. Omit to keep the ordering the API applies by default."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_tasklists5 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching tasklists, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedInput schema / properties / order_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "displayorder",
        +        "name",
        +        "status",
        +        "createdat",
        +        "updatedat",
        +        "project",
        +        "id"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The field to sort the task lists by. Omit to keep the ordering the API applies by default."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_tasks6 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching tasks, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedInput schema / properties / order_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "id",
        +        "startdate",
        +        "createdat",
        +        "priority",
        +        "project",
        +        "flattenedtasklist",
        +        "company",
        +        "manual",
        +        "active",
        +        "completedat",
        +        "duestartdate",
        +        "alldates",
        +        "tasklistname",
        +        "tasklistdisplayorder",
        +        "tasklistid",
        +        "duedate",
        +        "updatedat",
        +        "taskname",
        +        "createdby",
        +        "completedby",
        +        "assignedto",
        +        "taskstatus",
        +        "taskduedate",
        +        "customfield",
        +        "estimatedtime",
        +        "boardcolumn",
        +        "taskgroupid",
        +        "taskgroupname",
        +        "taskgroup",
        +        "displayorder",
        +        "projectmanual",
        +        "stagedisplayorder",
        +        "stage",
        +        "parenttask"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The field to sort the tasks by. Omit to keep the ordering the API applies by default."
        +}
      • addedInput schema / properties / order_by_custom_field_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The custom field to sort the tasks by. Required when order_by is \"customfield\", and ignored otherwise."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_teams6 fields changed
      • addedInput schema / properties / order_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "name",
        +        "picker",
        +        "dateAdded"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The field to sort the teams by. Omit to keep the ordering the API applies by default."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
      • addedOutput schema / properties / teams / items / properties / deletedDate / description
        Added value: +"Null or RFC3339 date-time string. Null when the value is unset."
      • addedOutput schema / properties / teams / items / properties / deletedDate / format
        Added value: +"date-time"
      • removedOutput schema / properties / teams / items / properties / deletedDate / properties
        Removed value: -{}
      • changedOutput schema / properties / teams / items / properties / deletedDate / type
        Previous value: -[
        -  "null",
        -  "object"
        -]New value: +[
        +  "null",
        +  "string"
        +]
    • Changedtwprojects-list_timelogs5 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching timelogs, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedInput schema / properties / order_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "company",
        +        "date",
        +        "dateupdated",
        +        "project",
        +        "task",
        +        "tasklist",
        +        "user",
        +        "description",
        +        "billed",
        +        "billable",
        +        "timespent",
        +        "id"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The field to sort the timelogs by. Omit to keep the ordering the API applies by default."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_timers3 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching timers, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_users5 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching users, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedInput schema / properties / order_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "name",
        +        "namecaseinsensitive",
        +        "company",
        +        "id"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The field to sort the users by. Omit to keep the ordering the API applies by default."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_workflow_stages5 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching workflow stages, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedInput schema / properties / order_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "id",
        +        "name",
        +        "displayorder"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The field to sort the workflow stages by. Omit to keep the ordering the API applies by default."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-list_workflows3 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, return only {\"count\": N}: the exact number of matching workflows, no rows โ€” use for \"how many\". Ignores page, page_size, verbose, fields."
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "description": "Exact number of matches across every page. Returned instead of the rows when count_only.",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
    • Changedtwprojects-move_task_to_workflow_stage4 fields changed
      • changedInput schema / properties / stage_id / description
        Previous value: -"The ID of the workflow stage to move the task to."New value: +"The ID of the workflow stage to move the tasks to."
      • removedInput schema / properties / task_id
        Removed value: -{
        -  "description": "The ID of the task to move.",
        -  "type": "integer"
        -}
      • addedInput schema / properties / task_ids
        Added value: +{
        +  "description": "The IDs of the tasks to move. At least one is needed; all of them move in a single call.",
        +  "items": {
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "workflow_id",
        -  "stage_id",
        -  "task_id"
        -]New value: +[
        +  "workflow_id",
        +  "stage_id"
        +]
    • Addedtwprojects-move_tasks
    • Changedtwprojects-search2 fields changed
      • addedInput schema / properties / include_highlights
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Whether to return why each result matched, as fragments under its meta.highlights. Unavailable on an extended search."
        +}
      • addedOutput schema / properties / search / items / properties / meta / properties / highlights
        Added value: +{
        +  "description": "Fragments that matched, keyed by field, with the matches wrapped in <em> tags.",
        +  "type": "object"
        +}
    • Changedtwprojects-summarize_timelogs2 fields changed
      • addedInput schema / properties / order_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "name",
        +        "loggedtime",
        +        "billabletime",
        +        "nonbillabletime",
        +        "billedtime",
        +        "budget"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The field to sort the summary rows by. Omit to keep the ordering the API applies by default."
        +}
      • addedInput schema / properties / order_mode
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "asc",
        +        "desc"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The direction to sort the results in."
        +}
    • Changedtwprojects-update_tag1 field changed
      • addedInput schema / properties / color
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The color of the tag. It must be a valid hex color code."
        +}
    • Changedtwprojects-update_task4 fields changed
      • addedInput schema / properties / attachment_refs
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "References of files to attach to the task, as returned by twprojects-create_file. Each looks like \"tf_1a2b\" and can only be used once, so upload a file for each place it should go. Files are added to whatever is already attached; nothing is removed."
        +}
      • addedInput schema / properties / clear_parent_task
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "If true, detaches the task from its parent, promoting it to a top-level task. Cannot be combined with parent_task_id."
        +}
      • changedInput schema / properties / parent_task_id / description
        Previous value: -"The ID of the parent task if creating a subtask."New value: +"The ID of the parent task, making this task a subtask. A subtask must live in the same tasklist as its parent, so moving one with tasklist_id fails until the parent has moved or the link is cleared. To detach the task from its parent, use clear_parent_task instead."
      • changedInput schema / properties / tasklist_id / description
        Previous value: -"The ID of the tasklist."New value: +"The ID of the tasklist. Moving the task carries its subtasks along and detaches it from any parent staying behind. Use twprojects-move_tasks to move several tasks at once."
    • Changedtwprojects-users_workload2 fields changed
      • addedOutput schema / properties / meta / properties / page / properties / count
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
      • changedOutput schema / properties / meta / properties / page / required
        Previous value: -[
        -  "hasMore"
        -]New value: +[
        +  "count",
        +  "hasMore"
        +]
  12. 66 tool updatesv1.27.2
    • Changedtwchat-list_messages6 fields changed
      • changedInput schema / properties / created_after / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / created_after / description
        Previous value: -"Return messages created after this time."New value: +"Return messages created after this time. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • addedInput schema / properties / created_after / examples
        Added value: +[
        +  "2026-08-03",
        +  "2026-08-03T14:30:00Z"
        +]
      • changedInput schema / properties / created_before / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / created_before / description
        Previous value: -"Return messages created before this time."New value: +"Return messages created before this time. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • addedInput schema / properties / created_before / examples
        Added value: +[
        +  "2026-08-03",
        +  "2026-08-03T14:30:00Z"
        +]
    • Changedtwdesk-create_helpdoc_article1 field changed
      • changedInput schema / properties / siteID / description
        Previous value: -"The ID of the help doc site to create the article in."New value: +"The ID of the help doc site to create the article in. Use twdesk-list_helpdoc_sites to discover."
    • Addedtwdesk-get_helpdoc_site
    • Changedtwdesk-list_companies2 fields changed
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 100,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination (1-500)."New value: +"Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more."
    • Changedtwdesk-list_customers2 fields changed
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 100,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination (1-500)."New value: +"Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more."
    • Addedtwdesk-list_helpdoc_sites
    • Changedtwdesk-list_inboxes2 fields changed
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 100,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination (1-500)."New value: +"Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more."
    • Changedtwdesk-list_priorities2 fields changed
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 100,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination (1-500)."New value: +"Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more."
    • Changedtwdesk-list_statuses2 fields changed
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 100,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination (1-500)."New value: +"Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more."
    • Changedtwdesk-list_tags2 fields changed
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 100,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination (1-500)."New value: +"Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more."
    • Changedtwdesk-list_ticket_types2 fields changed
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 100,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination (1-500)."New value: +"Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more."
    • Changedtwdesk-list_users2 fields changed
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 100,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination (1-500)."New value: +"Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more."
    • Changedtwdesk-search_helpdoc_articles1 field changed
      • changedInput schema / properties / siteID / description
        Previous value: -"Filter by help doc site ID."New value: +"Filter by help doc site ID. Use twdesk-list_helpdoc_sites to discover."
    • Changedtwdesk-search_tickets5 fields changed
      • addedInput schema / properties / createdAfter
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date-time",
        +      "type": "string"
        +    },
        +    {
        +      "format": "date",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Filter by ticket creation date: only tickets created on or after this day. This search filters by whole days, so a time of day is ignored. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.",
        +  "examples": [
        +    "2026-08-03",
        +    "2026-08-03T14:30:00Z"
        +  ]
        +}
      • addedInput schema / properties / createdBefore
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date-time",
        +      "type": "string"
        +    },
        +    {
        +      "format": "date",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Filter by ticket creation date: only tickets created on or before this day. This search filters by whole days, so a time of day is ignored. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC.",
        +  "examples": [
        +    "2026-08-03",
        +    "2026-08-03T14:30:00Z"
        +  ]
        +}
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "maximum": 500,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 200,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination (1-500)."New value: +"Number of results per page for pagination (1-200). The API silently reduces anything above 200, so a larger value returns fewer results rather than more."
      • changedInput schema / required
        Previous value: -[
        -  "page",
        -  "pageSize",
        -  "orderBy",
        -  "orderDirection",
        -  "fields",
        -  "search",
        -  "inboxIDs",
        -  "customerIDs",
        -  "companyIDs",
        -  "tagIDs",
        -  "statusIDs",
        -  "priorityIDs",
        -  "userIDs"
        -]New value: +[
        +  "page",
        +  "pageSize",
        +  "orderBy",
        +  "orderDirection",
        +  "fields",
        +  "search",
        +  "inboxIDs",
        +  "customerIDs",
        +  "companyIDs",
        +  "tagIDs",
        +  "statusIDs",
        +  "priorityIDs",
        +  "userIDs",
        +  "createdAfter",
        +  "createdBefore"
        +]
    • Changedtwprojects-create_comment2 fields changed
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "description": "Notify all project members.",
        -        "enum": [
        -          "all"
        -        ],
        -        "type": "string"
        -      },
        -      {
        -        "description": "Notify all followers of the entity this comment is related to.",
        -        "enum": [
        -          true
        -        ],
        -        "type": "boolean"
        -      },
        -      {
        -        "anyOf": [
        -          {
        -            "required": [
        -              "user_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "company_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "team_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "job_role_ids"
        -            ]
        -          }
        -        ],
        -        "maxProperties": 4,
        -        "minProperties": 1,
        -        "properties": {
        -          "company_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "job_role_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "team_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "user_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "Notify all project members.",
        +    "enum": [
        +      "all"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "description": "true notifies all followers of the entity this comment is related to. false notifies nobody.",
        +    "type": "boolean"
        +  },
        +  {
        +    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / notify / description
        Previous value: -"Who to notify of the new comment."New value: +"Who to notify of the new comment. Accepts the string \"all\" to notify all project members, the boolean true to notify all followers of the related entity, the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
    • Changedtwprojects-create_link2 fields changed
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "description": "Notify all project members.",
        -        "enum": [
        -          "all"
        -        ],
        -        "type": "string"
        -      },
        -      {
        -        "anyOf": [
        -          {
        -            "required": [
        -              "user_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "company_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "team_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "job_role_ids"
        -            ]
        -          }
        -        ],
        -        "maxProperties": 4,
        -        "minProperties": 1,
        -        "properties": {
        -          "company_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "job_role_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "team_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "user_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "Notify all project members.",
        +    "enum": [
        +      "all"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "description": "true is the same as \"all\": notify all project members. false notifies nobody.",
        +    "type": "boolean"
        +  },
        +  {
        +    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / notify / description
        Previous value: -"Who to notify of the new link."New value: +"Who to notify of the new link. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
    • Changedtwprojects-create_message2 fields changed
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "description": "Notify all project members.",
        -        "enum": [
        -          "all"
        -        ],
        -        "type": "string"
        -      },
        -      {
        -        "anyOf": [
        -          {
        -            "required": [
        -              "user_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "company_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "team_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "job_role_ids"
        -            ]
        -          }
        -        ],
        -        "maxProperties": 4,
        -        "minProperties": 1,
        -        "properties": {
        -          "company_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "job_role_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "team_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "user_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "Notify all project members.",
        +    "enum": [
        +      "all"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "description": "true is the same as \"all\": notify all project members. false notifies nobody.",
        +    "type": "boolean"
        +  },
        +  {
        +    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / notify / description
        Previous value: -"Who to notify of the new message."New value: +"Who to notify of the new message. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
    • Changedtwprojects-create_message_reply2 fields changed
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "description": "Notify all project members.",
        -        "enum": [
        -          "all"
        -        ],
        -        "type": "string"
        -      },
        -      {
        -        "anyOf": [
        -          {
        -            "required": [
        -              "user_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "company_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "team_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "job_role_ids"
        -            ]
        -          }
        -        ],
        -        "maxProperties": 4,
        -        "minProperties": 1,
        -        "properties": {
        -          "company_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "job_role_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "team_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "user_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "Notify all project members.",
        +    "enum": [
        +      "all"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "description": "true is the same as \"all\": notify all project members. false notifies nobody.",
        +    "type": "boolean"
        +  },
        +  {
        +    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / notify / description
        Previous value: -"Who to notify of the new reply."New value: +"Who to notify of the new reply. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
    • Changedtwprojects-get_comment11 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "body",
        +          "htmlBody",
        +          "contentType",
        +          "object",
        +          "project",
        +          "postedBy",
        +          "postedDateTime",
        +          "lastEditedBy",
        +          "dateLastEdited",
        +          "deleted",
        +          "deletedBy",
        +          "dateDeleted"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each comment, from the listed names."
        +}
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / comments / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / comments / properties / object / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / comments / properties / object / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / comments / properties / object / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / comments / properties / project / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / comments / properties / project / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / comments / properties / project / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / comments / required
        Removed value: -[
        -  "id",
        -  "body",
        -  "htmlBody",
        -  "contentType",
        -  "object",
        -  "project",
        -  "postedBy",
        -  "postedDateTime",
        -  "lastEditedBy",
        -  "dateLastEdited",
        -  "deleted",
        -  "deletedBy",
        -  "dateDeleted"
        -]
      • removedOutput schema / required
        Removed value: -[
        -  "comments"
        -]
    • Changedtwprojects-get_company17 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "addressOne",
        +          "addressTwo",
        +          "city",
        +          "countryCode",
        +          "emailOne",
        +          "emailTwo",
        +          "emailThree",
        +          "fax",
        +          "name",
        +          "phone",
        +          "profileText",
        +          "state",
        +          "website",
        +          "zip",
        +          "clientManagedBy",
        +          "industry",
        +          "tags",
        +          "createdAt",
        +          "updatedAt",
        +          "status"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each company, from the listed names."
        +}
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / company / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / company / properties / clientManagedBy / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / company / properties / clientManagedBy / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / company / properties / clientManagedBy / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / company / properties / industry / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / company / properties / industry / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / company / properties / industry / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / company / properties / tags / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / company / properties / tags / items / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / company / properties / tags / items / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / company / required
        Removed value: -[
        -  "id",
        -  "addressOne",
        -  "addressTwo",
        -  "city",
        -  "countryCode",
        -  "emailOne",
        -  "emailTwo",
        -  "emailThree",
        -  "fax",
        -  "name",
        -  "phone",
        -  "profileText",
        -  "state",
        -  "website",
        -  "zip",
        -  "clientManagedBy",
        -  "industry",
        -  "tags",
        -  "createdAt",
        -  "updatedAt",
        -  "status"
        -]
      • removedOutput schema / properties / included / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / included / properties / customfieldCompanies / additionalProperties
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "company": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "countryCode": {
        -      "type": "string"
        -    },
        -    "createdAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "createdBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "currencySymbol": {
        -      "type": "string"
        -    },
        -    "customfield": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "id": {
        -      "type": "integer"
        -    },
        -    "project": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "task": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "updatedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "updatedBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "value": true
        -  },
        -  "required": [
        -    "id",
        -    "value",
        -    "currencySymbol",
        -    "countryCode",
        -    "customfield",
        -    "createdBy",
        -    "createdAt",
        -    "updatedBy",
        -    "updatedAt"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / included / properties / customfields / additionalProperties
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "createdAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "createdBy": {
        -      "type": "integer"
        -    },
        -    "currencyCode": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "deleted": {
        -      "type": "boolean"
        -    },
        -    "deletedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "deletedBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "description": {
        -      "type": "string"
        -    },
        -    "entity": {
        -      "type": "string"
        -    },
        -    "formula": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "id": {
        -      "type": "integer"
        -    },
        -    "name": {
        -      "type": "string"
        -    },
        -    "options": true,
        -    "project": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "required": {
        -      "type": "boolean"
        -    },
        -    "type": {
        -      "type": "string"
        -    },
        -    "unitId": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "updatedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "updatedBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "name",
        -    "description",
        -    "type",
        -    "entity",
        -    "required",
        -    "formula",
        -    "currencyCode",
        -    "unitId",
        -    "project",
        -    "createdBy",
        -    "createdAt",
        -    "updatedBy",
        -    "updatedAt",
        -    "deleted",
        -    "deletedBy",
        -    "deletedAt",
        -    "options"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "company",
        -  "included"
        -]
    • Changedtwprojects-get_jobrole11 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "isActive",
        +          "createdByUser",
        +          "createdAt",
        +          "updatedByUser",
        +          "updatedAt",
        +          "deletedByUser",
        +          "deletedAt",
        +          "users",
        +          "primaryUsers"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each job role, from the listed names."
        +}
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / jobRole / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / jobRole / properties / primaryUsers / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / jobRole / properties / primaryUsers / items / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / jobRole / properties / primaryUsers / items / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / jobRole / properties / users / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / jobRole / properties / users / items / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / jobRole / properties / users / items / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / jobRole / required
        Removed value: -[
        -  "id",
        -  "name",
        -  "isActive",
        -  "createdByUser",
        -  "createdAt",
        -  "updatedByUser",
        -  "updatedAt",
        -  "deletedByUser",
        -  "deletedAt",
        -  "users",
        -  "primaryUsers"
        -]
      • removedOutput schema / required
        Removed value: -[
        -  "jobRole"
        -]
    • Changedtwprojects-get_message24 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "title",
        +          "project",
        +          "tags",
        +          "lastReply",
        +          "replyStatus",
        +          "status",
        +          "body",
        +          "author",
        +          "message",
        +          "meta",
        +          "createdAt",
        +          "updatedAt"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each message, from the listed names."
        +}
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / message / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / message / properties / author / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / message / properties / author / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / message / properties / author / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / message / properties / lastReply / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / message / properties / lastReply / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / message / properties / lastReply / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / message / properties / message / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / message / properties / message / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / message / properties / message / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / message / properties / meta / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / message / properties / meta / properties / permissions / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / message / properties / meta / properties / permissions / required
        Removed value: -[
        -  "canEdit"
        -]
      • removedOutput schema / properties / message / properties / meta / required
        Removed value: -[
        -  "isRead",
        -  "permissions"
        -]
      • removedOutput schema / properties / message / properties / project / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / message / properties / project / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / message / properties / project / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / message / properties / tags / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / message / properties / tags / items / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / message / properties / tags / items / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / message / required
        Removed value: -[
        -  "id",
        -  "title",
        -  "project",
        -  "tags",
        -  "body",
        -  "author",
        -  "message",
        -  "createdAt",
        -  "updatedAt",
        -  "lastReply",
        -  "replyStatus",
        -  "status"
        -]
      • removedOutput schema / required
        Removed value: -[
        -  "message"
        -]
    • Changedtwprojects-get_message_reply15 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "body",
        +          "author",
        +          "message",
        +          "meta",
        +          "createdAt",
        +          "updatedAt",
        +          "status"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each message reply, from the listed names."
        +}
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / messageReply / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / messageReply / properties / author / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / messageReply / properties / author / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / messageReply / properties / author / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / messageReply / properties / message / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / messageReply / properties / message / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / messageReply / properties / message / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / messageReply / properties / meta / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / messageReply / properties / meta / properties / permissions / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / messageReply / properties / meta / properties / permissions / required
        Removed value: -[
        -  "canEdit"
        -]
      • removedOutput schema / properties / messageReply / properties / meta / required
        Removed value: -[
        -  "isRead",
        -  "permissions"
        -]
      • removedOutput schema / properties / messageReply / required
        Removed value: -[
        -  "id",
        -  "body",
        -  "author",
        -  "message",
        -  "createdAt",
        -  "updatedAt",
        -  "status"
        -]
      • removedOutput schema / required
        Removed value: -[
        -  "messageReply"
        -]
    • Changedtwprojects-get_milestone17 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "description",
        +          "deadline",
        +          "project",
        +          "tasklists",
        +          "tags",
        +          "responsibleParties",
        +          "createdOn",
        +          "lastChangedOn",
        +          "deletedOn",
        +          "completedOn",
        +          "completedBy",
        +          "completed",
        +          "status"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each milestone, from the listed names."
        +}
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / milestone / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / milestone / properties / project / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / milestone / properties / project / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / milestone / properties / project / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / milestone / properties / responsibleParties / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / milestone / properties / responsibleParties / items / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / milestone / properties / responsibleParties / items / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / milestone / properties / tags / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / milestone / properties / tags / items / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / milestone / properties / tags / items / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / milestone / properties / tasklists / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / milestone / properties / tasklists / items / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / milestone / properties / tasklists / items / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / milestone / required
        Removed value: -[
        -  "id",
        -  "name",
        -  "description",
        -  "deadline",
        -  "project",
        -  "tasklists",
        -  "tags",
        -  "responsibleParties",
        -  "createdOn",
        -  "lastChangedOn",
        -  "deletedOn",
        -  "completedOn",
        -  "completedBy",
        -  "completed",
        -  "status"
        -]
      • removedOutput schema / required
        Removed value: -[
        -  "milestone"
        -]
    • Changedtwprojects-get_notebook11 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "description",
        +          "contents",
        +          "type",
        +          "project",
        +          "tags",
        +          "createdAt",
        +          "createdBy",
        +          "updatedAt",
        +          "updatedBy",
        +          "deletedAt",
        +          "deletedBy",
        +          "deleted"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each notebook, from the listed names."
        +}
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / notebook / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / notebook / properties / project / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / notebook / properties / project / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / notebook / properties / project / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / notebook / properties / tags / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / notebook / properties / tags / items / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / notebook / properties / tags / items / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / notebook / required
        Removed value: -[
        -  "id",
        -  "name",
        -  "description",
        -  "type",
        -  "project",
        -  "tags",
        -  "createdAt",
        -  "createdBy",
        -  "updatedAt",
        -  "updatedBy",
        -  "deletedAt",
        -  "deletedBy",
        -  "deleted"
        -]
      • removedOutput schema / required
        Removed value: -[
        -  "notebook"
        -]
    • Changedtwprojects-get_project21 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "description",
        +          "name",
        +          "startAt",
        +          "endAt",
        +          "category",
        +          "company",
        +          "projectOwner",
        +          "tags",
        +          "lastWorkedOn",
        +          "createdAt",
        +          "createdBy",
        +          "updatedAt",
        +          "updatedBy",
        +          "completedAt",
        +          "completedBy",
        +          "status",
        +          "isBillable",
        +          "type"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each project, from the listed names."
        +}
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / included / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / included / properties / customfieldProjects / additionalProperties
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "company": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "countryCode": {
        -      "type": "string"
        -    },
        -    "createdAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "createdBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "currencySymbol": {
        -      "type": "string"
        -    },
        -    "customfield": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "id": {
        -      "type": "integer"
        -    },
        -    "project": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "task": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "updatedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "updatedBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "value": true
        -  },
        -  "required": [
        -    "id",
        -    "value",
        -    "currencySymbol",
        -    "countryCode",
        -    "customfield",
        -    "createdBy",
        -    "createdAt",
        -    "updatedBy",
        -    "updatedAt"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / included / properties / customfields / additionalProperties
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "createdAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "createdBy": {
        -      "type": "integer"
        -    },
        -    "currencyCode": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "deleted": {
        -      "type": "boolean"
        -    },
        -    "deletedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "deletedBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "description": {
        -      "type": "string"
        -    },
        -    "entity": {
        -      "type": "string"
        -    },
        -    "formula": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "id": {
        -      "type": "integer"
        -    },
        -    "name": {
        -      "type": "string"
        -    },
        -    "options": true,
        -    "project": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "required": {
        -      "type": "boolean"
        -    },
        -    "type": {
        -      "type": "string"
        -    },
        -    "unitId": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "updatedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "updatedBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "name",
        -    "description",
        -    "type",
        -    "entity",
        -    "required",
        -    "formula",
        -    "currencyCode",
        -    "unitId",
        -    "project",
        -    "createdBy",
        -    "createdAt",
        -    "updatedBy",
        -    "updatedAt",
        -    "deleted",
        -    "deletedBy",
        -    "deletedAt",
        -    "options"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / included / properties / projectCategories / additionalProperties
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "color": {
        -      "type": "string"
        -    },
        -    "count": {
        -      "type": "integer"
        -    },
        -    "id": {
        -      "type": "integer"
        -    },
        -    "name": {
        -      "type": "string"
        -    },
        -    "parent": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "name",
        -    "color",
        -    "parent",
        -    "count"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / project / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / project / properties / category / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / project / properties / category / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / project / properties / category / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / project / properties / company / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / project / properties / company / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / project / properties / company / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / project / properties / projectOwner / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / project / properties / projectOwner / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / project / properties / projectOwner / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / project / properties / tags / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / project / properties / tags / items / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / project / properties / tags / items / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / project / required
        Removed value: -[
        -  "id",
        -  "description",
        -  "name",
        -  "startAt",
        -  "endAt",
        -  "category",
        -  "company",
        -  "projectOwner",
        -  "tags",
        -  "lastWorkedOn",
        -  "createdAt",
        -  "createdBy",
        -  "updatedAt",
        -  "updatedBy",
        -  "completedAt",
        -  "completedBy",
        -  "status",
        -  "isBillable",
        -  "type"
        -]
      • removedOutput schema / required
        Removed value: -[
        -  "project",
        -  "included"
        -]
    • Changedtwprojects-get_project_category8 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "color",
        +          "parent",
        +          "count"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each project category, from the listed names."
        +}
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / projectCategory / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / projectCategory / properties / parent / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / projectCategory / properties / parent / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / projectCategory / properties / parent / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / projectCategory / required
        Removed value: -[
        -  "id",
        -  "name",
        -  "color",
        -  "parent",
        -  "count"
        -]
      • removedOutput schema / required
        Removed value: -[
        -  "projectCategory"
        -]
    • Changedtwprojects-get_task25 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "description",
        +          "descriptionContentType",
        +          "priority",
        +          "progress",
        +          "startDate",
        +          "dueDate",
        +          "estimateMinutes",
        +          "tasklist",
        +          "parentTask",
        +          "assignees",
        +          "tags",
        +          "predecessors",
        +          "workflowStages",
        +          "createdBy",
        +          "createdAt",
        +          "updatedBy",
        +          "updatedAt",
        +          "deletedBy",
        +          "deletedAt",
        +          "completedBy",
        +          "completedAt",
        +          "status"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each task, from the listed names."
        +}
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / included / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / included / properties / customfieldTasks / additionalProperties
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "company": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "countryCode": {
        -      "type": "string"
        -    },
        -    "createdAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "createdBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "currencySymbol": {
        -      "type": "string"
        -    },
        -    "customfield": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "id": {
        -      "type": "integer"
        -    },
        -    "project": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "task": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "updatedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "updatedBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "value": true
        -  },
        -  "required": [
        -    "id",
        -    "value",
        -    "currencySymbol",
        -    "countryCode",
        -    "customfield",
        -    "createdBy",
        -    "createdAt",
        -    "updatedBy",
        -    "updatedAt"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / included / properties / customfields / additionalProperties
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "createdAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "createdBy": {
        -      "type": "integer"
        -    },
        -    "currencyCode": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "deleted": {
        -      "type": "boolean"
        -    },
        -    "deletedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "deletedBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "description": {
        -      "type": "string"
        -    },
        -    "entity": {
        -      "type": "string"
        -    },
        -    "formula": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "id": {
        -      "type": "integer"
        -    },
        -    "name": {
        -      "type": "string"
        -    },
        -    "options": true,
        -    "project": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "required": {
        -      "type": "boolean"
        -    },
        -    "type": {
        -      "type": "string"
        -    },
        -    "unitId": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "updatedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "updatedBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "name",
        -    "description",
        -    "type",
        -    "entity",
        -    "required",
        -    "formula",
        -    "currencyCode",
        -    "unitId",
        -    "project",
        -    "createdBy",
        -    "createdAt",
        -    "updatedBy",
        -    "updatedAt",
        -    "deleted",
        -    "deletedBy",
        -    "deletedAt",
        -    "options"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / task / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / task / properties / assignees / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / task / properties / assignees / items / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / task / properties / assignees / items / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / task / properties / parentTask / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / task / properties / parentTask / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / task / properties / parentTask / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / task / properties / predecessors / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / task / properties / predecessors / items / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / task / properties / predecessors / items / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / task / properties / tags / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / task / properties / tags / items / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / task / properties / tags / items / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / task / properties / tasklist / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / task / properties / tasklist / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / task / properties / tasklist / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / task / properties / workflowStages / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / task / properties / workflowStages / items / required
        Removed value: -[
        -  "workflowId",
        -  "stageId"
        -]
      • removedOutput schema / properties / task / required
        Removed value: -[
        -  "id",
        -  "name",
        -  "description",
        -  "descriptionContentType",
        -  "priority",
        -  "progress",
        -  "startDate",
        -  "dueDate",
        -  "estimateMinutes",
        -  "tasklist",
        -  "parentTask",
        -  "assignees",
        -  "tags",
        -  "predecessors",
        -  "workflowStages",
        -  "createdBy",
        -  "createdAt",
        -  "updatedBy",
        -  "updatedAt",
        -  "deletedBy",
        -  "deletedAt",
        -  "status"
        -]
      • removedOutput schema / required
        Removed value: -[
        -  "task",
        -  "included"
        -]
    • Changedtwprojects-get_tasklist11 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "description",
        +          "project",
        +          "milestone",
        +          "createdAt",
        +          "updatedAt",
        +          "status"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each tasklist, from the listed names."
        +}
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / tasklist / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / tasklist / properties / milestone / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / tasklist / properties / milestone / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / tasklist / properties / milestone / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / tasklist / properties / project / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / tasklist / properties / project / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / tasklist / properties / project / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / tasklist / required
        Removed value: -[
        -  "id",
        -  "name",
        -  "description",
        -  "project",
        -  "milestone",
        -  "createdAt",
        -  "updatedAt",
        -  "status"
        -]
      • removedOutput schema / required
        Removed value: -[
        -  "tasklist"
        -]
    • Changedtwprojects-get_timelog17 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "description",
        +          "billable",
        +          "minutes",
        +          "timeLogged",
        +          "user",
        +          "task",
        +          "project",
        +          "tags",
        +          "deskTicketId",
        +          "createdAt",
        +          "loggedBy",
        +          "updatedAt",
        +          "updatedBy",
        +          "deletedAt",
        +          "deletedBy",
        +          "deleted"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each timelog, from the listed names."
        +}
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / timelog / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / timelog / properties / project / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / timelog / properties / project / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / timelog / properties / project / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / timelog / properties / tags / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / timelog / properties / tags / items / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / timelog / properties / tags / items / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / timelog / properties / task / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / timelog / properties / task / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / timelog / properties / task / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / timelog / properties / user / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / timelog / properties / user / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / timelog / properties / user / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / timelog / required
        Removed value: -[
        -  "id",
        -  "description",
        -  "billable",
        -  "minutes",
        -  "timeLogged",
        -  "user",
        -  "task",
        -  "project",
        -  "createdAt",
        -  "loggedBy",
        -  "updatedAt",
        -  "updatedBy",
        -  "deletedAt",
        -  "deletedBy",
        -  "deleted"
        -]
      • removedOutput schema / required
        Removed value: -[
        -  "timelog"
        -]
    • Changedtwprojects-get_timer19 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "description",
        +          "running",
        +          "billable",
        +          "user",
        +          "task",
        +          "project",
        +          "timelog",
        +          "createdAt",
        +          "updatedAt",
        +          "deletedAt",
        +          "deleted",
        +          "duration",
        +          "lastStartedAt",
        +          "timerLastIntervalEnd",
        +          "intervals"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each timer, from the listed names."
        +}
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / timer / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / timer / properties / intervals / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / timer / properties / intervals / items / required
        Removed value: -[
        -  "id",
        -  "from",
        -  "to",
        -  "duration"
        -]
      • removedOutput schema / properties / timer / properties / project / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / timer / properties / project / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / timer / properties / project / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / timer / properties / task / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / timer / properties / task / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / timer / properties / task / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / timer / properties / timelog / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / timer / properties / timelog / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / timer / properties / timelog / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / timer / properties / user / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / timer / properties / user / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / timer / properties / user / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / timer / required
        Removed value: -[
        -  "id",
        -  "description",
        -  "running",
        -  "billable",
        -  "user",
        -  "task",
        -  "project",
        -  "createdAt",
        -  "updatedAt",
        -  "deletedAt",
        -  "deleted",
        -  "duration",
        -  "lastStartedAt",
        -  "intervals"
        -]
      • removedOutput schema / required
        Removed value: -[
        -  "timer"
        -]
    • Changedtwprojects-get_user23 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "firstName",
        +          "lastName",
        +          "title",
        +          "email",
        +          "isAdmin",
        +          "type",
        +          "userCost",
        +          "userRate",
        +          "company",
        +          "jobRoles",
        +          "skills",
        +          "workingHour",
        +          "lengthOfDay",
        +          "deleted",
        +          "createdBy",
        +          "createdAt",
        +          "updatedBy",
        +          "updatedAt"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each user, from the listed names."
        +}
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / person / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / person / properties / company / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / person / properties / company / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / person / properties / company / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / person / properties / createdBy / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / person / properties / createdBy / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / person / properties / createdBy / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / person / properties / jobRoles / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / person / properties / jobRoles / items / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / person / properties / jobRoles / items / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / person / properties / skills / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / person / properties / skills / items / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / person / properties / skills / items / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / person / properties / updatedBy / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / person / properties / updatedBy / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / person / properties / updatedBy / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / person / properties / workingHour / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / person / properties / workingHour / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / person / properties / workingHour / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / person / required
        Removed value: -[
        -  "id",
        -  "firstName",
        -  "lastName",
        -  "title",
        -  "email",
        -  "isAdmin",
        -  "type",
        -  "userCost",
        -  "userRate",
        -  "company",
        -  "workingHour",
        -  "lengthOfDay",
        -  "deleted",
        -  "createdBy",
        -  "createdAt",
        -  "updatedBy",
        -  "updatedAt"
        -]
      • removedOutput schema / required
        Removed value: -[
        -  "person"
        -]
    • Changedtwprojects-get_workflow5 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "defaultWorkflow"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each workflow, from the listed names."
        +}
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / workflow / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / workflow / required
        Removed value: -[
        -  "id",
        -  "name",
        -  "defaultWorkflow"
        -]
      • removedOutput schema / required
        Removed value: -[
        -  "workflow"
        -]
    • Changedtwprojects-get_workflow_stage8 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "workflow"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each workflow stage, from the listed names."
        +}
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / stage / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / stage / properties / workflow / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / stage / properties / workflow / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / stage / properties / workflow / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / properties / stage / required
        Removed value: -[
        -  "id",
        -  "name",
        -  "workflow"
        -]
      • removedOutput schema / required
        Removed value: -[
        -  "stage"
        -]
    • Changedtwprojects-list_activities7 fields changed
      • changedInput schema / properties / end_date / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / end_date / description
        Previous value: -"End of the activity window."New value: +"End of the activity window. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • addedInput schema / properties / end_date / examples
        Added value: +[
        +  "2026-08-03",
        +  "2026-08-03T14:30:00Z"
        +]
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "activityType",
        +          "latestActivityType",
        +          "dateTime",
        +          "description",
        +          "extraDescription",
        +          "publicInfo",
        +          "dueDate",
        +          "forUserName",
        +          "itemLink",
        +          "link",
        +          "user",
        +          "forUser",
        +          "project",
        +          "company",
        +          "item"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each activity, from the listed names."
        +}
      • changedInput schema / properties / start_date / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / start_date / description
        Previous value: -"Start of the activity window."New value: +"Start of the activity window. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • addedInput schema / properties / start_date / examples
        Added value: +[
        +  "2026-08-03",
        +  "2026-08-03T14:30:00Z"
        +]
    • Changedtwprojects-list_calendar_events1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "summary",
        +          "description",
        +          "organizer",
        +          "eventCreator",
        +          "start",
        +          "end",
        +          "allDay",
        +          "location",
        +          "type",
        +          "recurrence",
        +          "guestsCanInviteOthers",
        +          "guestsCanModify",
        +          "guestsCanSeeOtherGuests",
        +          "transparency",
        +          "visibility",
        +          "videoCallLink",
        +          "calOwnerCanEdit",
        +          "timeblock",
        +          "attendees",
        +          "attendeesOmitted",
        +          "calendar",
        +          "status",
        +          "createdBy",
        +          "createdAt",
        +          "updatedAt"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each calendar event, from the listed names."
        +}
    • Changedtwprojects-list_calendars1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "type",
        +          "createdAt",
        +          "updatedAt"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each calendar, from the listed names."
        +}
    • Changedtwprojects-list_comments5 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "body",
        +          "htmlBody",
        +          "contentType",
        +          "object",
        +          "project",
        +          "postedBy",
        +          "postedDateTime",
        +          "lastEditedBy",
        +          "dateLastEdited",
        +          "deleted",
        +          "deletedBy",
        +          "dateDeleted"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each comment, from the listed names."
        +}
      • changedInput schema / properties / updated_after / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / updated_after / description
        Previous value: -"Filter comments updated after. Defaults to the last 3 months."New value: +"Filter comments updated after. Defaults to the last 3 months. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • addedInput schema / properties / updated_after / examples
        Added value: +[
        +  "2026-08-03",
        +  "2026-08-03T14:30:00Z"
        +]
      • addedInput schema / properties / user_ids
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "A list of user IDs to filter comments by"
        +}
    • Changedtwprojects-list_companies1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "addressOne",
        +          "addressTwo",
        +          "city",
        +          "countryCode",
        +          "emailOne",
        +          "emailTwo",
        +          "emailThree",
        +          "fax",
        +          "name",
        +          "phone",
        +          "profileText",
        +          "state",
        +          "website",
        +          "zip",
        +          "clientManagedBy",
        +          "industry",
        +          "tags",
        +          "createdAt",
        +          "updatedAt",
        +          "status"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each company, from the listed names."
        +}
    • Changedtwprojects-list_custom_field_values1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "value",
        +          "currencySymbol",
        +          "countryCode",
        +          "customfield",
        +          "task",
        +          "project",
        +          "company",
        +          "createdBy",
        +          "createdAt",
        +          "updatedBy",
        +          "updatedAt"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each custom field value, from the listed names."
        +}
    • Changedtwprojects-list_custom_fields1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "options",
        +          "id",
        +          "name",
        +          "description",
        +          "type",
        +          "entity",
        +          "required",
        +          "formula",
        +          "currencyCode",
        +          "unitId",
        +          "project",
        +          "createdBy",
        +          "createdAt",
        +          "updatedBy",
        +          "updatedAt",
        +          "deleted",
        +          "deletedBy",
        +          "deletedAt"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each custom field, from the listed names."
        +}
    • Changedtwprojects-list_jobroles1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "isActive",
        +          "createdByUser",
        +          "createdAt",
        +          "updatedByUser",
        +          "updatedAt",
        +          "deletedByUser",
        +          "deletedAt",
        +          "users",
        +          "primaryUsers"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each job role, from the listed names."
        +}
    • Changedtwprojects-list_links1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "description",
        +          "code",
        +          "project-id",
        +          "tags",
        +          "created-by-userId",
        +          "created-date",
        +          "updated-by-userId",
        +          "updated-date"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each link, from the listed names."
        +}
    • Changedtwprojects-list_message_replies1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "body",
        +          "author",
        +          "message",
        +          "meta",
        +          "createdAt",
        +          "updatedAt",
        +          "status"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each message reply, from the listed names."
        +}
    • Changedtwprojects-list_messages1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "title",
        +          "project",
        +          "tags",
        +          "lastReply",
        +          "replyStatus",
        +          "status",
        +          "body",
        +          "author",
        +          "message",
        +          "meta",
        +          "createdAt",
        +          "updatedAt"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each message, from the listed names."
        +}
    • Changedtwprojects-list_milestones1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "description",
        +          "deadline",
        +          "project",
        +          "tasklists",
        +          "tags",
        +          "responsibleParties",
        +          "createdOn",
        +          "lastChangedOn",
        +          "deletedOn",
        +          "completedOn",
        +          "completedBy",
        +          "completed",
        +          "status"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each milestone, from the listed names."
        +}
    • Changedtwprojects-list_notebooks1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "description",
        +          "contents",
        +          "type",
        +          "project",
        +          "tags",
        +          "createdAt",
        +          "createdBy",
        +          "updatedAt",
        +          "updatedBy",
        +          "deletedAt",
        +          "deletedBy",
        +          "deleted"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each notebook, from the listed names."
        +}
    • Changedtwprojects-list_project_budgets2 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "projectId",
        +          "type",
        +          "status",
        +          "capacity",
        +          "capacityUsed",
        +          "originatorBudgetId",
        +          "isRepeating",
        +          "repeatPeriod",
        +          "repeatUnit",
        +          "repeatsRemaining",
        +          "sequenceNumber",
        +          "startDateTime",
        +          "endDateTime",
        +          "currencyCode",
        +          "timelogType",
        +          "expenseType",
        +          "defaultRate",
        +          "notificationIds",
        +          "createdByUserId",
        +          "dateCreated",
        +          "updatedBy",
        +          "dateUpdated",
        +          "completedByUserId",
        +          "dateCompleted",
        +          "deletedByUserId",
        +          "dateDeleted"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each project budget, from the listed names."
        +}
      • changedInput schema / properties / status / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "upcoming",
        -      "active",
        -      "complete"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "UPCOMING",
        +      "ACTIVE",
        +      "COMPLETED"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedtwprojects-list_project_categories1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "color",
        +          "parent",
        +          "count"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each project category, from the listed names."
        +}
    • Changedtwprojects-list_projects1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "description",
        +          "name",
        +          "startAt",
        +          "endAt",
        +          "category",
        +          "company",
        +          "projectOwner",
        +          "tags",
        +          "lastWorkedOn",
        +          "createdAt",
        +          "createdBy",
        +          "updatedAt",
        +          "updatedBy",
        +          "completedAt",
        +          "completedBy",
        +          "status",
        +          "isBillable",
        +          "type"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each project, from the listed names."
        +}
    • Changedtwprojects-list_skills1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "createdByUser",
        +          "createdAt",
        +          "updatedByUser",
        +          "updatedAt",
        +          "deletedByUser",
        +          "deletedAt",
        +          "users"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each skill, from the listed names."
        +}
    • Changedtwprojects-list_tags1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "project"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each tag, from the listed names."
        +}
    • Changedtwprojects-list_tasklist_budgets1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "type",
        +          "capacity",
        +          "capacityUsed",
        +          "projectId",
        +          "projectbudget",
        +          "tasklist",
        +          "milestone",
        +          "notifications",
        +          "createdAt",
        +          "createdBy",
        +          "updatedAt",
        +          "updatedBy",
        +          "deletedAt",
        +          "deletedBy"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each tasklist budget, from the listed names."
        +}
    • Changedtwprojects-list_tasklists1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "description",
        +          "project",
        +          "milestone",
        +          "createdAt",
        +          "updatedAt",
        +          "status"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each tasklist, from the listed names."
        +}
    • Changedtwprojects-list_tasks19 fields changed
      • changedInput schema / properties / completed_after / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / completed_after / description
        Previous value: -"Filter tasks completed after."New value: +"Filter tasks completed after. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / completed_after / examples
        Previous value: -[
        -  "2023-01-01T00:00:00Z"
        -]New value: +[
        +  "2026-08-03",
        +  "2026-08-03T14:30:00Z"
        +]
      • changedInput schema / properties / completed_before / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / completed_before / description
        Previous value: -"Filter tasks completed before."New value: +"Filter tasks completed before. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / completed_before / examples
        Previous value: -[
        -  "2023-12-31T23:59:59Z"
        -]New value: +[
        +  "2026-08-03",
        +  "2026-08-03T14:30:00Z"
        +]
      • changedInput schema / properties / created_after / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / created_after / description
        Previous value: -"Filter tasks created after."New value: +"Filter tasks created after. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / created_after / examples
        Previous value: -[
        -  "2023-01-01T00:00:00Z"
        -]New value: +[
        +  "2026-08-03",
        +  "2026-08-03T14:30:00Z"
        +]
      • changedInput schema / properties / created_before / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / created_before / description
        Previous value: -"Filter tasks created before."New value: +"Filter tasks created before. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / created_before / examples
        Previous value: -[
        -  "2023-12-31T23:59:59Z"
        -]New value: +[
        +  "2026-08-03",
        +  "2026-08-03T14:30:00Z"
        +]
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "description",
        +          "descriptionContentType",
        +          "priority",
        +          "progress",
        +          "startDate",
        +          "dueDate",
        +          "estimateMinutes",
        +          "tasklist",
        +          "parentTask",
        +          "assignees",
        +          "tags",
        +          "predecessors",
        +          "workflowStages",
        +          "createdBy",
        +          "createdAt",
        +          "updatedBy",
        +          "updatedAt",
        +          "deletedBy",
        +          "deletedAt",
        +          "completedBy",
        +          "completedAt",
        +          "status"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each task, from the listed names."
        +}
      • changedInput schema / properties / updated_after / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / updated_after / description
        Previous value: -"Filter tasks updated after."New value: +"Filter tasks updated after. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / updated_after / examples
        Previous value: -[
        -  "2023-01-01T00:00:00Z"
        -]New value: +[
        +  "2026-08-03",
        +  "2026-08-03T14:30:00Z"
        +]
      • changedInput schema / properties / updated_before / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / updated_before / description
        Previous value: -"Filter tasks updated before."New value: +"Filter tasks updated before. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / updated_before / examples
        Previous value: -[
        -  "2023-12-31T23:59:59Z"
        -]New value: +[
        +  "2026-08-03",
        +  "2026-08-03T14:30:00Z"
        +]
    • Changedtwprojects-list_teams1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "description",
        +          "handle",
        +          "logoUrl",
        +          "logoIcon",
        +          "logoColor",
        +          "projectId",
        +          "company",
        +          "parentTeam",
        +          "rootTeam",
        +          "members",
        +          "createdByUserId",
        +          "dateCreated",
        +          "updatedByUserId",
        +          "dateUpdated",
        +          "deleted",
        +          "deletedDate"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each team, from the listed names."
        +}
    • Changedtwprojects-list_timelogs7 fields changed
      • changedInput schema / properties / end_date / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / end_date / description
        Previous value: -"End of the timelog window."New value: +"End of the timelog window. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • addedInput schema / properties / end_date / examples
        Added value: +[
        +  "2026-08-03",
        +  "2026-08-03T14:30:00Z"
        +]
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "description",
        +          "billable",
        +          "minutes",
        +          "timeLogged",
        +          "user",
        +          "task",
        +          "project",
        +          "tags",
        +          "deskTicketId",
        +          "createdAt",
        +          "loggedBy",
        +          "updatedAt",
        +          "updatedBy",
        +          "deletedAt",
        +          "deletedBy",
        +          "deleted"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each timelog, from the listed names."
        +}
      • changedInput schema / properties / start_date / anyOf
        Previous value: -[
        -  {
        -    "format": "date-time",
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / start_date / description
        Previous value: -"Start of the timelog window."New value: +"Start of the timelog window. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • addedInput schema / properties / start_date / examples
        Added value: +[
        +  "2026-08-03",
        +  "2026-08-03T14:30:00Z"
        +]
    • Changedtwprojects-list_timers1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "description",
        +          "running",
        +          "billable",
        +          "user",
        +          "task",
        +          "project",
        +          "timelog",
        +          "createdAt",
        +          "updatedAt",
        +          "deletedAt",
        +          "deleted",
        +          "duration",
        +          "lastStartedAt",
        +          "timerLastIntervalEnd",
        +          "intervals"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each timer, from the listed names."
        +}
    • Changedtwprojects-list_users1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "firstName",
        +          "lastName",
        +          "title",
        +          "email",
        +          "isAdmin",
        +          "type",
        +          "userCost",
        +          "userRate",
        +          "company",
        +          "jobRoles",
        +          "skills",
        +          "workingHour",
        +          "lengthOfDay",
        +          "deleted",
        +          "createdBy",
        +          "createdAt",
        +          "updatedBy",
        +          "updatedAt"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each user, from the listed names."
        +}
    • Changedtwprojects-list_workflow_stages1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "workflow"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each workflow stage, from the listed names."
        +}
    • Changedtwprojects-list_workflows1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "id",
        +          "name",
        +          "defaultWorkflow"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The attributes to return for each workflow, from the listed names."
        +}
    • Changedtwprojects-search26 fields changed
      • addedInput schema / properties / include
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "enum": [
        +          "comments",
        +          "companies",
        +          "links",
        +          "messages",
        +          "milestones",
        +          "notebooks",
        +          "projects",
        +          "tasklists",
        +          "tasks",
        +          "teams",
        +          "timelogs",
        +          "users"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Entity types to return as full records in the response sideloads. Defaults to all supported types; narrow it to the types of interest to keep the response small."
        +}
      • changedInput schema / properties / updated_after / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  {
        +    "format": "date",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / updated_after / description
        Previous value: -"Only include items updated after this date."New value: +"Only include items updated after this date. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
      • changedInput schema / properties / updated_after / examples
        Previous value: -[
        -  "2023-01-01T00:00:00Z"
        -]New value: +[
        +  "2026-08-03",
        +  "2026-08-03T14:30:00Z"
        +]
      • removedInput schema / properties / updated_after / format
        Removed value: -"date-time"
      • addedInput schema / properties / verbose
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": true,
        +  "description": "If false, returns id + name only โ€” useful when scanning many results."
        +}
      • removedOutput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / included / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / included / properties / comments / additionalProperties
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "id": {
        -      "type": "integer"
        -    },
        -    "object": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "postedBy": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "postedDateTime": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "project": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "title": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "title",
        -    "object",
        -    "project",
        -    "postedBy",
        -    "postedDateTime"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / included / properties / companies / additionalProperties
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "addressOne": {
        -      "type": "string"
        -    },
        -    "addressTwo": {
        -      "type": "string"
        -    },
        -    "city": {
        -      "type": "string"
        -    },
        -    "clientManagedBy": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "countryCode": {
        -      "type": "string"
        -    },
        -    "createdAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "emailOne": {
        -      "type": "string"
        -    },
        -    "emailThree": {
        -      "type": "string"
        -    },
        -    "emailTwo": {
        -      "type": "string"
        -    },
        -    "fax": {
        -      "type": "string"
        -    },
        -    "id": {
        -      "type": "integer"
        -    },
        -    "industry": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "name": {
        -      "type": "string"
        -    },
        -    "phone": {
        -      "type": "string"
        -    },
        -    "profileText": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "state": {
        -      "type": "string"
        -    },
        -    "status": {
        -      "type": "string"
        -    },
        -    "tags": {
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "id": {
        -            "type": "integer"
        -          },
        -          "meta": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "type": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "id",
        -          "type"
        -        ],
        -        "type": "object"
        -      },
        -      "type": [
        -        "null",
        -        "array"
        -      ]
        -    },
        -    "updatedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "website": {
        -      "type": "string"
        -    },
        -    "zip": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "addressOne",
        -    "addressTwo",
        -    "city",
        -    "countryCode",
        -    "emailOne",
        -    "emailTwo",
        -    "emailThree",
        -    "fax",
        -    "name",
        -    "phone",
        -    "profileText",
        -    "state",
        -    "website",
        -    "zip",
        -    "clientManagedBy",
        -    "industry",
        -    "tags",
        -    "createdAt",
        -    "updatedAt",
        -    "status"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / included / properties / links / additionalProperties
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "code": {
        -      "type": "string"
        -    },
        -    "created-by-userId": {
        -      "type": "integer"
        -    },
        -    "created-date": {
        -      "type": "string"
        -    },
        -    "description": {
        -      "type": "string"
        -    },
        -    "id": {
        -      "type": "integer"
        -    },
        -    "name": {
        -      "type": "string"
        -    },
        -    "project-id": {
        -      "type": "integer"
        -    },
        -    "tags": {
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "id": {
        -            "type": "integer"
        -          },
        -          "name": {
        -            "type": "string"
        -          },
        -          "projectId": {
        -            "type": [
        -              "null",
        -              "integer"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "id",
        -          "name",
        -          "projectId"
        -        ],
        -        "type": "object"
        -      },
        -      "type": [
        -        "null",
        -        "array"
        -      ]
        -    },
        -    "updated-by-userId": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "updated-date": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "name",
        -    "description",
        -    "code",
        -    "project-id",
        -    "tags",
        -    "created-by-userId",
        -    "created-date",
        -    "updated-by-userId",
        -    "updated-date"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / included / properties / messages / additionalProperties
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "author": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "body": {
        -      "type": "string"
        -    },
        -    "createdAt": {
        -      "type": "string"
        -    },
        -    "id": {
        -      "type": "integer"
        -    },
        -    "lastReply": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "message": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "meta": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "isRead": {
        -          "type": "boolean"
        -        },
        -        "permissions": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "canEdit": {
        -              "type": "boolean"
        -            }
        -          },
        -          "required": [
        -            "canEdit"
        -          ],
        -          "type": "object"
        -        }
        -      },
        -      "required": [
        -        "isRead",
        -        "permissions"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "project": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "replyStatus": {
        -      "type": "string"
        -    },
        -    "status": {
        -      "type": "string"
        -    },
        -    "tags": {
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "id": {
        -            "type": "integer"
        -          },
        -          "meta": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "type": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "id",
        -          "type"
        -        ],
        -        "type": "object"
        -      },
        -      "type": [
        -        "null",
        -        "array"
        -      ]
        -    },
        -    "title": {
        -      "type": "string"
        -    },
        -    "updatedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "title",
        -    "project",
        -    "tags",
        -    "body",
        -    "author",
        -    "message",
        -    "createdAt",
        -    "updatedAt",
        -    "lastReply",
        -    "replyStatus",
        -    "status"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / included / properties / milestones / additionalProperties
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "completed": {
        -      "type": "boolean"
        -    },
        -    "completedBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "completedOn": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "createdOn": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "deadline": {
        -      "type": "string"
        -    },
        -    "deletedOn": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "description": {
        -      "type": "string"
        -    },
        -    "id": {
        -      "type": "integer"
        -    },
        -    "lastChangedOn": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "name": {
        -      "type": "string"
        -    },
        -    "project": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "responsibleParties": {
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "id": {
        -            "type": "integer"
        -          },
        -          "meta": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "type": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "id",
        -          "type"
        -        ],
        -        "type": "object"
        -      },
        -      "type": [
        -        "null",
        -        "array"
        -      ]
        -    },
        -    "status": {
        -      "type": "string"
        -    },
        -    "tags": {
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "id": {
        -            "type": "integer"
        -          },
        -          "meta": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "type": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "id",
        -          "type"
        -        ],
        -        "type": "object"
        -      },
        -      "type": [
        -        "null",
        -        "array"
        -      ]
        -    },
        -    "tasklists": {
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "id": {
        -            "type": "integer"
        -          },
        -          "meta": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "type": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "id",
        -          "type"
        -        ],
        -        "type": "object"
        -      },
        -      "type": [
        -        "null",
        -        "array"
        -      ]
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "name",
        -    "description",
        -    "deadline",
        -    "project",
        -    "tasklists",
        -    "tags",
        -    "responsibleParties",
        -    "createdOn",
        -    "lastChangedOn",
        -    "deletedOn",
        -    "completedOn",
        -    "completedBy",
        -    "completed",
        -    "status"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / included / properties / notebooks / additionalProperties
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "contents": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "createdAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "createdBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "deleted": {
        -      "type": "boolean"
        -    },
        -    "deletedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "deletedBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "description": {
        -      "type": "string"
        -    },
        -    "id": {
        -      "type": "integer"
        -    },
        -    "name": {
        -      "type": "string"
        -    },
        -    "project": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "tags": {
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "id": {
        -            "type": "integer"
        -          },
        -          "meta": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "type": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "id",
        -          "type"
        -        ],
        -        "type": "object"
        -      },
        -      "type": [
        -        "null",
        -        "array"
        -      ]
        -    },
        -    "type": {
        -      "type": "string"
        -    },
        -    "updatedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "updatedBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "name",
        -    "description",
        -    "type",
        -    "project",
        -    "tags",
        -    "createdAt",
        -    "createdBy",
        -    "updatedAt",
        -    "updatedBy",
        -    "deletedAt",
        -    "deletedBy",
        -    "deleted"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / included / properties / projects / additionalProperties
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "category": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "company": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "completedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "completedBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "createdAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "createdBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "description": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "endAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "id": {
        -      "type": "integer"
        -    },
        -    "isBillable": {
        -      "type": [
        -        "null",
        -        "boolean"
        -      ]
        -    },
        -    "lastWorkedOn": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "name": {
        -      "type": "string"
        -    },
        -    "projectOwner": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "startAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "status": {
        -      "type": "string"
        -    },
        -    "tags": {
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "id": {
        -            "type": "integer"
        -          },
        -          "meta": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "type": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "id",
        -          "type"
        -        ],
        -        "type": "object"
        -      },
        -      "type": [
        -        "null",
        -        "array"
        -      ]
        -    },
        -    "type": {
        -      "type": "string"
        -    },
        -    "updatedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "updatedBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "description",
        -    "name",
        -    "startAt",
        -    "endAt",
        -    "category",
        -    "company",
        -    "projectOwner",
        -    "tags",
        -    "lastWorkedOn",
        -    "createdAt",
        -    "createdBy",
        -    "updatedAt",
        -    "updatedBy",
        -    "completedAt",
        -    "completedBy",
        -    "status",
        -    "isBillable",
        -    "type"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / included / properties / tasklists / additionalProperties
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "createdAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "description": {
        -      "type": "string"
        -    },
        -    "id": {
        -      "type": "integer"
        -    },
        -    "milestone": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "name": {
        -      "type": "string"
        -    },
        -    "project": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "status": {
        -      "type": "string"
        -    },
        -    "updatedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "name",
        -    "description",
        -    "project",
        -    "milestone",
        -    "createdAt",
        -    "updatedAt",
        -    "status"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / included / properties / tasks / additionalProperties
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "assignees": {
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "id": {
        -            "type": "integer"
        -          },
        -          "meta": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "type": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "id",
        -          "type"
        -        ],
        -        "type": "object"
        -      },
        -      "type": [
        -        "null",
        -        "array"
        -      ]
        -    },
        -    "completedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "completedBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "createdAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "createdBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "deletedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "deletedBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "description": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "descriptionContentType": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "dueDate": {
        -      "description": "Null or date-only date string",
        -      "format": "date",
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "estimateMinutes": {
        -      "type": "integer"
        -    },
        -    "id": {
        -      "type": "integer"
        -    },
        -    "name": {
        -      "type": "string"
        -    },
        -    "parentTask": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "predecessors": {
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "id": {
        -            "type": "integer"
        -          },
        -          "meta": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "type": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "id",
        -          "type"
        -        ],
        -        "type": "object"
        -      },
        -      "type": [
        -        "null",
        -        "array"
        -      ]
        -    },
        -    "priority": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "progress": {
        -      "type": "integer"
        -    },
        -    "startDate": {
        -      "description": "Null or date-only date string",
        -      "format": "date",
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "status": {
        -      "type": "string"
        -    },
        -    "tags": {
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "id": {
        -            "type": "integer"
        -          },
        -          "meta": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "type": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "id",
        -          "type"
        -        ],
        -        "type": "object"
        -      },
        -      "type": [
        -        "null",
        -        "array"
        -      ]
        -    },
        -    "tasklist": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "updatedAt": {
        -      "type": "string"
        -    },
        -    "updatedBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "workflowStages": {
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "stageId": {
        -            "type": [
        -              "null",
        -              "integer"
        -            ]
        -          },
        -          "workflowId": {
        -            "type": [
        -              "null",
        -              "integer"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "workflowId",
        -          "stageId"
        -        ],
        -        "type": "object"
        -      },
        -      "type": [
        -        "null",
        -        "array"
        -      ]
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "name",
        -    "description",
        -    "descriptionContentType",
        -    "priority",
        -    "progress",
        -    "startDate",
        -    "dueDate",
        -    "estimateMinutes",
        -    "tasklist",
        -    "parentTask",
        -    "assignees",
        -    "tags",
        -    "predecessors",
        -    "workflowStages",
        -    "createdBy",
        -    "createdAt",
        -    "updatedBy",
        -    "updatedAt",
        -    "deletedBy",
        -    "deletedAt",
        -    "status"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / included / properties / teams / additionalProperties
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "company": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "name": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "name"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "createdByUserId": {
        -      "type": "integer"
        -    },
        -    "dateCreated": {
        -      "type": "string"
        -    },
        -    "dateUpdated": {
        -      "type": "string"
        -    },
        -    "deleted": {
        -      "type": "boolean"
        -    },
        -    "deletedDate": {
        -      "additionalProperties": false,
        -      "properties": {},
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "description": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "handle": {
        -      "type": "string"
        -    },
        -    "id": {
        -      "type": "integer"
        -    },
        -    "logoColor": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "logoIcon": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "logoUrl": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "members": {
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "id": {
        -            "type": "integer"
        -          },
        -          "type": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "id",
        -          "type"
        -        ],
        -        "type": "object"
        -      },
        -      "type": [
        -        "null",
        -        "array"
        -      ]
        -    },
        -    "name": {
        -      "type": "string"
        -    },
        -    "parentTeam": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "handle": {
        -          "type": "string"
        -        },
        -        "id": {
        -          "type": "integer"
        -        },
        -        "name": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "name",
        -        "handle"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "projectId": {
        -      "type": "integer"
        -    },
        -    "rootTeam": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "handle": {
        -          "type": "string"
        -        },
        -        "id": {
        -          "type": "integer"
        -        },
        -        "name": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "name",
        -        "handle"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "updatedByUserId": {
        -      "type": "integer"
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "name",
        -    "description",
        -    "handle",
        -    "logoUrl",
        -    "logoIcon",
        -    "logoColor",
        -    "projectId",
        -    "company",
        -    "parentTeam",
        -    "rootTeam",
        -    "members",
        -    "createdByUserId",
        -    "dateCreated",
        -    "updatedByUserId",
        -    "dateUpdated",
        -    "deleted",
        -    "deletedDate"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / included / properties / timelogs / additionalProperties
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "billable": {
        -      "type": "boolean"
        -    },
        -    "createdAt": {
        -      "type": "string"
        -    },
        -    "deleted": {
        -      "type": "boolean"
        -    },
        -    "deletedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "deletedBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "description": {
        -      "type": "string"
        -    },
        -    "deskTicketId": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "id": {
        -      "type": "integer"
        -    },
        -    "loggedBy": {
        -      "type": "integer"
        -    },
        -    "minutes": {
        -      "type": "integer"
        -    },
        -    "project": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "tags": {
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "id": {
        -            "type": "integer"
        -          },
        -          "meta": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "type": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "id",
        -          "type"
        -        ],
        -        "type": "object"
        -      },
        -      "type": [
        -        "null",
        -        "array"
        -      ]
        -    },
        -    "task": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "timeLogged": {
        -      "type": "string"
        -    },
        -    "updatedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "updatedBy": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "user": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "description",
        -    "billable",
        -    "minutes",
        -    "timeLogged",
        -    "user",
        -    "task",
        -    "project",
        -    "createdAt",
        -    "loggedBy",
        -    "updatedAt",
        -    "updatedBy",
        -    "deletedAt",
        -    "deletedBy",
        -    "deleted"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / included / properties / users / additionalProperties
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "company": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "createdAt": {
        -      "type": "string"
        -    },
        -    "createdBy": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "deleted": {
        -      "type": "boolean"
        -    },
        -    "email": {
        -      "type": "string"
        -    },
        -    "firstName": {
        -      "type": "string"
        -    },
        -    "id": {
        -      "type": "integer"
        -    },
        -    "isAdmin": {
        -      "type": "boolean"
        -    },
        -    "jobRoles": {
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "id": {
        -            "type": "integer"
        -          },
        -          "meta": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "type": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "id",
        -          "type"
        -        ],
        -        "type": "object"
        -      },
        -      "type": [
        -        "null",
        -        "array"
        -      ]
        -    },
        -    "lastName": {
        -      "type": "string"
        -    },
        -    "lengthOfDay": {
        -      "type": "number"
        -    },
        -    "skills": {
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "id": {
        -            "type": "integer"
        -          },
        -          "meta": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "type": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "id",
        -          "type"
        -        ],
        -        "type": "object"
        -      },
        -      "type": [
        -        "null",
        -        "array"
        -      ]
        -    },
        -    "title": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "type": {
        -      "type": "string"
        -    },
        -    "updatedAt": {
        -      "type": [
        -        "null",
        -        "string"
        -      ]
        -    },
        -    "updatedBy": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    },
        -    "userCost": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "userRate": {
        -      "type": [
        -        "null",
        -        "integer"
        -      ]
        -    },
        -    "workingHour": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "id": {
        -          "type": "integer"
        -        },
        -        "meta": {
        -          "additionalProperties": true,
        -          "type": "object"
        -        },
        -        "type": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": [
        -        "null",
        -        "object"
        -      ]
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "firstName",
        -    "lastName",
        -    "title",
        -    "email",
        -    "isAdmin",
        -    "type",
        -    "userCost",
        -    "userRate",
        -    "company",
        -    "workingHour",
        -    "lengthOfDay",
        -    "deleted",
        -    "createdBy",
        -    "createdAt",
        -    "updatedBy",
        -    "updatedAt"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / meta / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / meta / required
        Removed value: -[
        -  "prevCursor",
        -  "nextCursor",
        -  "limit"
        -]
      • removedOutput schema / properties / search / items / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / search / items / properties / meta / additionalProperties
        Removed value: -true
      • removedOutput schema / properties / search / items / required
        Removed value: -[
        -  "id",
        -  "type"
        -]
      • removedOutput schema / required
        Removed value: -[
        -  "meta",
        -  "search",
        -  "included"
        -]
    • Changedtwprojects-update_comment2 fields changed
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "description": "Notify all project members.",
        -        "enum": [
        -          "all"
        -        ],
        -        "type": "string"
        -      },
        -      {
        -        "description": "Notify all followers of the entity this comment is related to.",
        -        "enum": [
        -          true
        -        ],
        -        "type": "boolean"
        -      },
        -      {
        -        "anyOf": [
        -          {
        -            "required": [
        -              "user_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "company_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "team_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "job_role_ids"
        -            ]
        -          }
        -        ],
        -        "maxProperties": 4,
        -        "minProperties": 1,
        -        "properties": {
        -          "company_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "job_role_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "team_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "user_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "Notify all project members.",
        +    "enum": [
        +      "all"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "description": "true notifies all followers of the entity this comment is related to. false notifies nobody.",
        +    "type": "boolean"
        +  },
        +  {
        +    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / notify / description
        Previous value: -"Who to notify of the comment change."New value: +"Who to notify of the comment change. Accepts the string \"all\" to notify all project members, the boolean true to notify all followers of the related entity, the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
    • Changedtwprojects-update_link2 fields changed
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "description": "Notify all project members.",
        -        "enum": [
        -          "all"
        -        ],
        -        "type": "string"
        -      },
        -      {
        -        "anyOf": [
        -          {
        -            "required": [
        -              "user_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "company_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "team_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "job_role_ids"
        -            ]
        -          }
        -        ],
        -        "maxProperties": 4,
        -        "minProperties": 1,
        -        "properties": {
        -          "company_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "job_role_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "team_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "user_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "Notify all project members.",
        +    "enum": [
        +      "all"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "description": "true is the same as \"all\": notify all project members. false notifies nobody.",
        +    "type": "boolean"
        +  },
        +  {
        +    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / notify / description
        Previous value: -"Who to notify of the link update."New value: +"Who to notify of the link update. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
    • Changedtwprojects-update_message2 fields changed
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "description": "Notify all project members.",
        -        "enum": [
        -          "all"
        -        ],
        -        "type": "string"
        -      },
        -      {
        -        "anyOf": [
        -          {
        -            "required": [
        -              "user_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "company_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "team_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "job_role_ids"
        -            ]
        -          }
        -        ],
        -        "maxProperties": 4,
        -        "minProperties": 1,
        -        "properties": {
        -          "company_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "job_role_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "team_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "user_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "Notify all project members.",
        +    "enum": [
        +      "all"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "description": "true is the same as \"all\": notify all project members. false notifies nobody.",
        +    "type": "boolean"
        +  },
        +  {
        +    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / notify / description
        Previous value: -"Who to notify of the message update."New value: +"Who to notify of the message update. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
    • Changedtwprojects-update_message_reply2 fields changed
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "description": "Notify all project members.",
        -        "enum": [
        -          "all"
        -        ],
        -        "type": "string"
        -      },
        -      {
        -        "anyOf": [
        -          {
        -            "required": [
        -              "user_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "company_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "team_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "job_role_ids"
        -            ]
        -          }
        -        ],
        -        "maxProperties": 4,
        -        "minProperties": 1,
        -        "properties": {
        -          "company_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "job_role_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "team_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "user_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "Notify all project members.",
        +    "enum": [
        +      "all"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "description": "true is the same as \"all\": notify all project members. false notifies nobody.",
        +    "type": "boolean"
        +  },
        +  {
        +    "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.",
        +    "items": {
        +      "type": "integer"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / notify / description
        Previous value: -"Who to notify of the reply update."New value: +"Who to notify of the reply update. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
  13. 47 tool updatesv1.26.5
    • Changedtwchat-list_messages2 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
    • Changedtwdesk-list_companies4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwdesk-list_customers4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwdesk-list_inboxes4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwdesk-list_priorities4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwdesk-list_statuses4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwdesk-list_tags4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwdesk-list_ticket_types4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwdesk-list_users4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwdesk-search_tickets4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_activities4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_calendars4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_comments4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_companies4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_custom_field_values4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_custom_fields4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_custom_item_fields4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_custom_item_records4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_custom_items4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_jobroles4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_links4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_message_replies4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_messages4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_milestones4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_notebooks4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_project_budgets7 fields changed
      • changedInput schema / properties / cursor / description
        Previous value: -"Cursor for fetching the next page of results."New value: +"Opaque cursor from a previous response, for cursor pagination. This is not an offset or a page number โ€” never construct one. Setting it makes the endpoint ignore page and page_size. To walk pages, use page instead."
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of budgets to return."New value: +"Maximum number of budgets to return. Only applies alongside cursor; ignored when paging with page/page_size."
      • addedInput schema / properties / page
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Page number for pagination of results (1-based)."
        +}
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
      • addedOutput schema / properties / budgets / items / properties / updatedBy
        Added value: +{
        +  "type": [
        +    "null",
        +    "integer"
        +  ]
        +}
      • removedOutput schema / properties / budgets / items / properties / updatedUserId
        Removed value: -{
        -  "type": [
        -    "null",
        -    "integer"
        -  ]
        -}
    • Changedtwprojects-list_project_categories4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_project_templates4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_projects4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_skills4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_tags4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_tasklist_budgets4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_tasklists4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_tasks4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_teams4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_timelogs4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_timers4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_users4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_workflow_stages4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-list_workflows4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwprojects-users_workload4 fields changed
      • changedInput schema / properties / page / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
      • changedInput schema / properties / page_size / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwspaces-list_categories2 fields changed
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwspaces-list_comments2 fields changed
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwspaces-list_pages2 fields changed
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwspaces-list_spaces2 fields changed
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwspaces-list_tags2 fields changed
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
    • Changedtwspaces-search2 fields changed
      • changedInput schema / properties / pageSize / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 500,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / pageSize / description
        Previous value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
  14. 119 tool updatesv1.26.0
    • Addedtwchat-get_conversation
    • Addedtwchat-send_message
    • Addedtwdesk-create_company
    • Addedtwdesk-create_customer
    • Addedtwdesk-create_file
    • Addedtwdesk-create_helpdoc_article
    • Addedtwdesk-get_helpdoc_article
    • Addedtwdesk-get_inbox
    • Addedtwdesk-get_priority
    • Addedtwdesk-get_status
    • Addedtwdesk-get_tag
    • Addedtwdesk-get_ticket
    • Addedtwdesk-get_ticket_type
    • Addedtwdesk-get_user
    • Addedtwdesk-list_customers
    • Addedtwdesk-list_inboxes
    • Addedtwdesk-list_priorities
    • Addedtwdesk-list_statuses
    • Addedtwdesk-list_ticket_types
    • Addedtwdesk-list_users
    • Addedtwdesk-reply_ticket
    • Addedtwdesk-search_helpdoc_articles
    • Addedtwdesk-search_tickets
    • Addedtwdesk-update_company
    • Addedtwdesk-update_customer
    • Addedtwdesk-update_helpdoc_article
    • Addedtwdesk-update_priority
    • Addedtwdesk-update_status
    • Addedtwdesk-update_tag
    • Addedtwdesk-update_ticket
    • Addedtwdesk-update_ticket_type
    • Addedtwprojects-add_project_member
    • Addedtwprojects-clone_project
    • Addedtwprojects-complete_task
    • Addedtwprojects-complete_timer
    • Addedtwprojects-create_company
    • Addedtwprojects-create_custom_field
    • Addedtwprojects-create_custom_field_value
    • Addedtwprojects-create_custom_item_field
    • Addedtwprojects-create_custom_item_record
    • Addedtwprojects-create_jobrole
    • Addedtwprojects-create_link
    • Addedtwprojects-create_message
    • Addedtwprojects-create_message_reply
    • Addedtwprojects-create_milestone
    • Addedtwprojects-create_notebook
    • Addedtwprojects-create_project
    • Addedtwprojects-create_project_category
    • Addedtwprojects-create_project_template
    • Addedtwprojects-create_skill
    • Addedtwprojects-create_tasklist
    • Addedtwprojects-create_team
    • Addedtwprojects-create_timer
    • Addedtwprojects-create_user
    • Addedtwprojects-create_workflow
    • Addedtwprojects-create_workflow_stage
    • Addedtwprojects-get_comment
    • Addedtwprojects-get_custom_field
    • Addedtwprojects-get_custom_item
    • Addedtwprojects-get_custom_item_field
    • Addedtwprojects-get_custom_item_record
    • Addedtwprojects-get_jobrole
    • Addedtwprojects-get_link
    • Addedtwprojects-get_message
    • Addedtwprojects-get_message_reply
    • Addedtwprojects-get_milestone
    • Addedtwprojects-get_notebook
    • Addedtwprojects-get_project_category
    • Addedtwprojects-get_skill
    • Addedtwprojects-get_tag
    • Addedtwprojects-get_timelog
    • Addedtwprojects-get_timer
    • Addedtwprojects-get_user
    • Addedtwprojects-get_user_me
    • Addedtwprojects-get_workflow
    • Addedtwprojects-get_workflow_stage
    • Addedtwprojects-link_project_to_workflow
    • Addedtwprojects-list_activities
    • Addedtwprojects-list_calendar_events
    • Addedtwprojects-list_calendars
    • Addedtwprojects-list_companies
    • Addedtwprojects-list_custom_field_values
    • Addedtwprojects-list_custom_fields
    • Addedtwprojects-list_custom_item_fields
    • Addedtwprojects-list_custom_items
    • Addedtwprojects-list_industries
    • Addedtwprojects-list_jobroles
    • Addedtwprojects-list_links
    • Addedtwprojects-list_message_replies
    • Addedtwprojects-list_messages
    • Addedtwprojects-list_project_categories
    • Addedtwprojects-list_project_templates
    • Addedtwprojects-list_skills
    • Addedtwprojects-list_tags
    • Addedtwprojects-list_tasklist_budgets
    • Changedtwprojects-list_tasklists1 field changed
      • addedInput schema / properties / show_completed
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, include completed tasklists; excluded by default."
        +}
    • Changedtwprojects-list_tasks1 field changed
      • addedInput schema / properties / show_completed
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": false,
        +  "description": "If true, include completed tasks and tasks belonging to completed tasklists; both excluded by default."
        +}
    • Addedtwprojects-list_teams
    • Addedtwprojects-list_users
    • Addedtwprojects-list_workflow_stages
    • Addedtwprojects-list_workflows
    • Addedtwprojects-pause_timer
    • Addedtwprojects-resume_timer
    • Addedtwprojects-summarize_timelogs
    • Addedtwprojects-update_comment
    • Addedtwprojects-update_company
    • Addedtwprojects-update_custom_field
    • Addedtwprojects-update_custom_field_value
    • Addedtwprojects-update_custom_item
    • Addedtwprojects-update_custom_item_field
    • Addedtwprojects-update_custom_item_record
    • Addedtwprojects-update_link
    • Addedtwprojects-update_message
    • Addedtwprojects-update_message_reply
    • Addedtwprojects-update_milestone
    • Addedtwprojects-update_notebook
    • Addedtwprojects-update_project
    • Addedtwprojects-users_workload
    • Addedtwspaces-create_tags
  15. 117 tool updatesv1.25.0
    • Removedtwchat-get_conversation
    • Removedtwchat-send_message
    • Removedtwdesk-create_company
    • Removedtwdesk-create_customer
    • Removedtwdesk-create_file
    • Removedtwdesk-create_helpdoc_article
    • Removedtwdesk-get_helpdoc_article
    • Removedtwdesk-get_inbox
    • Removedtwdesk-get_priority
    • Removedtwdesk-get_status
    • Removedtwdesk-get_tag
    • Removedtwdesk-get_ticket
    • Removedtwdesk-get_ticket_type
    • Removedtwdesk-get_user
    • Removedtwdesk-list_customers
    • Removedtwdesk-list_inboxes
    • Removedtwdesk-list_priorities
    • Removedtwdesk-list_statuses
    • Removedtwdesk-list_ticket_types
    • Removedtwdesk-list_users
    • Removedtwdesk-reply_ticket
    • Removedtwdesk-search_helpdoc_articles
    • Removedtwdesk-search_tickets
    • Removedtwdesk-update_company
    • Removedtwdesk-update_customer
    • Removedtwdesk-update_helpdoc_article
    • Removedtwdesk-update_priority
    • Removedtwdesk-update_status
    • Removedtwdesk-update_tag
    • Removedtwdesk-update_ticket
    • Removedtwdesk-update_ticket_type
    • Removedtwprojects-add_project_member
    • Removedtwprojects-clone_project
    • Removedtwprojects-complete_task
    • Removedtwprojects-complete_timer
    • Removedtwprojects-create_company
    • Removedtwprojects-create_custom_field
    • Removedtwprojects-create_custom_field_value
    • Removedtwprojects-create_custom_item_field
    • Removedtwprojects-create_custom_item_record
    • Removedtwprojects-create_jobrole
    • Removedtwprojects-create_link
    • Removedtwprojects-create_message
    • Removedtwprojects-create_message_reply
    • Removedtwprojects-create_milestone
    • Removedtwprojects-create_notebook
    • Removedtwprojects-create_project
    • Removedtwprojects-create_project_category
    • Removedtwprojects-create_project_template
    • Removedtwprojects-create_skill
    • Removedtwprojects-create_tasklist
    • Removedtwprojects-create_team
    • Removedtwprojects-create_timer
    • Removedtwprojects-create_user
    • Removedtwprojects-create_workflow
    • Removedtwprojects-create_workflow_stage
    • Removedtwprojects-get_comment
    • Removedtwprojects-get_custom_field
    • Removedtwprojects-get_custom_item
    • Removedtwprojects-get_custom_item_field
    • Removedtwprojects-get_custom_item_record
    • Removedtwprojects-get_jobrole
    • Removedtwprojects-get_link
    • Removedtwprojects-get_message
    • Removedtwprojects-get_message_reply
    • Removedtwprojects-get_milestone
    • Removedtwprojects-get_notebook
    • Removedtwprojects-get_project_category
    • Removedtwprojects-get_skill
    • Removedtwprojects-get_tag
    • Removedtwprojects-get_timelog
    • Removedtwprojects-get_timer
    • Removedtwprojects-get_user
    • Removedtwprojects-get_user_me
    • Removedtwprojects-get_workflow
    • Removedtwprojects-get_workflow_stage
    • Removedtwprojects-link_project_to_workflow
    • Removedtwprojects-list_activities
    • Removedtwprojects-list_calendar_events
    • Removedtwprojects-list_calendars
    • Removedtwprojects-list_companies
    • Removedtwprojects-list_custom_field_values
    • Removedtwprojects-list_custom_fields
    • Removedtwprojects-list_custom_item_fields
    • Removedtwprojects-list_custom_items
    • Removedtwprojects-list_industries
    • Removedtwprojects-list_jobroles
    • Removedtwprojects-list_links
    • Removedtwprojects-list_message_replies
    • Removedtwprojects-list_messages
    • Removedtwprojects-list_project_categories
    • Removedtwprojects-list_project_templates
    • Removedtwprojects-list_skills
    • Removedtwprojects-list_tags
    • Removedtwprojects-list_tasklist_budgets
    • Changedtwprojects-list_tasks2 fields changed
      • addedInput schema / properties / only_unassigned
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "If true, only return tasks that have no assignee."
        +}
      • addedInput schema / properties / only_unplanned
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "If true, only return tasks that are unplanned, meaning they are missing an assignee, a due date, or estimated time."
        +}
    • Removedtwprojects-list_teams
    • Removedtwprojects-list_users
    • Removedtwprojects-list_workflow_stages
    • Removedtwprojects-list_workflows
    • Removedtwprojects-pause_timer
    • Removedtwprojects-resume_timer
    • Removedtwprojects-update_comment
    • Removedtwprojects-update_company
    • Removedtwprojects-update_custom_field
    • Removedtwprojects-update_custom_field_value
    • Removedtwprojects-update_custom_item
    • Removedtwprojects-update_custom_item_field
    • Removedtwprojects-update_custom_item_record
    • Removedtwprojects-update_link
    • Removedtwprojects-update_message
    • Removedtwprojects-update_message_reply
    • Removedtwprojects-update_milestone
    • Removedtwprojects-update_notebook
    • Removedtwprojects-update_project
    • Removedtwprojects-users_workload
    • Removedtwspaces-create_tags
  16. 6 tool updatesv1.23.4
    • Changedtwprojects-list_tasks2 fields changed
      • addedInput schema / properties / due_after
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Filter tasks due after.",
        +  "examples": [
        +    "2023-01-01"
        +  ]
        +}
      • addedInput schema / properties / due_before
        Added value: +{
        +  "anyOf": [
        +    {
        +      "format": "date",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Filter tasks due before.",
        +  "examples": [
        +    "2023-12-31"
        +  ]
        +}
    • Removedtwspaces-delete_category
    • Removedtwspaces-delete_comment
    • Removedtwspaces-delete_page
    • Removedtwspaces-delete_space
    • Removedtwspaces-delete_tag
  17. 12 tool updatesv1.23.0
    • Changedtwprojects-create_comment1 field changed
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "description": "Notify all project members.",
        -        "enum": [
        -          "all"
        -        ],
        -        "type": "string"
        -      },
        -      {
        -        "description": "Notify all followers of the entity this comment is related to.",
        -        "enum": [
        -          true
        -        ],
        -        "type": "boolean"
        -      },
        -      {
        -        "anyOf": [
        -          {
        -            "required": [
        -              "user_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "company_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "team_ids"
        -            ]
        -          }
        -        ],
        -        "maxProperties": 3,
        -        "minProperties": 1,
        -        "properties": {
        -          "company_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "team_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "user_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "description": "Notify all project members.",
        +        "enum": [
        +          "all"
        +        ],
        +        "type": "string"
        +      },
        +      {
        +        "description": "Notify all followers of the entity this comment is related to.",
        +        "enum": [
        +          true
        +        ],
        +        "type": "boolean"
        +      },
        +      {
        +        "anyOf": [
        +          {
        +            "required": [
        +              "user_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "company_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "team_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "job_role_ids"
        +            ]
        +          }
        +        ],
        +        "maxProperties": 4,
        +        "minProperties": 1,
        +        "properties": {
        +          "company_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "job_role_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "team_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "user_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedtwprojects-create_link1 field changed
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "description": "Notify all project members.",
        -        "enum": [
        -          "all"
        -        ],
        -        "type": "string"
        -      },
        -      {
        -        "anyOf": [
        -          {
        -            "required": [
        -              "user_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "company_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "team_ids"
        -            ]
        -          }
        -        ],
        -        "maxProperties": 3,
        -        "minProperties": 1,
        -        "properties": {
        -          "company_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "team_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "user_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "description": "Notify all project members.",
        +        "enum": [
        +          "all"
        +        ],
        +        "type": "string"
        +      },
        +      {
        +        "anyOf": [
        +          {
        +            "required": [
        +              "user_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "company_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "team_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "job_role_ids"
        +            ]
        +          }
        +        ],
        +        "maxProperties": 4,
        +        "minProperties": 1,
        +        "properties": {
        +          "company_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "job_role_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "team_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "user_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedtwprojects-create_message1 field changed
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "description": "Notify all project members.",
        -        "enum": [
        -          "all"
        -        ],
        -        "type": "string"
        -      },
        -      {
        -        "anyOf": [
        -          {
        -            "required": [
        -              "user_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "company_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "team_ids"
        -            ]
        -          }
        -        ],
        -        "maxProperties": 3,
        -        "minProperties": 1,
        -        "properties": {
        -          "company_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "team_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "user_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "description": "Notify all project members.",
        +        "enum": [
        +          "all"
        +        ],
        +        "type": "string"
        +      },
        +      {
        +        "anyOf": [
        +          {
        +            "required": [
        +              "user_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "company_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "team_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "job_role_ids"
        +            ]
        +          }
        +        ],
        +        "maxProperties": 4,
        +        "minProperties": 1,
        +        "properties": {
        +          "company_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "job_role_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "team_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "user_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedtwprojects-create_message_reply1 field changed
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "description": "Notify all project members.",
        -        "enum": [
        -          "all"
        -        ],
        -        "type": "string"
        -      },
        -      {
        -        "anyOf": [
        -          {
        -            "required": [
        -              "user_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "company_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "team_ids"
        -            ]
        -          }
        -        ],
        -        "maxProperties": 3,
        -        "minProperties": 1,
        -        "properties": {
        -          "company_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "team_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "user_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "description": "Notify all project members.",
        +        "enum": [
        +          "all"
        +        ],
        +        "type": "string"
        +      },
        +      {
        +        "anyOf": [
        +          {
        +            "required": [
        +              "user_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "company_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "team_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "job_role_ids"
        +            ]
        +          }
        +        ],
        +        "maxProperties": 4,
        +        "minProperties": 1,
        +        "properties": {
        +          "company_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "job_role_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "team_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "user_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedtwprojects-create_milestone3 fields changed
      • changedInput schema / properties / assignees / anyOf
        Previous value: -[
        -  {
        -    "required": [
        -      "user_ids"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "company_ids"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "team_ids"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "required": [
        +      "user_ids"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "company_ids"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "team_ids"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "job_role_ids"
        +    ]
        +  }
        +]
      • changedInput schema / properties / assignees / maxProperties
        Previous value: -3New value: +4
      • addedInput schema / properties / assignees / properties / job_role_ids
        Added value: +{
        +  "items": {
        +    "type": "integer"
        +  },
        +  "minItems": 1,
        +  "type": "array"
        +}
    • Changedtwprojects-create_task4 fields changed
      • changedInput schema / properties / assignees / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 3,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / change_followers / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 3,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / comment_followers / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 3,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / complete_followers / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 3,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedtwprojects-update_comment1 field changed
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "description": "Notify all project members.",
        -        "enum": [
        -          "all"
        -        ],
        -        "type": "string"
        -      },
        -      {
        -        "description": "Notify all followers of the entity this comment is related to.",
        -        "enum": [
        -          true
        -        ],
        -        "type": "boolean"
        -      },
        -      {
        -        "anyOf": [
        -          {
        -            "required": [
        -              "user_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "company_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "team_ids"
        -            ]
        -          }
        -        ],
        -        "maxProperties": 3,
        -        "minProperties": 1,
        -        "properties": {
        -          "company_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "team_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "user_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "description": "Notify all project members.",
        +        "enum": [
        +          "all"
        +        ],
        +        "type": "string"
        +      },
        +      {
        +        "description": "Notify all followers of the entity this comment is related to.",
        +        "enum": [
        +          true
        +        ],
        +        "type": "boolean"
        +      },
        +      {
        +        "anyOf": [
        +          {
        +            "required": [
        +              "user_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "company_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "team_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "job_role_ids"
        +            ]
        +          }
        +        ],
        +        "maxProperties": 4,
        +        "minProperties": 1,
        +        "properties": {
        +          "company_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "job_role_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "team_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "user_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedtwprojects-update_link1 field changed
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "description": "Notify all project members.",
        -        "enum": [
        -          "all"
        -        ],
        -        "type": "string"
        -      },
        -      {
        -        "anyOf": [
        -          {
        -            "required": [
        -              "user_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "company_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "team_ids"
        -            ]
        -          }
        -        ],
        -        "maxProperties": 3,
        -        "minProperties": 1,
        -        "properties": {
        -          "company_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "team_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "user_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "description": "Notify all project members.",
        +        "enum": [
        +          "all"
        +        ],
        +        "type": "string"
        +      },
        +      {
        +        "anyOf": [
        +          {
        +            "required": [
        +              "user_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "company_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "team_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "job_role_ids"
        +            ]
        +          }
        +        ],
        +        "maxProperties": 4,
        +        "minProperties": 1,
        +        "properties": {
        +          "company_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "job_role_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "team_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "user_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedtwprojects-update_message1 field changed
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "description": "Notify all project members.",
        -        "enum": [
        -          "all"
        -        ],
        -        "type": "string"
        -      },
        -      {
        -        "anyOf": [
        -          {
        -            "required": [
        -              "user_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "company_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "team_ids"
        -            ]
        -          }
        -        ],
        -        "maxProperties": 3,
        -        "minProperties": 1,
        -        "properties": {
        -          "company_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "team_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "user_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "description": "Notify all project members.",
        +        "enum": [
        +          "all"
        +        ],
        +        "type": "string"
        +      },
        +      {
        +        "anyOf": [
        +          {
        +            "required": [
        +              "user_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "company_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "team_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "job_role_ids"
        +            ]
        +          }
        +        ],
        +        "maxProperties": 4,
        +        "minProperties": 1,
        +        "properties": {
        +          "company_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "job_role_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "team_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "user_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedtwprojects-update_message_reply1 field changed
      • changedInput schema / properties / notify / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "description": "Notify all project members.",
        -        "enum": [
        -          "all"
        -        ],
        -        "type": "string"
        -      },
        -      {
        -        "anyOf": [
        -          {
        -            "required": [
        -              "user_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "company_ids"
        -            ]
        -          },
        -          {
        -            "required": [
        -              "team_ids"
        -            ]
        -          }
        -        ],
        -        "maxProperties": 3,
        -        "minProperties": 1,
        -        "properties": {
        -          "company_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "team_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "user_ids": {
        -            "items": {
        -              "type": "integer"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "description": "Notify all project members.",
        +        "enum": [
        +          "all"
        +        ],
        +        "type": "string"
        +      },
        +      {
        +        "anyOf": [
        +          {
        +            "required": [
        +              "user_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "company_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "team_ids"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "job_role_ids"
        +            ]
        +          }
        +        ],
        +        "maxProperties": 4,
        +        "minProperties": 1,
        +        "properties": {
        +          "company_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "job_role_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "team_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "user_ids": {
        +            "items": {
        +              "type": "integer"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedtwprojects-update_milestone1 field changed
      • changedInput schema / properties / assignees / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 3,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedtwprojects-update_task6 fields changed
      • changedInput schema / properties / assignees / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 3,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / assignees / description
        Previous value: -"Assignees for the task."New value: +"Assignees for the task. To remove all assignees, use clear_assignees instead."
      • changedInput schema / properties / change_followers / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 3,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / clear_assignees
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "If true, removes all assignees from the task, leaving it unassigned. Cannot be combined with a non-empty assignees value."
        +}
      • changedInput schema / properties / comment_followers / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 3,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / complete_followers / anyOf
        Previous value: -[
        -  {
        -    "anyOf": [
        -      {
        -        "required": [
        -          "user_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "company_ids"
        -        ]
        -      },
        -      {
        -        "required": [
        -          "team_ids"
        -        ]
        -      }
        -    ],
        -    "maxProperties": 3,
        -    "minProperties": 1,
        -    "properties": {
        -      "company_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "team_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "user_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "anyOf": [
        +      {
        +        "required": [
        +          "user_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "company_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "team_ids"
        +        ]
        +      },
        +      {
        +        "required": [
        +          "job_role_ids"
        +        ]
        +      }
        +    ],
        +    "maxProperties": 4,
        +    "minProperties": 1,
        +    "properties": {
        +      "company_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "job_role_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "team_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "user_ids": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  18. 2 tool updatesv1.21.6
    • Changedtwprojects-create_timelog1 field changed
      • removedInput schema / properties / billable / default
        Removed value: -false
    • Changedtwprojects-update_timelog1 field changed
      • removedInput schema / properties / billable / default
        Removed value: -false

TDQS

C2.7/5.0

Scored across 213 tools

Disambiguation4/5

The module prefixes (twprojects, twdesk, twchat, twspaces) combined with a consistent verb_noun naming pattern make most tools clearly distinct. However, the vast number of tools (213) creates some ambiguity between similar operations across modules (e.g., create_tag in projects, desk, and spaces) and a few near-duplicates like send_dm vs send_message.

Naming Consistency4/5

The overwhelming majority of tools follow a clear prefix + verb_noun convention (e.g., twprojects-list_tasks, twdesk-update_ticket). Minor deviations exist, such as twprojects-users_workload (noun_noun instead of verb_noun) and compound verbs like link_task_to_allocation, but these are rare and the pattern is still predictable.

Tool Count1/5

213 tools is an extreme number for any MCP server. Even for a comprehensive integration spanning Projects, Desk, Chat, and Spaces, this far exceeds the typical well-scoped range (3-15 tools) and falls into the 50+ extreme mismatch category. The sheer volume makes it impractical for an agent to select from effectively.

Completeness2/5

While the server covers a broad set of entities (projects, tasks, tickets, pages, chats, custom items, etc.) with create/get/update/list operations, it is notably missing delete operations for virtually every entity (e.g., no twprojects-delete_task, no twdesk-delete_ticket, no twspaces-delete_page). This is a significant gap in lifecycle coverage that will force agents into dead ends when cleanup or removal is requested.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers