Skip to content

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 done
  • snooze30 — snooze 30 minutes from now
  • snooze — snooze 1 hour from now, rounded to the hour
  • snooze2h — snooze 2 hours from now, rounded to the hour
  • delete — 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"
}
}
}

Samples​

Powered by VitePress OpenAPI