# Motion

> Manage Motion, the AI calendar and project manager: create, update, move, comment on and delete tasks that Motion auto-schedules onto your calendar, create projects and recurring tasks, and read workspaces, people, statuses and schedules.

App · 20 actions. Web page: https://docs.lodol.com/docs/integrations/motion

## Actions

### Create comment

Add a comment to a Motion task.

**Inputs**

- Task ID (`task_id`, text, required): The task to comment on. Use the 'id' from Create task or List tasks, or paste the task's Motion link.
- Comment (`content`, text, required): The comment, in Markdown.

**Outputs**

- `content` (text): Comment as HTML
- `createdAt` (text): When it was posted (ISO 8601)
- `creator` (object)
- `id` (text): Comment id
- `taskId` (text): Id of the task commented on

**Example output**

```json
{
  "content": "<p>Looks good.</p>",
  "createdAt": "2026-10-15T10:00:00.000Z",
  "creator": {
    "email": "ada@example.com",
    "id": "usr_1a2b3c",
    "name": "Ada Lovelace"
  },
  "id": "cm_7p8q9r",
  "taskId": "tk_1j2k3l"
}
```

### Create project

Create a project in a Motion workspace.

**Inputs**

- Workspace (`workspace_id`, text, required): The workspace to create it in.
- Name (`name`, text, required): The project's name.
- Description (`description`, text): Details. HTML is accepted.
- Due date (`due_date`, date and time): When the project is due.
- Labels (`labels`, list): Labels to put on the project, by name.
- Priority (`priority`, text): Defaults to medium. One of: `ASAP`, `HIGH`, `MEDIUM`, `LOW`.

**Outputs**

- `createdTime` (text): When it was created (ISO 8601)
- `customFieldValues` (object): Custom field values keyed by field name, each with a 'type' and a 'value'
- `description` (text): Description as HTML
- `id` (text): Project id
- `name` (text): Project name
- `status` (object)
- `updatedTime` (text): When it was last changed (ISO 8601)
- `workspaceId` (text): Id of the project's workspace

**Example output**

```json
{
  "createdTime": "2026-10-01T09:00:00.000Z",
  "customFieldValues": {},
  "description": "<p>Ship the new site.</p>",
  "id": "pr_7g8h9i",
  "name": "Website relaunch",
  "status": {
    "isDefaultStatus": true,
    "isResolvedStatus": false,
    "name": "Todo"
  },
  "updatedTime": "2026-10-02T09:00:00.000Z",
  "workspaceId": "ws_9f8e7d"
}
```

### Create recurring task

Create a recurring task in Motion - daily, weekly, every two weeks, monthly or quarterly - which Motion schedules anew each time it comes round.

**Inputs**

- Workspace (`workspace_id`, text, required): The workspace to create it in.
- Name (`name`, text, required): The recurring task's title.
- Repeats (`frequency`, text, required): How often it comes round. One of: `daily_every_day` (Daily - every day), `daily_every_week_day` (Daily - every weekday), `daily_specific_days` (Daily - on the chosen days), `weekly_any_day` (Weekly - any day), `weekly_any_week_day` (Weekly - any weekday), `weekly_specific_days` (Weekly - on the chosen days), `biweekly_first_week_specific_days` (Every 2 weeks - chosen days, week 1), `biweekly_first_week_any_day` (Every 2 weeks - any day, week 1), `biweekly_first_week_any_week_day` (Every 2 weeks - any weekday, week 1), `biweekly_second_week_any_day` (Every 2 weeks - any day, week 2), and 31 more.
- On these days (`days`, list): The days it repeats on. Only when Repeats is Daily - on the chosen days, Weekly - on the chosen days or Every 2 weeks - chosen days, week 1. One or more of: `MO` (Monday), `TU` (Tuesday), `WE` (Wednesday), `TH` (Thursday), `FR` (Friday), `SA` (Saturday), `SU` (Sunday).
- Weekday (`weekday`, text): Which weekday of the month or quarter. Only when Repeats is Monthly - first chosen weekday, Monthly - second chosen weekday, Monthly - third chosen weekday, Monthly - fourth chosen weekday, Monthly - last chosen weekday, Quarterly - first chosen weekday or Quarterly - last chosen weekday. One of: `MO` (Monday), `TU` (Tuesday), `WE` (Wednesday), `TH` (Thursday), `FR` (Friday), `SA` (Saturday), `SU` (Sunday).
- Day of the month (`day_of_month`, number): Which day of the month, 1-31. Only when Repeats is Monthly - on a day number. From 1 to 31.
- Assignee (`assignee_id`, text): Who it is for. Defaults to you.
- Description (`description`, text): Details.
- Duration (`duration_type`, text): How long the task takes. A reminder blocks no time on the calendar. Leave empty for Motion's default. One of: `minutes` (A number of minutes), `REMINDER` (Reminder - blocks no time).
- Minutes (`duration_minutes`, number): How many minutes the task takes. Only when Duration is A number of minutes. From 1 to 100000.
- Starting on (`starting_on`, date): The first day it may come round. Defaults to today.
- Ideal time (`ideal_time`, time): A time of day to schedule it at when that is free.
- Schedule (`schedule`, text): Which of your Motion schedules to fit it into. Defaults to 'Work Hours', which is also the only one Motion allows when scheduling for someone else.
- Deadline (`deadline_type`, text): How firm each occurrence's deadline is. Defaults to soft. One of: `SOFT` (Soft - Motion may schedule past it), `HARD` (Hard - must finish by the due date).
- Priority (`priority`, text): Defaults to medium. One of: `HIGH`, `MEDIUM`.

