Tasks are the core unit of work in Contacts DB. Each task belongs to an optional project, carries a priority, moves through a defined set of statuses, and can be assigned to one or more team members. Tasks also support threaded comments with @mentions, versioned file attachments, and dependency relationships — giving your team everything they need to track work from creation to completion.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/0m1n3m/contacts-db/llms.txt
Use this file to discover all available pages before exploring further.
Task statuses
Tasks follow a linear workflow defined by theTaskStatus enum. Each status represents a distinct stage:
| Status | Value | Description |
|---|---|---|
| Created | created | Newly created and awaiting acceptance by an assignee |
| Accepted | accepted | An assignee has accepted responsibility for the task |
| In Progress | in_progress | Active development or work is underway |
| In Review | in_review | Work is complete and under review |
| Done | done | Task is fully completed |
Task priorities
TheTaskPriority enum defines four priority levels. The default when no priority is specified is normal.
| Priority | Value |
|---|---|
| Critical | critical |
| High | high |
| Normal | normal |
| Low | low |
Creating a task
Only users with theadmin or editor role can create tasks. Viewers are blocked with a 403 response.
Open the creation form
Navigate to
GET /tasks/create. The form loads all active projects in alphabetical order so you can optionally link the task to a project.Fill in the task details
Required:
title— a short, descriptive name for the task
description— rich long-form textproject_id— integer ID of an active project;nullfor standalone taskspriority— one ofcritical,high,normal,low; defaults tonormaldue_at— ISO 8601 datetime for the deadlineassignee_ids[]— array of user IDs to assign at creation time
Submit the form
Submit with
POST /tasks. The CreateTaskAction will:- Calculate an initial
sort_orderfor the task’s Kanban column (the next multiple of 10 after the current highest sort order in that column) - Create the task record with
status = created - Assign all provided
assignee_idsand send them assignment notifications - Write a system comment (
"Task created.") to the task’s activity feed - Record a
task.createdentry in the audit log
GET /tasks/{id}.Task visibility
Not every user sees every task. ThescopeVisibleTo query scope on the Task model enforces per-role filtering:
| Role | Sees |
|---|---|
admin | All tasks in the system, with no restrictions |
editor | Tasks they created, tasks they are assigned to, and tasks where they were @mentioned in a comment |
viewer | Only tasks they are assigned to |
GET /tasks) and on the Kanban board.
Assignments
A task can be assigned to multiple users simultaneously. Assignment data is stored in thetask_assignments pivot table, which includes accepted_at, assigned_by, and standard timestamps.
Assigning users
Assigning users
Pass an
assignee_ids[] array when creating (POST /tasks) or editing (PATCH /tasks/{id}) a task. Each listed user receives an assignment notification. Any user currently assigned but not present in the new assignee_ids array will be removed from the task.Accepting an assignment
Accepting an assignment
An assignee can accept the task by sending:Accepting marks the
accepted_at timestamp on the assignment record and moves the task status to accepted. A system comment is added to the activity feed.Rejecting an assignment
Rejecting an assignment
An assignee can reject the task by sending:Rejection removes the assignment record and notifies the task creator.
Removing an assignment (admin only)
Removing an assignment (admin only)
An admin can forcibly remove any assignment:
Comments
The task detail page includes a threaded activity feed of comments and system events. User-authored comments support @mention syntax to notify teammates.@username in the comment body to trigger a mention notification for that user. Mentioned users gain editor-level visibility to the task (they will see it in their task list even if they are not the creator or an assignee).
File attachments
Any user can upload files to a task. Each attachment is stored with versioning support — uploading a new file to an existing attachment slot creates a new version rather than overwriting the previous one.Attachment versioning means every upload is preserved. When you retrieve an attachment, you receive the latest version by default, but the full version history is available via the
versions relationship on the TaskAttachment model. Deleting an attachment removes all its versions permanently.Editing and deleting tasks
| Action | Route | Permission |
|---|---|---|
| Open edit form | GET /tasks/{task}/edit | admin, or editor who created the task |
| Save changes | PATCH /tasks/{task} | admin, or editor who created the task |
| Delete task | DELETE /tasks/{task} | admin, or editor who created the task |
title, description, priority, due_at, project_id, and assignee_ids[]. When any field changes, the UpdateTaskAction stamps last_activity_at with the current time, appends a "Task updated." system comment, and writes a task.updated audit log entry capturing the before and after values.
Task dependencies
Tasks can depend on one another. Thetasks.dependencies relationship (HasMany TaskDependency via task_id) tracks what the current task depends on, while tasks.subtasks (HasMany TaskDependency via dependent_task_id) tracks tasks that depend on it.