A Home Assistant custom component that integrates with TickTick, allowing you to view and manage your tasks directly from Home Assistant.
- Project Sensors: Each TickTick project becomes a sensor showing task counts
- Calendar Integration: View tasks with due dates in the Home Assistant calendar
- Task Management Services: Create, update, complete, and delete tasks via automations
- Automation Events: Trigger automations when tasks are created, completed, or due soon
- OAuth2 Authentication: Secure login via your TickTick account
- Open HACS in Home Assistant
- Click the three dots menu → Custom repositories
- Add this repository URL and select Integration as the category
- Click Install
- Restart Home Assistant
- Copy the
custom_components/ticktickfolder to your Home Assistantcustom_componentsdirectory - Restart Home Assistant
You need TickTick API credentials (OAuth2 client ID and secret):
- Go to the TickTick Developer Portal
- Create a new application
- Set the redirect URI to:
https://my.home-assistant.io/redirect/oauth - Note your Client ID and Client Secret
- In Home Assistant, go to Settings → Devices & Services → Application Credentials
- Click Add Credentials and select "TickTick"
- Enter your Client ID and Client Secret from the TickTick Developer Portal
- Go to Settings → Devices & Services → Add Integration
- Search for "TickTick" and follow the OAuth2 flow to authorize
- Configure options (sync interval, due soon threshold)
Each TickTick project creates a sensor entity:
- Entity ID:
sensor.ticktick_<project_name> - State: Total task count
- Attributes:
project_id: TickTick project IDproject_name: Project display nametask_count: Total tasksoverdue_count: Overdue tasksdue_today_count: Tasks due todaytasks: List of task objects
A single calendar entity displays all tasks with due dates:
- Entity ID:
calendar.ticktick_tasks - Tasks with specific times appear at that time
- Tasks without times appear as all-day events
Create a new task.
| Parameter | Type | Required | Description |
|---|---|---|---|
title |
string | Yes | Task title |
project_id |
string | No | Target project (default: Inbox) |
content |
string | No | Task description |
due_date |
string | No | Due date (ISO format) |
priority |
string | No | none, low, medium, high |
all_day |
bool | No | All-day task (default: false) |
service: ticktick.create_task
data:
title: "Buy groceries"
project_id: "abc123"
due_date: "2025-01-15T10:00:00"
priority: "medium"Mark a task as complete.
| Parameter | Type | Required | Description |
|---|---|---|---|
task_id |
string | Yes | Task ID |
project_id |
string | Yes | Project ID |
Delete a task.
| Parameter | Type | Required | Description |
|---|---|---|---|
task_id |
string | Yes | Task ID |
project_id |
string | Yes | Project ID |
Update an existing task.
| Parameter | Type | Required | Description |
|---|---|---|---|
task_id |
string | Yes | Task ID |
project_id |
string | Yes | Project ID |
title |
string | No | New title |
content |
string | No | New description |
due_date |
string | No | New due date |
priority |
string | No | New priority |
Create a subtask under a parent task.
| Parameter | Type | Required | Description |
|---|---|---|---|
parent_task_id |
string | Yes | Parent task ID |
project_id |
string | Yes | Project ID |
title |
string | Yes | Subtask title |
content |
string | No | Subtask description |
Mark a subtask as complete.
| Parameter | Type | Required | Description |
|---|---|---|---|
task_id |
string | Yes | Subtask ID |
parent_task_id |
string | Yes | Parent task ID |
project_id |
string | Yes | Project ID |
The integration fires events for use in automations:
Fired when a new task is detected.
event_data:
task_id: "abc123"
project_id: "proj456"
title: "Buy groceries"
due_date: "2025-01-15T10:00:00"
priority: 3Fired when a task is marked complete.
event_data:
task_id: "abc123"
completed_at: "2025-01-14T15:30:00"Fired when a task is approaching its due date (configurable threshold, default 30 minutes).
event_data:
task_id: "abc123"
project_id: "proj456"
title: "Submit report"
due_date: "2025-01-14T17:00:00"
minutes_until_due: 30automation:
- alias: "TickTick Due Soon Notification"
trigger:
- platform: event
event_type: ticktick_task_due_soon
action:
- service: notify.mobile_app
data:
title: "Task Due Soon"
message: "{{ trigger.event.data.title }} is due in {{ trigger.event.data.minutes_until_due }} minutes"script:
add_shopping_item:
alias: "Add Shopping Item"
sequence:
- service: ticktick.create_task
data:
title: "{{ item }}"
project_id: "shopping_list_project_id"| Option | Default | Description |
|---|---|---|
scan_interval |
300 | Sync interval in seconds (60-3600) |
due_soon_minutes |
30 | Minutes before due to trigger event |
include_completed |
false | Include recently completed tasks |
poetry installpytestpytest --cov --cov-report=htmlruff check .
ruff format .mypy custom_components/ticktickThis project is licensed under the MIT License.