**Outputs**

- `assignee` (object)
- `creator` (object)
- `description` (text): Description as HTML
- `id` (text): Recurring task id
- `labels` (list): Labels on the recurring task
- `name` (text): Recurring task name
- `priority` (text): ASAP, HIGH, MEDIUM or LOW
- `project` (object)
- `status` (object)
- `workspace` (object)

**Example output**

```json
{
  "assignee": {
    "email": "ada@example.com",
    "id": "usr_1a2b3c",
    "name": "Ada Lovelace"
  },
  "creator": {
    "email": "ada@example.com",
    "id": "usr_1a2b3c",
    "name": "Ada Lovelace"
  },
  "description": "<p>Look back at the week.</p>",
  "id": "rt_4m5n6o",
  "labels": [],
  "name": "Weekly review",
  "priority": "MEDIUM",
  "status": {
    "isDefaultStatus": true,
    "isResolvedStatus": false,
    "name": "Todo"
  },
  "workspace": {
    "id": "ws_9f8e7d",
    "labels": [
      {
        "name": "Urgent"
      }
    ],
    "name": "Acme",
    "statuses": [
      {
        "isDefaultStatus": true,
        "isResolvedStatus": false,
        "name": "Todo"
      }
    ],
    "teamId": "team_4d5e6f",
    "type": "TEAM"
  }
}
```

### Create task

Create a task in Motion, optionally in a project, assigned, labelled, due on a date and auto-scheduled onto the assignee's calendar.

**Inputs**

- Workspace (`workspace_id`, text, required): The workspace to create it in.
- Name (`name`, text, required): The task's title.
- Description (`description`, text): Details, in Markdown.
- Project (`project_id`, text): The project to put the task in.
- Assignee (`assignee_id`, text): Who the task is for. Leave empty for it to be unassigned.
- Priority (`priority`, text): How urgent it is. One of: `ASAP`, `HIGH`, `MEDIUM`, `LOW`.
- Labels (`labels`, list): Labels to put on the task, by name.
- Status (`status`, text): The status, by name. Defaults to the workspace's default status.
- Due date (`due_date`, date and time): When it is due. Required for auto-scheduling.
- Duration (`duration_type`, text): How long the task takes. A reminder blocks no time on the calendar. Leave empty for Motion's default. One of: `minutes` (A number of minutes), `NONE` (No duration), `REMINDER` (Reminder - blocks no time).
- Minutes (`duration_minutes`, number): How many minutes the task takes. Only when Duration is A number of minutes. From 1 to 100000.
- Auto-schedule (`auto_schedule`, text): Let Motion place the task on the assignee's calendar. Needs a due date, and a status with auto-scheduling turned on. One of: `on` (Auto-schedule it), `off` (Don't auto-schedule it). Default: `off`.
- Start no earlier than (`auto_schedule_start_date`, date): The first day Motion may schedule it on. Only when Auto-schedule is Auto-schedule it.
- Deadline (`deadline_type`, text): How firm the due date is. Defaults to soft. Only when Auto-schedule is Auto-schedule it. One of: `SOFT` (Soft - Motion may schedule past it), `HARD` (Hard - must finish by the due date), `NONE` (None - no deadline).
- Schedule (`schedule`, text): Which of your Motion schedules to fit it into. Defaults to 'Work Hours', which is also the only one Motion allows when scheduling for someone else. Only when Auto-schedule is Auto-schedule it.

**Outputs**

