todoist-api-8-webhooks
Sub-skill of todoist-api: 8. Webhooks.
Best use case
todoist-api-8-webhooks is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Sub-skill of todoist-api: 8. Webhooks.
Teams using todoist-api-8-webhooks should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/8-webhooks/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How todoist-api-8-webhooks Compares
| Feature / Agent | todoist-api-8-webhooks | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Sub-skill of todoist-api: 8. Webhooks.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 8. Webhooks
## 8. Webhooks
**Webhook Setup:**
```python
from flask import Flask, request, jsonify
import hashlib
import hmac
import os
app = Flask(__name__)
TODOIST_CLIENT_SECRET = os.environ["TODOIST_CLIENT_SECRET"]
def verify_webhook(payload, signature):
"""Verify webhook signature"""
computed = hmac.new(
TODOIST_CLIENT_SECRET.encode(),
payload,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(computed, signature)
@app.route("/webhook/todoist", methods=["POST"])
def todoist_webhook():
# Verify signature
signature = request.headers.get("X-Todoist-Hmac-SHA256", "")
if not verify_webhook(request.data, signature):
return jsonify({"error": "Invalid signature"}), 401
# Parse event
event = request.json
event_name = event.get("event_name")
event_data = event.get("event_data", {})
print(f"Received event: {event_name}")
# Handle different event types
if event_name == "item:added":
handle_task_added(event_data)
elif event_name == "item:completed":
handle_task_completed(event_data)
elif event_name == "item:updated":
handle_task_updated(event_data)
elif event_name == "item:deleted":
handle_task_deleted(event_data)
elif event_name == "project:added":
handle_project_added(event_data)
return jsonify({"status": "ok"})
def handle_task_added(data):
print(f"New task: {data.get('content')}")
# Add your logic here
def handle_task_completed(data):
print(f"Task completed: {data.get('content')}")
# Add your logic here
def handle_task_updated(data):
print(f"Task updated: {data.get('content')}")
# Add your logic here
def handle_task_deleted(data):
print(f"Task deleted: {data.get('id')}")
# Add your logic here
def handle_project_added(data):
print(f"New project: {data.get('name')}")
# Add your logic here
if __name__ == "__main__":
app.run(port=5000)
```
**Webhook Events:**
```python
# Available webhook events
WEBHOOK_EVENTS = {
# Task events
"item:added": "Task created",
"item:updated": "Task updated",
"item:deleted": "Task deleted",
"item:completed": "Task completed",
"item:uncompleted": "Task reopened",
# Project events
"project:added": "Project created",
"project:updated": "Project updated",
"project:deleted": "Project deleted",
"project:archived": "Project archived",
"project:unarchived": "Project unarchived",
# Note/Comment events
"note:added": "Comment added",
"note:updated": "Comment updated",
"note:deleted": "Comment deleted",
# Label events
"label:added": "Label created",
"label:updated": "Label updated",
"label:deleted": "Label deleted",
# Section events
"section:added": "Section created",
"section:updated": "Section updated",
"section:deleted": "Section deleted",
# Reminder events
"reminder:fired": "Reminder triggered",
}
```Related Skills
trello-api-7-webhooks
Sub-skill of trello-api: 7. Webhooks.
todoist-api-waiting-for-lenreportwaitingfor
Sub-skill of todoist-api: Waiting For ({len(report['waiting_for'])}).
todoist-api-upcoming-this-week-lenreportupcoming
Sub-skill of todoist-api: Upcoming This Week ({len(report['upcoming'])}).
todoist-api-overdue-tasks
Sub-skill of todoist-api: Overdue Tasks.
todoist-api-overdue-tasks-lenreportoverdue
Sub-skill of todoist-api: Overdue Tasks ({len(report['overdue'])}).
todoist-api-example-2-project-template-creator
Sub-skill of todoist-api: Example 2: Project Template Creator (+1).
todoist-api-example-1-gtd-weekly-review-automation
Sub-skill of todoist-api: Example 1: GTD Weekly Review Automation.
todoist-api-7-sync-api
Sub-skill of todoist-api: 7. Sync API.
todoist-api-5-comments-management
Sub-skill of todoist-api: 5. Comments Management (+1).
todoist-api-3-labels-management
Sub-skill of todoist-api: 3. Labels Management (+1).
todoist-api-2-tasks-management
Sub-skill of todoist-api: 2. Tasks Management.
todoist-api-1-projects-management
Sub-skill of todoist-api: 1. Projects Management.