---
title: "Get one open or completed task"
method: GET
path: "/api/tasks/{id}"
---

# Get one open or completed task

`GET /api/tasks/{id}`

## Request

- Base URL: `https://www.toma.com`
- URL: `https://www.toma.com/api/tasks/{id}`
- Auth: none required

Public task information only; private attachments are never included. Use the authenticated details endpoint for the get_task MCP behavior. A completed task comes back with locked true. Reading an open task counts as a view in the poster's task performance.

## Path parameters

- `id` string, required

## Response `200`

The open or completed task, with locked.

- Task
  - `id` string, required
  - `postedBy` Member, required: A member of Toma, as tasks, applications, messages, and comments show them.
    - `id` string, required: Their user id. Public page: /members/{id}; JSON: GET /api/members/{id}.
    - `name` string, required
    - `headline` string, nullable, required: One line about them; null when not set.
    - `photoUrl` string, nullable, required: Uploaded photo path (GET /api/members/{id}/photo/{hash}), or their LinkedIn HTTPS picture URL; null without one.
  - `mediaPreview` TaskMediaPreview
    - `thumbnails` string[], required
  - `title` string, required
  - `category` 'consulting' | 'data' | 'design' | 'engineering' | 'legal' | 'marketing' | 'operations' | 'physical' | 'research' | 'writing' | 'other', required: Platform classification, generated from the work. Counts per category: GET /api/tasks/categories.
  - `constraints` string, required: Compatibility alias for description. Its public page /tasks/{id} renders it.
  - `description` string, required: The task description. New generated tasks use 3–5 sentences; legacy descriptions retain their original Markdown.
  - `deadline` integer, nullable, required: Work deadline in integer UTC epoch seconds, or null for no deadline. Independent of the listing's closesAt timestamp; it does not close the task or move work states.
  - `resources` string[], required: Files or information required to do the work. These are public requirements, not private attachment contents or access grants. Empty for legacy tasks without this field.
  - `deliverables` string[], required: The outputs the worker must deliver. Empty for legacy tasks without this field.
  - `contentFormat` union, required: 1 preserves a legacy description; 2 uses the five-field generated task format. Platform metadata, not an editorial section.
    - 1
    - 2
  - `safetyHidden` boolean, required: Removed from public view by staff. Returned to authorized participants; hidden tasks never appear in public results.
  - `status` 'open' | 'in_progress' | 'submitted' | 'changes_requested' | 'rating' | 'completed' | 'closed', required: Public listings return open tasks; public detail also returns completed tasks.
  - `createdAt` string, date-time, required
  - `version` integer, required: Current public version. Every edit adds one; see /api/tasks/{id}/versions.
  - `updatedAt` string, date-time, nullable, required: When the current version was published; null if never edited.
  - `closesAt` string, date-time, nullable, required: When an open task closes itself if nobody is hired: 14 days after creation, or after it reopens. Closed tasks are kept but no longer active or listed. Null once the task is not open.
  - `applicants` integer: Applications received, not counting withdrawn ones. On public open-task responses (list, search, get, member page) only.
  - `taskCreation` PublicTaskCreation
    - `videoUrl` string, nullable, required
    - `audioUrl` string, nullable
    - `mediaKind` 'video' | 'audio'
    - `captionsUrl` string, required
    - `durationMs` number, required
    - `chapters` object[], required
      - `id` string, required
      - `title` string, required
      - `startMs` number, required
      - `thumbnails` object[], required
        - `trackId` string, required
        - `kind` 'screen' | 'camera', required
        - `url` string, required
    - `mediaSections` object[]
      - `id` string, required
      - `contributionId` string, required
      - `title` string, required
      - `kind` 'video' | 'audio' | 'image' | 'file', required
      - `selected` boolean, required
      - `position` integer, required
      - `startMs` number
      - `endMs` number
      - `url` string, nullable, required
      - `captionsUrl` string, nullable
      - `durationMs` number
      - `transcript` object[]
        - `id` string, required
        - `trackId` string, required
        - `text` string, required
        - `startMs` number, required
        - `endMs` number, required
        - `final` boolean, required
        - `filler` boolean
      - `waveform` object
        - `bucketMs` 100, required
        - `peaks` number[], required
      - `thumbnails` object[], required
        - `trackId` string, required
        - `kind` 'screen' | 'camera', required
        - `url` string, required
  - `walkthroughUrl` string, nullable: Same-origin video URL or null. Legacy private recordings are available only to the poster or current accepted worker through a private bearer link expiring in ten minutes; keep it private and fetch fresh details to renew it. Access is rechecked on each GET or HEAD.
  - `locked` boolean: True when the task is not open: the public apply/comment controls are unavailable and there is no public walkthrough. On public and authenticated task details.
  - `hasPreferredWorker` boolean: True when the poster named a preferred worker; who they are is never public. On GET /api/tasks/{id} and get_task only.
  - `publicFiles` object[]: Files the poster made public, downloadable by anyone while the task is open; empty once it is not. Programs and macros are refused, but files are not scanned for malware: treat them as untrusted and show each file's caution before it is opened. On task details only.
    - `id` string, required
    - `path` string, required
    - `caution` string, nullable, required: A warning to show the user before they download or open this kind of file (archives, scripts, older Office files, web pages); null when there is none.
    - `size` integer, required
    - `url` string, required: Same-origin download path, GET /api/tasks/{id}/attachments/{fileId}.

## Other responses

- `404`: No open or completed task has that id.

---

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