- `assignees` (list): People the task is assigned to
- `chunks` (list): The scheduled blocks the task is split into
- `completed` (true/false): Whether the task is completed
- `completedTime` (text): When it was completed (ISO 8601)
- `createdTime` (text): When it was created (ISO 8601)
- `creator` (object)
- `customFieldValues` (object): Custom field values keyed by field name, each with a 'type' and a 'value'
- `deadlineType` (text): HARD, SOFT or NONE
- `description` (text): Description as HTML
- `dueDate` (text): Due date (ISO 8601)
- `duration` (text): Minutes, or NONE, or REMINDER
- `id` (text): Task id
- `labels` (list): Labels on the task
- `lastInteractedTime` (text): When it was last touched (ISO 8601)
- `name` (text): Task name
- `parentRecurringTaskId` (text): Recurring task this came from, if any
- `priority` (text): ASAP, HIGH, MEDIUM or LOW
- `project` (object)
- `scheduledEnd` (text): Scheduled end (ISO 8601)
- `scheduledStart` (text): Scheduled start (ISO 8601)
- `schedulingIssue` (true/false): True when Motion could not schedule it
- `startOn` (text): Date it should start (YYYY-MM-DD)
- `status` (object)
- `updatedTime` (text): When it was last changed (ISO 8601)
- `workspace` (object)

**Example output**

```json
{
  "assignees": [
    {
      "email": "ada@example.com",
      "id": "usr_1a2b3c",
      "name": "Ada Lovelace"
    }
  ],
  "chunks": [],
  "completed": false,
  "createdTime": "2026-10-15T09:00:00.000Z",
  "creator": {
    "email": "ada@example.com",
    "id": "usr_1a2b3c",
    "name": "Ada Lovelace"
  },
  "deadlineType": "SOFT",
  "description": "<p>First draft.</p>",
  "dueDate": "2026-10-20T17:00:00.000Z",
  "duration": 30,
  "id": "tk_1j2k3l",
  "labels": [
    {
      "name": "Urgent"
    }
  ],
  "name": "Draft the launch post",
  "parentRecurringTaskId": "",
  "priority": "HIGH",
  "project": {
    "createdTime": "2026-10-01T09:00:00.000Z",
    "customFieldValues": {},
    "description": "<p>Ship the new site.</p>",
    "id": "pr_7g8h9i",
    "name": "Website relaunch",
    "status": {
      "isDefaultStatus": true,
      "isResolvedStatus": false,
      "name": "Todo"
    },
    "updatedTime": "2026-10-02T09:00:00.000Z",
    "workspaceId": "ws_9f8e7d"
  },
  "scheduledEnd": "2026-10-19T14:30:00.000Z",
  "scheduledStart": "2026-10-19T14:00:00.000Z",
  "schedulingIssue": false,
  "status": {
    "isDefaultStatus": true,
    "isResolvedStatus": false,
    "name": "Todo"
  },
  "workspace": {
    "id": "ws_9f8e7d",
    "labels": [
      {
        "name": "Urgent"
      }
    ],
    "name": "Acme",
    "statuses": [
      {
        "isDefaultStatus": true,
        "isResolvedStatus": false,
        "name": "Todo"
      }
    ],
    "teamId": "team_4d5e6f",
    "type": "TEAM"
  }
}
```

### Delete recurring task

Delete a Motion recurring task, so it stops coming round.

**Inputs**

- Recurring task ID (`recurring_task_id`, text, required): The recurring task. Use the 'id' from Create recurring task or List recurring tasks.

**Outputs**

- `deleted` (true/false): Always true
- `recurring_task_id` (text): The deleted recurring task's id

**Example output**

```json
{
  "deleted": true,
  "recurring_task_id": "rt_4m5n6o"
}
```

### Delete task

Delete a Motion task permanently.

**Inputs**

- Task ID (`task_id`, text, required): The task to delete. Use the 'id' from Create task or List tasks, or paste the task's Motion link.

**Outputs**

- `deleted` (true/false): Always true
- `task_id` (text): The deleted task's id

**Example output**

```json
{
  "deleted": true,
  "task_id": "tk_1j2k3l"
}
```

### Get my user

Get the Motion user the API key belongs to: id, name and email.

**Inputs**: None.

**Outputs**

- `email` (text): Email address
- `id` (text): User id
- `name` (text): Full name

**Example output**

```json
{
  "email": "ada@example.com",
  "id": "usr_1a2b3c",
  "name": "Ada Lovelace"
}
```

### Get project

Get one Motion project: name, description, workspace and status.

**Inputs**

- Project ID (`project_id`, text, required): The project. Use the 'id' from List projects or Create project, or paste the project's Motion link.

**Outputs**

- `createdTime` (text): When it was created (ISO 8601)
- `customFieldValues` (object): Custom field values keyed by field name, each with a 'type' and a 'value'
- `description` (text): Description as HTML
- `id` (text): Project id
- `name` (text): Project name
- `status` (object)
- `updatedTime` (text): When it was last changed (ISO 8601)
- `workspaceId` (text): Id of the project's workspace

**Example output**

