A modern task manager with projects, file attachments and a clean REST API. Built for focus — simple enough for everyday use, solid enough for real workflows.
Built for focus. No bloat, no subscriptions — just a clean tool that gets things done.
Group tasks into projects. Keep work, personal, and side gigs cleanly separated without friction.
Attach images, PDFs, or documents directly to any task. Keep context exactly where it belongs.
Create, complete, and manage tasks in seconds. The interface gets out of your way so you can focus.
A clean, well-structured REST API backs every feature. Build integrations or your own client with ease.
Every task moves through four statuses — assigned, in progress, testing, done. Always know where things stand.
API key authentication protects your data. No ads, no tracking, no third parties. Your tasks stay yours.
A UI that gets out of your way and lets you do the work.
Todo List Hub is available as a VS Code extension today, with all other platforms coming soon.
The same API that powers all our apps — now open for you. Integrate Todo List Hub into your tools or build your own client.
https://todolisthub.app/api/v1
X-Api-Key: <your-api-key>
Get your API key by registering or logging in. Use it in the X-Api-Key header for all other requests.
/auth/setup
Register a new account
{ "name": "John Doe", "email": "john@example.com", "password": "secret123" }
{ "api_key": "a1b2c3d4e5f6..." }
/auth/login
Log in and retrieve your API key
{ "email": "john@example.com", "password": "secret123" }
{ "api_key": "a1b2c3d4e5f6..." }
Organize tasks into named projects. All requests require the X-Api-Key header.
/projects
List all projects
[{ "id": 1, "name": "Work", "created_at": "2026-01-01T10:00:00Z" }]
/projects
Create a new project
{ "name": "My Project" }
{ "id": 2, "name": "My Project" }
/projects/{id}
Update a project
{ "name": "Renamed Project" }
{ "id": 2, "name": "Renamed Project" }
/projects/{id}
Delete a project
// No content
Create and manage tasks within projects. Task status values: zadano, v_procesu, testovani, hotovo.
/projects/{projectId}/tasks
List tasks in a project
[{ "id": 1, "title": "Write tests", "status": "v_procesu", "attachment_count": 2 }]
/projects/{projectId}/tasks
Create a task
{ "title": "New task", // required "description": "Details...", // optional "due_date": "2026-12-31", // optional "status": "zadano" // optional, default }
// zadano · v_procesu · testovani · hotovo { "id": 5, "title": "New task", "status": "zadano", "attachments": [] }
/tasks/{id}
Get task detail with attachments
{ "id": 5, "title": "New task", "status": "v_procesu", "attachments": [{ "id": 1, "original_name": "file.pdf" }] }
/tasks/{id}
Update a task
{ "title": "Renamed", "status": "hotovo" }
/tasks/{id}
Delete a task and its attachments
// No content
Attach files to tasks. Upload via multipart/form-data, download returns the original file.
/tasks/{taskId}/attachments
Upload a file
Content-Type: multipart/form-data file: <binary>
{ "id": 1, "original_name": "spec.pdf", "mime_type": "application/pdf", "size": 245120 }
/attachments/{id}
Download a file
// Returns binary file with original Content-Type
/attachments/{id}
Delete an attachment
// No content
Generate a private link for a project and send it to anyone — they can add tasks without registering.
/projects/{projectId}/share
Generate a shareable link for a project
{ "token": "a1b2c3...", "add_task_url": "https://todolisthub.app/api/v1/share/a1b2c3.../tasks" }
/projects/{projectId}/share
Revoke the shareable link
// No content
/share/{token}
Get project name via link (no auth)
{ "project_id": 1, "project_name": "Work" }
/share/{token}/tasks
Add a task via shareable link (no auth)
{ "title": "Review this proposal" }
{ "id": 42, "title": "Review this proposal", "status": "zadano" }