TaskLeef API Documentation

REST API for managing todos, projects, and kanban boards

Last updated:

Authentication

The API supports two authentication methods:

1. API Key Authentication (Recommended)

Generate an API key from your Settings page and include it in the X-API-Key header:

curl -H "X-API-Key: your-api-key" \
  https://taskleef.com/api/todos

2. JWT Bearer Token

For browser-based applications, authenticate via the login endpoint:

curl -X POST https://taskleef.com/api/login \
  -H "Content-Type: application/json" \
  -d '{"username": "your-username", "password": "your-password"}'

Then include the token in subsequent requests:

curl -H "Authorization: Bearer your-jwt-token" \
  https://taskleef.com/api/todos

Todos

GET/api/todos

Get all todos for the authenticated user.

curl -H "X-API-Key: your-api-key" \
  https://taskleef.com/api/todos
GET/api/todos/{id}

Get a specific todo by ID.

GET/api/inbox

Get todos that are not assigned to any project.

POST/api/todos

Create a new todo.

curl -X POST -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"title": "Buy groceries", "description": "Milk, eggs, bread"}' \
  https://taskleef.com/api/todos

Request Body

FieldTypeRequiredDescription
titlestringYesTodo title
descriptionstringNoDetailed description
dueDateISO 8601NoDue date/time
prioritystringNoLow, Medium, High, or Urgent
projectIdUUIDNoAssign to a project
PUT/api/todos/{id}

Update an existing todo.

PATCH/api/todos/{id}/complete

Toggle todo completion status.

curl -X PATCH -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"isCompleted": true}' \
  https://taskleef.com/api/todos/{id}/complete
DELETE/api/todos/{id}

Delete a todo.

POST/api/todos/{parentId}/subtasks

Create a subtask under a parent todo.

curl -X POST -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"title": "Subtask title"}' \
  https://taskleef.com/api/todos/{parentId}/subtasks

Projects

GET/api/projects

List all projects for the authenticated user.

POST/api/projects

Create a new project.

curl -X POST -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"title": "Work Tasks", "description": "Tasks for work"}' \
  https://taskleef.com/api/projects
GET/api/projects/{id}

Get a specific project with its todos.

PUT/api/projects/{id}

Update a project.

DELETE/api/projects/{id}

Delete a project (todos are moved to inbox).

Kanban Boards

GET/api/boards

List all boards the user has access to.

POST/api/boards

Create a new board.

curl -X POST -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"title": "Sprint Board", "projectId": "project-uuid"}' \
  https://taskleef.com/api/boards
GET/api/boards/{id}

Get a specific board.

GET/api/boards/{boardId}/columns

Get all columns for a board.

GET/api/boards/{boardId}/todos

Get all todos that have cards on this board.

Columns

POST/api/boards/{boardId}/columns

Create a new column on a board.

curl -X POST -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"title": "In Progress", "wipLimit": 3}' \
  https://taskleef.com/api/boards/{boardId}/columns
PUT/api/columns/{id}

Update a column (title, WIP limit, done criteria).

GET/api/columns/{columnId}/cards

Get all cards in a column.

DELETE/api/columns/{id}

Delete a column.

Cards

Cards represent todos on a kanban board. A todo can have cards on multiple boards.

POST/api/columns/{columnId}/cards

Create a card for a todo in a column.

curl -X POST -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"todoId": "todo-uuid"}' \
  https://taskleef.com/api/columns/{columnId}/cards
PUT/api/cards/{id}

Update a card (move to different column or subColumn).

# Move card to a different column
curl -X PUT -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"columnId": "new-column-uuid", "subColumn": "Inbox"}' \
  https://taskleef.com/api/cards/{id}

# Move card to Done subColumn
curl -X PUT -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"subColumn": "Done"}' \
  https://taskleef.com/api/cards/{id}

SubColumn Values

  • Inbox - Active items in the column
  • Done - Completed items within the column
  • Blocked - Items waiting on external dependencies
DELETE/api/cards/{id}

Remove a card from the board (does not delete the todo).

Tags

GET/api/tags

List all tags for the authenticated user.

POST/api/tags

Create a new tag.

curl -X POST -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"name": "urgent"}' \
  https://taskleef.com/api/tags
PUT/api/tags/{id}

Update a tag.

DELETE/api/tags/{id}

Delete a tag.

Comments

GET/api/todos/{todoId}/comments

Get all comments on a todo.

POST/api/todos/{todoId}/comments

Add a comment to a todo.

curl -X POST -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"text": "This is my comment"}' \
  https://taskleef.com/api/todos/{todoId}/comments
PUT/api/comments/{id}

Update a comment.

DELETE/api/comments/{id}

Delete a comment.

Response Format

Success Responses

Successful requests return JSON with the requested data:

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "title": "Buy groceries",
  "description": "Milk, eggs, bread",
  "isCompleted": false,
  "createdAt": "2024-01-15T10:30:00Z"
}

Error Responses

Errors return appropriate HTTP status codes:

  • 400 - Bad Request (invalid input)
  • 401 - Unauthorized (missing or invalid authentication)
  • 403 - Forbidden (insufficient permissions)
  • 404 - Not Found
  • 500 - Internal Server Error