```json
{
  "createdTime": "2026-10-01T09:00:00.000Z",
  "customFieldValues": {},
  "description": "<p>Ship the new site.</p>",
  "id": "pr_7g8h9i",
  "name": "Website relaunch",
  "status": {
    "isDefaultStatus": true,
    "isResolvedStatus": false,
    "name": "Todo"
  },
  "updatedTime": "2026-10-02T09:00:00.000Z",
  "workspaceId": "ws_9f8e7d"
}
```

### Get task

Get one Motion task with its schedule, due date, duration, priority, status, assignees, labels and project.

**Inputs**

- Task ID (`task_id`, text, required): The task. Use the 'id' from Create task or List tasks, or paste the task's Motion link.

**Outputs**

- `assignees` (list): People the task is assigned to
- `chunks` (list): The scheduled blocks the task is split into
- `completed` (true/false): Whether the task is completed
- `completedTime` (text): When it was completed (ISO 8601)
- `createdTime` (text): When it was created (ISO 8601)
- `creator` (object)
- `customFieldValues` (object): Custom field values keyed by field name, each with a 'type' and a 'value'
- `deadlineType` (text): HARD, SOFT or NONE
- `description` (text): Description as HTML
- `dueDate` (text): Due date (ISO 8601)
- `duration` (text): Minutes, or NONE, or REMINDER
- `id` (text): Task id
- `labels` (list): Labels on the task
- `lastInteractedTime` (text): When it was last touched (ISO 8601)
- `name` (text): Task name
- `parentRecurringTaskId` (text): Recurring task this came from, if any
- `priority` (text): ASAP, HIGH, MEDIUM or LOW
- `project` (object)
- `scheduledEnd` (text): Scheduled end (ISO 8601)
- `scheduledStart` (text): Scheduled start (ISO 8601)
- `schedulingIssue` (true/false): True when Motion could not schedule it
- `startOn` (text): Date it should start (YYYY-MM-DD)
- `status` (object)
- `updatedTime` (text): When it was last changed (ISO 8601)
- `workspace` (object)

**Example output**

```json
{
  "assignees": [
    {
      "email": "ada@example.com",
      "id": "usr_1a2b3c",
      "name": "Ada Lovelace"
    }
  ],
  "chunks": [],
  "completed": false,
  "createdTime": "2026-10-15T09:00:00.000Z",
  "creator": {
    "email": "ada@example.com",
    "id": "usr_1a2b3c",
    "name": "Ada Lovelace"
  },
  "deadlineType": "SOFT",
  "description": "<p>First draft.</p>",
  "dueDate": "2026-10-20T17:00:00.000Z",
  "duration": 30,
  "id": "tk_1j2k3l",
  "labels": [
    {
      "name": "Urgent"
    }
  ],
  "name": "Draft the launch post",
  "parentRecurringTaskId": "",
  "priority": "HIGH",
  "project": {
    "createdTime": "2026-10-01T09:00:00.000Z",
    "customFieldValues": {},
    "description": "<p>Ship the new site.</p>",
    "id": "pr_7g8h9i",
    "name": "Website relaunch",
    "status": {
      "isDefaultStatus": true,
      "isResolvedStatus": false,
      "name": "Todo"
    },
    "updatedTime": "2026-10-02T09:00:00.000Z",
    "workspaceId": "ws_9f8e7d"
  },
  "scheduledEnd": "2026-10-19T14:30:00.000Z",
  "scheduledStart": "2026-10-19T14:00:00.000Z",
  "schedulingIssue": false,
  "status": {
    "isDefaultStatus": true,
    "isResolvedStatus": false,
    "name": "Todo"
  },
  "workspace": {
    "id": "ws_9f8e7d",
    "labels": [
      {
        "name": "Urgent"
      }
    ],
    "name": "Acme",
    "statuses": [
      {
        "isDefaultStatus": true,
        "isResolvedStatus": false,
        "name": "Todo"
      }
    ],
    "teamId": "team_4d5e6f",
    "type": "TEAM"
  }
}
```

### List comments

List the comments on a Motion task, with who wrote each and when.

**Inputs**

- Task ID (`task_id`, text, required): The task whose comments to list. Use the 'id' from Create task or List tasks, or paste the task's Motion link.
- Cursor (`cursor`, text): Leave empty for the first page. To read the next one, pass the 'next_cursor' an earlier run of this step returned.

**Outputs**

- `comments` (list): Comments
- `count` (number): Records on this page
- `has_more` (true/false): Whether another page follows
- `next_cursor` (text): Pass as 'cursor' to read the next page; empty on the last page

**Example output**

