DeactivateEmployee
Organisation service 1.9: Sets an employee's resignation date and deactivates the employee immediately.
| Service | Organisation 1.9 |
| Endpoint | POST https://app{server-number}.timelog.com/{account}/WebServices/Organisation/V1_9/OrganisationServiceSecure.svc |
| SOAPAction | http://www.timelog.com/api/tlp/v1_9/OrganisationService/DeactivateEmployee |
| Content-Type | text/xml; charset=utf-8 |
| Authentication | A token from GetToken |
| Changes data | Yes |
| Safe to retry | Deactivating an already inactive employee saves the date again and repeats the status-change notifications. |
How it works
Two steps, not atomic. The caller may deactivate themselves. Existing SOAP tokens of the deactivated user keep working until they expire. Reactivate with ActivateEmployee.
Parameters
Each parameter has one label: Required, Conditional (required depending on other values) or Optional. Send them in the order shown.
GUID of the employee.
Stored as the resignation date. Must be >= the employment date and >= the employee's last time registration. Does NOT delay the deactivation.
The token from GetToken: Initials, Expires and Hash, sent back unchanged.
Request
POST /{account}/WebServices/Organisation/V1_9/OrganisationServiceSecure.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_9/OrganisationService/DeactivateEmployee"
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:org="http://www.timelog.com/api/tlp/v1_9"
xmlns:tok="http://www.timelog.com/api/tlp/v1_3">
<soapenv:Body>
<org:DeactivateEmployee>
<org:employeeGuid>{employeeGuid}</org:employeeGuid>
<org:terminationDate>{terminationDate}</org:terminationDate>
<org:token>
<tok:Initials>{Initials from GetToken}</tok:Initials>
<tok:Expires>{Expires from GetToken, unchanged}</tok:Expires>
<tok:Hash>{Hash from GetToken}</tok:Hash>
</org:token>
</org:DeactivateEmployee>
</soapenv:Body>
</soapenv:Envelope>
curl -X POST "https://app{server-number}.timelog.com/{account}/WebServices/Organisation/V1_9/OrganisationServiceSecure.svc" \
-H "Content-Type: text/xml; charset=utf-8" \
-H 'SOAPAction: "http://www.timelog.com/api/tlp/v1_9/OrganisationService/DeactivateEmployee"' \
--data-binary @request.xml
import requests
URL = "https://app{server-number}.timelog.com/{account}/WebServices/Organisation/V1_9/OrganisationServiceSecure.svc"
SOAP_ACTION = '"http://www.timelog.com/api/tlp/v1_9/OrganisationService/DeactivateEmployee"'
envelope = """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:org="http://www.timelog.com/api/tlp/v1_9"
xmlns:tok="http://www.timelog.com/api/tlp/v1_3">
<soapenv:Body>
<org:DeactivateEmployee>
<org:employeeGuid>{employeeGuid}</org:employeeGuid>
<org:terminationDate>{terminationDate}</org:terminationDate>
<org:token>
<tok:Initials>{Initials from GetToken}</tok:Initials>
<tok:Expires>{Expires from GetToken, unchanged}</tok:Expires>
<tok:Hash>{Hash from GetToken}</tok:Hash>
</org:token>
</org:DeactivateEmployee>
</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<EmployeeHeader> of the deactivated employee and a 'Successfully called' message.
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>
<DeactivateEmployeeResponse xmlns="http://www.timelog.com/api/tlp/v1_9">
<DeactivateEmployeeResult xmlns:a="http://api.timelog.com"
xmlns:b="http://www.timelog.com/api/tlp/v1_9"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:Return>
<b:EmployeeHeader>
<b:ID>3f2504e0-4f89-41d3-9a0c-305000000001</b:ID>
<b:EmployeeID>1001</b:EmployeeID>
<b:UserName>Example user</b:UserName>
<b:Initials>ABC</b:Initials>
<b:FirstName>Example first</b:FirstName>
<b:LastName>Example last</b:LastName>
<b:EmployeeNo>1001</b:EmployeeNo>
<b:Fullname>Example</b:Fullname>
</b:EmployeeHeader>
</a:Return>
<a:ReturnTypeDescription>EmployeeHeader</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>
</DeactivateEmployeeResult>
</DeactivateEmployeeResponse>
</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 |
|---|---|---|---|---|
| Error | 40001 | Error during call on TimeLog.API, Message 'Object reference not set to an instance of an object.' | employeeGuid unknown. | Take the GUID from EmployeeHeader.ID. Do not retry. |
| Error | 40001 | Error during call on TimeLog.API, Message 'The user violates the Business Rules for users' | Step 1 refused - typically no employee-edit privilege covering this employee, or terminationDate before the employment date. | Check the integration user's employee privileges first; then uniqueness of initials / user name; then the referenced data. |
| Error | 40001 | Error during call on TimeLog.API, Message 'The user violates the business roles for changing user status' | Step 2 refused: last system administrator, GDPR contact or last customer system owner. The resignation date is already saved. | Reassign the admin role / GDPR contact / system owner, then call again. Re-check the termination date. |
| Error | 40001 | Error during call on TimeLog.API, Message 'System.Collections.Generic.List`1[TimeLog.TLP.Error.IViolation]' | terminationDate earlier than the employee's last time registration: nothing is saved but the status-change notifications fire. | DeactivateEmployee: use a termination date on or after the last registration. |
| Error | — | — | Token missing / expired / invalid, API not activated or HTTPS required: the catch block fails on a null violations list. | Always send the string parameter, even as an empty string. |