---
title: "Get Employee"
method: GET
path: "/api/v1/employees/{id}"
tags: ["Employees", "Public API"]
---

# Get Employee

`GET /api/v1/employees/{id}`

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. 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. Note that the field-name vocabulary differs 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`). 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. 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. The maximum number of fields per request is 400. 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`.

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

## Path parameters

- `id` string, required

## Query parameters

- `fields` string
- `onlyCurrent` boolean

## Headers

- `AcceptHeaderParameter` 'application/xml' | 'application/json'

## Response `200`

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.

- GetEmployeeResponse — Employee data returned by the Get Employee endpoint. The `id` field is always present; all other named properties are included only when explicitly requested via the `fields` query parameter. Additional custom or company-configured fields may also appear.
  - `id` string, 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]`.
  - `employeeNumber` string, 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.
  - `firstName` string, nullable — Employee's first name
  - `lastName` string, nullable — Employee's last name
  - `preferredName` string, nullable — Employee's preferred name
  - `middleName` string, nullable — Employee's middle name
  - `photoUrl` string, nullable — URL to the employee's profile photo
  - `jobTitleName` string, nullable — Employee's current job title
  - `jobTitleId` string, nullable — Employee's job title ID
  - `status` 'Active' | 'Inactive', nullable — Employee's current status
  - `workEmail` string, nullable — Employee's work email address
  - `homeEmail` string, nullable — Employee's home email address
  - `bestEmail` string, nullable — Employee's best email address
  - `workPhone` string, nullable — Employee's work phone number
  - `workPhoneExtension` string, nullable — Employee's work phone extension
  - `mobilePhone` string, nullable — Employee's mobile phone number
  - `homePhone` string, nullable — Employee's home phone number
  - `skypeUsername` string, nullable — Employee's Skype username
  - `linkedinUrl` string, nullable — Employee's LinkedIn profile URL
  - `facebookUrl` string, nullable — Employee's Facebook profile URL
  - `instagramUrl` string, nullable — Employee's Instagram profile URL
  - `twitterUrl` string, nullable — Employee's Twitter/X profile URL
  - `pinterestUrl` string, nullable — Employee's Pinterest profile URL
  - `birthDate` string, nullable — Employee's birth date
  - `hireDate` string, nullable — Employee's hire date
  - `originalHireDate` string, nullable — Employee's original hire date
  - `terminationDate` string, nullable — Employee's termination date
  - `address1` string, nullable — Employee's street address
  - `city` string, nullable — Employee's city
  - `state` string, nullable — Employee's state or province
  - `country` string, nullable — Employee's country
  - `gender` string, nullable — Employee's gender
  - `marital` string, nullable — Employee's marital status
  - `payRate` string, nullable — Employee's pay rate
  - `payType` string, nullable — Employee's pay type
  - `payPeriod` string, nullable — Employee's pay period
  - `exempt` string, nullable — Whether the employee is FLSA exempt
  - `canUploadPhoto` boolean, nullable — Whether the requesting user can upload a photo for this employee
  - `division` string, nullable — Employee's division name
  - `divisionId` string, nullable — Employee's division ID
  - `department` string, nullable — Employee's department name
  - `departmentId` string, nullable — Employee's department ID
  - `location` string, nullable — Employee's location name
  - `locationId` string, nullable — Employee's location ID
  - `employmentStatus` string, nullable — Employee's current employment status name
  - `employmentStatusId` string, nullable — Employee's current employment status ID
  - `reportsToName` string, nullable — Name of the employee's manager
  - `reportsToId` string, nullable — Internal employee ID of the employee's manager

## Other responses

- `400` — The `fields` parameter contained more than 400 entries.
- `401` — Unauthorized.
- `403` — The authenticated user does not have permission to view this employee.
- `404` — No employee was found for the supplied ID.

---

[API](https://skmtc.net/bamboohr/apis/bamboohr-api.md) · [All operations](https://skmtc.net/bamboohr/apis/bamboohr-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/bamboohr/bamboohr-api/revisions/19ebf391a399/schema)
