Add a subtask to a task
Adds an existing task as a subtask to the specified parent task. Subtasks allow you to break down complex tasks into smaller, more manageable units with clear assignments and better tracking. Each subtask works like its own ticket with its own description, assignee, priority, and status. The parent task identifier can be either a UUID or a numeric shortNumber. The subtask must exist and be accessible to the user. Requires Tasks.editAnyTitleAndDescription permission.
POST
/tasks/{identifier}/subtasksAuthorization
AuthorizationOAuth2 access token · headerrequiredScopes:
api:writeor
AuthorizationBearer token (JWT) · headerrequiredPath parameters
identifierstringrequiredParent task UUID or numeric shortNumber
Query parameters
fieldsToReturnstringComma-separated list of top-level response fields to return. Overrides the endpoint compact default unless responseShape=full is used.
responseShapestringAdvanced override. Omit for the endpoint compact default. Use full only when you need the complete endpoint response, including nested fields that are not selectable with fieldsToReturn.
Allowed:
compactfullHeader parameters
LT-Response-ShapestringAdvanced override. Set to full only when you need the complete endpoint response, including nested fields that are not selectable with fieldsToReturn.
Allowed:
fullRequest body
requiredapplication/jsonsubtaskIdstringrequiredUUID of an existing task to add as a subtask to the parent task. The subtask must exist in the workspace and be accessible to the user. The subtask will be linked to the parent task specified in the URL path.
Responses
200Subtask added successfully
accountableobjectAccountable user details
accountableIdstringAccountable user ID
assignedToobjectAssigned user details
assignedToIdstringAssigned user ID
billedbooleanrequiredWhether task is billed
childSpentTimenumberrequiredChild tasks spent time in minutes
commentsany[][]requiredTask comments; each `body` is HTML and may contain the same embedded `appImage` / `appFile` / `appVideo` divs with `fileId` as the task description. Fetch binaries via authenticated `/api/public/workspace/files/{fileId}` with the same Public API Bearer token when needed.
componentItemIdobjectComponent item ID
createdAtstring<date-time>requiredTask creation timestamp
customFieldsobjectrequiredCustom fields values
deadlinestring<date-time>Task deadline
descriptionstringrequiredTask description in HTML. May include embedded assets as elements such as `<div data-type="appImage" fileId="…" filename="…">` (images), `appFile`, or `appVideo`—binary content is not embedded; use authenticated GET `{appOrigin}/api/public/workspace/files/{fileId}` with the same Public API Bearer token to retrieve it.
emailDetailsobjectEmail details
emailSendErrorstringEmail send error message
emailSendErrorCodestringEmail send error code
emailSendFailedAtstring<date-time>Email send failed timestamp
emailSendFailedToany[][]Email send failed recipients
enableSupportContingentbooleanrequiredEnable support contingent
estimatedTimenumberEstimated time in hours
guestAccessbooleanrequiredGuest access enabled for organization members
historyany[][]requiredTask history entries
iconobjectTask icon identifier in the format `:icon_name:` (e.g., `:rocket:`, `:bug:`, `:memo:`). Can be null if no custom icon is set.
iconIsGeneratingbooleanrequiredWhether icon is being generated by AI
idstringrequiredTask ID (UUID)
isChangeRequestbooleanrequiredWhether task is a change request
isParticipantbooleanrequiredWhether current user is a participant
notificationSettingsobjectrequiredNotification settings
parentTaskIdobjectParent task ID for subtasks
participantsCountnumberrequiredNumber of participants
participantsListany[][]requiredList of participant user IDs
priorityobjectrequiredTask priority (TaskPriority enum)
productsany[][]requiredTask products
projectobjectrequiredProject information
projectIdstringrequiredProject ID
quotationsany[][]requiredExpress quotations
shortNumbernumberrequiredTask short number (workspace-scoped)
skipFromBillingbooleanSkip from billing
spentTimenumberrequiredTotal spent time in minutes
statusIdstringrequiredTask status ID
subTasksIdsany[][]requiredChild task IDs
summarystringTask summary
summaryIsGeneratingbooleanrequiredWhether summary is being generated by AI
tagsany[][]requiredTask tags
titlestringrequiredTask title
titleIsGeneratingbooleanrequiredWhether title is being generated by AI
typeIdstringrequiredTask type ID
userIdstringrequiredCreator user ID
400Invalid identifier format or validation errors
401Unauthorized - Invalid or missing authentication token
403Access denied: No access to project or task not editable
404Task not found
Request
curl -X POST "https://leadtime.app/api/public/tasks/550e8400-e29b-41d4-a716-446655440000%20or%20123/subtasks" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"subtaskId": "550e8400-e29b-41d4-a716-446655440000"
}'const response = await fetch("https://leadtime.app/api/public/tasks/550e8400-e29b-41d4-a716-446655440000%20or%20123/subtasks", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
},
body: JSON.stringify({
"subtaskId": "550e8400-e29b-41d4-a716-446655440000"
})
});import requests
response = requests.post(
"https://leadtime.app/api/public/tasks/550e8400-e29b-41d4-a716-446655440000%20or%20123/subtasks",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
},
json={
"subtaskId": "550e8400-e29b-41d4-a716-446655440000"
},
)Response
{
"accountable": {},
"accountableId": "string",
"assignedTo": {},
"assignedToId": "string",
"billed": true,
"childSpentTime": 0,
"comments": [
[
null
]
],
"componentItemId": {},
"createdAt": "2024-01-01T00:00:00Z",
"customFields": {},
"deadline": "2024-01-01T00:00:00Z",
"description": "string",
"emailDetails": {},
"emailSendError": "string",
"emailSendErrorCode": "string",
"emailSendFailedAt": "2024-01-01T00:00:00Z",
"emailSendFailedTo": [
[
null
]
],
"enableSupportContingent": true,
"estimatedTime": 0,
"guestAccess": true,
"history": [
[
null
]
],
"icon": {},
"iconIsGenerating": true,
"id": "string",
"isChangeRequest": true,
"isParticipant": true,
"notificationSettings": {},
"parentTaskId": {},
"participantsCount": 0,
"participantsList": [
[
null
]
],
"priority": {},
"products": [
[
null
]
],
"project": {},
"projectId": "string",
"quotations": [
[
null
]
],
"shortNumber": 0,
"skipFromBilling": true,
"spentTime": 0,
"statusId": "string",
"subTasksIds": [
[
null
]
],
"summary": "string",
"summaryIsGenerating": true,
"tags": [
[
null
]
],
"title": "string",
"titleIsGenerating": true,
"typeId": "string",
"userId": "string"
}Invalid identifier format or validation errors
Unauthorized - Invalid or missing authentication token
Access denied: No access to project or task not editable
Task not found