TasksMoveTaskUnderParentTask

MoveTaskUnderParentTask

Project management service 1.8: Moves a task under another task of the same project, or to root level, optionally onto the new parent's contract.

ServiceProject management 1.8
EndpointPOST https://app{server-number}.timelog.com/{account}/WebServices/ProjectManagement/V1_8/ProjectManagementServiceSecure.svc
SOAPActionhttp://www.timelog.com/api/tlp/v1_8/ProjectManagementService/MoveTaskUnderParentTask
Content-Typetext/xml; charset=utf-8
AuthenticationA token from GetToken
Changes dataYes
Safe to retryYes

How it works

Loads the task by Task.ID. When parentTaskID differs from the task's current parent, the task is moved inside its own project: under the task with integer TaskID parentTaskID, or to the end of the root level when parentTaskID is 0. With changeToParentContract = true the moved task and its sub-tasks are first moved to the receiver's contract through the same guarded path as ChangeTaskContract. The old parent's payment is rebuilt when it lost a child, and the project is saved. Registrations stay on the task, so they never change project or customer.

Parameters

Each parameter has one label: Required, Conditional (required depending on other values) or Optional. Send them in the order shown.

parentTaskIDinteger
Required

Integer TaskID of the new parent, in the SAME project; 0 = move to root level. Equal to the current parent = nothing is done.

taskTask
Required

The task to move - ONLY Task.ID is read; all other members are ignored.

changeToParentContractboolean
Required

true = move the task and its sub-tasks to the new parent's contract; false = keep their contract. Must be false with parentTaskID 0.

tokenSecurityToken
Required

The token from GetToken: Initials, Expires and Hash, sent back unchanged.

Request

POST /{account}/WebServices/ProjectManagement/V1_8/ProjectManagementServiceSecure.svc HTTP/1.1
Host: app{server-number}.timelog.com
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://www.timelog.com/api/tlp/v1_8/ProjectManagementService/MoveTaskUnderParentTask"

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:pm="http://www.timelog.com/api/tlp/v1_8"
                  xmlns:tok="http://www.timelog.com/api/tlp/v1_3"
                  xmlns:tlp="http://www.timelog.com/api/tlp/v1_7">
  <soapenv:Body>
    <pm:MoveTaskUnderParentTask>
      <pm:parentTaskID>{parentTaskID}</pm:parentTaskID>
      <pm:task>
        <tlp:ID>{ID}</tlp:ID>
        <tlp:Name>{Name}</tlp:Name>
        <tlp:EndDate>{EndDate}</tlp:EndDate>
        <tlp:TaskTypeID>{TaskTypeID}</tlp:TaskTypeID>
        <!-- more fields: see Parameters -->
      </pm:task>
      <pm:changeToParentContract>false</pm:changeToParentContract>
      <pm:token>
        <tok:Initials>{Initials from GetToken}</tok:Initials>
        <tok:Expires>{Expires from GetToken, unchanged}</tok:Expires>
        <tok:Hash>{Hash from GetToken}</tok:Hash>
      </pm:token>
    </pm:MoveTaskUnderParentTask>
  </soapenv:Body>
</soapenv:Envelope>
Replace every {…} placeholder with your own value.

Response

The call returns the standard response envelope. Check ResponseState first: a failed call still returns HTTP 200.

ResponseStatestring
Required

Success, Invalid or Error.

ErrorCodeinteger

0 on success, otherwise the error code. See Errors.

ReturnTask[]

Response<Task> with one Task - the task as loaded BEFORE the move. Flagged IsReturnPaged true with TotalPageCount -1 although it is a single item. No status. n/a - one task on success; on failure Return is empty.

