| productive.quest API
Create board

API Reference

Interact with your productive.quest boards programmatically. All endpoints return JSON and accept JSON request bodies — no SDK needed, just curl.

Base URL
https://productive.quest
Auth
None — secret UUID URLs
Format
JSON requests & responses

Quick Start

Create a board, add a task, and complete it — three requests:

# 1. Create a new board
curl -s -X POST https://productive.quest/api/board/ | python3 -m json.tool
# → {"uuid": "0ABCDEF...", "url": "/board/0ABCDEF.../"}

# 2. Add a todo (replace UUID with yours)
curl -s -X POST https://productive.quest/api/board/UUID/todo/ \
  -H "Content-Type: application/json" \
  -d '{"name": "Ship the feature #red #prio1"}'
# → {"id": 1, "name": "Ship the feature #red #prio1", ...}

# 3. Complete it
curl -s -X POST https://productive.quest/api/board/UUID/todo/1/complete/

Conventions

A few things to know before making requests.

JSON in, JSON out

All responses are JSON. Send Content-Type: application/json with a JSON body for endpoints that accept data.

HTTP status codes

200 success, 201 created, 400 bad request, 404 not found, 405 wrong method.

No authentication needed

No API keys or CSRF tokens. Board security relies on the secret UUID — keep it private.

Hashtags in todo names

Use #red or #orange for colors. Use #prio1 or #prio2 for priority sorting.


POST /api/board/

Create a board

Creates a new empty board. Returns the board UUID and URL. No tutorial tasks are created.

Example

curl -X POST https://productive.quest/api/board/

Response 201

{
  "uuid": "0ABCDEFGHIJK...",
  "url": "/board/0ABCDEFGHIJK.../"
}
GET /api/board/{uuid}/

View a board

Returns the board with all tasks grouped into current, future, and completed lists.

Path parameters

uuid required
string
The board's unique identifier (base32-encoded UUID7)

Example

curl https://productive.quest/api/board/YOUR_BOARD_UUID/

Response 200

{
  "uuid": "0ABCDEF...",
  "created_at": "2025-01-15T10:30:00+00:00",
  "current_todos": [
    {"id": 1, "name": "Task #red", "is_future": false,
     "is_completed": false, "color": "red", "priority": 99,
     "created_at": "...", "completed_at": null}
  ],
  "future_todos": [],
  "completed_todos": [],
  "counts": {"current": 1, "future": 0, "completed": 0, "total": 1}
}
POST /api/board/{uuid}/todo/

Add a todo

Creates a new task on the board's current list.

Parameters

uuid required
path · string
Board identifier
name required
body · string
Task name. Supports #red #orange #prio1 #prio2 hashtags.

Example

curl -X POST https://productive.quest/api/board/UUID/todo/ \
  -H "Content-Type: application/json" \
  -d '{"name": "Deploy to production #red #prio1"}'

Response 201

{
  "id": 42,
  "name": "Deploy to production #red #prio1",
  "is_future": false,
  "is_completed": false,
  "color": "red",
  "priority": 1,
  "created_at": "2025-01-15T10:30:00",
  "completed_at": null
}
POST /api/board/{uuid}/todo/{id}/complete/

Complete a todo

Marks a task as completed with the current timestamp.

Path parameters

uuid required
string
id required
integer

Example

curl -X POST https://productive.quest/api/board/UUID/todo/42/complete/

Response 200

{
  "id": 42,
  "name": "Deploy to production #red #prio1",
  "is_future": false,
  "is_completed": true,
  "color": "red",
  "priority": 1,
  "created_at": "2025-01-15T10:30:00",
  "completed_at": "2025-01-15T14:22:00"
}
POST /api/board/{uuid}/todo/{id}/uncomplete/

Uncomplete a todo

Moves a completed task back to the current list.

Path parameters

uuid required
string
id required
integer

Example

curl -X POST https://productive.quest/api/board/UUID/todo/42/uncomplete/
DELETE /api/board/{uuid}/todo/{id}/

Delete a todo

Permanently removes a task from the board. Returns the deleted todo's data.

Path parameters

uuid required
string
id required
integer

Example

curl -X DELETE https://productive.quest/api/board/UUID/todo/42/
PATCH /api/board/{uuid}/todo/{id}/

Edit a todo

Renames an existing task.

Parameters

uuid required
path · string
Board identifier
id required
path · integer
Todo ID
name required
body · string
New name for the task

Example

curl -X PATCH https://productive.quest/api/board/UUID/todo/42/ \
  -H "Content-Type: application/json" \
  -d '{"name": "Updated task name #orange"}'
POST /api/board/{uuid}/todo/{id}/move_to_future/

Move to future

Moves a task from the current list to the future list.

Path parameters

uuid required
string
id required
integer

Example

curl -X POST https://productive.quest/api/board/UUID/todo/42/move_to_future/
POST /api/board/{uuid}/todo/{id}/move_to_current/

Move to current

Moves a task from the future list back to the current list.

Path parameters

uuid required
string
id required
integer

Example

curl -X POST https://productive.quest/api/board/UUID/todo/42/move_to_current/