3 API Reference
API Conventions
| Item | Convention |
|---|---|
| Base URL | http://device-IP:port (default 6556) |
| Data format | JSON for both requests and responses |
| Auth | Header Authorization: Bearer <token> for everything except login and register |
| Success | {"success": true, "data": ...} or {"success": true, "message": ...} |
| Failure | {"success": false, "message": "..."} |
| Status codes | 400 bad request; 401 not logged in or token expired; 403 forbidden; 404 not found; 409 account exists |
- All endpoints start with
/api; other paths return the web app itself; CORS is allowed so browsers can call directly. - Getting a token:
curl -s -X POST http://device-IP:6556/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"******"}'
# data.token in the response is the token, valid 7 days by defaultAccounts and Permissions API
| Method | Path | Description |
|---|---|---|
| POST | /api/auth/register | Register an account (open); a default board is created automatically |
| POST | /api/auth/login | Log in; returns the token, user info and current board |
| GET | /api/auth/me | Current user info and preferences |
| PUT | /api/auth/profile | Update display name and preferences |
| GET | /api/admin/check | Whether an administrator exists |
| POST | /api/admin/setup | First-time administrator setup (only when none exists) |
| GET | /api/admin/users | Member list (administrator) |
| POST | /api/admin/users | Create a member (administrator) |
| DELETE | /api/admin/users/:id | Delete a member (administrator; cannot delete self) |
| PUT | /api/admin/users/:id/reset-password | Reset a member's password (administrator) |
Register / login request body:
{ "username": "alice", "password": "secret6+" }Passwords need at least 6 characters; a duplicate username returns 409; a successful login returns token, user and board.
Boards, Columns and Cards API
All endpoints require a login token; id values are string identifiers returned by the API.
Boards
| Method | Path | Description |
|---|---|---|
| GET | /api/boards | Boards visible to the current user |
| GET | /api/boards/:id | Full structure of one board (columns, cards, tags) |
| POST | /api/boards | Create a board with {title, description} |
| PUT | /api/boards/:id | Update a board; the sharing switch is owner-only |
| DELETE | /api/boards/:id | Delete a board (owner) |
| GET | /api/boards/:id/export | Export the board as JSON |
Columns
| Method | Path | Description |
|---|---|---|
| POST | /api/boards/:id/columns | Add a column with {title, color} |
| PUT | /api/boards/:id/columns/:columnId | Update a column with {title, color, order, hideOlderCards} |
| DELETE | /api/boards/:id/columns/:columnId | Delete a column |
Cards
| Method | Path | Description |
|---|---|---|
| POST | /api/boards/:id/columns/:columnId/cards | Add a card |
| PUT | /api/boards/:id/cards/:cardId | Update a card (unset fields keep their values) |
| DELETE | /api/boards/:id/cards/:cardId | Delete a card |
| PUT | /api/boards/:id/cards/:cardId/move | Move a card with {toColumnId, toIndex} |
Card request body example:
{
"title": "Collection task A",
"description": "Fetch and aggregate daily",
"priority": "high",
"tags": ["Bug"],
"dueDate": "2026-10-30",
"createdDate": "2026-10-25",
"notifyTime": "2026-10-26T09:00"
}priority takes urgent / high / medium / low; notifyTime uses the format YYYY-MM-DDTHH:mm.
Email Reminder API
| Method | Path | Description |
|---|---|---|
| GET | /api/notifications/recipients | List recipients |
| POST | /api/notifications/recipients | Add a recipient {name, email, enabled} |
| PUT | /api/notifications/recipients/:id | Update a recipient |
| DELETE | /api/notifications/recipients/:id | Delete a recipient |
| GET | /api/notifications/smtp | View the mail configuration (password never echoed) |
| PUT | /api/notifications/smtp | Save the mail configuration; a blank password keeps the original |
| POST | /api/notifications/test-email | Send a test email |