Update Employee

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

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Path Params
string
required

The employee ID.

Body Params

A dictionary of employee field names and their new values. The properties listed below are commonly used fields, but any valid writable employee field name can be used as a key. To discover all available field names, call List Fields (list-fields). Only the fields you include will be updated; omitted fields are left unchanged. Some string-valued fields are backed by lists or lookups, so callers should use valid option values from BambooHR metadata rather than assuming any free-text string will persist as entered. Important for AI agents: Unknown or misspelled field names are silently ignored — the endpoint returns 200 but the field is not updated. Always use the exact alias from the schema properties below or from the list-fields endpoint; do not invent aliases by adding prefixes such as home (e.g., homeCity is wrong — the correct alias is city). Photo data is not writable through this schema: photo-related keys are silently ignored. 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.

string

Legal first name.

string

Legal last name.

string

Work email address.

string

Job title.

string

Department name.

string

Division name.

string

Location name.

date

Hire date in YYYY-MM-DD format.

string

Mobile phone number.

string

Home phone number.

string

Work phone number.

string

Home street address line 1. The correct alias is address1 — do not use homeAddress1, homeStreet1, or street1.

string

Home street address line 2 (apartment, suite, etc.). The correct alias is address2 — do not use homeAddress2 or homeStreet2.

string

Home city. The correct alias is city — do not use homeCity.

string

Home state or province. The correct alias is state — do not use homeState. Values are normalized to standard abbreviations (e.g., "Pennsylvania" becomes "PA").

string

Home ZIP or postal code. The correct alias is zipcode — do not use homeZipcode or homeZip.

string

Home country name. The correct alias is country — do not use homeCountry.

Headers
string
enum
Defaults to application/json

Generated from available request content types

Allowed:
Responses

400

Provided JSON is malformed, required fields are missing, or the only changes requested are to fields that are read-only on this endpoint.

403

The API user does not have permission to see the employee or to update any of the requested fields.

404

The employee does not exist.

409

A field was given an invalid value (e.g., duplicate email, invalid state/country, incompatible pay type).

Language
Credentials
:
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json