---
title: "Get a task draft"
method: GET
path: "/api/me/task-drafts/{id}"
---

# Get a task draft

`GET /api/me/task-drafts/{id}`

## Request

- Base URL: `https://www.toma.com`
- URL: `https://www.toma.com/api/me/task-drafts/{id}`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `better-auth.session_token`

Same as the get_task_draft MCP tool.

## Path parameters

- `id` string, required

## Response `200`

The draft.

- TaskDraft: A read-only legacy draft: saved interview answers, task text, and historical approvals. Start a task for all new tasks. MCP results also carry previewUrl, the absolute form of previewPath.
  - `id` string, required
  - `status` 'open' | 'posted' | 'discarded', required
  - `taskId` string, nullable, required: The posted task; null until posted.
  - `previewPath` string, required: The poster's page for this draft on the website, where they can watch it and approve it.
  - `answers` object, required: The opening answers: context ("What context can you share?"), problem ("What problem are you facing, or what result do you want?"). problem is required.
  - `missing` string[], required: Required answers still missing.
  - `nextQuestion` object, nullable, required: What to ask next, in the agent's own words: an unanswered opening question, then each open follow-up. Null when nothing is left or while follow-ups are being written (see tasks.followUps).
    - `answerIds` string[], required: The answer id (or follow-up id) the answer is saved under.
    - `question` string, required
    - `hint` string, required: What the answer is for.
    - `options` string[], required: Likely answers to offer as choices; empty for an open question.
    - `number` integer, nullable, required: Position among the follow-ups ("Question 2 of 5"); null for the opening questions.
    - `total` integer, nullable, required: How many follow-ups there are; null for the opening questions.
    - `remaining` integer, required: Questions left, this one included; follow-ups count once they are written.
  - `research` object, nullable, required
    - `summary` string, required
    - `facts` string[], required
    - `sources` string[], required
  - `researchCorrection` string, nullable, required
  - `followUps` object[], required: Up to 5 numbered, optional questions written from the opening answers; empty until written.
    - `id` string, required
    - `number` integer, required
    - `question` string, required
    - `why` string, required
    - `options` string[], required
    - `answer` string, nullable, required
    - `skipped` boolean, required
  - `creation` object, nullable, required
    - `title` string, required
    - `category` 'consulting' | 'data' | 'design' | 'engineering' | 'legal' | 'marketing' | 'operations' | 'physical' | 'research' | 'writing' | 'other', required
    - `needed` string, required
    - `evaluation` string, required
    - `details` string, required
  - `creationStale` boolean, required: The answers changed since the task was written; write it again before approving.
  - `review` object, required
    - `parts` object[], required
      - `part` 'evaluation' | 'summary' | 'details' | 'visibility', required
      - `label` string, required
      - `text` string, required: What other members will see for this part.
      - `approved` boolean, required
    - `next` 'evaluation' | 'summary' | 'details' | 'visibility' | 'null', nullable, required: The next part to show and approve; null when all are approved or nothing is written.
    - `ready` boolean, required: Every part approved and the task current: it can be posted.
    - `privateNote` string, required: What never becomes public.
  - `recording` DraftRecording, required: A draft's recorded walkthrough. Summary, transcript, findings, and moments are private to the poster. Approved video is public while open; legacy private recordings remain private to the poster and current accepted worker.
    - `id` string
    - `status` 'uploading' | 'analyzing' | 'needs_review' | 'approved' | 'failed'
    - `seconds` number
    - `webcam` boolean
    - `analyzed` boolean: False when no model could check it; approval then needs acknowledging.
    - `summary` string, nullable
    - `transcript` string, nullable
    - `findings` object[]: Anything private on screen or in the audio. secret refuses approval.
      - `kind` 'secret' | 'personal' | 'customer' | 'financial' | 'internal' | 'other'
      - `atSeconds` number
      - `description` string
    - `moments` object[]
      - `id` string
      - `atSeconds` number
      - `quote` string
      - `suggestedRequirement` string
    - `acceptedMoments` string[]
    - `approved` boolean
    - `videoUrl` string: Where the poster can watch it (Range requests).
  - `files` object[], required: Personal files attached to the draft, copied to the task when it is posted. Public ones appear on the task page for anyone to download; private ones only for the person hired, once the poster allows it. Shown for approval with the visibility part.
    - `id` string, required
    - `path` string, nullable, required
    - `size` integer, nullable, required
    - `visibility` 'public' | 'private', required
    - `missing` boolean, required: The personal file was deleted; remove it or attach a new upload before making it public.
  - `costs` CreationCosts, required
    - `listingFeeCents` integer, required: Charged when the task is posted.
    - `summary` string, required: The listing fee and how a hire is charged (the accepted quote plus fees), in one paragraph to read to the human before making it public.
  - `readiness` object, required
    - `score` integer, required
    - `items` object[], required
      - `id` string
      - `label` string
      - `done` boolean
      - `why` string
  - `tasks` object, required: The assistant's background work on the draft; null for a task that never started.
    - `research` TaskState, required: Background work: pending while it runs (poll the resource that carries it every few seconds), then ready or failed. A task pending for 10 minutes reads as failed.
      - `status` 'pending' | 'ready' | 'failed', required
      - `step` string, nullable, required: The step running now, or the last one that ran.
      - `error` string, nullable, required: Why it failed, to show the person; null unless failed.
      - `startedAt` string, date-time, required
      - `finishedAt` string, date-time, nullable, required
    - `followUps` TaskState, required: Background work: pending while it runs (poll the resource that carries it every few seconds), then ready or failed. A task pending for 10 minutes reads as failed.
      - `status` 'pending' | 'ready' | 'failed', required
      - `step` string, nullable, required: The step running now, or the last one that ran.
      - `error` string, nullable, required: Why it failed, to show the person; null unless failed.
      - `startedAt` string, date-time, required
      - `finishedAt` string, date-time, nullable, required
    - `writing` TaskState, required: Background work: pending while it runs (poll the resource that carries it every few seconds), then ready or failed. A task pending for 10 minutes reads as failed.
      - `status` 'pending' | 'ready' | 'failed', required
      - `step` string, nullable, required: The step running now, or the last one that ran.
      - `error` string, nullable, required: Why it failed, to show the person; null unless failed.
      - `startedAt` string, date-time, required
      - `finishedAt` string, date-time, nullable, required
  - `exposures` Exposure[], required
    - `kind` 'secret' | 'personal' | 'internal', required
    - `label` string, required
    - `excerpt` string, required: The match with its middle masked.
    - `field` string, required
  - `answerExposures` Exposure[], required
    - `kind` 'secret' | 'personal' | 'internal', required
    - `label` string, required
    - `excerpt` string, required: The match with its middle masked.
    - `field` string, required
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required

## Other responses

- `401`: No valid session or API key.
- `403`: Unverified email.
- `404`: The caller has no draft with 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)