```json
{
  "comments": [
    {
      "content": "<p>Looks good.</p>",
      "createdAt": "2026-10-15T10:00:00.000Z",
      "creator": {
        "email": "ada@example.com",
        "id": "usr_1a2b3c",
        "name": "Ada Lovelace"
      },
      "id": "cm_7p8q9r",
      "taskId": "tk_1j2k3l"
    }
  ],
  "count": 1,
  "has_more": false,
  "next_cursor": null
}
```

### List projects

List the projects in a Motion workspace.

**Inputs**

- Workspace (`workspace_id`, text): The workspace whose projects to list.
- Cursor (`cursor`, text): Leave empty for the first page. To read the next one, pass the 'next_cursor' an earlier run of this step returned.

**Outputs**

- `count` (number): Records on this page
- `has_more` (true/false): Whether another page follows
- `next_cursor` (text): Pass as 'cursor' to read the next page; empty on the last page
- `projects` (list): Projects

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "next_cursor": null,
  "projects": [
    {
      "createdTime": "2026-10-01T09:00:00.000Z",
      "customFieldValues": {},
      "description": "<p>Ship the new site.</p>",
      "id": "pr_7g8h9i",
      "name": "Website relaunch",
      "status": {
        "isDefaultStatus": true,
        "isResolvedStatus": false,
        "name": "Todo"
      },
      "updatedTime": "2026-10-02T09:00:00.000Z",
      "workspaceId": "ws_9f8e7d"
    }
  ]
}
```

### List recurring tasks

List the recurring tasks in a Motion workspace.

**Inputs**

- Workspace (`workspace_id`, text, required): The workspace whose recurring tasks to list.
- Cursor (`cursor`, text): Leave empty for the first page. To read the next one, pass the 'next_cursor' an earlier run of this step returned.

**Outputs**

- `count` (number): Records on this page
- `has_more` (true/false): Whether another page follows
- `next_cursor` (text): Pass as 'cursor' to read the next page; empty on the last page
- `tasks` (list): Recurring tasks

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "next_cursor": null,
  "tasks": [
    {
      "assignee": {
        "email": "ada@example.com",
        "id": "usr_1a2b3c",
        "name": "Ada Lovelace"
      },
      "creator": {
        "email": "ada@example.com",
        "id": "usr_1a2b3c",
        "name": "Ada Lovelace"
      },
      "description": "<p>Look back at the week.</p>",
      "id": "rt_4m5n6o",
      "labels": [],
      "name": "Weekly review",
      "priority": "MEDIUM",
      "status": {
        "isDefaultStatus": true,
        "isResolvedStatus": false,
        "name": "Todo"
      },
      "workspace": {
        "id": "ws_9f8e7d",
        "labels": [
          {
            "name": "Urgent"
          }
        ],
        "name": "Acme",
        "statuses": [
          {
            "isDefaultStatus": true,
            "isResolvedStatus": false,
            "name": "Todo"
          }
        ],
        "teamId": "team_4d5e6f",
        "type": "TEAM"
      }
    }
  ]
}
```

### List schedules

List your Motion schedules - the working hours tasks are fitted into - with their time zones and hours per weekday.

**Inputs**: None.

**Outputs**

- `count` (number): How many were returned
- `schedules` (list): Schedules

**Example output**

```json
{
  "count": 1,
  "schedules": [
    {
      "isDefaultTimezone": true,
      "name": "Work Hours",
      "schedule": {
        "friday": [
          {
            "end": "17:00",
            "start": "09:00"
          }
        ],
        "monday": [
          {
            "end": "17:00",
            "start": "09:00"
          }
        ],
        "saturday": [],
        "sunday": [],
        "thursday": [
          {
            "end": "17:00",
            "start": "09:00"
          }
        ],
        "tuesday": [
          {
            "end": "17:00",
            "start": "09:00"
          }
        ],
        "wednesday": [
          {
            "end": "17:00",
            "start": "09:00"
          }
        ]
      },
      "timezone": "America/New_York"
    }
  ]
}
```

### List statuses

List the task statuses of a Motion workspace, with which is the default and which mean done.

**Inputs**

- Workspace (`workspace_id`, text): The workspace whose statuses to list.

**Outputs**

- `count` (number): How many were returned
- `statuses` (list): Statuses

**Example output**

```json
{
  "count": 1,
  "statuses": [
    {
      "isDefaultStatus": true,
      "isResolvedStatus": false,
      "name": "Todo"
    }
  ]
}
```

### List tasks

List Motion tasks, filtered by workspace, project, assignee, label, status or a word in the name. Each comes with its schedule, due date, priority, status, assignees and labels.

**Inputs**

