# Update Task — Asana

> Updates a specific and existing task. See the documentation

- Key: `asana-update-task`
- Type: Action (Write)
- Version: 0.4.8
- App: Asana (`asana`) — https://pipedream.com/apps/asana.md
- This page (HTML): https://pipedream.com/apps/asana/actions/update-task
- Hints: open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/asana/actions/update-task/update-task.mjs

## Description

Updates a specific and existing task. [See the documentation](https://developers.asana.com/docs/update-a-task)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `workspace` | `string` | Yes | Gid of a workspace. Options are loaded from the connected account. |
| `project` | `string` | Yes | List of projects. This field uses the project GID. Options are loaded from the connected account. |
| `task_gid` | `string` | Yes | The ID of the task to update Options are loaded from the connected account. |
| `name` | `string` | Yes | Name of the task. This is generally a short sentence fragment that fits on a line in the UI for maximum readability. However, it can be longer. |
| `assignee` | `string` | No | Gid of a user. Options are loaded from the connected account. |
| `assignee_section` | `string` | No | The assignee section is a subdivision of a project that groups tasks together in the assignee's "My Tasks" list. Options are loaded from the connected account. |
| `completed` | `boolean` | No | True if the task is currently marked complete, false if not. |
| `due_at` | `string` | No | The UTC date and time on which this task is due, or null if the task has no due time. This takes an ISO 8601 date string in UTC and should not be used together with due_on. |
| `due_on` | `string` | No | The localized date on which this task is due, or null if the task has no due date. This takes a date with YYYY-MM-DD format and should not be used together with due_at. |
| `html_notes` | `string` | No | The notes of the text with formatting as HTML. |
| `notes` | `string` | No | Free-form textual information associated with the task (i.e. its description). |
| `start_on` | `string` | No | The day on which work begins for the task , or null if the task has no start date. This takes a date with YYYY-MM-DD format. |
| `custom_fields` | `string` | No | An object where each key is a Custom Field gid and each value is an enum gid, string, or number: E.g. { "4578152156": "Not Started", "5678904321": "On Hold" } |

## Run it

**MCP**

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_PROJECT_ID!,
        "x-pd-environment": "production",
        "x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
        "x-pd-app-slug": "asana",
      },
    },
  },
)

const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)

const { tools } = await mcp.listTools()

// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
  name: "asana-update-task",
  arguments: {
    workspace: "Workspace",
    project: "Project",
  },
})
```

**TypeScript**

```ts
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const result = await pd.actions.run({
  id: "asana-update-task",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    asana: { authProvisionId: "apn_xxxxxxx" },
    workspace: "Workspace",
    project: "Project",
  },
})

console.log(result)
```

**cURL**

```bash
curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
  -H "Content-Type: application/json" \
  -H "X-PD-Environment: production" \
  -H "Authorization: Bearer {access_token}" \
  -d '{
    "external_user_id": "{external_user_id}",
    "id": "asana-update-task",
    "configured_props": {
      "asana": { "authProvisionId": "apn_xxxxxxx" },
      "workspace": "Workspace",
      "project": "Project"
    }
  }'
```

---

- App: https://pipedream.com/apps/asana.md · All apps: https://pipedream.com/apps
