> For the complete documentation index, see [llms.txt](https://docs.planetcrust.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.planetcrust.com/human-connections/google/google-tasks-individual.md).

# Google Tasks

<p align="center"><a class="button primary" data-icon="circle-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>

<figure><img src="/files/xtBRH49mqXsj1Nocn49x" alt="" width="188"><figcaption></figcaption></figure>

<h3 align="center">Put Google Tasks to Work with @Human Automations and @Human Agents</h3>

<p align="center">The Google Tasks Connection documents all Triggers, Actions and Query Operations available for creating automations via the Google Tasks API.</p>

{% embed url="<https://www.youtube.com/watch?v=CyuUuaBSZzA>" %}

#### What can you do with the Google Tasks Connection?

* Connect to the Google Tasks API in a few clicks
* Use the related Google Tasks Operations (see below) in @Human Automations or @Human Agents

### Related Operations

#### Trigger Operations

**Task List Created**

Triggers on: tasklists/created

Triggered when a new task list is created in Google Tasks.

**Task List Updated**

Triggers on: tasklists/updated

Triggered when an existing task list is updated in Google Tasks.

**Task List Deleted**

Triggers on: tasklists/deleted

Triggered when a task list is deleted in Google Tasks.

**Task Created**

Triggers on: tasks/created

Triggered when a new task is created within a task list in Google Tasks.

**Task Updated**

Triggers on: tasks/updated

Triggered when an existing task is updated in Google Tasks.

**Task Deleted**

Triggers on: tasks/deleted

Triggered when a task is deleted from a task list in Google Tasks.

#### Action Operations

[Action: Create Task](/human-connections/google/google-tasks-individual/action-create-task.md)

[Action: Create Task List](/human-connections/google/google-tasks-individual/action-create-task-list.md)

[Action: Update Task](/human-connections/google/google-tasks-individual/action-update-task.md)

[Action: API Request](/human-connections/google/google-tasks-individual/action-api-request.md)

#### Query Operations

[Query: Find Task](/human-connections/google/google-tasks-individual/query-find-task.md)

[Query: Find or Create Task](/human-connections/google/google-tasks-individual/query-find-or-create-task.md)

[Query: Get Tasks by List](/human-connections/google/google-tasks-individual/query-get-tasks-by-list.md)

### Related Automations

Example link

### Obtaining Access Credentials

To obtain a **Personal Access Token (PAT)** for **Google Tasks API** (system-to-system access), follow these steps:

#### **Prerequisites:**

1. A **Google Workspace account** (or a personal Google account if allowed by the API).
2. **Google Cloud Project** with the **Google Tasks API enabled**.

#### **Step-by-Step Guide:**

**1. Set Up a Google Cloud Project**

* Go to [Google Cloud Console](https://console.cloud.google.com/).
* **Create a new project** (or select an existing one).
* **Enable the Google Tasks API**:
  * Navigate to **APIs & Services > Library**.
  * Search for **"Google Tasks API"** and enable it.

**2. Create Service Account Credentials**

* Go to **APIs & Services > Credentials**.
* Click **"Create Credentials"** > **"Service Account"**.
* Fill in:
  * **Service account name** (e.g., `tasks-api-access`).
  * **Service account ID** (auto-generated).
  * **Description** (optional).
* Click **"Create and Continue"**, then **"Done"**.

**3. Generate a Key for the Service Account**

* In **Credentials**, find your service account.
* Click **"Keys"** > **"Add Key"** > **"Create New Key"**.
* Select **JSON** format and download the key file (contains `private_key` and `client_email`).

**4. Delegate Domain-Wide Authority (For Workspace Accounts)**

* Open the downloaded JSON key file and note the **`client_email`**.
* Go to **Google Workspace Admin Console** > **Security** > **API Controls** > **Domain-wide Delegation**.
* Click **"Manage Domain-Wide Delegation"** > **"Add New"**.
* Enter:
  * **Client ID** (the `client_email` from the JSON file).
  * **OAuth Scopes**: `https://www.googleapis.com/auth/tasks`
* Click **"Authorize"**.

**Note:** Google does not provide a manual PAT UI for Tasks API. Authentication is done via service accounts + OAuth 2.0.

### Configuring Webhooks

**1. Enable the Google Tasks API**

* Go to the [Google Cloud Console](https://console.cloud.google.com/).
* Navigate to **APIs & Services > Library**.
* Search for **"Google Tasks API"** and ensure it is enabled for your project.

**2. Verify Service Account Scopes**

* In the **Credentials** section, ensure your service account has the necessary OAuth scope: `https://www.googleapis.com/auth/tasks`.
* This permission is required for the system to poll for changes in your task lists and tasks.

**3. Configure the Connection**

* Use the **Service Account JSON key** obtained in the credentials section to set up your Google Tasks connection.
* Triggers will use these credentials to monitor your account for updates.

**4. Automated Event Monitoring**

* The Google Tasks API does not currently support native push notifications (webhooks).
* @Human automatically implements webhook-like functionality through an optimized polling mechanism that checks for changes at regular intervals.
* No manual registration of a webhook URL or domain verification is required in the Google Cloud Console.

### Code (Apache v2.0): Service Connectivity and Metadata

```
{
  "handle": "google-tasks-individual-v1",
  "status": "active",
  "meta": {
    "short": "Google Tasks",
    "description": "Connect to Google Tasks API to manage task lists and tasks.",
    "icon": "google-tasks-individual",
    "tags": ["productivity", "tasks", "google"]
  },
  "service": {
    "baseURL": {
      "value": "https://tasks.googleapis.com/tasks/v1"
    },
    "protocol": "https",
    "contentType": "application/json",
    "auth": {
      "method": "oauth2_client_credentials",
      "params": {
        "oauth2ClientCredentials": {
          "value": "{{serviceAccountJSON}}",
          "placeholders": [
            {
              "name": "serviceAccountJSON",
              "type": "string",
              "description": "The credentials for the Google Calendar API.",
              "required": true,
              "default": ""
            }
          ]
        }
      }
    }
  }
}

```

### Code (Apache v2.0): List of External Resources and Internal Mapping

```
[
  {
    "handle": "tasklists",
    "meta": {
      "short": "Task Lists",
      "description": "Manage task lists in Google Tasks."
    },
    "endpoint": {
      "value": "/users/@me/lists"
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": ["id"],
        "meta": {
          "description": "The unique identifier for the task list."
        }
      },
      {
        "name": "title",
        "type": "String",
        "selector": ["title"],
        "meta": {
          "description": "The title of the task list."
        }
      },
      {
        "name": "updated",
        "type": "String",
        "selector": ["updated"],
        "meta": {
          "description": "Last modification time of the task list in RFC 3339 timestamp format."
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": ""
        },
        "headers": {},
        "queryParams": {
          "maxResults": "100"
        },
        "bodyTemplate": null
      },
      "read": {
        "method": "GET",
        "path": {
          "value": "/{{tasklistId}}",
          "placeholders": [
            {
              "name": "tasklistId",
              "type": "String",
              "description": "The task list identifier.",
              "required": true
            }
          ]
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      },
      "create": {
        "method": "POST",
        "path": {
          "value": ""
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": {
          "value": "{\"title\": \"{{title}}\"}",
          "placeholders": [
            {
              "name": "title",
              "type": "String",
              "description": "Title of the task list.",
              "required": true
            }
          ]
        }
      },
      "update": {
        "method": "PUT",
        "path": {
          "value": "/{{tasklistId}}",
          "placeholders": [
            {
              "name": "tasklistId",
              "type": "String",
              "description": "The task list identifier.",
              "required": true
            }
          ]
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": {
          "value": "{\"id\": \"{{tasklistId}}\", \"title\": \"{{title}}\"}",
          "placeholders": [
            {
              "name": "tasklistId",
              "type": "String",
              "description": "The task list identifier.",
              "required": true
            },
            {
              "name": "title",
              "type": "String",
              "description": "The new title of the task list.",
              "required": true
            }
          ]
        }
      },
      "patch": {
        "method": "PATCH",
        "path": {
          "value": "/{{tasklistId}}",
          "placeholders": [
            {
              "name": "tasklistId",
              "type": "String",
              "description": "The task list identifier.",
              "required": true
            }
          ]
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": {
          "value": "{\"title\": \"{{title}}\"}",
          "placeholders": [
            {
              "name": "title",
              "type": "String",
              "description": "The new title of the task list.",
              "required": false
            }
          ]
        }
      },
      "delete": {
        "method": "DELETE",
        "path": {
          "value": "/{{tasklistId}}",
          "placeholders": [
            {
              "name": "tasklistId",
              "type": "String",
              "description": "The task list identifier.",
              "required": true
            }
          ]
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      }
    },
    "webhooks": [
      {
        "event": "tasklists/created",
        "path": "/webhooks/google-tasks/tasklists/created",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "The unique identifier for the task list." } },
          { "name": "title", "type": "String", "selector": ["title"], "meta": { "description": "The title of the task list." } }
        ]
      },
      {
        "event": "tasklists/updated",
        "path": "/webhooks/google-tasks/tasklists/updated",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "The unique identifier for the task list." } },
          { "name": "title", "type": "String", "selector": ["title"], "meta": { "description": "The title of the task list." } },
          { "name": "updated", "type": "String", "selector": ["updated"], "meta": { "description": "Last modification time of the task list." } }
        ]
      },
      {
        "event": "tasklists/deleted",
        "path": "/webhooks/google-tasks/tasklists/deleted",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "The unique identifier for the task list." } }
        ]
      }
    ]
  },
  {
    "handle": "tasks",
    "meta": {
      "short": "Tasks",
      "description": "Manage tasks within a Google Tasks task list."
    },
    "endpoint": {
      "value": "/lists/{{tasklistId}}/tasks",
      "placeholders": [
        {
          "name": "tasklistId",
          "type": "String",
          "description": "The ID of the task list.",
          "required": true
        }
      ]
    },
    "fields": [
      {
        "name": "id",
        "type": "String",
        "selector": ["id"],
        "meta": {
          "description": "The unique identifier for the task."
        }
      },
      {
        "name": "title",
        "type": "String",
        "selector": ["title"],
        "meta": {
          "description": "The title of the task."
        }
      },
      {
        "name": "notes",
        "type": "String",
        "selector": ["notes"],
        "meta": {
          "description": "Notes describing the task."
        }
      },
      {
        "name": "status",
        "type": "String",
        "selector": ["status"],
        "meta": {
          "description": "Status of the task. Allowed values: needsAction, completed."
        }
      },
      {
        "name": "due",
        "type": "String",
        "selector": ["due"],
        "meta": {
          "description": "Due date of the task in RFC 3339 timestamp format."
        }
      },
      {
        "name": "completed",
        "type": "String",
        "selector": ["completed"],
        "meta": {
          "description": "Completion date of the task in RFC 3339 timestamp format."
        }
      },
      {
        "name": "deleted",
        "type": "Boolean",
        "selector": ["deleted"],
        "meta": {
          "description": "Whether the task has been deleted."
        }
      },
      {
        "name": "hidden",
        "type": "Boolean",
        "selector": ["hidden"],
        "meta": {
          "description": "Whether the task is hidden."
        }
      },
      {
        "name": "updated",
        "type": "String",
        "selector": ["updated"],
        "meta": {
          "description": "Last modification time of the task in RFC 3339 timestamp format."
        }
      },
      {
        "name": "parent",
        "type": "String",
        "selector": ["parent"],
        "meta": {
          "description": "The parent task identifier. Omitted if the task is a top-level task."
        }
      },
      {
        "name": "position",
        "type": "String",
        "selector": ["position"],
        "meta": {
          "description": "String indicating the position of the task among its sibling tasks."
        }
      },
      {
        "name": "selfLink",
        "type": "String",
        "selector": ["selfLink"],
        "meta": {
          "description": "URL pointing to this task."
        }
      }
    ],
    "operations": {
      "list": {
        "method": "GET",
        "path": {
          "value": ""
        },
        "headers": {},
        "queryParams": {
          "maxResults": "100",
          "showCompleted": "false",
          "showHidden": "false"
        },
        "bodyTemplate": null
      },
      "read": {
        "method": "GET",
        "path": {
          "value": "/{{taskId}}",
          "placeholders": [
            {
              "name": "taskId",
              "type": "String",
              "description": "The task identifier.",
              "required": true
            }
          ]
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      },
      "create": {
        "method": "POST",
        "path": {
          "value": ""
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": {
          "value": "{\"title\": \"{{title}}\", \"notes\": \"{{notes}}\", \"due\": \"{{due}}\"}",
          "placeholders": [
            {
              "name": "title",
              "type": "String",
              "description": "Title of the task.",
              "required": true
            },
            {
              "name": "notes",
              "type": "String",
              "description": "Notes for the task.",
              "required": false
            },
            {
              "name": "due",
              "type": "String",
              "description": "Due date in RFC 3339 timestamp format.",
              "required": false
            }
          ]
        }
      },
      "update": {
        "method": "PUT",
        "path": {
          "value": "/{{taskId}}",
          "placeholders": [
            {
              "name": "taskId",
              "type": "String",
              "description": "The task identifier.",
              "required": true
            }
          ]
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": {
          "value": "{\"id\": \"{{taskId}}\", \"title\": \"{{title}}\", \"notes\": \"{{notes}}\", \"status\": \"{{status}}\", \"due\": \"{{due}}\"}",
          "placeholders": [
            {
              "name": "taskId",
              "type": "String",
              "description": "The task identifier.",
              "required": true
            },
            {
              "name": "title",
              "type": "String",
              "description": "Title of the task.",
              "required": false
            },
            {
              "name": "notes",
              "type": "String",
              "description": "Notes for the task.",
              "required": false
            },
            {
              "name": "status",
              "type": "String",
              "description": "Status of the task (needsAction or completed).",
              "required": false
            },
            {
              "name": "due",
              "type": "String",
              "description": "Due date in RFC 3339 timestamp format.",
              "required": false
            }
          ]
        }
      },
      "patch": {
        "method": "PATCH",
        "path": {
          "value": "/{{taskId}}",
          "placeholders": [
            {
              "name": "taskId",
              "type": "String",
              "description": "The task identifier.",
              "required": true
            }
          ]
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": {
          "value": "{\"title\": \"{{title}}\", \"notes\": \"{{notes}}\", \"status\": \"{{status}}\", \"due\": \"{{due}}\"}",
          "placeholders": [
            {
              "name": "title",
              "type": "String",
              "description": "Title of the task.",
              "required": false
            },
            {
              "name": "notes",
              "type": "String",
              "description": "Notes for the task.",
              "required": false
            },
            {
              "name": "status",
              "type": "String",
              "description": "Status of the task (needsAction or completed).",
              "required": false
            },
            {
              "name": "due",
              "type": "String",
              "description": "Due date in RFC 3339 timestamp format.",
              "required": false
            }
          ]
        }
      },
      "delete": {
        "method": "DELETE",
        "path": {
          "value": "/{{taskId}}",
          "placeholders": [
            {
              "name": "taskId",
              "type": "String",
              "description": "The task identifier.",
              "required": true
            }
          ]
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      },
      "move": {
        "method": "POST",
        "path": {
          "value": "/{{taskId}}/move",
          "placeholders": [
            {
              "name": "taskId",
              "type": "String",
              "description": "The task identifier.",
              "required": true
            }
          ]
        },
        "headers": {},
        "queryParams": {
          "parent": "{{parentTaskId}}",
          "previous": "{{previousTaskId}}"
        },
        "bodyTemplate": null
      },
      "clear": {
        "method": "POST",
        "path": {
          "value": "/../clear"
        },
        "headers": {},
        "queryParams": {},
        "bodyTemplate": null
      }
    },
    "webhooks": [
      {
        "event": "tasks/created",
        "path": "/webhooks/google-tasks/tasks/created",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "The unique identifier for the task." } },
          { "name": "title", "type": "String", "selector": ["title"], "meta": { "description": "The title of the task." } },
          { "name": "notes", "type": "String", "selector": ["notes"], "meta": { "description": "Notes describing the task." } }
        ]
      },
      {
        "event": "tasks/updated",
        "path": "/webhooks/google-tasks/tasks/updated",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "The unique identifier for the task." } },
          { "name": "title", "type": "String", "selector": ["title"], "meta": { "description": "The title of the task." } },
          { "name": "status", "type": "String", "selector": ["status"], "meta": { "description": "Status of the task (needsAction, completed)." } },
          { "name": "updated", "type": "String", "selector": ["updated"], "meta": { "description": "Last modification time of the task." } }
        ]
      },
      {
        "event": "tasks/deleted",
        "path": "/webhooks/google-tasks/tasks/deleted",
        "payload": [
          { "name": "id", "type": "String", "selector": ["id"], "meta": { "description": "The unique identifier for the task." } }
        ]
      }
    ]
  }
]

```

<p align="center"><a class="button primary" data-icon="square-caret-right">Try @Human</a><a class="button primary" data-icon="check">Buy @Human Subscription</a><a class="button primary" data-icon="comments">Join @Human Community</a></p>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.planetcrust.com/human-connections/google/google-tasks-individual.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
