All integrations

Motion

PROJECT MANAGEMENT · TASKS

Tasks, projects, recurring tasks, and comments in the workspaces they connected.

Acts as the person, not as itself

Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.

Credentials never touch the agent

Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.

Every call on the record

Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.

What an agent can do

Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.

motion_delete_beta_custom_field_values_project_by_projectid_custom_fields_by_valueidWRITE

Clear a custom field value on a project via DELETE /beta/custom-field-values/project/{projectId}/custom-fields/{valueId}. Clear one custom field's value on one project. The field DEFINITION and every other project's value for it are untouched -- only this project's value is removed. Served from Motion's `/beta/` API surface, which the vendor may change without a version bump. It uses the same host and the same API key as the `/v1/` tools.

api
motion_delete_beta_custom_field_values_task_by_taskid_custom_fields_by_valueidWRITE

Clear a custom field value on a task via DELETE /beta/custom-field-values/task/{taskId}/custom-fields/{valueId}. Clear one custom field's value on one task. The field DEFINITION and every other task's value for it are untouched -- only this task's value is removed. Served from Motion's `/beta/` API surface, which the vendor may change without a version bump. It uses the same host and the same API key as the `/v1/` tools.

api
motion_delete_beta_workspaces_by_workspaceid_custom_fields_by_idWRITE

Delete workspace custom field via DELETE /beta/workspaces/{workspaceId}/custom-fields/{id}. Permanently delete a custom field DEFINITION from a workspace. This changes the workspace's shared schema and discards the values every task and project in it held for that field. It is not the same as clearing one task's value -- use the clear-value tools for that. Changes the workspace's shared configuration. It takes effect for every member of that workspace and every task and project in it, not only for this connection. Served from Motion's `/beta/` API surface, which the vendor may change without a version bump. It uses the same host and the same API key as the `/v1/` tools.

api
motion_delete_v1_recurring_tasks_by_idWRITE

Delete recurring task via DELETE /v1/recurring-tasks/{id}. Permanently delete a recurring task definition, stopping it from generating any further tasks. Tasks it already generated are not removed by this call.

api
motion_delete_v1_tasks_by_idWRITE

Delete task via DELETE /v1/tasks/{id}. Permanently delete one task. There is no undo and no trash to restore it from: the task and its comments and custom field values go with it, and Motion reschedules whatever it was blocking.

api
motion_delete_v1_tasks_by_id_assigneeWRITE

Unassign task via DELETE /v1/tasks/{id}/assignee. Remove the assignee from a task, leaving the task itself in place. The task becomes unassigned rather than deleted; Motion stops scheduling it into the former assignee's calendar.

api
motion_get_beta_workspaces_by_workspaceid_custom_fieldsREAD

List workspace custom fields via GET /beta/workspaces/{workspaceId}/custom-fields. List the custom fields defined on one workspace, with their ids, names and types. Those ids are what the set-value tools need. Served from Motion's `/beta/` surface, which is a distinct prefix on the same host and the same API key. Served from Motion's `/beta/` API surface, which the vendor may change without a version bump. It uses the same host and the same API key as the `/v1/` tools.

api
motion_get_v1_commentsREAD

List task comments via GET /v1/comments. List the comments on one task, oldest first. `taskId` is REQUIRED -- Motion refuses the call with 400 naming the field when it is absent.

api
motion_get_v1_projectsREAD

List projects via GET /v1/projects. List the projects of one workspace. `workspaceId` is REQUIRED -- Motion refuses the call with 400 naming the field when it is absent.

api
motion_get_v1_projects_by_idREAD

Get project via GET /v1/projects/{id}. Fetch one project in full by its id. The reply carries id, name, description, workspaceId, statusId, priorityLevel, dueDate, startDate, labelIds, managerId, color, type, stages, customFieldValues, createdByUserId, createdTime, updatedTime, completedTime. An id that does not exist answers 404 'Project with ID <id> not found'.

api
motion_get_v1_recurring_tasksREAD

List recurring tasks via GET /v1/recurring-tasks. List the recurring task definitions of one workspace -- the rules that generate tasks, not the generated tasks themselves. `workspaceId` is REQUIRED; Motion refuses the call with 400 'workspaceId must be a string' when it is absent. Like List tasks, this route validates parameter names strictly and refuses an unknown one with 400.

