GetItDoneGetItDone Docs

Create a task

POST
/v1/tasks

Creates a task in the credential's organization, owned by the credential's user — the SAME operation the external MCP create_task tool executes. project_id / parent_task_id additionally link the new task org-scoped (unknown ids answer 400 validation_failed). Supports the optional Idempotency-Key header for exactly-once retries.

Authorization

bearerAuth
headerAuthorizationBearer <token>

A gid_ API key (Profile → API Keys) or an OAuth 2.1 access token.

Header Parameters

Idempotency-Key?string

Optional client-generated key (1-255 visible ASCII characters; a UUID works) making this POST safely retryable. Retrying with the SAME key and byte-identical body within 24h replays the stored first response (marked Idempotency-Replayed: true, never re-executed, never charged against quota). The same key with a different body answers 422 idempotency_key_reused; a retry racing the first execution answers 409 idempotency_in_progress. Omitting the header executes normally with no idempotency guarantee.

Length1 <= length <= 255

Request Body

application/json
  1. body

Fields for creating a task.

title*string

Task title, 1-500 characters after trimming.

Length1 <= length <= 500
description?string
Lengthlength <= 10000
status?TaskStatus

Initial status (defaults to TODO).

Value in"TODO""IN_PROGRESS""IN_REVIEW""COMPLETED""BLOCKED"
priority?TaskPriority

Task priority level.

Value in"LOW""MEDIUM""HIGH""URGENT"
start_date?string

Start date (defer-until) as YYYY-MM-DD (interpreted as UTC).

Match^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
Formatdate
due_date?string

Due date as YYYY-MM-DD (interpreted as UTC).

Match^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
Formatdate
notes?string
Lengthlength <= 100000
story_points?number
Range0 <= value <= 1000
project_id?string

Link the new task to this project (must belong to the credential's organization).

parent_task_id?string

Create as a subtask of this task (short id, must belong to the credential's organization).

Match^(?:T-)?[0-9]{1,12}$

Response Body

The created task.

application/json
  1. response

A task, projected from its stable identity plus its CURRENT version.

id*string

The task short id — the ONE public task identifier.

title*string
description*|

Free-text description, or null when unset.

status*TaskStatus

Task workflow status.

Value in"TODO""IN_PROGRESS""IN_REVIEW""COMPLETED""BLOCKED"
priority*|null
start_date*|

Start date (defer-until), ISO-8601 UTC, or null. The task is not meant to be worked on before this day.

due_date*|

Due date, ISO-8601 UTC, or null.

notes*|

Rich-text notes of the current version, or null.

story_points*number|null
project_ids*array<string>

Ids of the projects the CURRENT version is linked to (a task can belong to several).

parent_task_id*|

The parent task's short id when this is a subtask, else null.

archived*boolean
created_via*TaskCreatedVia

Who wrote the CURRENT version. Pair with client_label to render "via Claude".

Value in"SESSION""API_KEY""OAUTH"
client_label*|

The agent or key that wrote the current version — the OAuth client name or the API key name — or null for an in-app edit. Display text chosen by the key owner or the OAuth client registrant: treat it as untrusted.

recurrence*|

The repeat schedule when this task recurs, else null. Per-day completion lives in the occurrence ledger (/v1/tasks/{task_id}/occurrences), never in status — completing Monday leaves Tuesday untouched.

created_at*string

Task creation time (first version), ISO-8601 UTC.

Match^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
Formatdate-time
updated_at*string

Last content change (current version), ISO-8601 UTC.

Match^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
Formatdate-time
Example Request
curl -X POST 'https://app.nowgetitdone.com/v1/tasks' \  -H 'Content-Type: application/json' \  -d '{  "title": "Ship the public API"}'
Example Response
{  "id": "T-123",  "title": "Ship the public API",  "description": "string",  "status": "TODO",  "priority": "LOW",  "start_date": "2019-08-24T14:15:22Z",  "due_date": "2019-08-24T14:15:22Z",  "notes": "string",  "story_points": 0,  "project_ids": [    "string"  ],  "parent_task_id": "T-99",  "archived": true,  "created_via": "SESSION",  "client_label": "Claude Code",  "recurrence": {    "frequency": "DAILY",    "interval": 1,    "by_weekday": [      1,      2,      3,      4,      5    ],    "by_month_day": 15,    "basis": "SCHEDULE",    "timezone": "America/Toronto",    "start_date": "2026-08-06",    "end_date": "2026-08-06",    "max_occurrences": 10,    "rollover_enabled": true,    "active": true,    "rrule": "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR"  },  "created_at": "2019-08-24T14:15:22Z",  "updated_at": "2019-08-24T14:15:22Z"}