Update Employees
Update employee details or create new employees; multiple employees can be included in one request.
Notes
- If the unit identified by the API key is different from the current home unit for the employee, the employee will be moved to the unit specified by the API key.
Request
This is the unique key that will identify the unit in Quinyx. This will also be used to specify the employee's home unit. If the unit identified by the API key is different from the current home unit for the employee, the employee will be moved to the unit specified by the API key.
An array of UpdateEmployee records. If badgeNo is not found in Quinyx the employee is created; if it exists it is updated.
An employee record to create or update through wsdlUpdateEmployees.
Mandatory. badgeNo is the unique identifier for this employee. If it is not found in Quinyx the employee is inserted; if it exists the employee is updated.
A second option to log in to Quinyx WFM, used instead of email. Deprecated for login — can still be used as an SSO identifier.
First name. Mandatory when creating a new employee.
Last name. Mandatory when creating a new employee.
Identification of the employee unit. Not used on input — the API key identifies the employee's unit.
Used as login. Will be rewritten by Quinyx WFM if the provided email is not unique; the output will contain the changed email.
Not a real field on the employee — it's a switch. When set to 1, email conflicts are handled by generating a new email and returning a warning for each affected employee.
If set to a date earlier than employedDate, the employee can access the Quinyx mobile app from this date. Used only on creation — ignored on update. Creates an early-access role starting on this date and ending the day before employedDate.
Used in T&A integrations.
The staff category id. If not provided, the staff category with the lowest role is used as the default.
The external staff category id.
Not used.
MD5-hashed password used to log in to Quinyx.
MD5-hashed password used to log in to third-party T&A applications.
Indicates whether the employee is active and can log in / show up in Quinyx.
Indicates whether the employee is passive.
Message shown to the user when they try to log in while the account is locked.
Must be a valid date but can be empty in the request when active = 1. Only required when active = 0. The employee's last working day. The leave date cannot equal employedDate.
Social Security Number.
Main cost centre for the employee.
Legacy role id — no longer used. Role is now derived from the staff category.
Rank of the employee. Must not be larger than 100.
Name of next of kin.
Phone number of next of kin.
Additional information.
Information will be sent by SMS.
Information will be sent by email.
Information will be sent by Qmail.
-1 or a BadgeNo. Pass -1 to reset the employee's manager. Otherwise the badge number of the employee's manager — must be a user with a higher role than the employee on any group or (in Classic) a staff category at or above section manager.
The employee must reset their password at next login.
External identifier of the cost centre. The code is configured under cost centres in tables.
External identifier of the section. Configured under Group management → Section integration keys, or via wsdlUpdateSections. Maps an external code to the internal section id.
New badgeNo to replace the existing one.
Indicates whether future time punches are deleted when the employee's home unit changes.
Indicates whether the employee is shareable by other units. Note: this feature must be enabled by Quinyx Support before the shareable status is visible inside Quinyx — contact Support if you can't see it.
An array of units the employee may work in beyond their home unit.
Required when sending workInUnits.
Indicates whether fixed schedules are shareable to other units.
Indicates whether a manager can attest their own punches and absences.
Indicates whether the employee has BankID.
Full name of the employee's legal guardian (if any).
Email address of the employee's legal guardian (if any).
Controls what happens to existing shifts when an employee moves between units.
false: shifts are unassigned and fixed schedules move to the new unit.true: shifts and fixed schedules stay in the old unit, and the employee is automatically shared back to the old unit. It can only be used when the employee is shareable.
Note: "Fixed Schedules" here refers to Classic and is not the same as Base Schedule. shareAble must be set to true in a separate call before keepShiftsOnMove has any effect.
District id for District managers.
Array of AdditionalFieldData — see the type definition.
Strongly recommended to set to true. When true, you receive an exception if you are updating roles and the role being updated is the only role on the employee's home unit.
true replaces all current Neo group(s); false adds the group(s) to the employee.
Update an existing role without removing others. Pass the existing groupId and roleId so Quinyx can match the row and update startDate / endDate.
When true and badgeNo is empty, Quinyx assigns the next available badge number in the unit/customer.
An array of GroupsRoles — see the type definition.
Returned in the response only. Array of error strings if the update failed; empty array on success.
curl -X POST 'https://api.quinyx.com/FlexForceWebServices.php' \
-H 'Content-Type: text/xml; charset=utf-8' \
-H 'SOAPAction: "uri:FlexForce/wsdlUpdateEmployees"' \
--data @- <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="https://api.quinyx.com/soap/FlexForce">
<soap:Body>
<tns:wsdlUpdateEmployees>
<apiKey xsi:type="xsd:string">string</apiKey>
<employees xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:UpdateEmployee[1]">
<item xsi:type="tns:UpdateEmployee">
<badgeNo xsi:type="xsd:string">string</badgeNo>
<loginId xsi:type="xsd:string">string</loginId>
<givenName xsi:type="xsd:string">string</givenName>
<familyName xsi:type="xsd:string">string</familyName>
<restId xsi:type="xsd:int">0</restId>
<email xsi:type="xsd:string">string</email>
<emailFixConflict xsi:type="xsd:int">0</emailFixConflict>
<phoneNo xsi:type="xsd:string">string</phoneNo>
<cellPhone xsi:type="xsd:string">string</cellPhone>
<dateOfBirth xsi:type="xsd:date">2024-01-01</dateOfBirth>
<employedDate xsi:type="xsd:date">2024-01-01</employedDate>
<industryDate xsi:type="xsd:date">2024-01-01</industryDate>
<earlyAccessDate xsi:type="xsd:date">2024-01-01</earlyAccessDate>
<address1 xsi:type="xsd:string">string</address1>
<address2 xsi:type="xsd:string">string</address2>
<zip xsi:type="xsd:string">string</zip>
<city xsi:type="xsd:string">string</city>
<cardNo xsi:type="xsd:string">string</cardNo>
<staffCat xsi:type="xsd:int">0</staffCat>
<extStaffCategory xsi:type="xsd:string">string</extStaffCategory>
<punchType xsi:type="xsd:int">0</punchType>
<password xsi:type="xsd:string">string</password>
<passwordTandA xsi:type="xsd:string">string</passwordTandA>
<active xsi:type="xsd:int">0</active>
<passive xsi:type="xsd:int">0</passive>
<lockStatus xsi:type="xsd:int">0</lockStatus>
<isLockedMsg xsi:type="xsd:string">string</isLockedMsg>
<leaveDate xsi:type="xsd:date">2024-01-01</leaveDate>
<socsecNo xsi:type="xsd:string">string</socsecNo>
<country xsi:type="xsd:string">string</country>
<costCentre xsi:type="xsd:int">0</costCentre>
<role xsi:type="xsd:int">0</role>
<rank xsi:type="xsd:int">0</rank>
<sex xsi:type="xsd:int">0</sex>
<nextOfKind xsi:type="xsd:string">string</nextOfKind>
<nextPhone xsi:type="xsd:string">string</nextPhone>
<info xsi:type="xsd:string">string</info>
<copyToMail xsi:type="xsd:int">0</copyToMail>
<useSMS xsi:type="xsd:int">0</useSMS>
<useMail xsi:type="xsd:int">0</useMail>
<useQmail xsi:type="xsd:int">0</useQmail>
<reportingTo xsi:type="xsd:string">string</reportingTo>
<resetPassword xsi:type="xsd:int">0</resetPassword>
<extCostCentre xsi:type="xsd:string">string</extCostCentre>
<extSectionId xsi:type="xsd:string">string</extSectionId>
<newBadgeNo xsi:type="xsd:string">string</newBadgeNo>
<DeleteFutureUnattestedPunches xsi:type="xsd:boolean">true</DeleteFutureUnattestedPunches>
<shareAble xsi:type="xsd:int">0</shareAble>
<workInUnits xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:WorkInUnit[1]">
<item xsi:type="tns:WorkInUnit">
<restId xsi:type="xsd:int">0</restId>
<extUnitId xsi:type="xsd:string">string</extUnitId>
<rollOutShiftEnabled xsi:type="xsd:boolean">true</rollOutShiftEnabled>
</item>
</workInUnits>
<workInUnitsUpdateOption xsi:type="xsd:int">0</workInUnitsUpdateOption>
<sharedScheduling xsi:type="xsd:int">0</sharedScheduling>
<allowAttestOfOwnPunches xsi:type="xsd:int">0</allowAttestOfOwnPunches>
<hasBankId xsi:type="xsd:int">0</hasBankId>
<legalGuardianName xsi:type="xsd:string">string</legalGuardianName>
<legalGuardianEmail xsi:type="xsd:string">string</legalGuardianEmail>
<keepShiftsOnMove xsi:type="xsd:boolean">true</keepShiftsOnMove>
<myDistrict xsi:type="xsd:int">0</myDistrict>
<additionalFields xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:AdditionalFieldData[1]">
<item xsi:type="tns:AdditionalFieldData">
<key xsi:type="xsd:string">string</key>
<value xsi:type="xsd:string">string</value>
</item>
</additionalFields>
<throwExceptionOnHomeUnitEndDate xsi:type="xsd:boolean">true</throwExceptionOnHomeUnitEndDate>
<replaceNeoGroup xsi:type="xsd:boolean">true</replaceNeoGroup>
<updateNeoGroup xsi:type="xsd:boolean">true</updateNeoGroup>
<generateNextBadgeNo xsi:type="xsd:boolean">true</generateNextBadgeNo>
<groupRoles xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:GroupsRoles[1]">
<item xsi:type="tns:GroupsRoles">
<groupId xsi:type="xsd:int">0</groupId>
<groupName xsi:type="xsd:string">string</groupName>
<extGroupId xsi:type="xsd:string">string</extGroupId>
<roleId xsi:type="xsd:string">string</roleId>
<extNeoRoleId xsi:type="xsd:string">string</extNeoRoleId>
<roleName xsi:type="xsd:string">string</roleName>
<startDate xsi:type="xsd:date">2024-01-01</startDate>
<endDate xsi:type="xsd:date">2024-01-01</endDate>
</item>
</groupRoles>
<validationErrors xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="xsd:string[1]">
<item xsi:type="xsd:string">string</item>
</validationErrors>
</item>
</employees>
</tns:wsdlUpdateEmployees>
</soap:Body>
</soap:Envelope>
EOFResponse
Array of UpdateEmployee records
An employee record to create or update through wsdlUpdateEmployees.
Mandatory. badgeNo is the unique identifier for this employee. If it is not found in Quinyx the employee is inserted; if it exists the employee is updated.
A second option to log in to Quinyx WFM, used instead of email. Deprecated for login — can still be used as an SSO identifier.
First name. Mandatory when creating a new employee.
Last name. Mandatory when creating a new employee.
Identification of the employee unit. Not used on input — the API key identifies the employee's unit.
Used as login. Will be rewritten by Quinyx WFM if the provided email is not unique; the output will contain the changed email.
Not a real field on the employee — it's a switch. When set to 1, email conflicts are handled by generating a new email and returning a warning for each affected employee.
If set to a date earlier than employedDate, the employee can access the Quinyx mobile app from this date. Used only on creation — ignored on update. Creates an early-access role starting on this date and ending the day before employedDate.
Used in T&A integrations.
The staff category id. If not provided, the staff category with the lowest role is used as the default.
The external staff category id.
Not used.
MD5-hashed password used to log in to Quinyx.
MD5-hashed password used to log in to third-party T&A applications.
Indicates whether the employee is active and can log in / show up in Quinyx.
Indicates whether the employee is passive.
Message shown to the user when they try to log in while the account is locked.
Must be a valid date but can be empty in the request when active = 1. Only required when active = 0. The employee's last working day. The leave date cannot equal employedDate.
Social Security Number.
Main cost centre for the employee.
Legacy role id — no longer used. Role is now derived from the staff category.
Rank of the employee. Must not be larger than 100.
Name of next of kin.
Phone number of next of kin.
Additional information.
Information will be sent by SMS.
Information will be sent by email.
Information will be sent by Qmail.
-1 or a BadgeNo. Pass -1 to reset the employee's manager. Otherwise the badge number of the employee's manager — must be a user with a higher role than the employee on any group or (in Classic) a staff category at or above section manager.
The employee must reset their password at next login.
External identifier of the cost centre. The code is configured under cost centres in tables.
External identifier of the section. Configured under Group management → Section integration keys, or via wsdlUpdateSections. Maps an external code to the internal section id.
New badgeNo to replace the existing one.
Indicates whether future time punches are deleted when the employee's home unit changes.
Indicates whether the employee is shareable by other units. Note: this feature must be enabled by Quinyx Support before the shareable status is visible inside Quinyx — contact Support if you can't see it.
An array of units the employee may work in beyond their home unit.
Required when sending workInUnits.
Indicates whether fixed schedules are shareable to other units.
Indicates whether a manager can attest their own punches and absences.
Indicates whether the employee has BankID.
Full name of the employee's legal guardian (if any).
Email address of the employee's legal guardian (if any).
Controls what happens to existing shifts when an employee moves between units.
false: shifts are unassigned and fixed schedules move to the new unit.true: shifts and fixed schedules stay in the old unit, and the employee is automatically shared back to the old unit. It can only be used when the employee is shareable.
Note: "Fixed Schedules" here refers to Classic and is not the same as Base Schedule. shareAble must be set to true in a separate call before keepShiftsOnMove has any effect.
District id for District managers.
Array of AdditionalFieldData — see the type definition.
Strongly recommended to set to true. When true, you receive an exception if you are updating roles and the role being updated is the only role on the employee's home unit.
true replaces all current Neo group(s); false adds the group(s) to the employee.
Update an existing role without removing others. Pass the existing groupId and roleId so Quinyx can match the row and update startDate / endDate.
When true and badgeNo is empty, Quinyx assigns the next available badge number in the unit/customer.
An array of GroupsRoles — see the type definition.
Returned in the response only. Array of error strings if the update failed; empty array on success.
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="https://api.quinyx.com/soap/FlexForce">
<soap:Body>
<tns:wsdlUpdateEmployeesResponse>
<return xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:UpdateEmployee[1]">
<item xsi:type="tns:UpdateEmployee">
<badgeNo xsi:type="xsd:string">string</badgeNo>
<loginId xsi:type="xsd:string">string</loginId>
<givenName xsi:type="xsd:string">string</givenName>
<familyName xsi:type="xsd:string">string</familyName>
<restId xsi:type="xsd:int">0</restId>
<email xsi:type="xsd:string">string</email>
<emailFixConflict xsi:type="xsd:int">0</emailFixConflict>
<phoneNo xsi:type="xsd:string">string</phoneNo>
<cellPhone xsi:type="xsd:string">string</cellPhone>
<dateOfBirth xsi:type="xsd:date">2024-01-01</dateOfBirth>
<employedDate xsi:type="xsd:date">2024-01-01</employedDate>
<industryDate xsi:type="xsd:date">2024-01-01</industryDate>
<earlyAccessDate xsi:type="xsd:date">2024-01-01</earlyAccessDate>
<address1 xsi:type="xsd:string">string</address1>
<address2 xsi:type="xsd:string">string</address2>
<zip xsi:type="xsd:string">string</zip>
<city xsi:type="xsd:string">string</city>
<cardNo xsi:type="xsd:string">string</cardNo>
<staffCat xsi:type="xsd:int">0</staffCat>
<extStaffCategory xsi:type="xsd:string">string</extStaffCategory>
<punchType xsi:type="xsd:int">0</punchType>
<password xsi:type="xsd:string">string</password>
<passwordTandA xsi:type="xsd:string">string</passwordTandA>
<active xsi:type="xsd:int">0</active>
<passive xsi:type="xsd:int">0</passive>
<lockStatus xsi:type="xsd:int">0</lockStatus>
<isLockedMsg xsi:type="xsd:string">string</isLockedMsg>
<leaveDate xsi:type="xsd:date">2024-01-01</leaveDate>
<socsecNo xsi:type="xsd:string">string</socsecNo>
<country xsi:type="xsd:string">string</country>
<costCentre xsi:type="xsd:int">0</costCentre>
<role xsi:type="xsd:int">0</role>
<rank xsi:type="xsd:int">0</rank>
<sex xsi:type="xsd:int">0</sex>
<nextOfKind xsi:type="xsd:string">string</nextOfKind>
<nextPhone xsi:type="xsd:string">string</nextPhone>
<info xsi:type="xsd:string">string</info>
<copyToMail xsi:type="xsd:int">0</copyToMail>
<useSMS xsi:type="xsd:int">0</useSMS>
<useMail xsi:type="xsd:int">0</useMail>
<useQmail xsi:type="xsd:int">0</useQmail>
<reportingTo xsi:type="xsd:string">string</reportingTo>
<resetPassword xsi:type="xsd:int">0</resetPassword>
<extCostCentre xsi:type="xsd:string">string</extCostCentre>
<extSectionId xsi:type="xsd:string">string</extSectionId>
<newBadgeNo xsi:type="xsd:string">string</newBadgeNo>
<DeleteFutureUnattestedPunches xsi:type="xsd:boolean">true</DeleteFutureUnattestedPunches>
<shareAble xsi:type="xsd:int">0</shareAble>
<workInUnits xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:WorkInUnit[1]">
<item xsi:type="tns:WorkInUnit">
<restId xsi:type="xsd:int">0</restId>
<extUnitId xsi:type="xsd:string">string</extUnitId>
<rollOutShiftEnabled xsi:type="xsd:boolean">true</rollOutShiftEnabled>
</item>
</workInUnits>
<workInUnitsUpdateOption xsi:type="xsd:int">0</workInUnitsUpdateOption>
<sharedScheduling xsi:type="xsd:int">0</sharedScheduling>
<allowAttestOfOwnPunches xsi:type="xsd:int">0</allowAttestOfOwnPunches>
<hasBankId xsi:type="xsd:int">0</hasBankId>
<legalGuardianName xsi:type="xsd:string">string</legalGuardianName>
<legalGuardianEmail xsi:type="xsd:string">string</legalGuardianEmail>
<keepShiftsOnMove xsi:type="xsd:boolean">true</keepShiftsOnMove>
<myDistrict xsi:type="xsd:int">0</myDistrict>
<additionalFields xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:AdditionalFieldData[1]">
<item xsi:type="tns:AdditionalFieldData">
<key xsi:type="xsd:string">string</key>
<value xsi:type="xsd:string">string</value>
</item>
</additionalFields>
<throwExceptionOnHomeUnitEndDate xsi:type="xsd:boolean">true</throwExceptionOnHomeUnitEndDate>
<replaceNeoGroup xsi:type="xsd:boolean">true</replaceNeoGroup>
<updateNeoGroup xsi:type="xsd:boolean">true</updateNeoGroup>
<generateNextBadgeNo xsi:type="xsd:boolean">true</generateNextBadgeNo>
<groupRoles xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:GroupsRoles[1]">
<item xsi:type="tns:GroupsRoles">
<groupId xsi:type="xsd:int">0</groupId>
<groupName xsi:type="xsd:string">string</groupName>
<extGroupId xsi:type="xsd:string">string</extGroupId>
<roleId xsi:type="xsd:string">string</roleId>
<extNeoRoleId xsi:type="xsd:string">string</extNeoRoleId>
<roleName xsi:type="xsd:string">string</roleName>
<startDate xsi:type="xsd:date">2024-01-01</startDate>
<endDate xsi:type="xsd:date">2024-01-01</endDate>
</item>
</groupRoles>
<validationErrors xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="xsd:string[1]">
<item xsi:type="xsd:string">string</item>
</validationErrors>
</item>
</return>
</tns:wsdlUpdateEmployeesResponse>
</soap:Body>
</soap:Envelope>Change log
| Date | Description |
|---|---|
| 2017-01-23 | Added additionalFields and hasBankId fields. Added emailFixConflict flag. |
| 2018-02-12 | Added sharedScheduling field. |
| 2018-10-31 | Added isLocked and isLockedMsg fields |
| 2018-11-14 | Renamed isLocked as lockStatus |
| 2019-01-07 | Added workInUnits and workInUnitsUpdateOption |
| 2019-03-05 | Added myDistrict and rank |
| 2019-03-26 | Added extStaffCategory |
| 2019-05-21 | groupRoles |
| 2019-11-06 | Added IndustryDate |
| 2020-01-15 | Added extGroupId |
| 2020-03-06 | Added newBadgeNo |
| 2020-07-29 | Added updateNeoGroup |
| 2020-09-09 | Added support for extNeoRoleId in groupRoles |
| 2020-09-15 | Added minOccurs=0 to not required fields |
| 2021-04-01 | -1 value to reportingTo |
| 2021-06-16 | Added flag throwExceptionOnHomeUnitEndDate |
| 2022-01-20 | Added flag UpdateEmployee->resetSection |
| 2023-09-14 | Added field UpdateEmployee->earlyAccessDate |
| 2024-02-13 | Modified early access date logic |