Skip to main content
POST
Create a new employee

Authorizations

X-Auth-Token
string
header
required

Access token obtained from OAuth2 client credentials flow

X-Org-Id
string
header
required

Organisation to scope the request to. Required when the principal can access more than one organisation; optional for single-organisation principals (the authorizer resolves it automatically).

Body

application/json
name
object
required
email
string<email>
required
Example:

"john.smith@company.com"

birthGender
enum<string>
required
Available options:
Male,
Female
Example:

"Male"

birthDate
string<date>
required
Example:

"1985-07-23"

hoursWorkedCategory
enum<string>
required
Available options:
UpTo16Hours,
From16To24Hours,
From24To30Hours,
Above30Hours,
Other
Example:

"Above30Hours"

payrollConfigId
string
required

The payroll config to assign the employee to.

Example:

"payroll_config_001"

starterDetails
object
required
taxCodesPerYear
object

Tax codes for the employee per tax year

Example:
niDetails
object

National Insurance details for the employee

phone
string | null
Example:

"+447700900123"

maritalStatus
enum<string> | null
Available options:
Single,
Married,
Divorced,
Widowed,
CivilPartnership,
FormerCivilPartnership,
SurvivorCivilPartnership
Example:

"Married"

salary
number<decimal>
deprecated

Deprecated as input on PUT and PATCH: record salary changes with PUT /employees/{employeeId}/salary instead, which keeps an effective-dated history the pay run pro-rates from. While still accepted, a value that differs from the salary in force today updates the most recent salary version in place; null or absent leaves the history untouched. Accepted unchanged on POST /employees, where it becomes the first salary version effective from the start date. Always populated on responses as the annual salary in force today (or the earliest version when every version is still in the future). Will be removed from input in a future version.

Example:

35000

employeeCode
string | null

Employee code. An optional identifier for the employee.

Example:

"EMP001"

secondaryEmail
string<email> | null
Example:

"john.secondary@company.com"

address
object
bankAccounts
object[]
studentDetails
object

The student details of the employee

Example:
tags
object[]
previousEmployment
object

Earnings from a previous employer in the same tax year. Used for cumulative tax calculations only. Does not affect FPS reporting.

Example:
gender
string | null
Example:

"Male"

secondaryPhone
string | null
Example:

"+447700900124"

passportNumber
string | null
Example:

"123456789"

previousNames
string[]
Example:
directorDetails
object
isIrregularEmployment
boolean | null
Example:

false

isOffPayrollWorker
boolean | null
Example:

false

workplaceDetails
object
workingDays
object

Configuration of employee's working days

partnerDetails
object
department
string | null
Example:

"Engineering"

jobTitle
string | null
Example:

"Software Engineer"

payrollIdChanged
object | null

Records that the employee's payroll id changed, for RTI continuity.

id
string

The unique identifier for the employee. If not provided, a new ULID will be generated.

Example:

"emp_12345"

payrollId
string | null

Payroll ID. This is the ID of the payroll that the employee is associated with when sending the FPS submission to HMRC (payId field). If not provided a new one will be created. But this can affect the submission to HMRC.

Example:

"payroll_2023_001"

leaverDetails
object | null

Leaver details for migrating employees from another system.

openingBalance
object

Opening balance for this employment from a different payroll system (migration).

openingBalanceDirector
object

Opening balance for director earnings from a different payroll system (migration). Only NI-relevant fields.

Response

Employee Created

message
object
content
object
validationIssues
object[]