{
  "schemaVersion": "1.0",
  "item": {
    "slug": "google-tasks-api",
    "name": "Google Tasks",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/byungkyu/google-tasks-api",
    "canonicalUrl": "https://clawhub.ai/byungkyu/google-tasks-api",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/google-tasks-api",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=google-tasks-api",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "LICENSE.txt"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/google-tasks-api"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/google-tasks-api",
    "agentPageUrl": "https://openagent3.xyz/skills/google-tasks-api/agent",
    "manifestUrl": "https://openagent3.xyz/skills/google-tasks-api/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/google-tasks-api/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Google Tasks",
        "body": "Access the Google Tasks API with managed OAuth authentication. Manage task lists and tasks with full CRUD operations."
      },
      {
        "title": "Quick Start",
        "body": "# List all task lists\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://gateway.maton.ai/google-tasks/tasks/v1/users/@me/lists')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF"
      },
      {
        "title": "Base URL",
        "body": "https://gateway.maton.ai/google-tasks/{native-api-path}\n\nReplace {native-api-path} with the actual Google Tasks API endpoint path. The gateway proxies requests to tasks.googleapis.com and automatically injects your OAuth token."
      },
      {
        "title": "Authentication",
        "body": "All requests require the Maton API key in the Authorization header:\n\nAuthorization: Bearer $MATON_API_KEY\n\nEnvironment Variable: Set your API key as MATON_API_KEY:\n\nexport MATON_API_KEY=\"YOUR_API_KEY\""
      },
      {
        "title": "Getting Your API Key",
        "body": "Sign in or create an account at maton.ai\nGo to maton.ai/settings\nCopy your API key"
      },
      {
        "title": "Connection Management",
        "body": "Manage your Google Tasks OAuth connections at https://ctrl.maton.ai."
      },
      {
        "title": "List Connections",
        "body": "python <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections?app=google-tasks&status=ACTIVE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF"
      },
      {
        "title": "Create Connection",
        "body": "python <<'EOF'\nimport urllib.request, os, json\ndata = json.dumps({'app': 'google-tasks'}).encode()\nreq = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Content-Type', 'application/json')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF"
      },
      {
        "title": "Get Connection",
        "body": "python <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n\nResponse:\n\n{\n  \"connection\": {\n    \"connection_id\": \"0e13cacd-cec8-4b6b-9368-c62cc9b06dd9\",\n    \"status\": \"ACTIVE\",\n    \"creation_time\": \"2026-02-07T02:35:51.002199Z\",\n    \"last_updated_time\": \"2026-02-07T05:32:30.369186Z\",\n    \"url\": \"https://connect.maton.ai/?session_token=...\",\n    \"app\": \"google-tasks\",\n    \"metadata\": {}\n  }\n}\n\nOpen the returned url in a browser to complete OAuth authorization."
      },
      {
        "title": "Delete Connection",
        "body": "python <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF"
      },
      {
        "title": "Specifying Connection",
        "body": "If you have multiple Google Tasks connections, specify which one to use with the Maton-Connection header:\n\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://gateway.maton.ai/google-tasks/tasks/v1/users/@me/lists')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Maton-Connection', '0e13cacd-cec8-4b6b-9368-c62cc9b06dd9')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n\nIf omitted, the gateway uses the default (oldest) active connection."
      },
      {
        "title": "Task Lists",
        "body": "List All Task Lists\n\nGET /google-tasks/tasks/v1/users/@me/lists\n\nQuery Parameters:\n\nmaxResults - Maximum number of task lists to return (default: 20, max: 100)\npageToken - Token for pagination\n\nResponse:\n\n{\n  \"kind\": \"tasks#taskLists\",\n  \"etag\": \"\\\"OW7pv01-vgQ\\\"\",\n  \"items\": [\n    {\n      \"kind\": \"tasks#taskList\",\n      \"id\": \"MDEzMTQ2ODk4NDc2ODkyOTIyMTE6MDow\",\n      \"etag\": \"\\\"Yz7ljQZ5Xuw\\\"\",\n      \"title\": \"My Tasks\",\n      \"updated\": \"2023-09-18T06:12:59.468Z\",\n      \"selfLink\": \"https://www.googleapis.com/tasks/v1/users/@me/lists/MDEzMTQ2ODk4NDc2ODkyOTIyMTE6MDow\"\n    }\n  ]\n}\n\nGet Task List\n\nGET /google-tasks/tasks/v1/users/@me/lists/{tasklistId}\n\nCreate Task List\n\nPOST /google-tasks/tasks/v1/users/@me/lists\nContent-Type: application/json\n\n{\n  \"title\": \"New Task List\"\n}\n\nResponse:\n\n{\n  \"kind\": \"tasks#taskList\",\n  \"id\": \"OFYyU09veWMyWl84SjNQXw\",\n  \"etag\": \"\\\"XTqLSxP4QZQ\\\"\",\n  \"title\": \"New Task List\",\n  \"updated\": \"2026-02-07T05:45:22.685Z\",\n  \"selfLink\": \"https://www.googleapis.com/tasks/v1/users/@me/lists/OFYyU09veWMyWl84SjNQXw\"\n}\n\nUpdate Task List (PATCH - partial update)\n\nPATCH /google-tasks/tasks/v1/users/@me/lists/{tasklistId}\nContent-Type: application/json\n\n{\n  \"title\": \"Updated Title\"\n}\n\nUpdate Task List (PUT - full replace)\n\nPUT /google-tasks/tasks/v1/users/@me/lists/{tasklistId}\nContent-Type: application/json\n\n{\n  \"title\": \"Replaced Title\"\n}\n\nDelete Task List\n\nDELETE /google-tasks/tasks/v1/users/@me/lists/{tasklistId}"
      },
      {
        "title": "Tasks",
        "body": "List Tasks\n\nGET /google-tasks/tasks/v1/lists/{tasklistId}/tasks\n\nQuery Parameters:\n\nmaxResults - Maximum number of tasks to return (default: 20, max: 100)\npageToken - Token for pagination\nshowCompleted - Include completed tasks (default: true)\nshowDeleted - Include deleted tasks (default: false)\nshowHidden - Include hidden tasks (default: false)\ndueMin - Lower bound for due date (RFC 3339 timestamp)\ndueMax - Upper bound for due date (RFC 3339 timestamp)\ncompletedMin - Lower bound for completion date (RFC 3339 timestamp)\ncompletedMax - Upper bound for completion date (RFC 3339 timestamp)\nupdatedMin - Lower bound for last update time (RFC 3339 timestamp)\n\nResponse:\n\n{\n  \"kind\": \"tasks#tasks\",\n  \"etag\": \"\\\"Jhh35adkRkU\\\"\",\n  \"nextPageToken\": \"CgwI27nR6AUQsKHh7QIa...\",\n  \"items\": [\n    {\n      \"kind\": \"tasks#task\",\n      \"id\": \"blJQR1hfaXhSU0tMY3gwdg\",\n      \"etag\": \"\\\"Uqc8Y3T9VOA\\\"\",\n      \"title\": \"Example Task\",\n      \"updated\": \"2020-11-09T21:17:08.911Z\",\n      \"selfLink\": \"https://www.googleapis.com/tasks/v1/lists/.../tasks/blJQR1hfaXhSU0tMY3gwdg\",\n      \"position\": \"00000000000000000000\",\n      \"status\": \"needsAction\",\n      \"due\": \"2020-12-08T00:00:00.000Z\",\n      \"notes\": \"Task notes here\",\n      \"links\": [],\n      \"webViewLink\": \"https://tasks.google.com/task/nRPGX_ixRSKLcx0v?sa=6\"\n    }\n  ]\n}\n\nGet Task\n\nGET /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}\n\nCreate Task\n\nPOST /google-tasks/tasks/v1/lists/{tasklistId}/tasks\nContent-Type: application/json\n\n{\n  \"title\": \"New Task\",\n  \"notes\": \"Task description\",\n  \"due\": \"2026-03-01T00:00:00.000Z\"\n}\n\nQuery Parameters (optional):\n\nparent - Parent task ID (for subtasks)\nprevious - Previous sibling task ID (for positioning)\n\nResponse:\n\n{\n  \"kind\": \"tasks#task\",\n  \"id\": \"bkludnJmdjZIZWVFejBnYg\",\n  \"etag\": \"\\\"EKX4SVb-Ljk\\\"\",\n  \"title\": \"New Task\",\n  \"updated\": \"2026-02-07T05:45:05.371Z\",\n  \"selfLink\": \"https://www.googleapis.com/tasks/v1/lists/.../tasks/bkludnJmdjZIZWVFejBnYg\",\n  \"position\": \"00000000000000000000\",\n  \"notes\": \"Task description\",\n  \"status\": \"needsAction\",\n  \"due\": \"2026-03-01T00:00:00.000Z\",\n  \"links\": [],\n  \"webViewLink\": \"https://tasks.google.com/task/nInvrfv6HeeEz0gb?sa=6\"\n}\n\nUpdate Task (PATCH - partial update)\n\nPATCH /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}\nContent-Type: application/json\n\n{\n  \"title\": \"Updated Task Title\",\n  \"status\": \"completed\"\n}\n\nResponse:\n\n{\n  \"kind\": \"tasks#task\",\n  \"id\": \"bkludnJmdjZIZWVFejBnYg\",\n  \"etag\": \"\\\"OeWHIDNj-os\\\"\",\n  \"title\": \"Updated Task Title\",\n  \"updated\": \"2026-02-07T05:45:15.334Z\",\n  \"selfLink\": \"https://www.googleapis.com/tasks/v1/lists/.../tasks/bkludnJmdjZIZWVFejBnYg\",\n  \"position\": \"00000000000000000000\",\n  \"notes\": \"Task description\",\n  \"status\": \"completed\",\n  \"completed\": \"2026-02-07T05:45:15.307Z\",\n  \"links\": [],\n  \"webViewLink\": \"https://tasks.google.com/task/nInvrfv6HeeEz0gb?sa=6\"\n}\n\nUpdate Task (PUT - full replace)\n\nPUT /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}\nContent-Type: application/json\n\n{\n  \"title\": \"Replaced Task\",\n  \"notes\": \"New notes\",\n  \"status\": \"needsAction\"\n}\n\nDelete Task\n\nDELETE /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}\n\nMove Task\n\nReposition a task within a task list or change its parent.\n\nPOST /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}/move\n\nQuery Parameters (optional):\n\nparent - New parent task ID (for making it a subtask)\nprevious - Previous sibling task ID (for positioning after this task)\n\nResponse:\n\n{\n  \"kind\": \"tasks#task\",\n  \"id\": \"VkI5bTEzazdvNzlYNWVycw\",\n  \"etag\": \"\\\"Uplv6eL0sDo\\\"\",\n  \"title\": \"Task B\",\n  \"updated\": \"2026-02-07T05:45:36.801Z\",\n  \"selfLink\": \"https://www.googleapis.com/tasks/v1/lists/.../tasks/VkI5bTEzazdvNzlYNWVycw\",\n  \"position\": \"00000000000000000001\",\n  \"status\": \"needsAction\",\n  \"links\": [],\n  \"webViewLink\": \"https://tasks.google.com/task/VB9m13k7o79X5ers?sa=6\"\n}\n\nClear Completed Tasks\n\nDelete all completed tasks from a task list.\n\nPOST /google-tasks/tasks/v1/lists/{tasklistId}/clear\n\nReturns HTTP 204 No Content on success."
      },
      {
        "title": "Task Resource Fields",
        "body": "FieldTypeDescriptionkindstringAlways \"tasks#task\" (output only)idstringTask identifieretagstringETag of the resourcetitlestringTask title (max 1024 characters)updatedstringLast modification time (RFC 3339, output only)selfLinkstringURL to this task (output only)parentstringParent task ID (output only)positionstringPosition among siblings (output only)notesstringTask notes (max 8192 characters)statusstring\"needsAction\" or \"completed\"duestringDue date (RFC 3339 timestamp)completedstringCompletion date (RFC 3339, output only)deletedbooleanWhether task is deletedhiddenbooleanWhether task is hiddenlinksarrayCollection of links (output only)webViewLinkstringLink to task in Google Tasks UI (output only)"
      },
      {
        "title": "Task List Resource Fields",
        "body": "FieldTypeDescriptionkindstringAlways \"tasks#taskList\" (output only)idstringTask list identifieretagstringETag of the resourcetitlestringTask list title (max 1024 characters)updatedstringLast modification time (RFC 3339, output only)selfLinkstringURL to this task list (output only)"
      },
      {
        "title": "Pagination",
        "body": "Use maxResults and pageToken for pagination:\n\nGET /google-tasks/tasks/v1/lists/{tasklistId}/tasks?maxResults=50\n\nResponse includes nextPageToken when more results exist:\n\n{\n  \"kind\": \"tasks#tasks\",\n  \"etag\": \"...\",\n  \"nextPageToken\": \"CgwI27nR6AUQsKHh7QIa...\",\n  \"items\": [...]\n}\n\nUse the nextPageToken value in subsequent requests:\n\nGET /google-tasks/tasks/v1/lists/{tasklistId}/tasks?maxResults=50&pageToken=CgwI27nR6AUQsKHh7QIa..."
      },
      {
        "title": "JavaScript",
        "body": "// List all task lists\nconst response = await fetch(\n  'https://gateway.maton.ai/google-tasks/tasks/v1/users/@me/lists',\n  {\n    headers: {\n      'Authorization': `Bearer ${process.env.MATON_API_KEY}`\n    }\n  }\n);\n\n// Create a new task\nconst createResponse = await fetch(\n  `https://gateway.maton.ai/google-tasks/tasks/v1/lists/${tasklistId}/tasks`,\n  {\n    method: 'POST',\n    headers: {\n      'Authorization': `Bearer ${process.env.MATON_API_KEY}`,\n      'Content-Type': 'application/json'\n    },\n    body: JSON.stringify({\n      title: 'New Task',\n      notes: 'Task description',\n      due: '2026-03-01T00:00:00.000Z'\n    })\n  }\n);"
      },
      {
        "title": "Python",
        "body": "import os\nimport requests\n\n# List all task lists\nresponse = requests.get(\n    'https://gateway.maton.ai/google-tasks/tasks/v1/users/@me/lists',\n    headers={'Authorization': f'Bearer {os.environ[\"MATON_API_KEY\"]}'}\n)\n\n# Create a new task\ncreate_response = requests.post(\n    f'https://gateway.maton.ai/google-tasks/tasks/v1/lists/{tasklist_id}/tasks',\n    headers={'Authorization': f'Bearer {os.environ[\"MATON_API_KEY\"]}'},\n    json={\n        'title': 'New Task',\n        'notes': 'Task description',\n        'due': '2026-03-01T00:00:00.000Z'\n    }\n)"
      },
      {
        "title": "Notes",
        "body": "Task list IDs and task IDs are opaque strings (base64-encoded)\nStatus values are \"needsAction\" or \"completed\"\nDue dates are RFC 3339 timestamps\nMaximum title length: 1024 characters\nMaximum notes length: 8192 characters\nIMPORTANT: When using curl commands, use curl -g when URLs contain brackets to disable glob parsing\nIMPORTANT: When piping curl output to jq 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."
      },
      {
        "title": "Error Handling",
        "body": "StatusMeaning400Missing Google Tasks connection401Invalid or missing Maton API key404Task or task list not found429Rate limited4xx/5xxPassthrough error from Google Tasks API"
      },
      {
        "title": "Troubleshooting: API Key Issues",
        "body": "Check that the MATON_API_KEY environment variable is set:\n\necho $MATON_API_KEY\n\nVerify the API key is valid by listing connections:\n\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF"
      },
      {
        "title": "Troubleshooting: Invalid App Name",
        "body": "Ensure your URL path starts with google-tasks. For example:\n\nCorrect: https://gateway.maton.ai/google-tasks/tasks/v1/users/@me/lists\nIncorrect: https://gateway.maton.ai/tasks/v1/users/@me/lists"
      },
      {
        "title": "Resources",
        "body": "Google Tasks API Overview\nTasks Reference\nTaskLists Reference\nMaton Community\nMaton Support"
      }
    ],
    "body": "Google Tasks\n\nAccess the Google Tasks API with managed OAuth authentication. Manage task lists and tasks with full CRUD operations.\n\nQuick Start\n# List all task lists\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://gateway.maton.ai/google-tasks/tasks/v1/users/@me/lists')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n\nBase URL\nhttps://gateway.maton.ai/google-tasks/{native-api-path}\n\n\nReplace {native-api-path} with the actual Google Tasks API endpoint path. The gateway proxies requests to tasks.googleapis.com and automatically injects your OAuth token.\n\nAuthentication\n\nAll requests require the Maton API key in the Authorization header:\n\nAuthorization: Bearer $MATON_API_KEY\n\n\nEnvironment Variable: Set your API key as MATON_API_KEY:\n\nexport MATON_API_KEY=\"YOUR_API_KEY\"\n\nGetting Your API Key\nSign in or create an account at maton.ai\nGo to maton.ai/settings\nCopy your API key\nConnection Management\n\nManage your Google Tasks OAuth connections at https://ctrl.maton.ai.\n\nList Connections\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections?app=google-tasks&status=ACTIVE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n\nCreate Connection\npython <<'EOF'\nimport urllib.request, os, json\ndata = json.dumps({'app': 'google-tasks'}).encode()\nreq = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Content-Type', 'application/json')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n\nGet Connection\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n\n\nResponse:\n\n{\n  \"connection\": {\n    \"connection_id\": \"0e13cacd-cec8-4b6b-9368-c62cc9b06dd9\",\n    \"status\": \"ACTIVE\",\n    \"creation_time\": \"2026-02-07T02:35:51.002199Z\",\n    \"last_updated_time\": \"2026-02-07T05:32:30.369186Z\",\n    \"url\": \"https://connect.maton.ai/?session_token=...\",\n    \"app\": \"google-tasks\",\n    \"metadata\": {}\n  }\n}\n\n\nOpen the returned url in a browser to complete OAuth authorization.\n\nDelete Connection\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n\nSpecifying Connection\n\nIf you have multiple Google Tasks connections, specify which one to use with the Maton-Connection header:\n\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://gateway.maton.ai/google-tasks/tasks/v1/users/@me/lists')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Maton-Connection', '0e13cacd-cec8-4b6b-9368-c62cc9b06dd9')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n\n\nIf omitted, the gateway uses the default (oldest) active connection.\n\nAPI Reference\nTask Lists\nList All Task Lists\nGET /google-tasks/tasks/v1/users/@me/lists\n\n\nQuery Parameters:\n\nmaxResults - Maximum number of task lists to return (default: 20, max: 100)\npageToken - Token for pagination\n\nResponse:\n\n{\n  \"kind\": \"tasks#taskLists\",\n  \"etag\": \"\\\"OW7pv01-vgQ\\\"\",\n  \"items\": [\n    {\n      \"kind\": \"tasks#taskList\",\n      \"id\": \"MDEzMTQ2ODk4NDc2ODkyOTIyMTE6MDow\",\n      \"etag\": \"\\\"Yz7ljQZ5Xuw\\\"\",\n      \"title\": \"My Tasks\",\n      \"updated\": \"2023-09-18T06:12:59.468Z\",\n      \"selfLink\": \"https://www.googleapis.com/tasks/v1/users/@me/lists/MDEzMTQ2ODk4NDc2ODkyOTIyMTE6MDow\"\n    }\n  ]\n}\n\nGet Task List\nGET /google-tasks/tasks/v1/users/@me/lists/{tasklistId}\n\nCreate Task List\nPOST /google-tasks/tasks/v1/users/@me/lists\nContent-Type: application/json\n\n{\n  \"title\": \"New Task List\"\n}\n\n\nResponse:\n\n{\n  \"kind\": \"tasks#taskList\",\n  \"id\": \"OFYyU09veWMyWl84SjNQXw\",\n  \"etag\": \"\\\"XTqLSxP4QZQ\\\"\",\n  \"title\": \"New Task List\",\n  \"updated\": \"2026-02-07T05:45:22.685Z\",\n  \"selfLink\": \"https://www.googleapis.com/tasks/v1/users/@me/lists/OFYyU09veWMyWl84SjNQXw\"\n}\n\nUpdate Task List (PATCH - partial update)\nPATCH /google-tasks/tasks/v1/users/@me/lists/{tasklistId}\nContent-Type: application/json\n\n{\n  \"title\": \"Updated Title\"\n}\n\nUpdate Task List (PUT - full replace)\nPUT /google-tasks/tasks/v1/users/@me/lists/{tasklistId}\nContent-Type: application/json\n\n{\n  \"title\": \"Replaced Title\"\n}\n\nDelete Task List\nDELETE /google-tasks/tasks/v1/users/@me/lists/{tasklistId}\n\nTasks\nList Tasks\nGET /google-tasks/tasks/v1/lists/{tasklistId}/tasks\n\n\nQuery Parameters:\n\nmaxResults - Maximum number of tasks to return (default: 20, max: 100)\npageToken - Token for pagination\nshowCompleted - Include completed tasks (default: true)\nshowDeleted - Include deleted tasks (default: false)\nshowHidden - Include hidden tasks (default: false)\ndueMin - Lower bound for due date (RFC 3339 timestamp)\ndueMax - Upper bound for due date (RFC 3339 timestamp)\ncompletedMin - Lower bound for completion date (RFC 3339 timestamp)\ncompletedMax - Upper bound for completion date (RFC 3339 timestamp)\nupdatedMin - Lower bound for last update time (RFC 3339 timestamp)\n\nResponse:\n\n{\n  \"kind\": \"tasks#tasks\",\n  \"etag\": \"\\\"Jhh35adkRkU\\\"\",\n  \"nextPageToken\": \"CgwI27nR6AUQsKHh7QIa...\",\n  \"items\": [\n    {\n      \"kind\": \"tasks#task\",\n      \"id\": \"blJQR1hfaXhSU0tMY3gwdg\",\n      \"etag\": \"\\\"Uqc8Y3T9VOA\\\"\",\n      \"title\": \"Example Task\",\n      \"updated\": \"2020-11-09T21:17:08.911Z\",\n      \"selfLink\": \"https://www.googleapis.com/tasks/v1/lists/.../tasks/blJQR1hfaXhSU0tMY3gwdg\",\n      \"position\": \"00000000000000000000\",\n      \"status\": \"needsAction\",\n      \"due\": \"2020-12-08T00:00:00.000Z\",\n      \"notes\": \"Task notes here\",\n      \"links\": [],\n      \"webViewLink\": \"https://tasks.google.com/task/nRPGX_ixRSKLcx0v?sa=6\"\n    }\n  ]\n}\n\nGet Task\nGET /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}\n\nCreate Task\nPOST /google-tasks/tasks/v1/lists/{tasklistId}/tasks\nContent-Type: application/json\n\n{\n  \"title\": \"New Task\",\n  \"notes\": \"Task description\",\n  \"due\": \"2026-03-01T00:00:00.000Z\"\n}\n\n\nQuery Parameters (optional):\n\nparent - Parent task ID (for subtasks)\nprevious - Previous sibling task ID (for positioning)\n\nResponse:\n\n{\n  \"kind\": \"tasks#task\",\n  \"id\": \"bkludnJmdjZIZWVFejBnYg\",\n  \"etag\": \"\\\"EKX4SVb-Ljk\\\"\",\n  \"title\": \"New Task\",\n  \"updated\": \"2026-02-07T05:45:05.371Z\",\n  \"selfLink\": \"https://www.googleapis.com/tasks/v1/lists/.../tasks/bkludnJmdjZIZWVFejBnYg\",\n  \"position\": \"00000000000000000000\",\n  \"notes\": \"Task description\",\n  \"status\": \"needsAction\",\n  \"due\": \"2026-03-01T00:00:00.000Z\",\n  \"links\": [],\n  \"webViewLink\": \"https://tasks.google.com/task/nInvrfv6HeeEz0gb?sa=6\"\n}\n\nUpdate Task (PATCH - partial update)\nPATCH /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}\nContent-Type: application/json\n\n{\n  \"title\": \"Updated Task Title\",\n  \"status\": \"completed\"\n}\n\n\nResponse:\n\n{\n  \"kind\": \"tasks#task\",\n  \"id\": \"bkludnJmdjZIZWVFejBnYg\",\n  \"etag\": \"\\\"OeWHIDNj-os\\\"\",\n  \"title\": \"Updated Task Title\",\n  \"updated\": \"2026-02-07T05:45:15.334Z\",\n  \"selfLink\": \"https://www.googleapis.com/tasks/v1/lists/.../tasks/bkludnJmdjZIZWVFejBnYg\",\n  \"position\": \"00000000000000000000\",\n  \"notes\": \"Task description\",\n  \"status\": \"completed\",\n  \"completed\": \"2026-02-07T05:45:15.307Z\",\n  \"links\": [],\n  \"webViewLink\": \"https://tasks.google.com/task/nInvrfv6HeeEz0gb?sa=6\"\n}\n\nUpdate Task (PUT - full replace)\nPUT /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}\nContent-Type: application/json\n\n{\n  \"title\": \"Replaced Task\",\n  \"notes\": \"New notes\",\n  \"status\": \"needsAction\"\n}\n\nDelete Task\nDELETE /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}\n\nMove Task\n\nReposition a task within a task list or change its parent.\n\nPOST /google-tasks/tasks/v1/lists/{tasklistId}/tasks/{taskId}/move\n\n\nQuery Parameters (optional):\n\nparent - New parent task ID (for making it a subtask)\nprevious - Previous sibling task ID (for positioning after this task)\n\nResponse:\n\n{\n  \"kind\": \"tasks#task\",\n  \"id\": \"VkI5bTEzazdvNzlYNWVycw\",\n  \"etag\": \"\\\"Uplv6eL0sDo\\\"\",\n  \"title\": \"Task B\",\n  \"updated\": \"2026-02-07T05:45:36.801Z\",\n  \"selfLink\": \"https://www.googleapis.com/tasks/v1/lists/.../tasks/VkI5bTEzazdvNzlYNWVycw\",\n  \"position\": \"00000000000000000001\",\n  \"status\": \"needsAction\",\n  \"links\": [],\n  \"webViewLink\": \"https://tasks.google.com/task/VB9m13k7o79X5ers?sa=6\"\n}\n\nClear Completed Tasks\n\nDelete all completed tasks from a task list.\n\nPOST /google-tasks/tasks/v1/lists/{tasklistId}/clear\n\n\nReturns HTTP 204 No Content on success.\n\nTask Resource Fields\nField\tType\tDescription\nkind\tstring\tAlways \"tasks#task\" (output only)\nid\tstring\tTask identifier\netag\tstring\tETag of the resource\ntitle\tstring\tTask title (max 1024 characters)\nupdated\tstring\tLast modification time (RFC 3339, output only)\nselfLink\tstring\tURL to this task (output only)\nparent\tstring\tParent task ID (output only)\nposition\tstring\tPosition among siblings (output only)\nnotes\tstring\tTask notes (max 8192 characters)\nstatus\tstring\t\"needsAction\" or \"completed\"\ndue\tstring\tDue date (RFC 3339 timestamp)\ncompleted\tstring\tCompletion date (RFC 3339, output only)\ndeleted\tboolean\tWhether task is deleted\nhidden\tboolean\tWhether task is hidden\nlinks\tarray\tCollection of links (output only)\nwebViewLink\tstring\tLink to task in Google Tasks UI (output only)\nTask List Resource Fields\nField\tType\tDescription\nkind\tstring\tAlways \"tasks#taskList\" (output only)\nid\tstring\tTask list identifier\netag\tstring\tETag of the resource\ntitle\tstring\tTask list title (max 1024 characters)\nupdated\tstring\tLast modification time (RFC 3339, output only)\nselfLink\tstring\tURL to this task list (output only)\nPagination\n\nUse maxResults and pageToken for pagination:\n\nGET /google-tasks/tasks/v1/lists/{tasklistId}/tasks?maxResults=50\n\n\nResponse includes nextPageToken when more results exist:\n\n{\n  \"kind\": \"tasks#tasks\",\n  \"etag\": \"...\",\n  \"nextPageToken\": \"CgwI27nR6AUQsKHh7QIa...\",\n  \"items\": [...]\n}\n\n\nUse the nextPageToken value in subsequent requests:\n\nGET /google-tasks/tasks/v1/lists/{tasklistId}/tasks?maxResults=50&pageToken=CgwI27nR6AUQsKHh7QIa...\n\nCode Examples\nJavaScript\n// List all task lists\nconst response = await fetch(\n  'https://gateway.maton.ai/google-tasks/tasks/v1/users/@me/lists',\n  {\n    headers: {\n      'Authorization': `Bearer ${process.env.MATON_API_KEY}`\n    }\n  }\n);\n\n// Create a new task\nconst createResponse = await fetch(\n  `https://gateway.maton.ai/google-tasks/tasks/v1/lists/${tasklistId}/tasks`,\n  {\n    method: 'POST',\n    headers: {\n      'Authorization': `Bearer ${process.env.MATON_API_KEY}`,\n      'Content-Type': 'application/json'\n    },\n    body: JSON.stringify({\n      title: 'New Task',\n      notes: 'Task description',\n      due: '2026-03-01T00:00:00.000Z'\n    })\n  }\n);\n\nPython\nimport os\nimport requests\n\n# List all task lists\nresponse = requests.get(\n    'https://gateway.maton.ai/google-tasks/tasks/v1/users/@me/lists',\n    headers={'Authorization': f'Bearer {os.environ[\"MATON_API_KEY\"]}'}\n)\n\n# Create a new task\ncreate_response = requests.post(\n    f'https://gateway.maton.ai/google-tasks/tasks/v1/lists/{tasklist_id}/tasks',\n    headers={'Authorization': f'Bearer {os.environ[\"MATON_API_KEY\"]}'},\n    json={\n        'title': 'New Task',\n        'notes': 'Task description',\n        'due': '2026-03-01T00:00:00.000Z'\n    }\n)\n\nNotes\nTask list IDs and task IDs are opaque strings (base64-encoded)\nStatus values are \"needsAction\" or \"completed\"\nDue dates are RFC 3339 timestamps\nMaximum title length: 1024 characters\nMaximum notes length: 8192 characters\nIMPORTANT: When using curl commands, use curl -g when URLs contain brackets to disable glob parsing\nIMPORTANT: When piping curl output to jq 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.\nError Handling\nStatus\tMeaning\n400\tMissing Google Tasks connection\n401\tInvalid or missing Maton API key\n404\tTask or task list not found\n429\tRate limited\n4xx/5xx\tPassthrough error from Google Tasks API\nTroubleshooting: API Key Issues\nCheck that the MATON_API_KEY environment variable is set:\necho $MATON_API_KEY\n\nVerify the API key is valid by listing connections:\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n\nTroubleshooting: Invalid App Name\nEnsure your URL path starts with google-tasks. For example:\nCorrect: https://gateway.maton.ai/google-tasks/tasks/v1/users/@me/lists\nIncorrect: https://gateway.maton.ai/tasks/v1/users/@me/lists\nResources\nGoogle Tasks API Overview\nTasks Reference\nTaskLists Reference\nMaton Community\nMaton Support"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/byungkyu/google-tasks-api",
    "publisherUrl": "https://clawhub.ai/byungkyu/google-tasks-api",
    "owner": "byungkyu",
    "version": "1.0.3",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/google-tasks-api",
    "downloadUrl": "https://openagent3.xyz/downloads/google-tasks-api",
    "agentUrl": "https://openagent3.xyz/skills/google-tasks-api/agent",
    "manifestUrl": "https://openagent3.xyz/skills/google-tasks-api/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/google-tasks-api/agent.md"
  }
}