Act on a task from a notification
POST
/api/notifications/actions
Done, snooze or delete for a single task, as sent by notification
action buttons. The API token goes in the body, not the Authorization
header, because the iOS notification extension cannot set headers.
done— mark the task donesnooze30— snooze 30 minutes from nowsnooze— snooze 1 hour from now, rounded to the hoursnooze2h— snooze 2 hours from now, rounded to the hourdelete— move the task to the trash (a soft delete, undoable like
any other delete; the "AI finished" notification's Delete button).
A task already in the trash is a 400.
Request Body
application/json
JSON
{
"action": "string",
"task_id": 0,
"token": "string"
}
Responses
The action taken. result is the task operation's own result: its
task is the stored task, without the computed is_recurring and
target_at fields.
application/json
JSON
{
"data": {
"action": "string",
"task_id": 0,
"until": "string",
"result": {
"task": {
"id": 0,
"user_id": 0,
"project_id": 0,
"title": "string",
"original_title": "string",
"short_title": "string",
"done": true,
"done_at": "string",
"priority": 0,
"due_at": "string",
"rrule": "string",
"recurrence_mode": "string",
"anchor_time": "string",
"anchor_dow": 0,
"anchor_dom": 0,
"original_due_at": "string",
"target_at": "string",
"deadline_at": "string",
"horizon": "string",
"horizon_set_at": "string",
"last_considered_at": "string",
"segment_deferred_at": "string",
"segment_targeted_at": "string",
"target_set_at": "string",
"target_auto": true,
"occurrence_at": "string",
"deadline_nag_off": true,
"auto_snooze_minutes": 0,
"deleted_at": "string",
"archived_at": "string",
"labels": [
"string"
],
"notes": "string",
"progress_target": 0,
"progress_current": 0,
"progress_period_start": "string",
"quota_prompt_config": {
"enabled": true,
"slot_id": 0,
"numbers": {
"additionalProperties": 0
}
},
"quota_day_state": {
"date": "2026-09-24",
"logged": 0,
"did": [
"string"
],
"considered": [
"string"
],
"did_applied": {
"additionalProperties": 0
}
},
"completion_count": 0,
"skip_count": 0,
"first_completed_at": "string",
"last_completed_at": "string",
"created_at": "string",
"updated_at": "string",
"is_recurring": true
},
"wasRecurring": true,
"nextDueAt": "string",
"previousDueAt": "string",
"originalDueAt": "string",
"description": "string"
}
}
}
POST
/api/notifications/actions