- Workspace (`workspace_id`, text): Leave empty for tasks from every workspace.
- Project (`project_id`, text): Only tasks in this project.
- Assignee (`assignee_id`, text): Only tasks assigned to this person.
- Label (`label`, text): Only tasks with this label.
- Name contains (`name`, text): Only tasks whose name contains this (any case).
- Statuses (`statuses`, list): Only tasks in these statuses. Leave empty for Motion's default, which leaves out completed tasks.
- Include every status (`include_all_statuses`, true/false): Turn on to include completed tasks too. Cannot be combined with Statuses. Default: `false`.
- Cursor (`cursor`, text): Leave empty for the first page. To read the next one, pass the 'next_cursor' an earlier run of this step returned.

**Outputs**

- `count` (number): Records on this page
- `has_more` (true/false): Whether another page follows
- `next_cursor` (text): Pass as 'cursor' to read the next page; empty on the last page
- `tasks` (list): Tasks

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "next_cursor": null,
  "tasks": [
    {
      "assignees": [
        {
          "email": "ada@example.com",
          "id": "usr_1a2b3c",
          "name": "Ada Lovelace"
        }
      ],
      "chunks": [],
      "completed": false,
      "createdTime": "2026-10-15T09:00:00.000Z",
      "creator": {
        "email": "ada@example.com",
        "id": "usr_1a2b3c",
        "name": "Ada Lovelace"
      },
      "deadlineType": "SOFT",
      "description": "<p>First draft.</p>",
      "dueDate": "2026-10-20T17:00:00.000Z",
      "duration": 30,
      "id": "tk_1j2k3l",
      "labels": [
        {
          "name": "Urgent"
        }
      ],
      "name": "Draft the launch post",
      "parentRecurringTaskId": "",
      "priority": "HIGH",
      "project": {
        "createdTime": "2026-10-01T09:00:00.000Z",
        "customFieldValues": {},
        "description": "<p>Ship the new site.</p>",
        "id": "pr_7g8h9i",
        "name": "Website relaunch",
        "status": {
          "isDefaultStatus": true,
          "isResolvedStatus": false,
          "name": "Todo"
        },
        "updatedTime": "2026-10-02T09:00:00.000Z",
        "workspaceId": "ws_9f8e7d"
      },
      "scheduledEnd": "2026-10-19T14:30:00.000Z",
      "scheduledStart": "2026-10-19T14:00:00.000Z",
      "schedulingIssue": false,
      "status": {
        "isDefaultStatus": true,
        "isResolvedStatus": false,
        "name": "Todo"
      },
      "workspace": {
        "id": "ws_9f8e7d",
        "labels": [
          {
            "name": "Urgent"
          }
        ],
        "name": "Acme",
        "statuses": [
          {
            "isDefaultStatus": true,
            "isResolvedStatus": false,
            "name": "Todo"
          }
        ],
        "teamId": "team_4d5e6f",
        "type": "TEAM"
      }
    }
  ]
}
```

### List users

List the people in a Motion workspace or team, with ids and emails.

**Inputs**

- Workspace (`workspace_id`, text): The workspace whose members to list.
- Team ID (`motion_team_id`, text): Or list a whole team's members instead: the 'teamId' List workspaces returns.
- Cursor (`cursor`, text): Leave empty for the first page. To read the next one, pass the 'next_cursor' an earlier run of this step returned.

**Outputs**

- `count` (number): Records on this page
- `has_more` (true/false): Whether another page follows
- `next_cursor` (text): Pass as 'cursor' to read the next page; empty on the last page
- `users` (list): Users

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "next_cursor": null,
  "users": [
    {
      "email": "ada@example.com",
      "id": "usr_1a2b3c",
      "name": "Ada Lovelace"
    }
  ]
}
```

### List workspaces

List the Motion workspaces you belong to, each with its id, name, team, type, labels and task statuses.

**Inputs**

- Only these workspaces (`workspace_ids`, list): Leave empty for every workspace.
- Cursor (`cursor`, text): Leave empty for the first page. To read the next one, pass the 'next_cursor' an earlier run of this step returned.

**Outputs**

