Microsoft To Do
Microsoft To Do API integration with managed OAuth. Manage task lists, tasks, checklist items, and linked resources. Use this skill when users want to create, read, update, or delete tasks and task li
Microsoft To Do API integration with managed OAuth. Manage task lists, tasks, checklist items, and linked resources. Use this skill when users want to create, read, update, or delete tasks and task li
Real data. Real impact.
Emerging
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
Access the Microsoft To Do API with managed OAuth authentication. Manage task lists, tasks, checklist items, and linked resources with full CRUD operations.
# List all task lists python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/microsoft-to-do/v1.0/me/todo/lists') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF
https://gateway.maton.ai/microsoft-to-do/{native-api-path}
Replace
{native-api-path} with the actual Microsoft Graph API endpoint path. The gateway proxies requests to graph.microsoft.com and automatically injects your OAuth token.
All requests require the Maton API key in the Authorization header:
Authorization: Bearer $MATON_API_KEY
Environment Variable: Set your API key as
MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
Manage your Microsoft To Do OAuth connections at
https://ctrl.maton.ai.
python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections?app=microsoft-to-do&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
python <<'EOF' import urllib.request, os, json data = json.dumps({'app': 'microsoft-to-do'}).encode() req = urllib.request.Request('https://ctrl.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
python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.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": "21fd90f9-5935-43cd-b6c8-bde9d915ca80", "status": "ACTIVE", "creation_time": "2025-12-08T07:20:53.488460Z", "last_updated_time": "2026-01-31T20:03:32.593153Z", "url": "https://connect.maton.ai/?session_token=...", "app": "microsoft-to-do", "metadata": {} } }
Open the returned
url in a browser to complete OAuth authorization.
python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.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 Microsoft To Do connections, specify which one to use with the
Maton-Connection header:
python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/microsoft-to-do/v1.0/me/todo/lists') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF
If omitted, the gateway uses the default (oldest) active connection.
GET /microsoft-to-do/v1.0/me/todo/lists
Response:
{ "value": [ { "id": "AAMkADIyAAAhrbPWAAA=", "displayName": "Tasks", "isOwner": true, "isShared": false, "wellknownListName": "defaultList" } ] }
GET /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}
POST /microsoft-to-do/v1.0/me/todo/lists Content-Type: application/json{ "displayName": "Travel items" }
Response (201 Created):
{ "id": "AAMkADIyAAAhrbPWAAA=", "displayName": "Travel items", "isOwner": true, "isShared": false, "wellknownListName": "none" }
PATCH /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId} Content-Type: application/json{ "displayName": "Vacation Plan" }
DELETE /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}
Returns
204 No Content on success.
GET /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks
Response:
{ "value": [ { "id": "AlMKXwbQAAAJws6wcAAAA=", "title": "Buy groceries", "status": "notStarted", "importance": "normal", "isReminderOn": false, "createdDateTime": "2024-01-15T10:00:00Z", "lastModifiedDateTime": "2024-01-15T10:00:00Z", "body": { "content": "", "contentType": "text" }, "categories": [] } ] }
GET /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks/{taskId}
POST /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks Content-Type: application/json{ "title": "A new task", "importance": "high", "status": "notStarted", "categories": ["Important"], "dueDateTime": { "dateTime": "2024-12-31T17:00:00", "timeZone": "Eastern Standard Time" }, "startDateTime": { "dateTime": "2024-12-01T08:00:00", "timeZone": "Eastern Standard Time" }, "isReminderOn": true, "reminderDateTime": { "dateTime": "2024-12-01T09:00:00", "timeZone": "Eastern Standard Time" }, "body": { "content": "Task details here", "contentType": "text" } }
Task Fields:
| Field | Type | Description |
|---|---|---|
| String | Brief description of the task |
| itemBody | Task body with content and contentType (text/html) |
| String | , , or |
| String | , , , , |
| String[] | Associated category names |
| dateTimeTimeZone | Due date and time |
| dateTimeTimeZone | Start date and time |
| dateTimeTimeZone | Completion date and time |
| dateTimeTimeZone | Reminder date and time |
| Boolean | Whether reminder is enabled |
| patternedRecurrence | Recurrence pattern |
PATCH /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks/{taskId} Content-Type: application/json{ "status": "completed", "completedDateTime": { "dateTime": "2024-01-20T15:00:00", "timeZone": "UTC" } }
DELETE /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks/{taskId}
Returns
204 No Content on success.
Checklist items are subtasks within a task.
GET /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks/{taskId}/checklistItems
Response:
{ "value": [ { "id": "51d8a471-2e9d-4f53-9937-c33a8742d28f", "displayName": "Create draft", "createdDateTime": "2024-01-17T05:22:14Z", "isChecked": false } ] }
POST /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks/{taskId}/checklistItems Content-Type: application/json{ "displayName": "Final sign-off from the team" }
PATCH /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks/{taskId}/checklistItems/{checklistItemId} Content-Type: application/json{ "isChecked": true }
DELETE /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks/{taskId}/checklistItems/{checklistItemId}
Returns
204 No Content on success.
Linked resources connect tasks to external items (e.g., emails, files).
GET /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks/{taskId}/linkedResources
Response:
{ "value": [ { "id": "f9cddce2-dce2-f9cd-e2dc-cdf9e2dccdf9", "webUrl": "https://example.com/item", "applicationName": "MyApp", "displayName": "Related Document", "externalId": "external-123" } ] }
POST /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks/{taskId}/linkedResources Content-Type: application/json{ "webUrl": "https://example.com/item", "applicationName": "MyApp", "displayName": "Related Document", "externalId": "external-123" }
DELETE /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks/{taskId}/linkedResources/{linkedResourceId}
Returns
204 No Content on success.
Microsoft Graph uses OData pagination. Use
$top to limit results and $skip for offset:
GET /microsoft-to-do/v1.0/me/todo/lists/{todoTaskListId}/tasks?$top=10&$skip=0
Response includes
@odata.nextLink when more results exist:
{ "value": [...], "@odata.nextLink": "https://graph.microsoft.com/v1.0/me/todo/lists/{id}/tasks?$skip=10" }
const response = await fetch( 'https://gateway.maton.ai/microsoft-to-do/v1.0/me/todo/lists', { headers: { 'Authorization': `Bearer ${process.env.MATON_API_KEY}` } } ); const data = await response.json();
import os import requestsresponse = requests.get( 'https://gateway.maton.ai/microsoft-to-do/v1.0/me/todo/lists', headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'} ) data = response.json()
AAMkADIyAAAhrbPWAAA=)dateTimeTimeZone type requires both dateTime and timeZone fieldswellknownListName can be defaultList, flaggedEmails, or nonestatus values: notStarted, inProgress, completed, waitingOnOthers, deferredimportance values: low, normal, high$select, $filter, $orderby, $top, $skipcurl -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| Status | Meaning |
|---|---|
| 400 | Missing Microsoft To Do connection or invalid request |
| 401 | Invalid or missing Maton API key |
| 404 | Resource not found |
| 429 | Rate limited |
| 4xx/5xx | Passthrough error from Microsoft Graph API |
MATON_API_KEY environment variable is set:echo $MATON_API_KEY
python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.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
microsoft-to-do. For example:https://gateway.maton.ai/microsoft-to-do/v1.0/me/todo/listshttps://gateway.maton.ai/v1.0/me/todo/listsNo automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.