Base URL: /api. All responses use JSON. Success responses include "success": true and "data"; errors include "success": false and "error".
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/health |
Service health check. Returns { "status": "healthy", "service": "taskflow" }. |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/tasks |
List tasks. |
| GET | /api/tasks/<id> |
Get one task. |
| POST | /api/tasks |
Create task. |
| PUT | /api/tasks/<id> |
Update task (partial). |
| DELETE | /api/tasks/<id> |
Delete task. |
| POST | /api/tasks/<id>/complete |
Mark task done. |
| POST | /api/tasks/<id>/move |
Move to another status. |
| POST | /api/quick-add |
Create task from natural-language text (NLP). |
GET /api/tasks — Query: status (inbox | today | waiting | done | archived), limit (default 50), offset (default 0), sort (created_at | priority | due_date), order (asc | desc). Response includes data (array of tasks) and meta (total, filtered, offset, limit).
POST /api/tasks — Body: text (required, max 500), status, due_date (ISO), time_estimate (minutes), energy_level (high | medium | low), tags (array), notes, links, people_ids (array), auto_update_priority, priority_mappings. Returns created task.
PUT /api/tasks/ — Body: any of the above fields to update. Sending priority marks it as manual (not auto-set).
POST /api/tasks//move — Body: { "status": "inbox" | "today" | "waiting" | "done" | "archived" }.
POST /api/quick-add — Body: text (required), optional people_ids, links, auto_update_priority, priority_mappings. Parses due date, estimate, tags, etc. from text.
Task object: id, text, status, priority (1–5), priority_auto_set, due_date, time_estimate, energy_level, tags, notes, links, people (array of person objects), created_at, updated_at, completed_at.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/views/inbox |
Inbox tasks (to triage). |
| GET | /api/views/today |
Today tasks, sorted (overdue → due today → priority → quick wins). Includes meta.suggested_next, meta.total_time_estimate. |
| GET | /api/views/waiting |
Waiting tasks (by due date). |
| GET | /api/views/matrix |
Active tasks (excl. done/archived) for Eisenhower matrix. |
| GET | /api/views/done |
Completed tasks (by completed_at). |
| GET | /api/views/stats |
Counts: status_counts, overdue_count, today_time_estimate, completed_today. |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/search |
Full-text search + filters. |
| GET | /api/search/suggestions |
Tags and text snippets for autocomplete. |
GET /api/search — Query: q (full-text), status (comma-separated), tag, date_from, date_to (ISO), limit, offset. Response includes data (tasks) and meta (query, total, results, filters).
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/people |
List people. |
| GET | /api/people/<id> |
Get one person. |
| GET | /api/people/search |
Search by name (query q, limit default 10). |
| GET | /api/people/<id>/tasks |
Tasks linked to person. |
| POST | /api/people |
Create person. |
| PUT | /api/people/<id> |
Update person. |
| DELETE | /api/people/<id> |
Delete person (fails if tasks linked). |
GET /api/people — Query: search, team, role, has_tasks (true/false), limit, offset, sort (name | created_at | updated_at), order.
POST /api/people — Body: name (required, max 200), email, role, team, communication_preference (slack | email | meetings | async), general_notes.
Person object: id, name, email, role, team, communication_preference, general_notes, created_at, updated_at.
GET /api/people//tasks — Query: status, limit, offset. Returns data.person and data.tasks.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/archives |
List sprint archive files (filename, created, size). |
| GET | /api/archives/<filename> |
Download archive (only sprint-*.md). |
| POST | /api/archives/create |
Create sprint archive from completed tasks. |
POST /api/archives/create — Body: tasks (array of task objects), sprint_info: { "start_date", "end_date" } (ISO). Returns archive_path, tasks_archived.