Free · Cross-platform

Your tasks,
always at hand.

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.

Get the app
5
Platforms
Projects
Tasks
Free
My Tasks
Work
Review design docs
Team sync call
Implement API endpoints
Write unit tests
Deploy to production
Personal
Buy groceries
Read book chapter
Morning run
Why Todo List Hub?

Everything you need, nothing you don't.

Built for focus. No bloat, no subscriptions — just a clean tool that gets things done.

📁

Projects

Group tasks into projects. Keep work, personal, and side gigs cleanly separated without friction.

📎

File Attachments

Attach images, PDFs, or documents directly to any task. Keep context exactly where it belongs.

Smart Tasks

Create, complete, and manage tasks in seconds. The interface gets out of your way so you can focus.

REST API

A clean, well-structured REST API backs every feature. Build integrations or your own client with ease.

🔄

Task statuses

Every task moves through four statuses — assigned, in progress, testing, done. Always know where things stand.

🔐

Secure by Default

API key authentication protects your data. No ads, no tracking, no third parties. Your tasks stay yours.

See it in action

Clean. Fast. Focused.

A UI that gets out of your way and lets you do the work.

Projects
+
Work
5 tasks · 2 done
Personal
3 tasks · 0 done
+ New Project
Work
5 tasks · 2 completed
Review design docs
Team sync call
Implement API endpoints
📎 2 files
Write unit tests
Deploy to production
+ Add Task
← Work
Implement API endpoints
Work · In progress
ATTACHMENTS
📄
api-spec.pdf
245 KB
📷
wireframe.png
1.2 MB
Download

Available on
every platform

Todo List Hub is available as a VS Code extension today, with all other platforms coming soon.

VS Code
VS Code Marketplace
Available
Install
Android
Google Play
Coming soon
Windows
Microsoft Store
Coming soon
Linux
Snap / Flatpak
Coming soon
iOS
App Store
Coming soon
For developers

REST API Reference

The same API that powers all our apps — now open for you. Integrate Todo List Hub into your tools or build your own client.

Base URL https://todolisthub.app/api/v1
All requests (except /auth) require the header X-Api-Key: <your-api-key>

Authentication

Get your API key by registering or logging in. Use it in the X-Api-Key header for all other requests.

POST /auth/setup Register a new account
Request body
{
  "name":     "John Doe",
  "email":    "john@example.com",
  "password": "secret123"
}
Response 201
{
  "api_key": "a1b2c3d4e5f6..."
}
POST /auth/login Log in and retrieve your API key
Request body
{
  "email":    "john@example.com",
  "password": "secret123"
}
Response 200
{
  "api_key": "a1b2c3d4e5f6..."
}

Projects

Organize tasks into named projects. All requests require the X-Api-Key header.

GET /projects List all projects
Response 200
[{ "id": 1, "name": "Work", "created_at": "2026-01-01T10:00:00Z" }]
POST /projects Create a new project
Request body
{ "name": "My Project" }
Response 201
{ "id": 2, "name": "My Project" }
PUT /projects/{id} Update a project
Request body
{ "name": "Renamed Project" }
Response 200
{ "id": 2, "name": "Renamed Project" }
DELETE /projects/{id} Delete a project
Response 204
// No content

Tasks

Create and manage tasks within projects. Task status values: zadano, v_procesu, testovani, hotovo.

GET /projects/{projectId}/tasks List tasks in a project
Response 200
[{
  "id": 1, "title": "Write tests",
  "status": "v_procesu", "attachment_count": 2
}]
POST /projects/{projectId}/tasks Create a task
Request body
{
  "title":       "New task",        // required
  "description": "Details...",    // optional
  "due_date":    "2026-12-31",   // optional
  "status":      "zadano"         // optional, default
}
Response 201   Status values
// zadano · v_procesu · testovani · hotovo

{
  "id": 5, "title": "New task",
  "status": "zadano", "attachments": []
}
GET /tasks/{id} Get task detail with attachments
Response 200
{
  "id": 5, "title": "New task", "status": "v_procesu",
  "attachments": [{ "id": 1, "original_name": "file.pdf" }]
}
PUT /tasks/{id} Update a task
Request body — all fields optional
{ "title": "Renamed", "status": "hotovo" }
DELETE /tasks/{id} Delete a task and its attachments
Response 204
// No content

Attachments

Attach files to tasks. Upload via multipart/form-data, download returns the original file.

POST /tasks/{taskId}/attachments Upload a file
Request — multipart/form-data
Content-Type: multipart/form-data
file: <binary>
Response 201
{
  "id": 1,
  "original_name": "spec.pdf",
  "mime_type": "application/pdf",
  "size": 245120
}
GET /attachments/{id} Download a file
Response 200
// Returns binary file with original Content-Type
DELETE /attachments/{id} Delete an attachment
Response 204
// No content

Shareable links

Generate a private link for a project and send it to anyone — they can add tasks without registering.

POST /projects/{projectId}/share Generate a shareable link for a project
Response 201
{
  "token":        "a1b2c3...",
  "add_task_url": "https://todolisthub.app/api/v1/share/a1b2c3.../tasks"
}
DELETE /projects/{projectId}/share Revoke the shareable link
Response 204
// No content
GET /share/{token} Get project name via link (no auth)
Response 200
{ "project_id": 1, "project_name": "Work" }
POST /share/{token}/tasks Add a task via shareable link (no auth)
Request body
{
  "title": "Review this proposal"
}
Response 201
{ "id": 42, "title": "Review this proposal", "status": "zadano" }