Access the Google Tasks API with managed OAuth authentication. Manage task lists and tasks with full CRUD operations.
CLI:
maton google-tasks task list -l <tasklistId>
maton api '/google-tasks/tasks/v1/lists/<tasklistId>/tasks'
Python:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/google-tasks/tasks/v1/lists/<tasklistId>/tasks')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
https://api.maton.ai/google-tasks/{native-api-path}
Maton proxies requests to tasks.googleapis.com and automatically injects your OAuth token.
NPM:
npm install -g @maton-ai/cli
Homebrew:
brew install maton-ai/cli/maton
CLI:
maton login # Opens browser for API key
maton login --interactive # Skip browser, paste API key directly
maton whoami # Show current auth state
Manual:
MATON_API_KEY:export MATON_API_KEY="YOUR_API_KEY"
Manage your Google Tasks OAuth connections at https://api.maton.ai.
CLI:
maton connection list google-tasks --status ACTIVE
maton api -X GET /connections -f app=google-tasks -f status=ACTIVE
Python:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections?app=google-tasks&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
CLI:
maton connection create google-tasks
maton api /connections -f app=google-tasks
Python:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'google-tasks'}).encode()
req = urllib.request.Request('https://api.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
CLI:
maton connection view {connection_id}
maton api /connections/{connection_id}
Python:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"connection": {
"connection_id": "{connection_id}",
"status": "ACTIVE",
"creation_time": "2026-02-07T02:35:51.002199Z",
"last_updated_time": "2026-02-07T05:32:30.369186Z",
"url": "https://connect.maton.ai/?session_token=...",
"app": "google-tasks",
"metadata": {}
}
}
Open the returned url in a browser to complete OAuth authorization.
CLI:
maton connection delete {connection_id}
maton api -X DELETE /connections/{connection_id}
Python:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
If you have multiple Google Tasks connections, specify which one to use:
CLI:
maton google-tasks tasklist list --connection {connection_id}
maton api /google-tasks/tasks/v1/users/@me/lists --connection {connection_id}
Python:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/google-tasks/tasks/v1/users/@me/lists')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '{connection_id}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
If you have multiple connections, always specify the connection to ensure requests go to the intended account.
GET /google-tasks/tasks/v1/users/@me/lists
Query Parameters:
maxResults - Maximum number of task lists to return (default: 20, max: 100)pageToken - Token for paginationExample:
maton google-tasks tasklist list
GET /google-tasks/tasks/v1/users/@me/lists/{tasklistId}
Example:
maton google-tasks tasklist view <tasklistId>
POST /google-tasks/tasks/v1/users/@me/lists
Content-Type: application/json
{
"title": "New Task List"
}
Example:
maton google-tasks tasklist create --title 'New Task List'
PATCH /google-tasks/tasks/v1/users/@me/lists/{tasklistId}
Content-Type: application/json
{
"title": "Updated Title"
}
Example:
maton google-tasks tasklist update <tasklistId> --title 'Updated Title'
PUT /google-tasks/tasks/v1/users/@me/lists/{tasklistId}
Content-Type: application/json
{
"title": "Replaced Title"
}
Example:
maton google-tasks tasklist update <tasklistId> --title 'Replaced Title' --replace
DELETE /google-tasks/tasks/v1/users/@me/lists/{tasklistId}
Example:
maton google-tasks tasklist delete <tasklistId>
GET /google-tasks/tasks/v1/lists/{tasklistId}/tasks?showCompleted=true
Query Parameters:
maxResults - Maximum number of tasks to return (default: 20, max: 100)pageToken - Token for paginationshowCompleted - Include completed tasks (default: true)showDeleted - Include deleted tasks (default: false)showHidden - Include hidden tasks (default: false)dueMin - Lower bound for due date (RFC 3339 timestamp)dueMax - Upper bound for due date (RFC 3339 timestamp)completedMin - Lower bound for completion date (RFC 3339 timestamp)completedMax - Upper bound for completion date (RFC 3339 timestamp)updatedMin - Lower bound for last update time (RFC 3339 timestamp)Example:
maton google-tasks task list -l <tasklistId> --show-completed
GET /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}
Example:
maton google-tasks task view <taskId> -l <tasklistId>
POST /google-tasks/tasks/v1/lists/{tasklistId}/tasks
Content-Type: application/json
{
"title": "New Task",
"notes": "Task description",
"due": "2026-03-01T00:00:00.000Z"
}
Query Parameters (optional):
parent - Parent task ID (for subtasks)previous - Previous sibling task ID (for positioning)Example:
maton google-tasks task create -l <tasklistId> --title 'New Task' --notes 'Task description' --due 2026-03-01
PATCH /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}
Content-Type: application/json
{
"title": "Updated Task Title",
"status": "completed"
}
Example:
maton google-tasks task update <taskId> -l <tasklistId> --title 'Updated Task Title' --status completed
PUT /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}
Content-Type: application/json
{
"title": "Replaced Task",
"notes": "New notes",
"status": "needsAction"
}
Example:
maton google-tasks task update <taskId> -l <tasklistId> --title 'Replaced Task' --notes 'New notes' --status needsAction --replace
DELETE /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}
Example:
maton google-tasks task delete <taskId> -l <tasklistId>
Reposition a task within a task list or change its parent.
POST /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}/move
Query Parameters (optional):
parent - New parent task ID (for making it a subtask)previous - Previous sibling task ID (for positioning after this task)Example:
maton google-tasks task move <taskId> -l <tasklistId> --previous <siblingTaskId>
Delete all completed tasks from a task list.
POST /google-tasks/tasks/v1/lists/{tasklistId}/clear
Example:
maton google-tasks tasklist clear <tasklistId>
| Field | Type | Description |
|---|---|---|
| ------- | ------ | ------------- |
kind | string | Always "tasks#task" (output only) |
id | string | Task identifier |
etag | string | ETag of the resource |
title | string | Task title (max 1024 characters) |
updated | string | Last modification time (RFC 3339, output only) |
selfLink | string | URL to this task (output only) |
parent | string | Parent task ID (output only) |
position | string | Position among siblings (output only) |
notes | string | Task notes (max 8192 characters) |
status | string | "needsAction" or "completed" |
due | string | Due date (RFC 3339 timestamp) |
completed | string | Completion date (RFC 3339, output only) |
deleted | boolean | Whether task is deleted |
hidden | boolean | Whether task is hidden |
links | array | Collection of links (output only) |
webViewLink | string | Link to task in Google Tasks UI (output only) |
| Field | Type | Description |
|---|---|---|
| ------- | ------ | ------------- |
kind | string | Always "tasks#taskList" (output only) |
id | string | Task list identifier |
etag | string | ETag of the resource |
title | string | Task list title (max 1024 characters) |
updated | string | Last modification time (RFC 3339, output only) |
selfLink | string | URL to this task list (output only) |
Google Tasks uses token-based pagination. The CLI automatically paginates with '--paginate'.
Example:
maton google-tasks task list -l <tasklistId> --paginate
# List all task lists
maton google-tasks tasklist list
# Filter with jq — e.g., extract task list titles
maton google-tasks tasklist list --json --jq '.items[].title'
# Create a task with a due date
maton google-tasks task create -l <tasklistId> --title 'Write spec' --due 2026-12-01
// List all task lists
const response = await fetch(
'https://api.maton.ai/google-tasks/tasks/v1/users/@me/lists',
{
headers: {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
}
}
);
// Create a new task
const createResponse = await fetch(
`https://api.maton.ai/google-tasks/tasks/v1/lists/${tasklistId}/tasks`,
{
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
title: 'New Task',
notes: 'Task description',
due: '2026-03-01T00:00:00.000Z'
})
}
);
import os
import requests
# List all task lists
response = requests.get(
'https://api.maton.ai/google-tasks/tasks/v1/users/@me/lists',
headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}
)
# Create a new task
create_response = requests.post(
f'https://api.maton.ai/google-tasks/tasks/v1/lists/{tasklist_id}/tasks',
headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'},
json={
'title': 'New Task',
'notes': 'Task description',
'due': '2026-03-01T00:00:00.000Z'
}
)
curl -g when URLs contain brackets to disable glob parsingjq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments. You may get "Invalid API key" errors when piping.| Status | Meaning |
|---|---|
| -------- | --------- |
| 400 | Missing Google Tasks connection |
| 401 | Invalid or missing Maton API key |
| 404 | Task or task list not found |
| 429 | Rate limited |
| 4xx/5xx | Passthrough error from Google Tasks API |
CLI:
maton whoami
maton connection list
Manual:
MATON_API_KEY environment variable is set:echo $MATON_API_KEY
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
google-tasks. For example:https://api.maton.ai/google-tasks/tasks/v1/users/@me/listshttps://api.maton.ai/tasks/v1/users/@me/lists共 3 个版本