Example response

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <MoveTaskUnderParentTaskResponse xmlns="http://www.timelog.com/api/tlp/v1_8">
      <MoveTaskUnderParentTaskResult xmlns:a="http://api.timelog.com"
                                     xmlns:b="http://www.timelog.com/api/tlp/v1_7"
                                     xmlns:c="http://api.timelog.com/services/crm/1_2"
                                     xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <a:Return>
          <b:Task>
            <a:Action>Original</a:Action>
            <a:IsCustomFieldsLoaded>false</a:IsCustomFieldsLoaded>
            <a:CustomFields i:nil="true"/>
            <a:IsExternalKeysLoaded>false</a:IsExternalKeysLoaded>
            <a:ExternalKeys i:nil="true"/>
            <b:ID>3f2504e0-4f89-41d3-9a0c-305000000001</b:ID>
            <b:TaskID>1001</b:TaskID>
            <b:Name>Example </b:Name>
            <b:FullName>Example full</b:FullName>
            <b:No>1001</b:No>
            <b:Description>Example</b:Description>
            <b:Link>Example</b:Link>
            <b:BudgetHours>0</b:BudgetHours>
            <b:BudgetAmount>0</b:BudgetAmount>
            <b:StartDate>2026-10-01T00:00:00</b:StartDate>
            <b:EndDate>2026-10-01T00:00:00</b:EndDate>
            <b:TaskTypeID>1001</b:TaskTypeID>
            <b:AdditionalTextIsRequired>false</b:AdditionalTextIsRequired>
            <b:ProjectSubContractID>1001</b:ProjectSubContractID>
            <b:HourlyRateID>1001</b:HourlyRateID>
            <b:IsReadyForInvoicing>false</b:IsReadyForInvoicing>
            <b:Details>
              <b:CustomerHeader>
                <c:ID>1001</c:ID>
                <c:Name>Example </c:Name>
                <c:No>1001</c:No>
                <c:GUID>3f2504e0-4f89-41d3-9a0c-305000000002</c:GUID>
              </b:CustomerHeader>
              <b:ProjectHeader>
                <b:ID>1001</b:ID>
                <b:ProjectGUID>3f2504e0-4f89-41d3-9a0c-305000000003</b:ProjectGUID>
                <b:Name>Example </b:Name>
                <b:No>1001</b:No>
                <b:IsActive>true</b:IsActive>
                <b:IsGeneralProject>false</b:IsGeneralProject>
                <b:StartDate>2026-10-01T00:00:00</b:StartDate>
                <b:EndDate>2026-10-01T00:00:00</b:EndDate>
                <b:MainContractID>1001</b:MainContractID>
              </b:ProjectHeader>
              <b:Type>
                <b:ID>1001</b:ID>
                <b:ID2>0</b:ID2>
                <b:Name>Example </b:Name>
                <b:Name2>Example</b:Name2>
              </b:Type>
              <b:CustomField>Example</b:CustomField>
            </b:Details>
            <b:State>
              <b:IsActive>true</b:IsActive>
            </b:State>
          </b:Task>
        </a:Return>
        <a:ReturnTypeDescription>Task</a:ReturnTypeDescription>
        <a:Request>…</a:Request>
        <a:ResponseState>Success</a:ResponseState>
        <a:Messages>
          <a:APIMessage>
            <a:Message>Duration of call was 0,0421337 sec.</a:Message>
            <a:Severity>Message</a:Severity>
            <a:ErrorCode>0</a:ErrorCode>
          </a:APIMessage>
        </a:Messages>
        <a:ErrorCode>0</a:ErrorCode>
        <a:IsReturnPaged>false</a:IsReturnPaged>
        <a:TotalPageCount>0</a:TotalPageCount>
      </MoveTaskUnderParentTaskResult>
    </MoveTaskUnderParentTaskResponse>
  </s:Body>
</s:Envelope>
Illustrative example: built from the service description (WSDL) in the same format as a real response, with made-up values. The Request block is shortened.

Errors

All errors come back with HTTP 200: check ResponseState, ErrorCode and Messages. The errors every operation can return (expired or invalid token, API not enabled, HTTPS required, general errors) are listed once in Responses and errors.

Errors specific to this operation:

ResponseStateErrorCodeMessageWhat it meansWhat to do
Error40001Error during call on TimeLog.API, Message 'Task to be moved and receiver task must under the same project.'MoveTaskUnderParentTask: parentTaskID > 0 is not a task of the moved task's project. Nothing is moved; tasks cannot change project through this API.Use a TaskID of the same project, or 0 for root level.
Error40001Error during call on TimeLog.API, Message 'The task cannot move to its own sub task'MoveTaskUnderParentTask: the receiver is the moved task itself or one of its descendants. Nothing is moved.Choose a receiver outside the moved task's sub-tree.
Error40001Error during call on TimeLog.API, Message 'Task {TaskID} with ID {No} cannot become a parent task since it already has an allocation'MoveTaskUnderParentTask: the receiver task has allocations, so it cannot become a parent. Placeholders filled in source order. Nothing is moved.Move under a task without allocations, or remove the receiver's allocations first.
Error40001Error during call on TimeLog.API, Message 'It is not possible to create a recurring task under an ordinary parent task.' (or '... an ordinary task under a recurring parent task.')MoveTaskUnderParentTask: recurring and ordinary tasks cannot be mixed in one parent-child pair. Nothing is moved.Move recurring tasks only under recurring parents.
Error40001Error during call on TimeLog.API, Message 'The parent task contract not found. Task cannot be moved.'MoveTaskUnderParentTask with changeToParentContract = true but no receiver task. Nothing is moved.Send changeToParentContract = false when moving to root level; change the contract with ChangeTaskContract.
Error40001Error during call on TimeLog.API, Message 'Unable to change task project sub contract from:'{current contract}' to: '{target contract}', Reason: {reason}.'ChangeTaskContract refused. Reasons: 'It is not allowed to change project sub contract on a contract sub group sub task, TaskID=...' or 'Task has invoicable element that added to a voucher or invoice' - any registration or payment of the task on a voucher or invoice blocks the move, plus contract-model rules. Nothing is changed.Create a new task on the target contract for future time.
Error40001Error during call on TimeLog.API, Message 'Since the target contract is completed or cancelled, the task cannot be moved to target contract'changeToParentContract = true and the parent's contract is completed / cancelled.Reopen the contract or choose an active one.
Error40001Error during call on TimeLog.API, Message 'Unable to change the contract on the task because the task has time registration(s) or payment(s) that falls within closed accounting period'changeToParentContract = true and the task has time / payments in a closed accounting period.Create a new task on the target contract for future time.
Error40001Error during call on TimeLog.API, Message 'It is not allowed to change project sub contract on a Parent Task, TaskID='{TaskID}''Nothing is changed.—
Error—{rule message}Domain catalogues describe the individual codes.Read every Messages[] entry with Severity Invalid and fix the data.