All task endpoints require a valid authenticated session and email verification. Visibility is further governed by role: admins see all tasks; editors see tasks they created, are assigned to, or are mentioned in; viewers see only tasks they are directly assigned to. Mutations such as creating or deleting tasks additionally require theDocumentation 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.
admin or editor role.
Task CRUD
GET /tasks
Returns the paginated task list for the current user, filtered by thevisibleTo scope. Tasks are ordered by last_activity_at descending, 20 per page. Each task is loaded with its project, creator, and assignment records.
Role: any authenticated user
Response: HTML view (tasks.index).
GET /tasks/board
Renders the Kanban board with tasks grouped into five status columns:created, accepted, in_progress, in_review, and done. Within each column, tasks are ordered by sort_order then id. The board also flags whether each task is assigned to the currently authenticated user.
Role: any authenticated user
Response: HTML view (tasks.board).
GET /tasks/create
Displays the new-task form, pre-populated with the list of active projects, available priorities, and available statuses. Role: admin or editor (viewers receive403)
Response: HTML view (tasks.create).
POST /tasks
Creates a new task and optionally assigns users to it. On success, the user is redirected to the new task’s detail page. Role: admin or editorTask title. Minimum 3 characters, maximum 255 characters.
Full task description. Maximum 5000 characters. Supports
@mention syntax for notifying users.ID of an existing active project to associate with the task. Pass
null or omit to create an unassigned task.Task priority. One of:
critical, high, normal, low.Due date in any format accepted by PHP’s
date() function (e.g. 2026-08-15 or 2026-08-15T14:00:00). Pass null or omit for no due date.Array of user IDs to assign to the task. Each ID must exist in the
users table. Assignment notifications are sent to each assignee.302 redirect to GET /tasks/{id} with status flash "Task created successfully.". Returns 403 for viewers; returns validation errors on invalid input.
GET /tasks/
Displays the full detail view for a single task, including project, creator, assignments, comments, attachments, time entries, tags, dependencies, and subtasks. Role: any authenticated user who canview the task (policy-controlled). Returns 403 if the task is outside the user’s visibility scope.
Response: HTML view (tasks.show).
GET /tasks//edit
Displays the edit form for a task. Role: admin, or editor who is the task creator. Returns403 for viewers and for editors who did not create the task.
Response: HTML view (tasks.edit).
PATCH /tasks/
Updates an existing task. Fields are optional — only the fields you send are changed. Role: admin, or editor who created the task (enforced byUpdateTaskRequest::authorize()).
Updated title. Minimum 3 characters, maximum 255 characters.
Updated description. Maximum 5000 characters.
Updated priority. One of:
critical, high, normal, low.Updated due date. Pass an empty string or
null to clear it.Updated project association. Pass
null to unlink from any project.302 redirect to GET /tasks/{id} with status flash "Task updated successfully.".
DELETE /tasks/
Permanently deletes a task and fires theDeleteTaskAction, which handles cascading cleanup and audit logging.
Role: admin, or editor who created the task.
Response: 302 redirect to GET /tasks with status flash "Task deleted successfully.". Returns 403 on policy denial.
Status and Kanban
PATCH /tasks//change-status
Changes the status of a task from the Kanban board and updates thesort_order of tasks in both the source and destination columns. This is a JSON endpoint used by the drag-and-drop board UI.
Role: any authenticated user (policy enforcement is handled inside ChangeTaskStatusAction).
The target status. Must be one of:
created, accepted, in_progress, in_review, done.Array of task IDs representing the new order of the source column after the task is removed, ordered from top to bottom.
Array of task IDs representing the new order of the destination column after the task is inserted, ordered from top to bottom.
200 on success, 403 on authorization failure, 400 on any other exception.
PATCH /tasks//move
Moves a task within or across Kanban columns, supporting drag-and-drop reordering within the same status. Ifto_status differs from the task’s current status, the ChangeTaskStatusAction is also invoked.
Role: any authenticated user (authorization enforced by MoveTaskRequest::authorize()).
Target status column. One of:
created, accepted, in_progress, in_review, done.Updated order of the source column. Optional — drag events can be racy.
Updated order of the destination column after the task is placed.
{"ok": true} on success. {"message": "..."} with HTTP 403 or 422 on failure.
Assignments
POST /tasks/assignments//accept
Accepts a pending task assignment. If the task’s current status iscreated, it is automatically transitioned to accepted via ChangeTaskStatusAction.
Role: the user who owns the assignment (returns 403 if assignment.user_id !== auth()->id()).
Response: 302 redirect to GET /tasks/{task} with success flash "Assignment accepted.".
POST /tasks/assignments//reject
Rejects and removes a pending task assignment, updatinglast_activity_at on the parent task.
Role: the user who owns the assignment.
Response: 302 redirect to GET /tasks/{task} with success flash "Assignment rejected.".
DELETE /tasks/assignments/
Removes a user from a task’s assignment list. This is distinct from the assignee rejecting — it is performed by the task creator or an admin. Role: admin, or the user who created the parent task. Response:302 redirect to GET /tasks/{task} with success flash "User unassigned from task.". Returns 403 if the actor is neither admin nor task creator.
Comments
POST /tasks//comments
Adds a comment to a task. The comment body may include@username mentions, which trigger notifications to the mentioned users via CommentTaskAction.
Role: any authenticated user
Comment text. Maximum 5000 characters. Supports
@mention syntax.302 redirect to GET /tasks/{task} with success flash "Comment added." or error flash on failure.
DELETE /tasks//comments/
Deletes a single comment from a task. Role: the comment author, or any admin. Response:302 redirect to GET /tasks/{task} with success flash "Comment deleted.". Returns 403 if the actor is neither the author nor an admin.
Attachments
POST /tasks//attachments
Uploads a file and attaches it to a task. The file is stored viaUploadTaskAttachmentAction, which creates both a TaskAttachment record and an initial TaskAttachmentVersion.
Role: any authenticated userContent-Type:
multipart/form-data
The file to upload. Maximum size: 100 MB. Any file type is accepted.
Optional human-readable label for the attachment. Maximum 255 characters.
302 redirect to GET /tasks/{task} with success flash "File uploaded successfully." or error flash on failure.
GET /tasks//attachments//download
Downloads the latest version of an attachment as a binary file response. Role: any user who canview the parent task (policy-checked). Returns 403 otherwise.
Response: Binary file download using the attachment’s original filename. The file is served from Laravel’s public storage disk.
DELETE /tasks//attachments/
Deletes an attachment and all of its stored file versions from disk. Role: the user who uploaded the attachment, or any admin. Response:302 redirect to GET /tasks/{task} with success flash "Attachment deleted.". Returns 403 if the actor is neither the uploader nor an admin.