api
motion_get_v1_schedulesREAD

List schedules via GET /v1/schedules. List the schedules on the API key owner's account -- the named working-hours windows Motion schedules tasks into, each with its timezone and its per-weekday start and end times. It takes no arguments and describes the owner's own availability.

api
motion_get_v1_statusesREAD

List task statuses via GET /v1/statuses. List the task statuses defined in one workspace, each with its name and whether it is the default or a resolved status. `workspaceId` is REQUIRED. Statuses are per-workspace, and their NAMES are what the `status` filter on List tasks matches, so read them from here rather than guessing.

api
motion_get_v1_tasksREAD

List tasks via GET /v1/tasks. List tasks visible to this API key, newest page first. Every filter is optional and they combine; with none, Motion returns the key owner's tasks across all their workspaces. The reply is `{"meta": {...}, "tasks": [...]}` and pages through `cursor`. Motion validates this route's parameter names strictly: an unknown one is refused with 400 rather than ignored.

api
motion_get_v1_tasks_by_idREAD

Get task via GET /v1/tasks/{id}. Fetch one task in full by its id. The reply carries id, name, description, duration, dueDate, deadlineType, startOn, priority, labels, status, assignees, project, workspace, customFieldValues, chunks, scheduledStart, scheduledEnd, schedulingIssue, completed, completedTime, parentRecurringTaskId, creator, createdTime, updatedTime, lastInteractedTime. An id that does not exist answers 404 'Task not found'.

api
motion_get_v1_usersREAD

List users via GET /v1/users. List the users of a workspace or of a team. Supply EITHER `workspaceId` OR `teamId` -- Motion refuses the call with 400 'Must provide either a teamId or a workspaceId' when both are absent. Each user carries id, name and email.

api
motion_get_v1_users_meREAD

Get my user via GET /v1/users/me. Fetch the user this API key belongs to: id, name and email. It takes no arguments and is the cheapest way to confirm a key works and to learn whose account it is acting as.

api
motion_get_v1_workspacesREAD

List workspaces via GET /v1/workspaces. List every workspace this API key can reach, with each workspace's id, name, type, teamId, labels and taskStatuses. This is the starting point for most of the other tools: List projects, List statuses, List recurring tasks and the custom-field tools all need a workspace id.

api
motion_patch_v1_tasks_by_idWRITE

Update task via PATCH /v1/tasks/{id}. Update a task in place. The body carries only the fields to change, named as Get task returns them. Changing `duration`, `dueDate`, `deadlineType` or `status` can make Motion reschedule the task and everything queued behind it. The `body` argument is a free-form JSON object: Motion publishes no machine-readable schema for this endpoint and the recovered documentation carries no field table, so Agentic Fabriq does not constrain it. Use the field names the matching read tool returns, and read Motion's error body on a 400 -- it names the offending field.

api
motion_patch_v1_tasks_by_id_moveWRITE

Move task to another workspace via PATCH /v1/tasks/{id}/move. Move a task into a different workspace, and optionally reassign it. The body names the destination `workspaceId` and may name an `assigneeId`. Statuses, labels and custom fields are defined PER WORKSPACE, so a move can drop the values that do not exist in the destination. The `body` argument is a free-form JSON object: Motion publishes no machine-readable schema for this endpoint and the recovered documentation carries no field table, so Agentic Fabriq does not constrain it. Use the field names the matching read tool returns, and read Motion's error body on a 400 -- it names the offending field.

api
motion_post_beta_custom_field_values_project_by_projectidWRITE

Set a custom field value on a project via POST /beta/custom-field-values/project/{projectId}. Set a custom field's value on one project. The body names the field (by an id from List workspace custom fields) and the value to store. Affects that project only. The `body` argument is a free-form JSON object: Motion publishes no machine-readable schema for this endpoint and the recovered documentation carries no field table, so Agentic Fabriq does not constrain it. Use the field names the matching read tool returns, and read Motion's error body on a 400 -- it names the offending field. Served from Motion's `/beta/` API surface, which the vendor may change without a version bump. It uses the same host and the same API key as the `/v1/` tools.

