Create a new component item (Epic, Work Package, Todo List, or Test Suite)
Creates a new component item within a library component. Items are the building blocks that structure component templates.
What are Component Items? Items are the building blocks within components that organize and structure project work. Each item can be one of four types:
-
Epic: Major sections or phases that group related work packages around a common theme or goal
- Example: “Technical Implementation”, “Design & Development”, “Project Kickoff & Preparation”
- Can contain Work Packages, Todo Lists, or Test Suites
- Can nest other Epics to create complex hierarchies (arbitrary nesting depth)
- TimeFrame is not required for Epics
-
Work Package: Self-contained, clearly defined tasks that deliver tangible results
- Example: “Set up domain and hosting”, “Design homepage layout”, “Configure CMS”
- Can have timeframes/estimates (required field)
- Can contain Questions (to capture customer requirements), Todos (checklist items), and Test Cases (acceptance test steps)
- Can nest other Work Packages for complex tasks
-
Todo List: Checklists of sub-steps or checkpoints
- Example: “Kickoff Checklist”, “Quality Control Checklist”, “Go-live Approval”
- Perfect for recurring processes (tests, approvals, installation steps)
- Each todo item within the list can be checked off individually
- TimeFrame is required
-
Test Suite: Formal acceptance tests for project results
- Example: “Contact Form Tests”, “Responsive Design Check”, “SEO Review”
- Contains multiple test cases with steps and expected results
- TimeFrame is required
Item Placement: Items can be created at the root level of a component or nested under parent items (Epics or other Work Packages).
Content Format: The description and internalNote fields accept HTML or Markdown input and are automatically converted to the internal IDoc format for storage.
Validation Rules: TimeFrame is required for all item types except Epic. Only library component items (component.projectId is null) can be created through this endpoint.
/administration/project-components/itemsAuthorizationOAuth2 access token · headerrequiredapi:writeAuthorizationBearer token (JWT) · headerrequiredfieldsToReturnstringresponseShapestringcompactfullLT-Response-Shapestringfullapplication/jsoncomponentIdstringrequiredconditionsSaveComponentItemConditionDto[]Show propertiesHide properties
SaveComponentItemConditionDtocontainsTypestringrequiredSomeAllidstring | nulltargetQuestionIdstring | nulltargetTestCaseIdstring | nulltargetTodoIdstring | nulltargetValuestring | nulltypestringrequiredQuestionAnsweredQuestionNotAnsweredQuestionAnswerContainsQuestionAnswerDoesNotContainQuestionAnswerEqualQuestionAnswerDoesNotEqualTodoIsDoneTodoIsNotDoneTestCasePassedTestCaseFaileddescriptionstringrequirediconobject | nullincludeInSpecificationbooleanrequiredinternalNotestring | nullnamestringrequiredparentIdstring | nulltagsstring[]timeFramenumbertypestringrequiredEpicWorkPackageTodoListTestSuiteidstringrequiredsuccessbooleanrequiredcurl -X POST "https://leadtime.app/api/public/administration/project-components/items" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"componentId": "550e8400-e29b-41d4-a716-446655440000",
"conditions": [
{
"containsType": "Some",
"id": "550e8400-e29b-41d4-a716-446655440013",
"targetQuestionId": "550e8400-e29b-41d4-a716-446655440014",
"targetTestCaseId": "550e8400-e29b-41d4-a716-446655440016",
"targetTodoId": "550e8400-e29b-41d4-a716-446655440015",
"targetValue": "option-value",
"type": "QuestionAnswered"
}
],
"description": "<p>Epic description in HTML</p>",
"icon": ":check:",
"includeInSpecification": true,
"internalNote": "<p>Internal implementation notes</p>",
"name": "User Authentication Epic",
"parentId": null,
"tags": [
"550e8400-e29b-41d4-a716-446655440020"
],
"timeFrame": 20,
"type": "Epic"
}'const response = await fetch("https://leadtime.app/api/public/administration/project-components/items", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
},
body: JSON.stringify({
"componentId": "550e8400-e29b-41d4-a716-446655440000",
"conditions": [
{
"containsType": "Some",
"id": "550e8400-e29b-41d4-a716-446655440013",
"targetQuestionId": "550e8400-e29b-41d4-a716-446655440014",
"targetTestCaseId": "550e8400-e29b-41d4-a716-446655440016",
"targetTodoId": "550e8400-e29b-41d4-a716-446655440015",
"targetValue": "option-value",
"type": "QuestionAnswered"
}
],
"description": "<p>Epic description in HTML</p>",
"icon": ":check:",
"includeInSpecification": true,
"internalNote": "<p>Internal implementation notes</p>",
"name": "User Authentication Epic",
"parentId": null,
"tags": [
"550e8400-e29b-41d4-a716-446655440020"
],
"timeFrame": 20,
"type": "Epic"
})
});import requests
response = requests.post(
"https://leadtime.app/api/public/administration/project-components/items",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
},
json={
"componentId": "550e8400-e29b-41d4-a716-446655440000",
"conditions": [
{
"containsType": "Some",
"id": "550e8400-e29b-41d4-a716-446655440013",
"targetQuestionId": "550e8400-e29b-41d4-a716-446655440014",
"targetTestCaseId": "550e8400-e29b-41d4-a716-446655440016",
"targetTodoId": "550e8400-e29b-41d4-a716-446655440015",
"targetValue": "option-value",
"type": "QuestionAnswered"
}
],
"description": "<p>Epic description in HTML</p>",
"icon": ":check:",
"includeInSpecification": True,
"internalNote": "<p>Internal implementation notes</p>",
"name": "User Authentication Epic",
"parentId": None,
"tags": [
"550e8400-e29b-41d4-a716-446655440020"
],
"timeFrame": 20,
"type": "Epic"
},
){
"id": "550e8400-e29b-41d4-a716-446655440001",
"success": true
}