Employees
Public API

Returns a single employee record as a JSON object (or XML when Accept: application/xml). The id field is always present and is returned as a string; it is the internal employee ID — see the id and employeeNumber field documentation in the response schema for the distinction between the internal ID and the editable Employee # value. Pass the id 0 to read the authenticated caller's own record.

Requesting fields. Every other field is included only when explicitly named in the fields query parameter. With no fields parameter, the response contains only id — there is no implicit default field set. Field names come from List Fields (list-fields), which also exposes custom-field aliases usable here. The maximum number of fields per request is 400.

Field-name vocabulary. The names used here differ from the employee dataset (queried via Get Data from Dataset (v2) (get-data-from-dataset-v2)): this endpoint uses short names (workEmail, jobTitle, department, supervisor) where the dataset uses qualified names (email, jobInformationJobTitle, jobInformationDepartment, jobInformationReportsTo).

Effective-dated values. By default only currently effective values from historical tables (job title, compensation, employment status, etc.) are returned; pass onlyCurrent=false to include future-dated values.

Permissions. Field-level permissions are applied silently: any requested field the authenticated caller cannot view is omitted from the response with no marker — an absent field may indicate either that it was not requested or that the caller lacks permission to view it. This differs from get-data-from-dataset-v2 for the employee dataset, which always returns every requested field but represents inaccessible values as empty and lists the withheld field names in a per-record _restrictedFields array. Record-level permissions apply in addition to field-level ones. Which employees a caller can view depends on their access-level configuration, which may be limited to themselves, to their direct or indirect reports, or to another configured set. If the caller cannot view the requested employee, the endpoint returns 403 with Insufficient Permissions to view this employee rather than a partial record.

Related endpoints. Use this for fetching arbitrary fields on a single known employee. For multiple employees, use list-employees. For complex filtering or tabular reports, use get-data-from-dataset-v2. To look up information published in a coworker's company directory entry, such as job title, department, location, work contact details, or who they report to, use Get Employees Directory (get-employees-directory), which is governed by directory sharing settings rather than by per-employee record permissions and is available when directory or org-chart access is shared with the caller's access level.

OAuth Scopes: employee, employee:assets, employee:compensation, employee:contact, employee:custom_fields, employee:custom_fields_encrypted, employee:demographic, employee:dependent, employee:dependent:ssn, employee:education, employee:emergency_contacts, employee:identification, employee:job, employee:job.write, employee:management, employee:name, employee:photo, employee:vaccination, sensitive_employee:address, sensitive_employee:creditcards, sensitive_employee:protected_info

get/api/v1/employees/{id}

Request

  • Base URL
    https://companySubDomain.bamboohr.com
  • Auth
    • HTTP basic
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopesemployee
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopesemployee:assets
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopesemployee:contact
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopesemployee:compensation
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopesemployee:custom_fields_encrypted
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopesemployee:custom_fields
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopesemployee:demographic
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopesemployee:dependent
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopesemployee:dependent:ssn
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopesemployee:education
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopesemployee:emergency_contacts
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopesemployee:identification
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopesemployee:job
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopesemployee:management
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopesemployee:name
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopesemployee:photo
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopesemployee:vaccination
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopessensitive_employee:protected_info
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopessensitive_employee:address
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopessensitive_employee:creditcards
    • or OAuth 2
      Authorization code/authorize.php
      Token URL/token.php
      Scopesemployee:job.write
  • TypeScript
    A function with typed inputs. Its response is checked against the schema.

Path parameters

idstring required

