GetEmployeeWork
Project management service 1.8: Returns one employee's project-time registrations whose work date lies in a range, as full WorkUnit objects with task, project and customer headers.
| Service | Project management 1.8 |
| Endpoint | POST https://app{server-number}.timelog.com/{account}/WebServices/ProjectManagement/V1_8/ProjectManagementServiceSecure.svc |
| SOAPAction | GetEmployeeWorkRequest |
| Content-Type | text/xml; charset=utf-8 |
| Authentication | A token from GetToken |
| Permissions | Own registrations: no privilege needed. |
| Changes data | No |
| Safe to retry | Yes |
How it works
Looks up the employee by initials, checks the caller may see that employee's time, and returns every PROJECT-time registration whose work date is >= startDate and <= endDate. Each item is a WorkUnit with GUID, task ID, allocation GUID, duration, billable duration, comment, additional text, an IsEditable flag and Details. Dates: compared with the registration's date, so an endDate at 00:00 includes that day, but a startDate with a time of day after 00:00 EXCLUDES its own day. WorkUnit.StartDateTime comes back as the work date at 00:00 and EndDateTime as date + duration - not the stored start / end times. The list is not ordered and not paged.
Parameters
Each parameter has one label: Required, Conditional (required depending on other values) or Optional. Send them in the order shown.
Initials of the employee. Empty -> Invalid 10002; unknown -> Invalid 30015.
First work date. Send it at 00:00 - a later time of day excludes that day.
Last work date.
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: "GetEmployeeWorkRequest"
<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">
<soapenv:Body>
<pm:GetEmployeeWork>
<pm:initials>{initials}</pm:initials>
<pm:startDate>{startDate}</pm:startDate>
<pm:endDate>{endDate}</pm:endDate>
<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:GetEmployeeWork>
</soapenv:Body>
</soapenv:Envelope>
curl -X POST "https://app{server-number}.timelog.com/{account}/WebServices/ProjectManagement/V1_8/ProjectManagementServiceSecure.svc" \
-H "Content-Type: text/xml; charset=utf-8" \
-H 'SOAPAction: "GetEmployeeWorkRequest"' \
--data-binary @request.xml
import requests
URL = "https://app{server-number}.timelog.com/{account}/WebServices/ProjectManagement/V1_8/ProjectManagementServiceSecure.svc"
SOAP_ACTION = '"GetEmployeeWorkRequest"'
envelope = """<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">
<soapenv:Body>
<pm:GetEmployeeWork>
<pm:initials>{initials}</pm:initials>
<pm:startDate>{startDate}</pm:startDate>
<pm:endDate>{endDate}</pm:endDate>
<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:GetEmployeeWork>
</soapenv:Body>
</soapenv:Envelope>"""
response = requests.post(
URL,
data=envelope.encode("utf-8"),
headers={"Content-Type": "text/xml; charset=utf-8", "SOAPAction": SOAP_ACTION},
timeout=60,
)
result = parse_result(response) # see "Responses and errors"
{…} placeholder with your own value.Response
The call returns the standard response envelope. Check ResponseState first: a failed call still returns HTTP 200.
Success, Invalid or Error.
0 on success, otherwise the error code. See Errors.
Response<WorkUnit>: every project-time registration of the employee in the range; 'Successfully called' message. ResponseState Success, 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>
<GetEmployeeWorkResponse xmlns="http://www.timelog.com/api/tlp/v1_8">
<GetEmployeeWorkResult 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:WorkUnit>
<b:GUID>3f2504e0-4f89-41d3-9a0c-305000000001</b:GUID>
<b:AllocationGUID>3f2504e0-4f89-41d3-9a0c-305000000002</b:AllocationGUID>
<b:TaskID>1001</b:TaskID>
<b:EmployeeInitials>Example</b:EmployeeInitials>
<b:Duration>Example</b:Duration>
<b:StartDateTime>2026-10-01T00:00:00</b:StartDateTime>
<b:EndDateTime>2026-10-01T00:00:00</b:EndDateTime>
<b:Description>Example</b:Description>
<b:TimeStamp>AAAAAAAAAAA=</b:TimeStamp>
<b:IsEditable>false</b:IsEditable>
<b:AdditionalText>Example</b:AdditionalText>
<b:IsMeeting>false</b:IsMeeting>
<b:BillableDuration>Example</b:BillableDuration>
<b:Details>
<b:TaskHeader>
<b:ID>1001</b:ID>
<b:Name>Example </b:Name>
<b:No>1001</b:No>
<b:IsActive>true</b:IsActive>
<b:WBS>Example</b:WBS>
<b:FullName>Example full</b:FullName>
<b:ExternalKey>Example</b:ExternalKey>
</b:TaskHeader>
<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:CustomerHeader>
<c:ID>1001</c:ID>
<c:Name>Example </c:Name>
<c:No>1001</c:No>
<c:GUID>3f2504e0-4f89-41d3-9a0c-305000000004</c:GUID>
</b:CustomerHeader>
</b:Details>
</b:WorkUnit>
</a:Return>
<a:ReturnTypeDescription>WorkUnit</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>
</GetEmployeeWorkResult>
</GetEmployeeWorkResponse>
</s:Body>
</s:Envelope>
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:
| ResponseState | ErrorCode | Message | What it means | What to do |
|---|---|---|---|---|
| Invalid | 10002 | {field}, was null or empty | initials empty: 'Initials, was null or empty'. | Send the named value. |
| Invalid | 30015 | Unknown employee Initials: '{initials}'. | No employee has these initials. | — |
| Invalid | 20012 | User: {initials}, has Insufficient Access. Missing privilege was: {role} | — | — |
| Invalid | 40004 | V1_{n} is deprecated. Please upgrade to V1_{m} or later. | Nothing is read or written and the token is NOT checked. | Call the same operation on the current version. |