Xero Payroll United Kingdom API

Payroll management API for UK businesses using Xero. Supports managing employees, pay runs, pay slips, leave, and compliance with UK payroll regulations including PAYE, national insurance, pensions, and Real Time Information (RTI) submissions to HMRC.

OpenAPI Specification

xero-payroll-uk-openapi.yml Raw ↑
openapi: 3.0.0
info:
  version: 12.0.2
  title: "Xero Payroll UK"
  description: "This is the Xero Payroll API for orgs in the UK region."
  termsOfService: "https://developer.xero.com/xero-developer-platform-terms-conditions/"
  contact:
    name: Xero Platform Team
    email: [email protected]
    url: https://developer.xero.com
tags:
  - name: PayrollUk
servers:
  - description: Xero Payroll UK API
    url: https://api.xero.com/payroll.xro/2.0
paths:
  /Employees:
    parameters:
      - $ref: "#/components/parameters/requiredHeader"
    get:
      security:
        - OAuth2:
            - payroll.employees
            - payroll.employees.read
      tags:
        - PayrollUk
      operationId: getEmployees
      x-hasPayrollUkProblem: true
      summary: Retrieves employees
      parameters:
        - in: query
          name: filter
          description: Filter by first name, lastname, and/or whether they are an off-payroll worker
          schema:
            type: string
          example: firstName==John,lastName==Smith,isOffPayrollWorker==false
        - in: query
          name: page
          description: Page number which specifies the set of records to retrieve. By default the number of the records per set is 100.
          schema:
            type: integer
          example: 5
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Employees"
              example:
                id: 1a14e877-773d-4cd3-b253-f559a4b4be65
                providerName: provider-name
                dateTimeUTC: 2020-03-24T18:43:43.860852
                httpStatusCode: OK
                pagination:
                  page: 1
                  pageSize: 100
                  pageCount: 1
                  itemCount: 3
                problem: null
                employees:
                  - employeeID: aad6b292-7b94-408b-93f6-e489867e3fb0
                    firstName: Jack
                    lastName: Allan
                    dateOfBirth: 1987-12-23T00:00:00Z
                    gender: M
                    email: null
                    phoneNumber: null
                    startDate: 2020-02-03T00:00:00
                    address:
                      addressLine1: 171 Midsummer Boulevard
                      city: Milton Keynes
                      county: null
                      countryName: UNITED KINGDOM
                      postCode: MK9 1EB
                    payrollCalendarID: 216d80e6-af55-47b1-b718-9457c3f5d2fe
                    updatedDateUTC: 2020-02-13T16:23:31
                    createdDateUTC: 2020-02-10T10:00:24
                    isOffPayrollWorker: false
                    contracts: []
                  - employeeID: 67e545d4-e8a6-4f98-9f63-85c2383dfe12
                    firstName: Charlotte
                    lastName: Danes
                    dateOfBirth: 1993-10-24T00:00:00Z
                    gender: F
                    email: null
                    phoneNumber: null
                    startDate: 2020-02-03T00:00:00
                    address:
                      addressLine1: 171 Midsummer Blvd
                      city: Milton Keynes
                      county: null
                      countryName: UNITED KINGDOM
                      postCode: MK9 1EB
                    payrollCalendarID: 5e813d9e-949c-461f-8a89-e9ee8955a254
                    updatedDateUTC: 2020-02-13T16:48:51
                    createdDateUTC: 2020-02-13T16:32:12
                    isOffPayrollWorker: false
                    contracts:
                      - publicKey: b4d71548-2800-4fb9-be6c-d496a617428c
                        isFixedTerm: false
                        employmentStatus: Employee
                        contractType: PartTime
                        startDate: 2020-02-03T00:00:00
                        fixedTermEndDate: null
                  - employeeID: eb4a0c3b-b0d6-440d-bccc-348b7dc92321
                    firstName: Chelsea
                    lastName: Serati
                    dateOfBirth: 1976-02-16T00:00:00Z
                    gender: F
                    email: null
                    phoneNumber: null
                    startDate: 2019-07-01T00:00:00
                    address:
                      addressLine1: 171 Midsummer Boulevard
                      city: Milton Keynes
                      county: null
                      countryName: UNITED KINGDOM
                      postCode: MK9 1EB
                    payrollCalendarID: d45bc68f-59d6-4000-929d-1058dcfa79e1
                    updatedDateUTC: 2020-02-13T16:53:12
                    createdDateUTC: 2020-02-13T16:46:41
                    isOffPayrollWorker: false
                    contracts:
                      - publicKey: 3a8243d5-a14a-4c06-a71b-930194928ee9
                        isFixedTerm: false
                        employmentStatus: Worker
                        contractType: PartTime
                        startDate: 2019-07-01T00:00:00
                        fixedTermEndDate: null
                      - publicKey: ce4fe24d-bb85-4b17-a461-3e56917457d6
                        isFixedTerm: true
                        employmentStatus: Employee
                        contractType: FullTime
                        startDate: 2020-07-01T00:00:00
                        fixedTermEndDate: 2026-08-01T00:00:00
                        developmentalRoleDetails:
                          developmentalRolePublicKey: 05bceb91-89c0-4ecc-864c-32a874143770
                          startDate: 2020-07-01T00:00:00
                          endDate: 2026-06-30T00:00:00
                          developmentalRole: Apprentice
        "400":
          description: validation error for a bad request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Problem"
    post:
      security:
        - OAuth2:
            - payroll.employees
      tags:
        - PayrollUk
      operationId: createEmployee
      x-hasPayrollUkProblem: true
      x-example:
        - dateOfBirthValue:
          key: dateOfBirth
          keyPascal: DateOfBirth
          keySnake: date_of_birth
          is_date: true
          object: employee
          java_datatype: LocalDate
          csharp_datatype: DateTime
          default: LocalDate.of(2000, Month.OCTOBER, 28)
          java: LocalDate.of(2000, Month.OCTOBER, 28)
          csharp: new DateTime(2000, 10, 10)
          php: new DateTime('2000-10-28')
          node: "'2000-10-28'"
          python: dateutil.parser.parse('2000-10-28T00:00:00Z')
          ruby: "'YYYY-MM-DD'"
        - Address:
          key: address
          keyPascal: Address
          keySnake: address
          is_object: true
        - addressLine1:
          key: addressLine1
          keyPascal: AddressLine1
          keySnake: address_line_1
          default: 123 Test st
          object: address
        - city:
          key: city
          keyPascal: City
          keySnake: city
          object: address
          default: Rangiora
        - postCode:
          key: postCode
          keyPascal: PostCode
          keySnake: post_code
          object: address
          default: 7400
        - countryName:
          key: countryName
          keyPascal: CountryName
          keySnake: country_name
          default: UNITED KINGDOM
          object: address
          is_last: true
        - employee:
          key: employee
          keyPascal: Employee
          is_object: true
        - firstName:
          key: firstName
          keyPascal: FirstName
          keySnake: first_name
          default: Adam
          object: employee
        - lastName:
          key: lastName
          keyPascal: LastName
          keySnake: last_name
          default: Adamson
          object: employee
        - dateOfBirth:
          is_variable: true
          nonString: true
          key: dateOfBirth
          keyPascal: DateOfBirth
          keySnake: date_of_birth
          default: dateOfBirth
          python: date_of_birth
          ruby: date_of_birth
          object: employee
        - setHomeAddress:
          is_last: true
          is_variable: true
          nonString: true
          key: address
          keyPascal: Address
          default: address
          python: address
          ruby: address
          object: employee
      summary: Creates employees
      parameters:
        - $ref: "#/components/parameters/idempotencyKey"
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/EmployeeObject"
              example:
                id: 660ff206-fc4a-42f5-8f7d-de886bc2a3d3
                providerName: provider-name
                dateTimeUTC: 2020-03-25T03:12:10.406476
                httpStatusCode: OK
                pagination: null
                problem: null
                employee:
                  employeeID: 316146c7-26a4-4065-b9bd-346d0557ea96
                  title: Mr
                  firstName: Mike
                  lastName: Fancy
                  dateOfBirth: 1999-01-01
                  gender: M
                  email: [email protected]
                  phoneNumber: null
                  startDate: null
                  nationalInsuranceNumber: null
                  isOffPayrollWorker: false
                  address:
                    addressLine1: 171 Midsummer
                    city: Milton Keyness
                    county: null
                    countryName: UNITED KINGDOM
                    postCode: MK9 1EB
                  payrollCalendarID: null
                  updatedDateUTC: "2020-03-25T03:12:10Z"
                  createdDateUTC: "2020-03-25T03:12:10Z"
                  niCategory: null
                  employeeNumber: null
        "400":
          description: validation error for a bad request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Problem"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Employee"
            example:
              title: Mr
              firstName: Mike
              lastName: Fancy
              dateOfBirth: 1999-01-01T00:00:00Z
              gender: M
              email: [email protected]
              isOffPayrollWorker: false
              address:
                addressLine1: 171 Midsummer
                city: Milton Keyness
                postCode: MK9 1EB
  /Employees/{EmployeeID}:
    parameters:
      - $ref: "#/components/parameters/requiredHeader"
    get:
      security:
        - OAuth2:
            - payroll.employees
            - payroll.employees.read
      tags:
        - PayrollUk
      operationId: getEmployee
      x-hasPayrollUkProblem: true
      summary: Retrieves specific employees by using a unique employee ID
      parameters:
        - name: EmployeeID
          x-snake: employee_id
          in: path
          required: true
          description: Employee id for single object
          schema:
            type: string
            format: uuid
            example: 4ff1e5cc-9835-40d5-bb18-09fdb118db9c
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/EmployeeObject"
              example:
                id: 9414291b-a8c6-08fa-b165-9b30b1e6aab5
                providerName: "!YLT5Y"
                dateTimeUTC: "2018-04-09T05:15:18.1011141"
                httpStatusCode: OK
                pagination: null
                employee:
                  employeeID: d17e008e-3381-45c0-b50c-2fab7757e503
                  title: Mr.
                  firstName: Edgar
                  lastName: Allan Po
                  dateOfBirth: "1985-03-24"
                  gender: M
                  email: [email protected]
                  phoneNumber: "0400123456"
                  nationalInsuranceNumber: "AB123456C"
                  isOffPayrollWorker: false
                  address:
                    addressLine1: 171 Midsummer
                    city: Milton Keyness
                    county: null
                    countryName: UNITED KINGDOM
                    postCode: MK9 1EB
                  payrollCalendarID: 216d80e6-af55-47b1-b718-9457c3f5d2fe
                  updatedDateUTC: "2017-05-12T10:00:24Z"
                  createdDateUTC: "2017-05-12T10:00:24Z"
                  niCategories:
                    - startDate: "2020-05-01"
                      niCategory: I
                      workplacePostcode: SW1A 1AA
                    - startDate: "2020-05-02"
                      niCategory: F
                      niCategoryID: 1
                      dateFirstEmployedAsCivilian: "2020-05-01"
                      workplacePostcode: SW1A 1AA
                  employeeNumber: "2"
                  contracts:
                    - publicKey: a3d71548-2800-4fb9-be6c-d496a617428c
                      isFixedTerm: false
                      employmentStatus: Employee
                      contractType: PartTime
                      startDate: 2020-05-01T00:00:00
                      fixedTermEndDate: null
    put:
      security:
        - OAuth2:
            - payroll.employees
      tags:
        - PayrollUk
      operationId: updateEmployee
      x-hasPayrollUkProblem: true
      summary: Updates a specific employee's detail
      x-example:
        - dateOfBirthValue:
          key: dateOfBirth
          keyPascal: DateOfBirth
          keySnake: date_of_birth
          is_date: true
          object: employee
          java_datatype: LocalDate
          csharp_datatype: DateTime
          default: LocalDate.of(2000, Month.OCTOBER, 28)
          java: LocalDate.of(2000, Month.OCTOBER, 28)
          csharp: new DateTime(2000, 10, 10)
          php: new DateTime('2000-10-28')
          node: "'2000-10-28'"
          python: dateutil.parser.parse('2000-10-28T00:00:00Z')
          ruby: "'YYYY-MM-DD'"
        - Address:
          key: address
          keyPascal: Address
          keySnake: address
          is_object: true
        - addressLine1:
          key: addressLine1
          keyPascal: AddressLine1
          keySnake: address_line_1
          default: 123 Test st
          object: address
        - city:
          key: city
          keyPascal: City
          keySnake: city
          object: address
          default: Rangiora
        - postCode:
          key: postCode
          keyPascal: PostCode
          keySnake: post_code
          object: address
          default: 7400
        - countryName:
          key: countryName
          keyPascal: CountryName
          keySnake: country_name
          default: NEW ZEALAND
          object: address
          is_last: true
        - employee:
          key: employee
          keyPascal: Employee
          is_object: true
        - firstName:
          key: firstName
          keyPascal: FirstName
          keySnake: first_name
          default: Adam
          object: employee
        - lastName:
          key: lastName
          keyPascal: LastName
          keySnake: last_name
          default: Adamson
          object: employee
        - dateOfBirth:
          is_variable: true
          nonString: true
          key: dateOfBirth
          keyPascal: DateOfBirth
          keySnake: date_of_birth
          default: dateOfBirth
          python: date_of_birth
          ruby: date_of_birth
          object: employee
        - setHomeAddress:
          is_last: true
          is_variable: true
          nonString: true
          key: address
          keyPascal: Address
          default: address
          python: address
          ruby: address
          object: employee
      parameters:
        - $ref: "#/components/parameters/idempotencyKey"
        - name: EmployeeID
          x-snake: employee_id
          in: path
          required: true
          description: Employee id for single object
          schema:
            type: string
            format: uuid
            example: 4ff1e5cc-9835-40d5-bb18-09fdb118db9c
      responses:
        "200":
          description: successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/EmployeeObject"
              example:
                id: 9414291b-a8c6-08fa-b165-9b30b1e6aab5
                providerName: "!YLT5Y"
                dateTimeUTC: 2018-04-09T05:10:51.3504472
                httpStatusCode: OK
                pagination: null
                problem: null
                employee:
                  employeeID: 07f0f9fc-cc95-46ac-9a8a-aa03779f2bde
                  title: Mr
                  firstName: Mike
                  lastName: Johnllsbkrhwopson
                  dateOfBirth: 1999-01-01
                  gender: M
                  email: [email protected]
                  phoneNumber: "0400123456"
                  startDate: "2020-02-03"
                  nationalInsuranceNumber: null
                  isOffPayrollWorker: false
                  address:
                    addressLine1: 101 Green St
                    city: San Francisco
                    county: null
                    countryName: null
                    postCode: 6TGR4F
                  payrollCalendarID: 216d80e6-af55-47b1-b718-9457c3f5d2fe
                  updatedDateUTC: "2020-03-25T17:03:50Z"
                  createdDateUTC: "2020-02-10T10:00:24Z"
        "400":
          description: validation error for a bad request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Problem"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Employee"
            example:
              title: Mr.
              firstName: TestDataUK
              lastName: Tester
              dateOfBirth: 1992-11-22T00:00:00Z
              gender: M
              email: [email protected]
              phoneNumber: "0400123456"
              isOffPayrollWorker: false
              address:
                addressLine1: 171 Midsummer
                city: Milton Keyness
                postCode: MK9 1EB
  /Employees/{EmployeeID}/Employment:
    parameters:
      - $ref: "#/components/parameters/requiredHeader"
    post:
      security:
        - OAuth2:
            - payroll.employees
      tags:
        - PayrollUk
      operationId: createEmployment
      x-hasPayrollUkProblem: true
      x-example:
        - startDateValue:
          key: startDate
          keyPascal: StartDate
          keySnake: start_date
          is_date: true
          java_datatype: LocalDate
          csharp_datatype: DateTime
          default: LocalDate.of(2020, Month.OCTOBER, 28)
          java: LocalDate.of(2020, Month.OCTOBER, 28)
          csharp: new DateTime(2020, 10, 10)
          php: new DateTime('2020-10-28')
          node: "'2020-10-28'"
          python: dateutil.parser.parse('2020-10-28T00:00:00Z')
          ruby: "'YYYY-MM-DD'"
        - employment:
          key: employment
          keyPascal: Employment
          keySnake: employment
          is_object: true
        - payrollCalendarID:
          key: payrollCalendarID
          keyPascal: PayrollCalendarID
          keySnake: payroll_calendar_id
          is_uuid: true
          default: 00000000-0000-0000-0000-000000000000
          object: employment
        - startDate:
          is_variable: true
          nonString: true
          key: startDate
          keyPascal: StartDate
          keySnake: start_date
          default: startDate
          python: start_date
          ruby: start_date
          object: employment
          is_last: true
        - niCategories:
          key: niCategories
          keyPascal: NICategories
          keySnake: ni_categories
          is_object: true
          object: employment
          default: A
      summary: Creates employment detail for a specific employee using a unique employee ID
      parameters:
        - $ref: "#/components/parameters/idempotencyKey"
        - name: EmployeeID
          x-snake: employee_id
          in: path
          required: true
          description: Employee id for single object
          schema:
            type: string
            format: uuid
            example: 4ff1e5cc-9835-40d5-bb18-09fdb118db9c
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/EmploymentObject"
              example:
                id: 0160a355-1e6d-4fdc-9532-c0857feaa515
                providerName: provider-name
                dateTimeUTC: "2020-03-26T18:09:11.6235442"
                httpStatusCode: OK
                pagination:
                problem:
                employment:
                  payrollCalendarID: 216d80e6-af55-47b1-b718-9457c3f5d2fe
                  startDate: "2020-04-01T00:00:00"
                  niCategories:
                    - niCategory: I
                      startDate: "2020-05-01"
                      niCategoryID: 594
                      dateFirstEmployedAsCivilian: "2020-05-01"
                      workplacePostcode: SW1A 1AA
                  employeeNumber: 123ABC
                  contracts:
                    - publicKey: ddd71548-2800-4fb9-be6c-d496a617428c
                      isFixedTerm: false
                      employmentStatus: Employee
                      contractType: FullTime
                      startDate: 2020-04-01T00:00:00
                      fixedTermEndDate: null
        "400":
          description: validation error for a bad request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Problem"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Employment"
            example:
              payrollCalendarID: cdfb8371-0b21-4b8a-8903-1024df6c391e
              startDate: "2024-04-01"
              niCategories:
                - niCategory: I
                  startDate: "2020-05-01"
                  workplacePostcode: SW1A 1AA
              employeeNumber: 123ABC
  /Employees/{EmployeeID}/Tax:
    parameters:
      - $ref: "#/components/parameters/requiredHeader"
    get:
      security:
        - OAuth2:
            - payroll.employees
            - payroll.employees.read
      tags:
        - PayrollUk
      operationId: getEmployeeTax
      x-hasPayrollUkProblem: true
      summary: Retrieves tax records for a specific employee using a unique employee ID
      parameters:
        - name: EmployeeID
          x-snake: employee_id
          in: path
          required: true
          description: Employee id for single object
          schema:
            type: string
            format: uuid
            example: 4ff1e5cc-9835-40d5-bb18-09fdb118db9c
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/EmployeeTaxObject"
              example:
                id: a8577248-393a-4e7a-8a03-b43b90800b69
                providerName: provider-name
                dateTimeUTC: 2020-03-27T00:14:41.2462046
                httpStatusCode: OK
                pagination: null
                problem: null
                employeeTax:
                  starterType: New Employee with P45
                  starterDeclaration: B.) This is currently their only job
                  taxCode: 1185L
                  w1M1: false
                  previousTaxablePay: 2000
                  previousTaxPaid: 200
                  studentLoanDeduction: null
                  hasPostGraduateLoans: false
                  isDirector: false
                  directorshipStartDate: null
                  nicCalculationMethod: null
  /Employees/{EmployeeID}/ukopeningbalances:
    parameters:
      - $ref: "#/components/parameters/requiredHeader"
    get:
      security:
        - OAuth2:
            - payroll.employees
            - payroll.employees.read
      tags:
        - PayrollUk
      operationId: getEmployeeOpeningBalances
      x-hasPayrollUkProblem: true
      summary: Retrieves a specific employee's openingbalances using a unique employee ID
      parameters:
        - name: EmployeeID
          x-snake: employee_id
          in: path
          required: true
          description: Employee id for single object
          schema:
            type: string
            format: uuid
            example: 4ff1e5cc-9835-40d5-bb18-09fdb118db9c
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/EmployeeOpeningBalancesObject"
              example:
                id: ab1c33de-1927-4210-bf4f-2a55965cb4a9
                providerName: provider-name
                dateTimeUTC: 2020-03-27T01:13:00.6591505
                httpStatusCode: OK
                pagination: null
                problem: null
                openingBalances:
                  statutoryAdoptionPay: 10
                  statutoryMaternityPay: 10
                  statutoryPaternityPay: 10
                  statutorySharedParentalPay: 10
                  statutorySickPay: 10
                  priorEmployeeNumber: "10.0"
    post:
      security:
        - OAuth2:
            - payroll.employees
      tags:
        - PayrollUk
      operationId: createEmployeeOpeningBalances
      x-hasPayrollUkProblem: true
      x-example:
        - employeeOpeningBalances:
          key: employeeOpeningBalances
          keyPascal: EmployeeOpeningBalances
          keySnake: employee_opening_balances
          is_object: true
        - statutoryMaternityPay:
          key: statutoryMaternityPay
          keyPascal: StatutoryMaternityPay
          keySnake: statutory_maternity_pay
          is_money: true
          nonString: true
          default: 0.0
          object: employeeOpeningBalances
        - statutoryAdoptionPay:
          key: statutoryAdoptionPay
          keyPascal: StatutoryAdoptionPay
          keySnake: statutory_adoption_pay
          is_money: true
          nonString: true
          default: 100.0
          object: employeeOpeningBalances
        - statutoryPaternityPay:
          key: statutoryPaternityPay
          keyPascal: StatutoryPaternityPay
          keySnake: statutory_paternity_pay
          is_money: true
          nonString: true
          default: 0.0
          object: employeeOpeningBalances
        - statutorySharedParentalPay:
          key: statutorySharedParentalPay
          keyPascal: StatutorySharedParentalPay
          keySnake: statutory_shared_parental_pay
          is_money: true
          nonString: true
          default: 0.0
          object: employeeOpeningBalances
        - statutorySickPay:
          key: statutorySickPay
          keyPascal: StatutorySickPay
          keySnake: statutory_sick_pay
          is_money: true
          nonString: true
          default: 0.0
          object: employeeOpeningBalances
          is_last: true
      summary: Creates an opening balance for a specific employee
      parameters:
        - $ref: "#/components/parameters/idempotencyKey"
        - name: EmployeeID
          x-snake: employee_id
          in: path
          required: true
          description: Employee id for single object
          schema:
            type: string
            format: uuid
            example: 4ff1e5cc-9835-40d5-bb18-09fdb118db9c
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/EmployeeOpeningBalancesObject"
              example:
                id: 0d30ef37-2fb4-4925-b563-faaee361c9cd
                providerName: provider-name
                dateTimeUTC: 2020-03-27T01:06:14.47566
                httpStatusCode: OK
                pagination: null
                problem: null
                openingBalances: null
        "400":
          description: validation error for a bad request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Problem"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EmployeeOpeningBalances"
            example:
              statutoryAdoptionPay: 10
              statutoryMaternityPay: 10
              statutoryPaternityPay: 10
              statutorySharedParentalPay: 10
              statutorySickPay: 10
              priorEmployeeNumber: 10
    put:
      security:
        - OAuth2:
            - payroll.employees
      tags:
        - PayrollUk
      operationId: updateEmployeeOpeningBalances
      x-hasPayrollUkProblem: true
      x-example:
        - employeeOpeningBalances:
          key: employeeOpeningBalances
          keyPascal: EmployeeOpeningBalances
          keySnake: employee_opening_balances
          is_object: true
        - statutoryMaternityPay:
          key: statutoryMaternityPay
          keyPascal: StatutoryMaternityPay
          keySnake: statutory_maternity_pay
          is_money: true
          nonString: true
          default: 0.0
          object: employeeOpeningBalances
        - statutoryAdoptionPay:
          key: statutoryAdoptionPay
          keyPascal: StatutoryAdoptionPay
          keySnake: statutory_adoption_pay
          is_money: true
          nonString: true
          default: 100.0
          object: employeeOpeningBalances
        - statutoryPaternityPay:
          key: statutoryPaternityPay
          keyPascal: StatutoryPaternityPay
          keySnake: statutory_paternity_pay
          is_money: true
          nonString: true
          default: 0.0
          object: employeeOpeningBalances
        - statutorySharedParentalPay:
          key: statutorySharedParentalPay
          keyPascal: StatutorySharedParentalPay
          keySnake: statutory_shared_parental_pay
          is_money: true
          nonString: true
          default: 0.0
          object: employeeOpeningBalances
        - statutorySickPay:
          key: statutorySickPay
          keyPascal: StatutorySickPay
          keySnake: statutory_sick_pay
          is_money: true
          nonString: true
          default: 0.0
          object: employeeOpeningBalances
          is_last: true
      summary: Updates a specific employee's opening balances
      parameters:
        - $ref: "#/components/parameters/idempotencyKey"
        - name: EmployeeID
          x-snake: employee_id
          in: path
          required: true
          description: Employee id for single object
          schema:
            type: string
            format: uuid
            example: 4ff1e5cc-9835-40d5-bb18-09fdb118db9c
      responses:
        "200":
          description: successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/EmployeeOpeningBalancesObject"
              example:
                id: 21953776-783c-426c-bf15-cbde997839c4
                providerName: provider-name
                dateTimeUTC: 2020-03-27T15:45:09.7078637
                httpStatusCode: OK
                pagination: null
                problem: null
                openingBalances: null
        "400":
          description: validation error for a bad request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Problem"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EmployeeOpeningBalances"
            example:
              statutoryAdoptionPay: 20
              statutoryMaternityPay: 20
              statutoryPaternityPay: 2

# --- truncated at 32 KB (257 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/xero/refs/heads/main/openapi/xero-payroll-uk-openapi.yml