---
title: "Get a task with subtasks, dependencies, comments, attachments, activity and watchers"
method: GET
path: "/tasks/{id}"
tags: ["Tasks"]
---

# Get a task with subtasks, dependencies, comments, attachments, activity and watchers

`GET /tasks/{id}`

## Request

- Base URL: `https://tasg.app/api/v1`
- URL: `https://tasg.app/api/v1/tasks/{id}`
- Auth: HTTP bearer

## Path parameters

- `id` string, uuid, required

## Response `200`

The task.

- object
  - `task` TaskDetail, required
    - `id` string, uuid, required
    - `title` string, required
    - `description` string, nullable
    - `parent_task_id` string, uuid, nullable
    - `parent_task` object, nullable
      - `id` string, uuid, required
      - `title` string, required
    - `created_via` string: Which surface created the task: `app`, `mcp`, `assistant`, `api` …
    - `ai_touched_at` string, date-time, nullable: Last time an AI agent created or edited this task.
    - `nesting_level` integer: 0 = top-level; subtasks may nest 5 deep.
    - `position` number: Sort key within the section (ascending).
    - `primary_project_id` string, uuid, required
    - `section_id` string, uuid, nullable
    - `assignee_id` string, uuid, nullable
    - `assignee` object, nullable
      - `id` string, uuid, required
      - `full_name` string, required
      - `avatar_url` string, uri, nullable
    - `created_by` string, uuid
    - `creator` object, nullable
      - `id` string, uuid, required
      - `full_name` string, required
      - `avatar_url` string, uri, nullable
    - `start_date` string, date, nullable: Calendar date, YYYY-MM-DD
    - `due_date` string, date, nullable: Calendar date, YYYY-MM-DD
    - `due_date_type` 'fixed' | 'relative': `relative` tasks derive their due date from another task plus an offset.
    - `relative_offset_days` integer, nullable
    - `relative_offset_from_task_id` string, uuid, nullable
    - `recurrence` 'daily' | 'weekly' | 'fortnightly' | 'monthly', nullable
    - `next_occurrence_id` string, uuid, nullable: Set once this completion has spawned the next occurrence of a recurring task.
    - `completed_at` string, date-time, nullable
    - `category` string, nullable
    - `priority` 'none' | 'low' | 'medium' | 'high' | 'urgent', required
    - `status` 'not_started' | 'in_progress' | 'blocked' | 'completed', required: Lifecycle state. `blocked` is set automatically while a dependency is incomplete.
    - `subtask_count` integer
    - `comment_count` integer
    - `attachment_count` integer
    - `blocked_by_count` integer: Dependencies this task waits on.
    - `blocking_count` integer: Tasks waiting on this one.
    - `tags` Tag[]
      - `id` string, uuid, required
      - `name` string, required
      - `color` string, required: Hex colour, e.g. `#3b82f6`.
    - `watchers` object[], required
      - `user_id` string, uuid, required
      - `full_name` string, required
      - `avatar_url` string, uri, nullable
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `subtasks` Subtask[], required
      - `id` string, uuid, required
      - `title` string, required
      - `status` 'not_started' | 'in_progress' | 'blocked' | 'completed', required: Lifecycle state. `blocked` is set automatically while a dependency is incomplete.
      - `priority` 'none' | 'low' | 'medium' | 'high' | 'urgent', required
      - `due_date` string, date, nullable: Calendar date, YYYY-MM-DD
      - `assignee_id` string, uuid, nullable
      - `assignee` object, nullable
        - `id` string, uuid, required
        - `full_name` string, required
        - `avatar_url` string, uri, nullable
      - `subtask_count` integer
      - `position` number
      - `section_id` string, uuid, nullable
      - `primary_project_id` string, uuid
      - `parent_task_id` string, uuid, nullable
      - `nesting_level` integer
      - `created_at` string, date-time
      - `updated_at` string, date-time
    - `dependencies` object, required
      - `blocking` DependencyEdge[], required: Tasks that depend on this one.
        - `dep_id` string, uuid, required: The dependency row id; pass to DELETE …/dependencies/{dependencyId}.
        - `id` string, uuid, required: The other task's id.
        - `title` string, required
        - `status` 'not_started' | 'in_progress' | 'blocked' | 'completed', required: Lifecycle state. `blocked` is set automatically while a dependency is incomplete.
      - `blocked_by` DependencyEdge[], required: Tasks this one depends on.
        - `dep_id` string, uuid, required: The dependency row id; pass to DELETE …/dependencies/{dependencyId}.
        - `id` string, uuid, required: The other task's id.
        - `title` string, required
        - `status` 'not_started' | 'in_progress' | 'blocked' | 'completed', required: Lifecycle state. `blocked` is set automatically while a dependency is incomplete.
    - `comments` Comment[], required
      - `id` string, uuid, required
      - `task_id` string, uuid, required
      - `author_id` string, uuid, required
      - `author` object, nullable
        - `id` string, uuid, required
        - `full_name` string, required
        - `avatar_url` string, uri, nullable
      - `content` string, required
      - `mentions` string[], required: User ids mentioned. Non-members are silently dropped on create.
      - `edited` boolean, required
      - `attachments` Attachment[]: Only present on GET /tasks/{id}.
        - `id` string, uuid, required
        - `task_id` string, uuid, required
        - `comment_id` string, uuid, nullable
        - `filename` string, required
        - `file_size` integer, required: Bytes.
        - `mime_type` string, required
        - `url` string, required: Relative download path (`/uploads/…`); requires the same Authorization header.
        - `uploaded_by` string, uuid, required
        - `created_at` string, date-time, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `attachments` Attachment[], required: Task-level files only (comment attachments appear under each comment).
      - `id` string, uuid, required
      - `task_id` string, uuid, required
      - `comment_id` string, uuid, nullable
      - `filename` string, required
      - `file_size` integer, required: Bytes.
      - `mime_type` string, required
      - `url` string, required: Relative download path (`/uploads/…`); requires the same Authorization header.
      - `uploaded_by` string, uuid, required
      - `created_at` string, date-time, required
    - `activity` Activity[], required
      - `id` string, uuid, required
      - `action` string, required: `created`, `updated`, `completed`, `reopened`, `commented`, `dependency_added`, `dependency_removed`, `date_shift_applied` …
      - `via` string, nullable: Set when an AI agent performed the action.
      - `actor` object, nullable
        - `id` string, uuid, required
        - `full_name` string, required
        - `avatar_url` string, uri, nullable
      - `old_value` unknown
      - `new_value` unknown
      - `created_at` string, date-time, required

## Other responses

- `401`: Missing, invalid, expired or revoked credentials.
- `403`: Authenticated, but not allowed: not a member, insufficient project role or the API token lacks the required scope.
- `404`: Not found, or not visible to the caller (tenancy is enforced: foreign resources look identical to missing ones).
- `429`: Rate limited. Back off and retry after the window in the `RateLimit-*` headers.

---

[API](https://skmtc.dev/tasg/apis/tasg-api.md) · [All operations](https://skmtc.dev/tasg/apis/tasg-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tasg/apis/tasg-api/revisions/cd2a1dbaf5cf?raw)
