AllocationsCreateAllocation

CreateAllocation

Project management service 1.8: Creates one allocation with caller-chosen GUID, planned hours, hourly rate, dates and external keys.

ServiceProject management 1.8
EndpointPOST https://app{server-number}.timelog.com/{account}/WebServices/ProjectManagement/V1_8/ProjectManagementServiceSecure.svc
SOAPActionCreateAllocationRequest
Content-Typetext/xml; charset=utf-8
AuthenticationA token from GetToken
Changes dataYes
Safe to retryA retry of a call that already created the allocation fails with 30008 - nothing is duplicated. The GUID itself is NOT unique-indexed, so do not rely on it for de-duplication.

How it works

Creates the allocation of Allocation.EmployeeID on Allocation.TaskID. Unlike AddEmployeeToTask, the caller can set the allocation's GUID, the contract hourly rate, the start / end dates and external keys. The employee is added to the project's resource group when missing and the project is saved. Rules checked: employee exists, the employee is not already on the task, the task exists, is not a parent task and is not completed / cancelled. NOT checked: whether HourlyRateID belongs to the task's project contract or is an indexed rate, and whether the caller may staff the project.

Parameters

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

allocationAllocation
Required

The Allocation to send. Its fields are listed below.

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: "CreateAllocationRequest"

<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:CreateAllocation>
      <pm:allocation>
        <tlp:TaskID>{TaskID}</tlp:TaskID>
        <tlp:EmployeeID>{EmployeeID}</tlp:EmployeeID>
        <!-- more fields: see Parameters -->
      </pm:allocation>
      <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:CreateAllocation>
  </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.

ReturnAllocation[]

Response<Allocation> with one item: the allocation as saved. Details.EmployeeHeader is filled when the employee was loaded. Failure only: Error envelope, empty Return.

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>
    <CreateAllocationResponse xmlns="http://www.timelog.com/api/tlp/v1_8">
      <CreateAllocationResult xmlns:a="http://api.timelog.com"
                              xmlns:b="http://www.timelog.com/api/tlp/v1_7"
                              xmlns:c="http://www.timelog.com/api/tlp/v1_5"
                              xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <a:Return>
          <b:Allocation>
            <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:AllocationID>1001</b:AllocationID>
            <b:ID>3f2504e0-4f89-41d3-9a0c-305000000001</b:ID>
            <b:TaskID>1001</b:TaskID>
            <b:HoursAllocated>0</b:HoursAllocated>
            <b:HourlyRateID>1001</b:HourlyRateID>
            <b:EmployeeID>1001</b:EmployeeID>
            <b:StartDate>2026-10-01T00:00:00</b:StartDate>
            <b:EndDate>2026-10-01T00:00:00</b:EndDate>
            <b:Details>
              <b:EmployeeHeader>
                <c:ID>3f2504e0-4f89-41d3-9a0c-305000000002</c:ID>
                <c:EmployeeID>1001</c:EmployeeID>
                <c:Initials>ABC</c:Initials>
                <c:FirstName>Example first</c:FirstName>
                <c:LastName>Example last</c:LastName>
                <c:EmployeeNo>1001</c:EmployeeNo>
                <c:Fullname>Example</c:Fullname>
              </b:EmployeeHeader>
            </b:Details>
          </b:Allocation>
        </a:Return>
        <a:ReturnTypeDescription>Allocation</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>
      </CreateAllocationResult>
    </CreateAllocationResponse>
  </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
Error30008Server unable to create allocation, Task and Employee relationship already exists on allocation:The employee is already allocated to the task.Treat as 'already allocated': read the allocation and update it instead.
Error30009Unable to validate allocation for creation: Allocation is associated with parent task.TaskID has sub-tasks.Allocate the employee to a sub-task.
Error37808Allocation cannot be added to cancelled or completed task.The task is completed or cancelled.Reopen the task or choose another task.