Mutation Object
Fields
#
bulkUpdateActionsType
requestActionUpdate
bulkUpdateActionsPriorityLevelId
Update priority level for multiple actions at once.
Always call getPriorityLevels before calling this function to get the priority level IDs and ensure that priorityLevelId exists.
Access: Requires user access to all actions
Parameters:
- actionIds: Array of action IDs to update
- workspaceId: The ID of the workspace
- priorityLevelId: The ID of the priority level to set (null to unset)
- shouldUpdateRecurring: Optional flag to update recurring instances
Returns: Boolean indicating success
copyAction
Copy/duplicate an action including its subactions, attachments, approval rounds, and dependencies. Returns the newly created action.
bulkUpdateActionsTitle
Update titles for multiple actions at once
Access: Requires user access to all actions
Parameters:
- actionIds: Array of action IDs to update
- workspaceId: The ID of the workspace
- title: The new title to set
- shouldUpdateRecurring: Optional flag to update recurring instances
- allowEmpty: Optional flag to allow empty titles
Returns: Boolean indicating success
bulkUpdateActionsTitles
Update different titles for multiple actions at once
Access: Requires user access to all actions
Parameters:
- actionTitleUpdates: Array of {actionId, title} pairs to update
- workspaceId: The ID of the workspace
Behavior:
- Empty titles are not allowed (will throw error)
- Only updates the specific actions in the batch (does not update recurring series)
Returns: Boolean indicating success
bulkUpdateActionDescription
Update descriptions for multiple actions at once
Access: Requires user access to all actions
Parameters:
- actionIds: Array of action IDs to update
- workspaceId: The ID of the workspace
- description: The new description to set in HTML format. Must be a valid HTML string. Use the corresponding markdown (
- for lists,
for code blocks, etc). Code blocks should be contained in a single tag. Ignored if 'markdownDescription' is also provided. - markdownDescription: The new description to set in Markdown format. Converted to HTML before storage. Use this instead of 'description' when the content is authored in Markdown.
Returns: Boolean indicating success
updateActionProject
Update the project for an action
Access: Requires user access to the action and target project
Parameters:
- actionId: The ID of the action to update
- projectId: The ID of the new project (null to unset)
- rank: Optional rank for the action in the new project
Returns: The updated action
bulkUpdateActionStatus
Update status for multiple actions at once.
ALWAYS look for existing statuses in the project. Only add statuses if they're definitely different from the existing ones. Otherwise, don't add them and use the existing ones that have the same meaning.
Examples: Project has statuses: "To Do", "In Progress", "Review feedback", "Done"
Access: Requires user access to all actions
Parameters:
- actionIds: Array of action IDs to update
- workspaceId: The ID of the workspace
- status: The new status to set
- rankInput: Optional rank information for repositioning
- shouldUpdateChildren: Optional flag to update child actions
Returns: Boolean indicating success
updateActionAssignees
Update assignees for an action
Access: Requires user access to the action
Parameters:
- actionId: The ID of the action to update
- assignees: Optional array of user IDs to assign ['none'] to unassign
- placeholderAssignees: Optional array of placeholder IDs to assign
- teamAssignee: Optional team ID to assign
- rankInput: Optional rank information for repositioning
- shouldUpdateChildren: Optional flag to update child actions (default: false)
- externalAssigneeName: Optional name for external assignee
- isAutomated: Optional flag to indicate automated update
Returns: The updated action
updateActionLabels
Update labels for an action
Access: Requires user access to the action
Parameters:
- actionId: The ID of the action to update
- labels: Optional array of label IDs to set, ['none'] to remove all
- rankInput: Optional rank information for repositioning
- shouldUpdateChildren: Optional flag to update child actions
- isAutomated: Optional flag to indicate automated update
Returns: The updated action
updateActionsMilestone
bulkUpdateActionDates
Update dates for multiple actions at once
Access: Requires user access to all actions
Parameters:
- actionIds: Array of action IDs to update
- workspaceId: The ID of the workspace
- deadline: The new deadline to set (optional)
- scheduledDate: The new scheduled date to set (optional)
updateActionGithubBranchNames
Update the GitHub branch names associated with an action
Access: Requires user access to the action
Parameters:
- actionId: The ID of the action to update
- githubBranchNames: An array of branch names in the format "Repo:branch-name"
Returns: The updated action
appendHighwayGateResult
Append a highway gate result to an action's highway log. Used by Highway autonomous pipeline agents after each gate completes.
Access: Requires user access to the action. Errors: Throws if user is not logged in or lacks action access.
sendHighwayFollowupCommand
Send a follow-up command to a Highway Cloud Agent run associated with an action. Validates the agentRunId belongs to the action's highway data before proxying.
Access: Requires user access to the action. Errors: Throws if agentRunId is not found in the action's highway log.
stopHighwayAgent
Stop a Highway Cloud Agent run associated with an action. Validates the agentRunId belongs to the action's highway data before proxying. Access: Requires user access to the action. Errors: Throws if agentRunId is not found in the action's highway log.
updateActionGitlabBranchNames
Update the GitLab branch names associated with an action
Access: Requires user access to the action
Parameters:
- actionId: The ID of the action to update
- gitlabBranchNames: An array of branch names in the format "Repo:branch-name"
Returns: The updated action
insertAction
Used to create new actions and subactions
Access: Requires user access as well as workspace ID and project ID access.
Errors: Throws error if user does not have access to workspace or project.
bulkInsertActions
Batch insert actions and return the inserted action ids Access: Requires user access to the workspace and projects. Won't add actions to projects that user doesn't have access to. If the user uses phrases like "on my list" or otherwise implies the actions are for themselves, assume the user is the assignee by default. Errors: Throws error if user does not have access to workspace.
setTimeTrackingItemToAction
Add or edit time tracking item for action
Access: Requires user access to the underlying action and related project
Errors: Throws error if user does not have access to action or project.
setActionEstimatedTime
Used to create new action and subaction estimates
Access: Requires user access to the underlying action
Errors: Throws error if user does not have access to action.
bulkUpdateActionLabels
Update labels for the provided action IDs.
Access: Requires user access to all actions
Parameters:
- actionIds: Array of action IDs to update
- workspaceId: The ID of the workspace
- labelIds: Array of label IDs to add or remove
- operation: The operation to perform (ADD, REMOVE)
- shouldUpdateChildren: Boolean to update children
- shouldUpdateRecurring: Boolean to update recurring
Returns: Boolean indicating success
bulkUpdateActionsAssignees
Update actions assignees in bulk
IMPORTANT:
- Set operation will override existing assignees and placeholder assignees.
- Add/pull operation will add/pull assignees and placeholder assignees to existing ones.
The set and add/pull parameters are mutually exclusive. If you want to set the assignees, you should not pass any of the add/pull parameters. If you want to add or pull assignees, you should not pass the set parameter.
Access: Requires user access to all actions
Parameters:
- actionIds: Array of action IDs to update
- workspaceId: The ID of the workspace
- assigneesToSet: Array of user IDs to assign
- assigneesToAdd: Array of user IDs to add
- assigneesToPull: Array of user IDs to remove
- teamAssignee: The ID of the team to assign
- placeholderAssigneesToSet: Array of placeholder IDs to assign
- placeholderAssigneesToAdd: Array of placeholder IDs to add
- placeholderAssigneesToPull: Array of placeholder IDs to remove
- privacy: The privacy of the action
- shouldUpdateChildren: Boolean to update children
- shouldUpdateRecurring: Boolean to update recurring
- updatePlaceholderAssignees: Boolean to update placeholder assignees
- currentAssigneeId: The ID of the current assignee
Returns: Boolean indicating success
setStoryPoints
Set the agile story point value for an action
Access: Requires user access to the action
Parameters:
- actionId: The ID of the action to update
- storyPoints: The new story point value
updateActionSnoozeDate
Update the snooze date for an action.
Snoozing an action temporarily hides it from the user's task list until the specified date. Pass null for snoozeDate to unsnooze (clear the snooze).
Access: Requires user access to the action
Parameters:
- actionId: The ID of the action to snooze
- snoozeDate: The date to snooze until (pass null to unsnooze)
Returns: The updated Action object with the new snoozeDate
bulkUpdateActionCustomFields
Updates a custom field value for multiple actions at once.
This mutation allows you to set or clear the value of a custom field across multiple actions. You must first call getCustomFields to retrieve available custom fields and their types for the workspace.
Important: Use only ONE value parameter based on the custom field type:
To clear a custom field value: Pass null or an empty value for the corresponding parameter.
Access: Requires user access to all specified actions
Returns: Array of updated Action objects with the new custom field values
Errors:
- Throws error if user doesn't have access to any of the actions
- Throws error if custom field doesn't exist
- Throws error if value type doesn't match the custom field type
updateActionExternalAccess
bulkUpdateActionsExternalAccess
Bulk update restrictExternalAccess for actions (and their subactions)
updateActionCustomField
Updates a custom field value for a specific action.
This mutation allows you to set or update the value of a custom field that has been assigned to an action. The mutation supports all custom field types including text, number, date, select (single/multi), user, and project fields.
Access: Requires user access to the action
Returns: The updated Action object with the new custom field value
Errors:
- Throws error if user doesn't have access to the action
- Throws error if custom field doesn't exist
- Throws error if custom field is not enabled for the action's project
- Throws error if value type doesn't match the custom field type
deleteCustomField
Permanently deletes a custom field from the workspace.
This mutation removes a custom field definition and optionally removes all existing values of this field from actions and projects. This is a destructive operation that cannot be undone.
Access: Requires workspace admin access
Returns: The deleted CustomField object (marked as deleted)
Errors:
- Throws error if user doesn't have workspace admin access
- Throws error if custom field doesn't exist
- Throws error if custom field is already deleted
bulkUpsertCustomFields
Creates or updates multiple custom fields at once.
It can be used to upsert custom fields for a project or an action.
Parameters:
- workspaceId: Required. The ID of the workspace to upsert custom fields for.
- customFields: Required. An array of custom fields to upsert.
Examples:
- Create a custom field (text type) for a project:
{ "workspaceId": "TCB9NnnbcC4BEc2rF", "customFields": [ { "allowMultiSelect": false, "_id": "d6JfiYb34mMb5zNqL", "label": "Test Project Field", "dropdownValues": [], "formula": null, "type": "text", "itemType": "project", "onlyAdminEditable": false, "jiraCustomFieldId": "", "groupIds": [] } ] }
- Create a custom field (number type) for an action:
{ "workspaceId": "TCB9NnnbcC4BEc2rF", "customFields": [ { "allowMultiSelect": false, "_id": "y7RCztztQ4D36GKk5", "label": "asasas", "dropdownValues": [], "formula": "Test Action Field", "type": "number", "itemType": "action", "onlyAdminEditable": false, "jiraCustomFieldId": "", "groupIds": [] } ] }
When creating custom fields the _id field is generated server-side automatically, so you don't need to provide it. When updating custom fields you must provide old _id and new field data (old field data with new values).
insertGroup
Creates a new group.
It's very useful when there are no group that has the needed members.
Access: Requires user access to the workspace.
Parameters:
- workspace: ID of the workspace
- members: Array of user IDs
- teams: Array of team IDs
- name: Name of the group
- oneToOne: @deprecated do not use this parameter, use 'type' instead
- type: 'dm' (direct message) or 'group' (group chat) or 'thread'
- projectId: ID of the project
Examples:
- Creating a direct message: insertGroup( workspace members: ['user-id-1' (you), 'user-id-2' (other user)] type: 'dm' )
- Creating a group chat: insertGroup( workspace members: ['user-id-1' (you), 'user-id-2' (other user), 'user-id-3' (other user)] type: 'group' )
insertMessage
Creates a new message in a container (group, action, note, goal, or post).
Access: Requires user access to the container (or workspace if you are inserting using participants)
Parameters:
- _id: Random ID
- workspaceId: ID of the workspace (required for inserting in group container type using participants)
- containerId: ID of the container (id of group, action, note, goal, or post)
- containerType: Type of the container (group, action, note, goal, or post). You should always specify this parameter to avoid errors and confusion.
- body: body of the message, including mentions using <@userId> where userId is the actual userId
- mentions: Array of mentioned user IDs
- attachments: Array of file attachments
- userMentionsByGroup: Array of mentioned group IDs
- userMentionsByTeam: Array of mentioned team IDs
Examples:
- Creating a message in a chat if you know group id: insertMessage( _id containerId - Group ID containerType - 'group' body mentions attachments body = "Hello <@sMoHY5KwWt44Xm8Sw>, how are you?" )
- Creating a message in a DM chat if you know only participants and don't know containerId: insertMessage( _id workspaceId - required for inserting using participants participants - Array of user ids containerType - 'group' mentions attachments body = "Hello <@sMoHY5KwWt44Xm8Sw>, how are you?" )
- Creating a comment in an action: insertMessage( _id containerId - Action ID containerType - 'action'. mentions = ["sMoHY5KwWt44Xm8Sw"] attachments body = "Hello <@sMoHY5KwWt44Xm8Sw>, how are you?" )
Returns the created message with all computed fields.
deleteMessage
Deletes a message by ID (soft-delete). Only the message creator can delete it — attempting to delete another user's message returns an access-denied error.
updateUserProfile
Update a workspace user's profile, including financial rates used in Resourcing.
Use this to set or change a user's bill rate, cost rate, or other profile fields within a specific workspace.
IMPORTANT:
- Editing another user's profile requires workspace admin permissions.
- Only use billRateFloat and costRateFloat (not the deprecated integer fields).
- The userId parameter is required — always specify the target user.
Common use cases: • Setting bill and cost rates for users in Resourcing workflows • Updating user names, contact info, or work dates • Configuring utilization targets for resource planning • Assigning managers to a user
Parameters: • workspaceId: Required. The workspace containing the user • userId: Required. The ID of the user to update • billRateFloat: Optional. Hourly billing rate as a decimal (e.g. 150.00) • costRateFloat: Optional. Hourly cost rate as a decimal (e.g. 75.50) • firstName: Optional. User's first name • lastName: Optional. User's last name • email: Optional. User's email address • utilizationTarget: Optional. Target utilization percentage (0-100) • managers: Optional. Array of manager user IDs • firstDayOfWork: Optional. User's start date • lastDayOfWork: Optional. User's end date
Returns: The updated User object
addProjectOwner
Add a user to the project owner list. This is additive — existing owners are kept. To replace owners, always call addProjectOwner for the new owner(s) first, then removeProjectOwner for each previous owner — this ensures the project never has zero owners at any point.
removeProjectOwner
Remove a user from the project owner list. A project must always have at least one owner — this will fail if the user is the only remaining owner. When replacing owners, always add the new owner first via addProjectOwner before calling this.
addProjectBudget
editProjectBudget
removeProjectBudget
updateProjectDescription
updateMembersPermissions
Add or remove members to/from a project.
Common use cases:
- Add a new member to a project
- Remove a member from a project
- Update the permission of a member
- Update the sharing type of a member
- Update the automated status of a member
Parameters:
- projectId: Required. The ID of the project to update members permissions for
- memberIds: Optional. The IDs of the users to add as members
- teamIds: Optional. The IDs of the teams to add as members
- permission: Required. The permission to set for the members.
- sharingType: Required. The sharing type to set for the members.
- isAutomated: Optional. Whether the update is automated. Default is false.
Examples:
- Add a new member to a project
- projectId: 123
- memberIds: [456]
- permission: 'FULL_ACCESS'
- sharingType: 'custom'
- isAutomated: false
- Remove a member from a project
- projectId: 123
- memberIds: [456]
- permission: 'REMOVE'
- sharingType: 'custom'
- isAutomated: false
updateMembersPermissionsV2Batch
Batch update members permissions for multiple projects. Processes each project sequentially and continues even if individual updates fail (errors are logged).
Access: Requires access to each project
Returns: Array of successfully updated projects
restoreDeletedProject
Used to restore deleted projects in the trash bin
Access: Requires project access
Errors: Throws error if user doesn't have access to the project
updateProjectsCustomFields
Enables custom fields for specific projects.
This should be used to enable only project itemType custom fields.
Parameters:
- projectIds: Required. The IDs of the projects to add the custom fields to
- workspaceId: Required. The ID of the workspace to add the custom fields to
- fields: Required. The custom fields to add to the projects
disableProjectsCustomFields
Disables custom fields for specific projects.
This should be used to disable only project itemType custom fields.
Parameters:
- customFieldIds: Required. The IDs of the custom fields to disable
- projectIds: Required. The IDs of the projects to disable the custom fields for
- workspaceId: Required. The ID of the workspace to disable the custom fields for
addActionCustomFields
Enables custom fields for actions in specific projects.
This should be used to enable only action itemType custom fields.
Parameters:
- ids: Required. The IDs of the custom fields to enable
- projectIds: Required. The IDs of the projects to enable the custom fields for
- workspaceId: Required. The ID of the workspace to enable the custom fields for
disableActionCustomFields
Disables custom fields for actions in specific projects.
This should be used to disable only action itemType custom fields.
Parameters:
- customFieldIds: Required. The IDs of the custom fields to disable
- projectIds: Required. The IDs of the projects to disable the custom fields for
- workspaceId: Required. The ID of the workspace to disable the custom fields for
- removeFromActions: Optional. Whether to remove the custom fields from the actions
updateProjectOtherCosts
createProject
Creates a new project in a workspace with comprehensive configuration options.
This is the primary mutation for project creation, supporting both basic project setup and advanced features like copying from existing projects, custom fields, etc.
Access: Requires user access to the workspace
Returns: The newly created Project object with all computed fields
Errors:
- Throws error if user doesn't have access to the workspace
- Throws error if copyFrom project doesn't exist or user lacks access
- Throws error if endDate is before startDate
- Throws error if members don't have workspace access
updateProjectArchived
Update project archived status
Access: Requires user access to the project
Parameters:
- projectId: The ID of the project to update
- archived: The new archived state to set
- includeChildren: Whether to include children in the update
Returns: The updated project
applyProjectTemplate
Apply a project template to an existing project.
This mutation copies settings, structure, and configuration from a template project to a target project based on the importWith flags.
Access: Requires user access to both template and target projects
Returns: The updated target project
convertActionToProject
Convert an action to a project.
This mutation creates a new project from an action, and clones subactions as actions in the new project.
Access: Requires user access to the action and workspace
Parameters:
- actionId: The ID of the action to convert
- projectName: Optional custom name for the new project (defaults to action title)
- parentProjectId: Optional parent project ID to nest the new project under
- deleteOriginalAction: Whether to delete the original action after conversion (default: false)
- applyTemplateId: Optional project template ID to apply to the new project
- sharingType: Project sharing type (me, custom, everyone) - defaults to 'me'
- members: User IDs to add as project members (defaults to current user)
- teams: Team IDs to give access to the project
Returns: The newly created Project object
addStatusToProjectView
This mutation is used to add a status to a specific project. ALWAYS run the setCustomStatusColor mutation (setting status color) to set the color of the status afterwards.
setCustomStatusColor
This mutation is used to set the color of a custom status. ALWAYS run it after the addStatusToProjectView mutation (adding new status) to set the color of the new status. Pick the color that would logically fit the status name (e.g. "In Progress" -> "blue", "Done" -> "green", etc.).
Also could be used separately to update or remove the color of the status.
insertRecurringAction
Create a recurring action. You must call insertActions first to create the action.
Parameters:
- actionId: ID of the action to make recurring (must exist)
- type: Recurrence type (daily, weekly, monthly, annually)
- startDate: Start date in ISO 8601 format
- endDate: End date in ISO 8601 format
- interval: Interval of recurrence (min: 1, max: 12)
- endingType: How recurrence ends (never, after, date)
- endingAfter: Number of occurrences before ending (min: 1, max: 52)
- days: Days of the week (Mon, Tue, Wed, Thu, Fri, Sat, Sun)
- showOnDueDate: Show the action on its due date (default: false)
Access: Requires user access to the action.
Errors: Throws error if action not found or user lacks permission.
unsetRecurringActions
Make actions non-recurring by removing their recurring linkage. Stops future recurring instances from being generated while preserving the action.
Parameters:
- actionIds: Array of action IDs to make non-recurring
- workspaceId: The ID of the workspace
Access: Requires user access to the actions.
Errors: Throws error if user lacks edit permission on the actions.
createReminder
Create a new reminder
Examples:
Create a one time reminder for 5 minutes from now
Now: 2025-09-17T20:22:00.000Z
{
"text": "Remind me to check in on Beta Deploy",
"userIds": ["some_user_id"],
"recurrenceDefinition": {
"type":"daily",
"interval":1,
"days":["Wed","Thu","Fri","Sat","Sun","Mon","Tue"],
"startDate":"2025-09-17T20:27:00.000Z",
"endingType":"after",
"endingAfter":1
},
"workspaceId": "
Create a recurring reminder for every 2 days with no end
Now: 2025-09-17T20:22:00.000Z
{
"text": "Remind me to check in on Beta Deploy",
"userIds": ["some_user_id"],
"recurrenceDefinition": {
"type":"daily",
"interval":2,
"days":["Wed","Thu","Fri","Sat","Sun","Mon","Tue"],
"startDate":"2025-09-17T20:27:00.000Z",
"endingType":"never",
},
"workspaceId": "
deleteReminder
Soft-delete a reminder so it no longer fires (sets deleted: true). Pass reminderId from getReminders or getReminder.
For vague requests ("cancel that reminder", "kill the daily one"): call getReminders first. If several reminders could match, list the candidates in chat and ask the user which reminderId to delete before calling this mutation. Confirm success after deletion.
submitTimesheets
Used for submit timesheets button timesheets in "timesheet" tab in "Timesheets" app.
Access: It requires user access.
Errors: Returns specific expected errors if: timesheets array is empty, user is not logged in, user doesn't have access to workspace, user trying to submit timesheets beyond 4 weeks period from start of current week, userId is different from current userId and user is not admin for current workspace, if one of timesheets is locked, approved or waiting for approval
deleteTimesheet
Used for deleting timesheets in "timesheet" tab in "Timesheets" app.
Access: It requires user access.
Errors: Returns specific expected errors if: not deleted timesheet item doesn't exist, user is not timesheet submitter
recoverTimesheet
Used for recovering timesheets in "timesheet" tab in "Timesheets" app. Right after removing should appear toast with "recover" button
Access: It requires user access.
Errors: Returns specific expected errors if: deleted timesheet item doesn't exist, user is not timesheet submitter and returns null if user doesn't have access to workspace
bulkUpdateTimesheetStatus
Used for approve/request changes of timesheets in "My approvals" tab "Timesheets" app.
Access: It requires user access.
Errors: Returns specific expected errors if: returns [] if user not logged in or doesn't have access to workspace, related timesheet docs with status different to Unsubmitted not found, user is not timesheet approval
setTimesheetLock
Used for locking/unlocking editing of timesheets in "Manage" tab "Timesheets" app.
Access: Requires workspace admin access
Errors: Returns specific expected errors if: error if user is not workspace admin, returns null if is not logged in or not deleted not history timesheet with status different to Unsubmitted not found
addCreatorComment
Used for creating creator comments in comment modal in "Timesheets" app.
Access: It requires user access.
Errors: Returns specific expected errors if: not deleted and not marked as history item timesheet doesn't exist, user trying to create comment for timesheet that he didn't create, $text variable is empty string after trim spaces
updateTimesheetComment
Used for updating existing comments in comment modal in "Timesheets" app.
Access: It requires user access.
Errors: Returns specific expected errors if: not deleted and not marked as history item timesheet doesn't exist, user trying to update comment that he didn't create, $text variable is empty string after trim spaces
deleteTimesheetComment
Used for removing existing comments in comment modal in "Timesheets" app.
Access: It requires user access.
Errors: Returns specific expected errors if: not deleted and not marked as history item timesheet doesn't exist, user trying to delete comment that he didn't create
updateTimeEntry
createTimeEntries
Create or update time entries in bulk.
Timesheets are automatically created per ISO week for each unique (user, container, category) combination. If a timesheet already exists for that week it is reused and its status is updated to the requested value.
Entries are upserted: calling this mutation again with the same user / container / category / date updates the existing entry instead of creating a duplicate.
Authentication: Supports both JWT and API-key (api_key or api-key header).
Access: The caller must have access to the target workspace.
updateTimeEntryComment
updateTimeCategory
createTimer
Create a new timer, optionally associated with an action
Access: Requires user to be logged in and have access to the workspace. If actionId is provided, the action must belong to the same workspace.
updateTimerStatus
Update timer status (start, pause, or complete)
- start: Sets status to running and adds a new session entry
- pause: Sets status to paused and closes current session entry
- complete: Sets status to completed and closes current session entry
Access: Requires user to be the owner of the timer
updateTimer
Update a timer's action association
Access: Requires user to be the owner of the timer. If actionId is provided, requires access to the new action's workspace.
deleteTimer
Delete a timer (soft delete)
Access: Requires user to be the owner of the timer
insertApprovalRound
Create a new approval round with an initial empty stage for an action. The created stage will have no approvers initially - you'll need to use the deprecated changeApprovalStageApprover mutation to add approvers.
requestApprovals
Request approvals from all approvers in an approval round. Notifies approvers and marks the round as requested. Use this after setting up all stages and approvers to officially request their review.
insertApprovalStage
Add a new empty approval stage to an existing approval round. The created stage will have no approvers initially - you'll need to use the changeApprovalItem mutation to add approvers.
changeApprovalStageApprover
Add or change an approver at a specific position in an approval stage. This is the primary way to assign approvers (users, teams, placeholders, or external approvers) to approval stages. The index parameter specifies which approval slot to update (0 for first approver, 1 for second, etc). If an approver already exists at that index, they will be replaced. If the index is beyond the current array length, a new approval will be added.
applyApprovalTemplate
Apply an existing approval template to an action. Creates all rounds and stages defined in the template with configured approvers. Use this to quickly set up a standard approval workflow on an action. The template defines who needs to approve and in what order. This is the easiest way to add approval workflows - instead of manually creating rounds and stages, just apply a pre-configured template.
createForm
This mutation creates a new form with all its configuration and content. The form can be used to create actions, projects, or send emails based on the target field. Form should use different input elements for different types of data.
createResourcePlaceholder
Create a new resource placeholder for the workspace.
Resource placeholders are virtual team members that can be assigned to projects and actions before actual people are hired or designated for those roles.
IMPORTANT: Only workspace administrators can set billRate and costRate values. Regular users can only set the name and roleTagId.
Use cases:
• Planning projects before hiring specific team members
• Creating role-based assignments in project templates
• Resource planning and capacity management
• Budgeting and cost estimation for future roles
Parameters: • name: Required. The display name for the placeholder (e.g., "Senior Developer", "Marketing Manager") • workspaceId: Required. The workspace where this placeholder will be created • roleTagId: Optional. Associates the placeholder with a specific role/skill tag • billRate: Optional. The hourly billing rate (admin only) • costRate: Optional. The hourly cost rate (admin only)
Returns: The created ResourcePlaceholder object
updateResourcePlaceholder
Update an existing resource placeholder's properties.
This allows modification of placeholder details while preserving the placeholder's identity and existing assignments.
IMPORTANT: Only workspace administrators can modify billRate and costRate values. Regular users can only update the name and roleTagId.
Common use cases: • Refining placeholder role names for clarity • Updating role assignments as requirements change • Adjusting billing/cost rates (admin only) • Associating placeholders with different role tags
Parameters: • id: Required. The ID of the resource placeholder to update • name: Optional. New display name for the placeholder • roleTagId: Optional. New role/skill tag association (can be null to remove) • billRate: Optional. New hourly billing rate (admin only) • costRate: Optional. New hourly cost rate (admin only)
Returns: The updated ResourcePlaceholder object
createResourceAssignment
Create a resource assignment.
IMPORTANT: ALWAYS pass 'fixedDisplayType' and 'allocationType' together. Use assignmentType: 'regular' by default. Use other assignment types only if the user explicitly mentioned another type.
Possible valid combinations ('allocationType' + 'fixedDisplayType'): • 'hoursPerDay' + 'hours' - when you want to allocate hours per day • 'fixedHours' + 'hours' - when you want to allocate total hours • 'fixedHours' + 'days' - when you want to allocate in days (default work day = 8 hours) • 'fixedHours' + 'percentages' - when you want to allocate in percentages (percentage of the default default work day hours, e,g, 50% = 4 hours)
IMPORTANT: ALWAYS pass 'allocationValue' when allocating by percentage. IMPORTANT: ALWAYS pass 'fixedHours' when allocating by hours or days. IMPORTANT: ALWAYS pass 'hoursPerDay' when allocating by hours per day.
Examples: • Duration: 1 day, allocationType = hoursPerDay, fixedDisplayType = hours, allocationValue = 8, hoursPerDay = 8 • Duration: 5 days, allocationType = hoursPerDay, fixedDisplayType = hours, allocationValue = 8, hoursPerDay = 8 • Duration: 1 day, allocationType = fixedHours, fixedDisplayType = hours, allocationValue = 40, fixedHours = 40 • Duration: 5 days, allocationType = fixedHours, fixedDisplayType = hours, allocationValue = 40, fixedHours = 40 • Duration: 1 day, allocationType = fixedHours, fixedDisplayType = percentages, allocationValue = 50 (percents), fixedHours = 8 (default work day hours) * 1 (days) * 0.5 = 4 • Duration: 5 days, allocationType = fixedHours, fixedDisplayType = percentages, allocationValue = 50 (percents), fixedHours = 8 (default work day hours) * 5 (days) * 0.5 = 20 • Duration: 1 day, allocationType = fixedHours, fixedDisplayType = days, allocationValue = 2 (days), fixedHours = 8 (default work day hours) * 2 = 16 • Duration: 5 days, allocationType = fixedHours, fixedDisplayType = days, allocationValue = 2 (days), fixedHours = 8 (default work day hours) * 2 = 16
updateResourceAssignment
Update a resource assignment. ALWAYS use search to find the resource assignment before updating it. If the resource assignment is not found, DONT RUN THE MUTATION. If the resource assignment is found, update resource assignment.
upsertCampaignRecipientPlan
Planner-side mutation: add, suppress, or exclude a recipient. Safe to expose in the campaign UI.
updateCampaignRecipientExecution
Executor-side mutation: progress a recipient through its lifecycle. Only the agent / background workers should call this.
deleteCrmAssociation
Soft-deletes a CrmAssociation by id. Idempotent: returns false when the association is already deleted or not found, true when a row was soft- deleted. Access: requires workspace access to the association's workspace. Errors: none beyond the standard workspace access assertion.
createScheduledMailMessage
Create a scheduled mail message to be sent at a specified time. The message will be stored and processed by the scheduled mail processor.
Access: Requires authenticated user. User must have valid mail provider credentials.
Errors:
- User is not logged in
- Access denied - If the user does not own the specified email address.
updateMeetingUserData
Update meeting user data using diff operations for array fields and direct values for scalars. Array fields (goals, nextSteps, materials, speakerLabels) accept add/remove/update diffs. Scalar fields (customTitle) accept direct values.
createDashboardV2
Creates a new dashboard with typed V2 filter input for Buzz/MCP endpoints. This mutation provides full schema introspection for AI assistants.
updateDashboardV2
Updates an existing dashboard with typed V2 filter input for Buzz/MCP endpoints. This mutation provides full schema introspection for AI assistants.
createDashboardWidget
Creates a new dashboard widget with specified configuration. Common configurations by widget type:
- Chart Widgets (Bar/Line/Pie):
- Set chartType, XAxis, YAxis
- Configure grouping and aggregation
- Set up color schemes
- Use these types of widgets when asked to show something broken down by project, assignee, etc.
- List Widgets (Actions/Projects):
- Define filters (status, assignee, etc.)
- Set up sorting and grouping
- Configure display options
- When user asks to create a widget for all actions assigned to them, create a widget with type 'myActionsList'
- Use these types of widgets when asked to show something in a list format, like actions, projects, etc.
- Status Widgets:
- Specify project or goal
- Configure metrics to display
- Set up refresh intervals
- Custom Widgets:
- Set up embedded content
- Configure interactive elements
- Define data sources
When asked to show something over time, use timeUnitsType and dateRange parameters.
createDashboardWidgetV2
Creates a new dashboard widget using a single input object. V2 replacement for createDashboardWidget — all fields are in CreateDashboardWidgetInput.
updateDashboardWidget
Updates an existing dashboard widget's configuration. Common update scenarios:
- Changing visualization type
- Updating filters or data source
- Modifying appearance settings
- Adjusting metrics or calculations
updateDashboardWidgetV2
Updates an existing dashboard widget using a single input object. V2 replacement for updateDashboardWidget — all fields are in UpdateDashboardWidgetInput.
createGoal
Create a new goal with comprehensive validation rules
IMPORTANT VALIDATION RULES:
Display Type Rules:
- progress: Only works with measurementType null, number, or actions
- number: Only works with measurementType null, number, actions, or overdue
- status: Only works with measurementType status
Measurement Type + Unit Combinations:
- measurementType actions/overdue: Must use measurementUnit actions OR projects
- measurementType number: Must use measurementUnit currency, custom, OR percentage
- measurementType status: Must use measurementUnit subGoals
Measurement Unit + Value + Symbol Rules:
- measurementUnit currency: measurementUnitValue must be one of the supported currency codes (e.g., USD/EUR/JPY/GBP/AUD), symbol $/€/¥/£/AU$ This list is not exhaustive. For additional currencies, specify the ISO 4217 currency code as measurementUnitValue and provide the appropriate symbol. Refer to the application's documentation or configuration for the full list of supported currencies and symbols.
- measurementUnit percentage: measurementUnitValue must be 'percentage', symbol '%'
- measurementUnit actions: measurementUnitValue must be 'actions'
- measurementUnit projects: measurementUnitValue must be 'projects'
- measurementUnit subGoals: measurementUnitValue must be the empty string ("")
- measurementUnit custom: measurementUnitValue can be any string
Action/Project ID Rules:
- actionIds: Requires measurementType actions/overdue + measurementUnit actions + measurementUnitValue 'actions'
- projectIds: Requires measurementType actions/overdue + measurementUnit projects + measurementUnitValue 'projects'
Date Rules:
- Cannot be both ongoingDate AND recurringDate
- Cannot combine ongoingDate with startDate/endDate
- Cannot combine recurringDate with startDate/endDate
- If startDate provided, endDate is required
- startDate must be before endDate
deleteGoal
requestGoalUpdate
updateGoal
Update an existing goal - follows the same validation rules as createGoal
See createGoal mutation for complete validation rule documentation. Key validation reminders:
- actionIds require: measurementType actions/overdue + measurementUnit actions + measurementUnitValue 'actions'
- projectIds require: measurementType actions/overdue + measurementUnit projects + measurementUnitValue 'projects'
- Date combinations: Cannot mix ongoingDate + recurringDate, or ongoingDate/recurringDate + startDate/endDate
- measurementUnit + measurementUnitValue + measurementUnitSymbol must match allowed combinations
insertPost
Creates a new news post.
You can also specify the category of the post and the attachment file id or even predefined reactions to post.
Access: Requires user access to the workspace
Examples:
{
"body": "This is a very exciting news post",
"workspaceId": "
removePost
Soft deletes a news post by setting deleted to true.
Access: Requires user to be the post creator or a workspace admin.
updatePost
Updates the body content of a news post.
Access: Requires user to be the post creator.
addPostReaction
Adds a reaction emoji to a post.
Access: Requires user access to the workspace.
removePostReaction
Removes a reaction emoji from a post.
Access: Requires user access to the workspace.
insertPostComment
Creates a new comment on a post.
Access: Requires user access to the workspace.
updatePostComment
Updates the body of a post comment.
Access: Requires user to be the comment creator.
removePostComment
Soft deletes a post comment.
Access: Requires user to be the comment creator or a workspace admin.
addPostCommentReaction
Adds a reaction emoji to a comment.
Access: Requires user access to the workspace.
removePostCommentReaction
Removes a reaction emoji from a comment.
Access: Requires user access to the workspace.
insertLink
Creates a new link in the workspace's News panel.
Access: Requires user access to the workspace.
updateLink
Updates an existing link's title and url.
Access: Requires user access to the workspace.
removeLink
Soft deletes a link by setting deleted to true.
Access: Requires user access to the workspace.
insertNewsCategory
Creates a new custom news category in the workspace.
On first write in a workspace, seeds the default categories and migrates any posts that were using legacy string category ids to the new random ids, then marks the workspace as newsCategoriesApplied.
Access: Requires user access to the workspace.
updateNewsCategory
Updates a news category's name and color.
Access: Requires user access to the workspace.
removeNewsCategory
Soft deletes a news category and un-sets it from any posts in the workspace.
Access: Requires user access to the workspace.
salesforceOperation
Unified Salesforce operation using jsforce SOAP/REST API. Supports query, search, insert, update, upsert, merge, describe, and lead conversion.
Access: Requires an authenticated Hive user with a connected Salesforce account.
Operation Examples:
#
QUERY
#
INSERT
#
UPDATE
#
DELETE
#
SEARCH (SOSL)
#
MERGE
#
DESCRIBE
#
CONVERT_LEAD
#
Errors:
- User is not logged in.
- Salesforce account is not connected.
- Invalid operation parameters.
- Salesforce API errors.
createMcpServer
Create a new workspace-level MCP server connection. Use transportType 'streamable_http' for remote servers (requires url), or 'stdio' for local command-based servers (requires command). IMPORTANT: Before calling this, you MUST call discover_oauth_metadata first. If discovery returns success, set authType to 'oauth' and use the discovered oauthAuthorizationUrl, oauthTokenUrl, and oauthScopes. Only use authType 'headers' when discover_oauth_metadata fails. After creating with OAuth, inform the user to click the Authorize button to complete the OAuth consent flow.
createHttpConnection
Create a new HTTP connection in a workspace. Each connection becomes a tool named custom_http_{name} that Buzz can use to make authenticated API requests. IMPORTANT: The "name" must be snake_case (lowercase letters, numbers, underscores, starting with a letter, e.g. "github_api", "stripe_api"). It must be unique within the workspace. IMPORTANT: Before calling this, you MUST call discover_oauth_metadata first. If discovery returns success, set authType to 'oauth' and use the discovered oauthAuthorizationUrl, oauthTokenUrl, and oauthScopes. Only use authType 'headers' when discover_oauth_metadata fails. For authType "headers", pass a "headers" object with auth credentials as key-value pairs (e.g. {"Authorization": "Bearer sk-xxx"}). Headers are encrypted at rest. Set sharingType to "everyone" for workspace-wide access, "custom" to share with specific users, or "me" (default) for personal use only. After creating, inform the user that the new tool (custom_http_{name}) will be available in their next conversation.
updateHttpConnection
Update an existing HTTP connection by ID. Only the connection creator can update it. If headers are provided, all existing headers are replaced with the new encrypted values.
createBuzzEventWebhook
Create an ephemeral internal webhook for Buzz event-based waits. Service-only: requires x-requestor-shared-secret.
deleteBuzzEventWebhook
Soft-delete an internal Buzz event webhook. Service-only: requires x-requestor-shared-secret.
MoveToNextStage
NewsCategory