Skip to main content

Overview

Full-featured task management built on prior art from Todoist, Things, Linear, and CalDAV VTODO. Tasks live in projects, support unlimited subtask nesting, dependencies between tasks, recurrence via iCalendar RRULE, and full-text search. Projects provide structure: custom status workflows, sections for grouping, milestones for tracking progress, and team members with roles.

Data Model

Entities

EntityDescription
ProjectA container for tasks with custom status workflows
Project StatusA custom status within a project (e.g., “Backlog”, “In Progress”, “Done”)
Project SectionA grouping within a project for organizing tasks
Project MilestoneA target date within a project
Project MemberA user/contact assigned to a project with a role
TaskA unit of work with title, description, priority, due date
Task DependencyA relationship between tasks (blocks, blocked_by, related, duplicate)
Task LinkA URL attached to a task (external resource, document, etc.)
Task CommentA comment or progress note on a task
Task LabelA label for categorizing tasks

Relationships

  • A Project has many Tasks, Statuses, Sections, Milestones, and Members
  • A Task optionally belongs to a Project, Section, and has a Status
  • A Task can have a parent_id for subtask nesting (unlimited depth)
  • Dependencies link two tasks with a relationship type

Key Concepts

Task identifiers

Each task in a project gets a human-readable identifier: the project’s prefix + an auto-incrementing number (e.g., API-42, DOCS-7). Use GET /api/v1/tasks/by-identifier/{identifier} to look up tasks by this identifier.

Priority levels

Tasks have an integer priority field. Higher values = higher priority. Typical convention:
PriorityMeaning
4Urgent
3High
2Medium
1Low
0None

Subtasks

Any task can be a subtask of another task via the parent_id field. Subtask nesting is unlimited. Use GET /api/v1/tasks/{id}/subtasks to list a task’s direct children.

Dependencies

Four dependency types:
TypeMeaning
blocksThis task must complete before the target task can start
blocked_byThis task cannot start until the target task completes
relatedTasks are related but not blocking
duplicateTasks are duplicates

Recurrence

Tasks support iCalendar RRULE strings for recurrence:
FREQ=WEEKLY;BYDAY=MO,WE,FR
FREQ=MONTHLY;BYMONTHDAY=1
FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=15
Completing a recurring task automatically creates the next occurrence based on the RRULE. The next_occurrence field is computed and indexed for efficient querying.

Custom status workflows

Each project defines its own status workflow. Statuses have a name, color, position (display order), and is_closed flag (indicates the task is done when in this status).

Sections and milestones

Sections group tasks within a project (like columns or categories). Milestones are target dates for tracking project progress.

Complete and cancel

Use POST /api/v1/tasks/{id}/complete to mark a task done (handles recurrence automatically). Use POST /api/v1/tasks/{id}/cancel to cancel a task without completing it.

MCP Tools

ToolDescription
tasks_listList tasks with filters (status, project, priority, due date)
tasks_getGet full task details with comments, dependencies, and links
tasks_createCreate a task or subtask
tasks_updateUpdate task properties
tasks_completeMark a task done (handles recurrence)
tasks_deleteRemove a task
tasks_add_dependencyLink two tasks with a dependency
tasks_add_commentAdd a comment to a task
tasks_searchFree-text search across all tasks
tasks_list_overdueGet all overdue tasks
See the MCP guide for setup instructions.

API Endpoints

See the API Reference for the full endpoint list with request/response details.

Examples

Create a project with a task

# Create a project
curl -X POST https://api.backside.app/api/v1/projects \
  -H "Authorization: Bearer bsk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "API Launch",
    "prefix": "API",
    "description": "Launch the public API"
  }'

# Create a task in the project
curl -X POST https://api.backside.app/api/v1/tasks \
  -H "Authorization: Bearer bsk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Write API documentation",
    "project_id": "uuid-of-project",
    "priority": 3,
    "due_date": "2026-04-15"
  }'

List overdue tasks

curl https://api.backside.app/api/v1/tasks/overdue \
  -H "Authorization: Bearer bsk_live_..."

Complete a recurring task

# Completing a recurring task creates the next occurrence automatically
curl -X POST https://api.backside.app/api/v1/tasks/{id}/complete \
  -H "Authorization: Bearer bsk_live_..."