- `count` (number): Records on this page
- `has_more` (true/false): Whether another page follows
- `next_cursor` (text): Pass as 'cursor' to read the next page; empty on the last page
- `workspaces` (list): Workspaces

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "next_cursor": null,
  "workspaces": [
    {
      "id": "ws_9f8e7d",
      "labels": [
        {
          "name": "Urgent"
        }
      ],
      "name": "Acme",
      "statuses": [
        {
          "isDefaultStatus": true,
          "isResolvedStatus": false,
          "name": "Todo"
        }
      ],
      "teamId": "team_4d5e6f",
      "type": "TEAM"
    }
  ]
}
```

### Move task

Move a Motion task to another workspace, optionally reassigning it.

**Inputs**

- Task ID (`task_id`, text, required): The task to move. Use the 'id' from Create task or List tasks, or paste the task's Motion link.
- Workspace (`workspace_id`, text, required): The workspace to move it to.
- Assignee (`assignee_id`, text): Who to assign it to in that workspace.

**Outputs**

- `assignees` (list): People the task is assigned to
- `chunks` (list): The scheduled blocks the task is split into
- `completed` (true/false): Whether the task is completed
- `completedTime` (text): When it was completed (ISO 8601)
- `createdTime` (text): When it was created (ISO 8601)
- `creator` (object)
- `customFieldValues` (object): Custom field values keyed by field name, each with a 'type' and a 'value'
- `deadlineType` (text): HARD, SOFT or NONE
- `description` (text): Description as HTML
- `dueDate` (text): Due date (ISO 8601)
- `duration` (text): Minutes, or NONE, or REMINDER
- `id` (text): Task id
- `labels` (list): Labels on the task
- `lastInteractedTime` (text): When it was last touched (ISO 8601)
- `name` (text): Task name
- `parentRecurringTaskId` (text): Recurring task this came from, if any
- `priority` (text): ASAP, HIGH, MEDIUM or LOW
- `project` (object)
- `scheduledEnd` (text): Scheduled end (ISO 8601)
- `scheduledStart` (text): Scheduled start (ISO 8601)
- `schedulingIssue` (true/false): True when Motion could not schedule it
- `startOn` (text): Date it should start (YYYY-MM-DD)
- `status` (object)
- `updatedTime` (text): When it was last changed (ISO 8601)
- `workspace` (object)

**Example output**

```json
{
  "assignees": [
    {
      "email": "ada@example.com",
      "id": "usr_1a2b3c",
      "name": "Ada Lovelace"
    }
  ],
  "chunks": [],
  "completed": false,
  "createdTime": "2026-10-15T09:00:00.000Z",
  "creator": {
    "email": "ada@example.com",
    "id": "usr_1a2b3c",
    "name": "Ada Lovelace"
  },
  "deadlineType": "SOFT",
  "description": "<p>First draft.</p>",
  "dueDate": "2026-10-20T17:00:00.000Z",
  "duration": 30,
  "id": "tk_1j2k3l",
  "labels": [
    {
      "name": "Urgent"
    }
  ],
  "name": "Draft the launch post",
  "parentRecurringTaskId": "",
  "priority": "HIGH",
  "project": {
    "createdTime": "2026-10-01T09:00:00.000Z",
    "customFieldValues": {},
    "description": "<p>Ship the new site.</p>",
    "id": "pr_7g8h9i",
    "name": "Website relaunch",
    "status": {
      "isDefaultStatus": true,
      "isResolvedStatus": false,
      "name": "Todo"
    },
    "updatedTime": "2026-10-02T09:00:00.000Z",
    "workspaceId": "ws_9f8e7d"
  },
  "scheduledEnd": "2026-10-19T14:30:00.000Z",
  "scheduledStart": "2026-10-19T14:00:00.000Z",
  "schedulingIssue": false,
  "status": {
    "isDefaultStatus": true,
    "isResolvedStatus": false,
    "name": "Todo"
  },
  "workspace": {
    "id": "ws_9f8e7d",
    "labels": [
      {
        "name": "Urgent"
      }
    ],
    "name": "Acme",
    "statuses": [
      {
        "isDefaultStatus": true,
        "isResolvedStatus": false,
        "name": "Todo"
      }
    ],
    "teamId": "team_4d5e6f",
    "type": "TEAM"
  }
}
```

### Unassign task

Remove the assignee from a Motion task.

**Inputs**

- Task ID (`task_id`, text, required): The task to unassign. Use the 'id' from Create task or List tasks, or paste the task's Motion link.

**Outputs**

- `task` (object): The task, when Motion returns it
- `task_id` (text): The task's id
- `unassigned` (true/false): Always true

**Example output**

```json
{
  "task_id": "tk_1j2k3l",
  "unassigned": true
}
```

### Update task

Change a Motion task: rename it, or change its description, project, assignee, priority, labels, status (pick a done status to complete it), due date, duration or auto-scheduling. Fields left empty are not changed.

**Inputs**

- Task ID (`task_id`, text, required): The task to change. Use the 'id' from Create task or List tasks, or paste the task's Motion link.
- Workspace (`workspace_id`, text): The task's workspace, to fill the dropdowns below. Use Move task to move it to another workspace.
- New name (`name`, text): Leave empty to keep the current name.
- Description (`description`, text): Details, in Markdown.
- Project (`project_id`, text): The project to put the task in.
- Assignee (`assignee_id`, text): Who the task is for. Leave empty for it to be unassigned (or for its current assignee).
- Priority (`priority`, text): How urgent it is. One of: `ASAP`, `HIGH`, `MEDIUM`, `LOW`.
- Labels (`labels`, list): Labels to put on the task, by name. Replaces the task's labels.
- Status (`status`, text): The status, by name. Pick a 'done' status to complete the task.
- Due date (`due_date`, date and time): When it is due. Required for auto-scheduling.
- Duration (`duration_type`, text): How long the task takes. A reminder blocks no time on the calendar. Leave empty for Motion's default. One of: `minutes` (A number of minutes), `NONE` (No duration), `REMINDER` (Reminder - blocks no time).
- Minutes (`duration_minutes`, number): How many minutes the task takes. Only when Duration is A number of minutes. From 1 to 100000.
- Auto-schedule (`auto_schedule`, text): Let Motion place the task on the assignee's calendar. Needs a due date, and a status with auto-scheduling turned on. Leave empty to keep the current setting. One of: `on` (Auto-schedule it), `off` (Don't auto-schedule it).
- Start no earlier than (`auto_schedule_start_date`, date): The first day Motion may schedule it on. Only when Auto-schedule is Auto-schedule it.
- Deadline (`deadline_type`, text): How firm the due date is. Defaults to soft. Only when Auto-schedule is Auto-schedule it. One of: `SOFT` (Soft - Motion may schedule past it), `HARD` (Hard - must finish by the due date), `NONE` (None - no deadline).
- Schedule (`schedule`, text): Which of your Motion schedules to fit it into. Defaults to 'Work Hours', which is also the only one Motion allows when scheduling for someone else. Only when Auto-schedule is Auto-schedule it.

**Outputs**

- `assignees` (list): People the task is assigned to
- `chunks` (list): The scheduled blocks the task is split into
- `completed` (true/false): Whether the task is completed
- `completedTime` (text): When it was completed (ISO 8601)
- `createdTime` (text): When it was created (ISO 8601)
- `creator` (object)
- `customFieldValues` (object): Custom field values keyed by field name, each with a 'type' and a 'value'
- `deadlineType` (text): HARD, SOFT or NONE
- `description` (text): Description as HTML
- `dueDate` (text): Due date (ISO 8601)
- `duration` (text): Minutes, or NONE, or REMINDER
- `id` (text): Task id
- `labels` (list): Labels on the task
- `lastInteractedTime` (text): When it was last touched (ISO 8601)
- `name` (text): Task name
- `parentRecurringTaskId` (text): Recurring task this came from, if any
- `priority` (text): ASAP, HIGH, MEDIUM or LOW
- `project` (object)
- `scheduledEnd` (text): Scheduled end (ISO 8601)
- `scheduledStart` (text): Scheduled start (ISO 8601)
- `schedulingIssue` (true/false): True when Motion could not schedule it
- `startOn` (text): Date it should start (YYYY-MM-DD)
- `status` (object)
- `updatedTime` (text): When it was last changed (ISO 8601)
- `workspace` (object)

**Example output**

```json
{
  "assignees": [
    {
      "email": "ada@example.com",
      "id": "usr_1a2b3c",
      "name": "Ada Lovelace"
    }
  ],
  "chunks": [],
  "completed": false,
  "createdTime": "2026-10-15T09:00:00.000Z",
  "creator": {
    "email": "ada@example.com",
    "id": "usr_1a2b3c",
    "name": "Ada Lovelace"
  },
  "deadlineType": "SOFT",
  "description": "<p>First draft.</p>",
  "dueDate": "2026-10-20T17:00:00.000Z",
  "duration": 30,
  "id": "tk_1j2k3l",
  "labels": [
    {
      "name": "Urgent"
    }
  ],
  "name": "Draft the launch post",
  "parentRecurringTaskId": "",
  "priority": "HIGH",
  "project": {
    "createdTime": "2026-10-01T09:00:00.000Z",
    "customFieldValues": {},
    "description": "<p>Ship the new site.</p>",
    "id": "pr_7g8h9i",
    "name": "Website relaunch",
    "status": {
      "isDefaultStatus": true,
      "isResolvedStatus": false,
      "name": "Todo"
    },
    "updatedTime": "2026-10-02T09:00:00.000Z",
    "workspaceId": "ws_9f8e7d"
  },
  "scheduledEnd": "2026-10-19T14:30:00.000Z",
  "scheduledStart": "2026-10-19T14:00:00.000Z",
  "schedulingIssue": false,
  "status": {
    "isDefaultStatus": true,
    "isResolvedStatus": false,
    "name": "Todo"
  },
  "workspace": {
    "id": "ws_9f8e7d",
    "labels": [
      {
        "name": "Urgent"
      }
    ],
    "name": "Acme",
    "statuses": [
      {
        "isDefaultStatus": true,
        "isResolvedStatus": false,
        "name": "Todo"
      }
    ],
    "teamId": "team_4d5e6f",
    "type": "TEAM"
  }
}
```
