Create a task
POST
/v1/tasksCreates 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.
Required scopes
tasks:write
Availability
All plans
Quota cost
1 API call
Idempotency
Optional Idempotency-Key
Request
Request body
| Field | Type | Description |
|---|---|---|
titlerequired | string | Task title, 1-500 characters after trimming.e.g. Ship the public API |
description | string | |
status | "TODO" | "IN_PROGRESS" | "IN_REVIEW" | "COMPLETED" | "BLOCKED" | Task workflow status. |
priority | "LOW" | "MEDIUM" | "HIGH" | "URGENT" | Task priority level. |
due_date | string (date) | Due date as YYYY-MM-DD (interpreted as UTC). |
notes | string | |
story_points | number | |
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).e.g. T-123 |
▸ ▾ Raw request schema
{
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "Task title, 1-500 characters after trimming.",
"example": "Ship the public API"
},
"description": {
"type": "string",
"maxLength": 10000
},
"status": {
"description": "Initial status (defaults to TODO).",
"$ref": "#/components/schemas/TaskStatus"
},
"priority": {
"$ref": "#/components/schemas/TaskPriority"
},
"due_date": {
"description": "Due date as YYYY-MM-DD (interpreted as UTC).",
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\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])))$"
},
"notes": {
"type": "string",
"maxLength": 100000
},
"story_points": {
"type": "number",
"minimum": 0,
"maximum": 1000
},
"project_id": {
"description": "Link the new task to this project (must belong to the credential's organization).",
"type": "string"
},
"parent_task_id": {
"description": "Create as a subtask of this task (short id, must belong to the credential's organization).",
"type": "string",
"pattern": "^(?:T-)?[0-9]{1,12}$",
"example": "T-123"
}
},
"required": [
"title"
],
"description": "Fields for creating a task."
}Response 201
The created task.
Fields
| Field | Type | Description |
|---|---|---|
idrequired | string | The task short id — the ONE public task identifier.e.g. T-123 |
titlerequired | string | e.g. Ship the public API |
descriptionrequired | string | null | Free-text description, or null when unset. |
statusrequired | "TODO" | "IN_PROGRESS" | "IN_REVIEW" | "COMPLETED" | "BLOCKED" | Task workflow status. |
priorityrequired | "LOW" | "MEDIUM" | "HIGH" | "URGENT" | null | |
due_daterequired | string (date-time) | null | Due date, ISO-8601 UTC, or null. |
notesrequired | string | null | Rich-text notes of the current version, or null. |
story_pointsrequired | number | null | |
project_idsrequired | string[] | Ids of the projects the CURRENT version is linked to (a task can belong to several). |
parent_task_idrequired | string | null | The parent task's short id when this is a subtask, else null.e.g. T-99 |
archivedrequired | boolean | |
created_atrequired | string (date-time) | Task creation time (first version), ISO-8601 UTC. |
updated_atrequired | string (date-time) | Last content change (current version), ISO-8601 UTC. |
▸ ▾ Raw response schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The task short id — the ONE public task identifier.",
"example": "T-123"
},
"title": {
"type": "string",
"example": "Ship the public API"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Free-text description, or null when unset."
},
"status": {
"$ref": "#/components/schemas/TaskStatus"
},
"priority": {
"anyOf": [
{
"$ref": "#/components/schemas/TaskPriority"
},
{
"type": "null"
}
]
},
"due_date": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\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))$"
},
{
"type": "null"
}
],
"description": "Due date, ISO-8601 UTC, or null."
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Rich-text notes of the current version, or null."
},
"story_points": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"project_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Ids of the projects the CURRENT version is linked to (a task can belong to several)."
},
"parent_task_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The parent task's short id when this is a subtask, else null.",
"example": "T-99"
},
"archived": {
"type": "boolean"
},
"created_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\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))$",
"description": "Task creation time (first version), ISO-8601 UTC."
},
"updated_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\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))$",
"description": "Last content change (current version), ISO-8601 UTC."
}
},
"required": [
"id",
"title",
"description",
"status",
"priority",
"due_date",
"notes",
"story_points",
"project_ids",
"parent_task_id",
"archived",
"created_at",
"updated_at"
],
"additionalProperties": false,
"description": "A task, projected from its stable identity plus its CURRENT version."
}Example request
curl
curl -X POST https://app.nowgetitdone.com/v1/tasks \
-H "Authorization: Bearer gid_YOUR_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"title": "Ship the public API",
"parent_task_id": "T-123"
}'Possible errors
- 400
validation_failedRequest validation failed - 401
missing_credentialsMissing credentials - 401
invalid_api_keyInvalid API key - 401
invalid_tokenInvalid access token - 403
insufficient_scopeInsufficient scope - 403
feature_not_enabledFeature not enabled on this plan - 409
idempotency_in_progressA request with this Idempotency-Key is still in progress - 422
idempotency_key_reusedIdempotency-Key reused with a different request - 429
rate_limitedRate limit exceeded - 429
quota_exhaustedPlan quota exhausted - 500
internal_errorInternal server error