The internal employee ID of the employee to retrieve. Use id from this endpoint, employeeId from list-employees, or eeid from the employee dataset. Do not pass employeeNumber (the editable Employee # value); it may fail with 404 or resolve to a different employee if its value matches another employee's internal employee ID. The sentinel value 0 resolves to the employee record bound to the authenticated user, when one exists; if the credentials are not bound to an employee (for example an integration-style account), 0 returns only {"id": "0"} with no other fields. list-employees does not accept this sentinel.

Query parameters

fieldsstring

Comma-separated list of fields to include in the response. Three reference forms are accepted and may be mixed in a single request: standard field names (e.g. firstName, workEmail), numeric field IDs (e.g. 1349), and custom-field aliases (e.g. customStartDate). Discover all three via List Fields (list-fields) — its response includes id, name, and alias for every available field. Example mixing all three: firstName,1349,customStartDate. When omitted, the response includes only id. Bracket-array (fields[]=...) and repeated-key (fields=a&fields=b) forms are not supported on this endpoint — use the comma-separated form. Unknown or unauthorized fields are silently dropped from the response.

onlyCurrentboolean

When true (the default), returns only currently effective values from historical tables (job, compensation, employment status, etc.). When false, future-dated history rows are also returned.

Headers

AcceptHeaderParameter'application/xml' | 'application/json'

This endpoint can produce either JSON or XML.

Response

An object keyed by field name with the requested employee's values. id is always present and is a string. Fields the authenticated caller cannot view are silently omitted. When Accept: application/xml, the body is an <employee id="..."> element with one <field id="..."> child per returned field.

idstring required

The internal employee ID — the canonical, immutable identifier for this employee across all employee endpoints. Equivalent to employeeId on list-employees and eeid on the employee dataset. Use this value (not employeeNumber) for employee ID inputs such as {id} path parameters or filter[ids].

employeeNumberstring nullable

The employee's editable Employee # value (the HR-visible display field on the employee profile). This is not the internal employee ID used by API inputs such as filter[ids] and {id} path parameters; those inputs expect id on this endpoint, employeeId on list-employees, or eeid on the employee dataset. Passing employeeNumber there may fail with 404 or resolve to a different employee if its value matches another employee's internal employee ID. Only included when requested via the fields parameter.

firstNamestring nullable

Employee's first name

lastNamestring nullable

Employee's last name

preferredNamestring nullable

Employee's preferred name

middleNamestring nullable

Employee's middle name

photoUrlstring nullable

URL to the employee's profile photo

jobTitleNamestring nullable

Employee's current job title

jobTitleIdstring nullable

Employee's job title ID

status'Active' | 'Inactive' nullable

Employee's current status

workEmailstring nullable

Employee's work email address

homeEmailstring nullable

Employee's home email address

bestEmailstring nullable

Employee's best email address

workPhonestring nullable

Employee's work phone number

workPhoneExtensionstring nullable

Employee's work phone extension

mobilePhonestring nullable

Employee's mobile phone number

homePhonestring nullable

Employee's home phone number

skypeUsernamestring nullable

Employee's Skype username

linkedinUrlstring nullable

Employee's LinkedIn profile URL

facebookUrlstring nullable

Employee's Facebook profile URL

instagramUrlstring nullable

Employee's Instagram profile URL

twitterUrlstring nullable

Employee's Twitter/X profile URL

pinterestUrlstring nullable

Employee's Pinterest profile URL

birthDatestring nullable

Employee's birth date

hireDatestring nullable

Employee's hire date

originalHireDatestring nullable

Employee's original hire date

terminationDatestring nullable

Employee's termination date

address1string nullable

Employee's street address

citystring nullable

Employee's city

statestring nullable

Employee's state or province

countrystring nullable

Employee's country

genderstring nullable

Employee's gender

maritalstring nullable

Employee's marital status

payRatestring nullable

Employee's pay rate

payTypestring nullable

Employee's pay type

payPeriodstring nullable

Employee's pay period

exemptstring nullable

Whether the employee is FLSA exempt

canUploadPhotoboolean nullable

Whether the requesting user can upload a photo for this employee

divisionstring nullable

Employee's division name

divisionIdstring nullable

Employee's division ID

departmentstring nullable

Employee's department name

departmentIdstring nullable

Employee's department ID

locationstring nullable

Employee's location name

locationIdstring nullable

Employee's location ID

employmentStatusstring nullable

Employee's current employment status name

employmentStatusIdstring nullable

Employee's current employment status ID

reportsToNamestring nullable

Name of the employee's manager

reportsToIdstring nullable

Internal employee ID of the employee's manager

Changes

    • info

      the security scope employee was added to the endpoint's security scheme oauth

    • info

      the security scope employee:job.write was removed from the endpoint's security scheme oauth