api
motion_post_beta_custom_field_values_task_by_taskidWRITE

Set a custom field value on a task via POST /beta/custom-field-values/task/{taskId}. Set a custom field's value on one task. The body names the field (by an id from List workspace custom fields) and the value to store. Affects that task only. The `body` argument is a free-form JSON object: Motion publishes no machine-readable schema for this endpoint and the recovered documentation carries no field table, so Agentic Fabriq does not constrain it. Use the field names the matching read tool returns, and read Motion's error body on a 400 -- it names the offending field. Served from Motion's `/beta/` API surface, which the vendor may change without a version bump. It uses the same host and the same API key as the `/v1/` tools.

api
motion_post_beta_workspaces_by_workspaceid_custom_fieldsWRITE

Create workspace custom field via POST /beta/workspaces/{workspaceId}/custom-fields. Define a new custom field on a workspace. The body names the field and its type. This changes the workspace's SHARED schema: the new field appears for every member and on every task and project in it, not only for this connection. The `body` argument is a free-form JSON object: Motion publishes no machine-readable schema for this endpoint and the recovered documentation carries no field table, so Agentic Fabriq does not constrain it. Use the field names the matching read tool returns, and read Motion's error body on a 400 -- it names the offending field. Changes the workspace's shared configuration. It takes effect for every member of that workspace and every task and project in it, not only for this connection. Served from Motion's `/beta/` API surface, which the vendor may change without a version bump. It uses the same host and the same API key as the `/v1/` tools.

api
motion_post_v1_commentsWRITE

Create comment via POST /v1/comments. Add a comment to a task. The body names the `taskId` and the comment content. A comment is visible to everyone with access to the task and notifies its watchers. The `body` argument is a free-form JSON object: Motion publishes no machine-readable schema for this endpoint and the recovered documentation carries no field table, so Agentic Fabriq does not constrain it. Use the field names the matching read tool returns, and read Motion's error body on a 400 -- it names the offending field.

api
motion_post_v1_projectsWRITE

Create project via POST /v1/projects. Create a project in a workspace. The body is Motion's own project object: `name` and `workspaceId` identify it, and the other fields a project carries are the ones Get project returns -- id, name, description, workspaceId, statusId, priorityLevel, dueDate, startDate, labelIds, managerId, color, type, stages, customFieldValues, createdByUserId, createdTime, updatedTime, completedTime. The `body` argument is a free-form JSON object: Motion publishes no machine-readable schema for this endpoint and the recovered documentation carries no field table, so Agentic Fabriq does not constrain it. Use the field names the matching read tool returns, and read Motion's error body on a 400 -- it names the offending field.

api
motion_post_v1_recurring_tasksWRITE

Create recurring task via POST /v1/recurring-tasks. Create a recurring task definition: a rule that generates a task on a schedule. The body names the workspace, the task to generate and the recurrence. This creates the RULE, so it keeps producing tasks until it is deleted. The `body` argument is a free-form JSON object: Motion publishes no machine-readable schema for this endpoint and the recovered documentation carries no field table, so Agentic Fabriq does not constrain it. Use the field names the matching read tool returns, and read Motion's error body on a 400 -- it names the offending field.

api
motion_post_v1_tasksWRITE

Create task via POST /v1/tasks. Create a task. The body is Motion's own task object: `name` and `workspaceId` identify it, and the other fields a task carries are the ones Get task returns -- id, name, description, duration, dueDate, deadlineType, startOn, priority, labels, status, assignees, project, workspace, customFieldValues, chunks, scheduledStart, scheduledEnd, schedulingIssue, completed, completedTime, parentRecurringTaskId, creator, createdTime, updatedTime, lastInteractedTime. Motion auto-schedules the task into the owner's calendar unless told otherwise, so a created task also moves real calendar time. The `body` argument is a free-form JSON object: Motion publishes no machine-readable schema for this endpoint and the recovered documentation carries no field table, so Agentic Fabriq does not constrain it. Use the field names the matching read tool returns, and read Motion's error body on a 400 -- it names the offending field.

api

Put Motion behind one governed endpoint.

Same permissions, same audit trail, whatever else you connect next.