New to Kestra?
Use blueprints to kickstart your first workflows.
Complete Todoist tasks automatically with Kestra when deploys finish or tickets resolve. A webhook closes the task by id and acknowledges in Slack.
Tasks that track external work have a specific failure mode: the work finishes and the task stays open, because closing it was a second, manual step. This blueprint deletes that step. When the deploy pipeline goes green or the ticket resolves, the system POSTs the Todoist task id to a Kestra webhook, io.kestra.plugin.todoist.CompleteTask marks the task done, and Slack gets an acknowledgment naming the closed task.
done_webhook (io.kestra.plugin.core.trigger.Webhook) exposes a keyed endpoint. The sending system includes the task id in the JSON body as task_id.complete_task (io.kestra.plugin.todoist.CompleteTask) resolves the id as {{ trigger.body.task_id ?? inputs.task_id }}: the webhook body wins when present, and the optional task_id input covers manual runs and testing from the UI.acknowledge posts the completed task id to Slack, closing the loop visibly.errors block posts a distinct Slack warning when completion fails, since a task believed closed but still open is worse than one never automated.The hard part is not the single API call; it is giving every external system one authenticated place to send the signal, handling a missing task id gracefully, telling the team it happened, and keeping a record. Kestra provides the keyed webhook, the secret storage for the Todoist token, the fallback logic, the Slack acknowledgment, and the execution history in one short flow.
task_id, typically stored when the task was created (the alert-capture blueprint exposes it as an output).TODOIST_API_TOKEN: Todoist personal API token.SLACK_WEBHOOK_URL: Slack incoming webhook URL.change-me-strong-webhook-key with a strong random string.{"task_id": "<its id>"} to the webhook URL.summary field and interpolate it into the Slack message.io.kestra.plugin.todoist.GetTask before completion to log the task content in the acknowledgment.taskId, which the resolving system echoes back here.io.kestra.plugin.todoist.UpdateTask if the done signal should reprioritize instead of close.