Update an employee's fields by submitting a JSON object or XML document containing field name/value pairs. The request body schema lists commonly used fields, but any valid writable employee field name may be used as a key. To discover available field names, call List Fields (list-fields).
employmentType and terminationDate cannot be changed here: they belong to the employment status record. Sent alongside other fields they are ignored and the other fields save; a request whose only changes are to these fields is rejected with 400. Change them through the employmentStatus table on the REST API.
This endpoint does not upload, replace, or remove the employee profile photo, and does not accept any binary or file uploads in general. Photo-related keys (e.g. photo, photoUrl) included in the body are silently ignored: the request still returns 200, but no photo change is made. To change a profile photo, use the Upload Employee Photo endpoint (upload-employee-photo). AI connectors cannot use that endpoint reliably and should redirect the user to the BambooHR web UI.
Employment status note: it is recommended to use the employmentStatus table endpoint. Writing employmentHistoryStatus appends a new employment status record rather than amending the current one. The new record will be dated using employeeStatusDate when supplied in the same request, otherwise the new hire date if hireDate changes, otherwise today in the company's time zone. A date earlier than the current record inserts the new record into history rather than making it current. On accounts with employment types enabled, the new record takes its employment type from the record in effect on its date, so the request is rejected with 400 when that record has no employment type or the date is earlier than the employee's first record. The response reflects the employee's current record, so a backdated record does not appear in it; read the full history through the employmentStatus table. This endpoint cannot amend an existing record; that is done through the employmentStatus table endpoints of the REST API.
Trax Payroll note: If the employee is currently on a pay schedule syncing with Trax Payroll, or is being added to one, the request must include the required payroll-related employee fields: employeeNumber (unless the company has automatic employee numbers enabled), firstName, lastName, dateOfBirth, ssn or ein, gender, maritalStatus, hireDate, address1, city, state, zipcode, country, employmentHistoryStatus, exempt, payType, payRate, payPer, overtimeRate, and location.
OAuth Scopes: employee, employee.write, employee:assets.write, employee:compensation.write, employee:contact.write, employee:custom_fields.write, employee:custom_fields_encrypted.write, employee:demographic.write, employee:dependent.write, employee:dependent:ssn.write, employee:education.write, employee:emergency_contacts.write, employee:identification.write, employee:job, employee:job.write, employee:management.write, employee:name.write, employee:payroll.write, employee:photo.write, employee:vaccination.write, sensitive_employee:address.write, sensitive_employee:creditcards.write, sensitive_employee:protected_info.write
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
400Provided JSON is malformed, required fields are missing, or the only changes requested are to fields that are read-only on this endpoint.
403The API user does not have permission to see the employee or to update any of the requested fields.
404The employee does not exist.
409A field was given an invalid value (e.g., duplicate email, invalid state/country, incompatible pay type).
