New to Kestra?
Use blueprints to kickstart your first workflows.
Convert natural language prompts into structured Todoist tasks with Kestra and DeepSeek AI. Parse to-do requests, extract RFC 3339 due dates, post each task.
Convert messy, conversational to-do prompts into structured Todoist tasks automatically with DeepSeek AI and Kestra. This blueprint solves a common AI parsing problem: a person describes everything they need to get done in one free-text sentence, and you need clean, individual task records with titles, descriptions, and machine-readable due dates. DeepSeek's structured output (constrained JSON) does the natural language understanding, and Kestra orchestrates the loop that pushes every extracted task into the Todoist REST API. The result is a reliable text-to-tasks pipeline you can trigger on demand or wire into any upstream event.
prompt input (a STRING) describing what you need to get done.create_task_fields task (io.kestra.plugin.deepseek.ChatCompletion) calls the deepseek-chat model with a SYSTEM message that injects the current time via {{ now() }} and a USER message carrying {{ inputs.prompt }}. A strict jsonResponseSchema forces DeepSeek to return a tasks array, each item holding a title, description, and an RFC 3339 due_date.create_tasks task (io.kestra.plugin.core.flow.ForEach) iterates over the parsed array using {{ outputs.create_task_fields.response | jq('.tasks') | first }}.create_task task (io.kestra.plugin.core.http.Request) POSTs to https://api.todoist.com/rest/v2/tasks with a Bearer token, mapping content, description, and due_datetime from the current taskrun.value.DeepSeek returns JSON, but it cannot loop over an array, fan out HTTP calls, retry a failed Todoist POST, or run on a schedule. Kestra adds the orchestration layer: declarative YAML you can version, a ForEach to iterate every extracted task, retries and error handling on each API call, full execution lineage and logs, and event or schedule triggers so the same flow can run on demand or react to upstream systems. That is the gap a model API alone cannot fill.
deepseek-chat model.DEEPSEEK_API_KEY: your DeepSeek API key, used by the ChatCompletion task.TODOIST_API_TOKEN: your Todoist Personal API token, sent as a Bearer header.DEEPSEEK_API_KEY and TODOIST_API_TOKEN secrets to your Kestra instance.prompt, or supply your own list of things to do.create_task Request task.jsonResponseSchema with priority, labels, or project fields.