Xero Payroll New Zealand API

Payroll management API for New Zealand businesses using Xero. Supports managing employees, pay runs, pay slips, leave management, and compliance with New Zealand payroll regulations including KiwiSaver and PAYE.

OpenAPI Specification

xero-payroll-nz-openapi.yml Raw ↑
openapi: 3.0.0
info:
  version: 12.0.2
  title: "Xero Payroll NZ"
  description: "This is the Xero Payroll API for orgs in the NZ 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: PayrollNz
servers:
  - description: Xero Payroll NZ 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:
        - PayrollNz
      operationId: getEmployees
      x-hasPayrollUkProblem: true
      summary: Retrieves employees
      parameters:
        - in: query
          name: filter
          description: Filter by first name and/or lastname
          schema:
            type: string
          example: firstName==John,lastName==Smith
        - 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: 00000000-0000-0000-0000-000000000000
                providerName: provider-name
                dateTimeUTC: 2020-08-24T20:16:14.6198711
                httpStatusCode: OK
                pagination:
                  page: 1
                  pageSize: 100
                  pageCount: 1
                  itemCount: 8
                problem: null
                employees:
                  - employeeID: 68342973-c405-4b86-b5d3-d7b877c27995
                    firstName: Casual
                    lastName: Worker
                    dateOfBirth: 1990-12-01T00:00:00
                    gender: M
                    email: null
                    phoneNumber: null
                    startDate: 2019-02-07T00:00:00
                    address:
                      addressLine1: 30 King ST
                      addressLine2: null
                      city: Rangiora
                      suburb: null
                      countryName: NEW ZEALAND
                      postCode: "7400"
                    payrollCalendarID: 9aa56064-990f-4ad3-a189-d966d8f6a030
                    updatedDateUTC: 2019-09-24T05:08:45
                    createdDateUTC: 2019-09-22T23:58:23
                    endDate: null
                    engagementType: Casual
                    fixedTermEndDate: null
                  - employeeID: 1c4f0c92-03ad-43f2-a690-ee51397ece6a
                    firstName: GST
                    lastName: Contractor
                    dateOfBirth: null
                    gender: null
                    email: null
                    phoneNumber: null
                    startDate: 2019-01-30T00:00:00
                    address:
                      addressLine1: null
                      addressLine2: null
                      city: null
                      suburb: null
                      countryName: null
                      postCode: null
                    payrollCalendarID: 9aa56064-990f-4ad3-a189-d966d8f6a030
                    updatedDateUTC: 2019-09-23T00:16:25
                    createdDateUTC: 2019-09-23T00:12:16
                    endDate: null
                    engagementType: null
                    fixedTermEndDate: null
        "400":
          description: validation error for a bad request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Problem"
    post:
      security:
        - OAuth2:
            - payroll.employees
      tags:
        - PayrollNz
      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: 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
      summary: Creates an employees
      parameters:
        - $ref: "#/components/parameters/idempotencyKey"
      responses:
        "200":
          description: search results matching criteria
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/EmployeeObject"
              example:
                id: 00000000-0000-0000-0000-000000000000
                providerName: provider-name
                dateTimeUTC: 2020-08-24T20:27:22.5779577
                httpStatusCode: OK
                pagination: null
                problem: null
                employee:
                  employeeID: 658be485-3feb-402e-9e77-ac17623aad42
                  firstName: Mike
                  lastName: Johntzxzpxhmkgson
                  dateOfBirth: 2000-01-01T00:00:00
                  gender: M
                  email: [email protected]
                  phoneNumber: null
                  startDate: null
                  address:
                    addressLine1: 101 Green St
                    addressLine2: null
                    city: San Francisco
                    suburb: null
                    countryName: null
                    postCode: "4351"
                  payrollCalendarID: null
                  updatedDateUTC: 2020-08-24T20:27:22
                  createdDateUTC: 2020-08-24T20:27:22
                  endDate: null
                  engagementType: null
                  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/Employee"
            example:
              title: Mr
              firstName: Mike
              lastName: Johntzxzpxhmkgson
              dateOfBirth: "2000-01-01"
              address:
                addressLine1: 101 Green St
                city: San Francisco
                postCode: "4351"
                countryName: United Kingdom
              email: [email protected]
              gender: M
  /Employees/{EmployeeID}:
    parameters:
      - $ref: "#/components/parameters/requiredHeader"
    get:
      security:
        - OAuth2:
            - payroll.employees
            - payroll.employees.read
      tags:
        - PayrollNz
      operationId: getEmployee
      x-hasPayrollUkProblem: true
      summary: Retrieves an employees 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: 00000000-0000-0000-0000-000000000000
                providerName: provider-name
                dateTimeUTC: 2020-08-24T20:16:15.3542191
                httpStatusCode: OK
                pagination: null
                problem: null
                employee:
                  employeeID: 68342973-c405-4b86-b5d3-d7b877c27995
                  firstName: Casual
                  lastName: Worker
                  dateOfBirth: 1990-12-01T00:00:00
                  gender: M
                  email: null
                  phoneNumber: null
                  startDate: 2019-02-07T00:00:00
                  address:
                    addressLine1: 30 King ST
                    addressLine2: null
                    city: Rangiora
                    suburb: null
                    countryName: NEW ZEALAND
                    postCode: "7400"
                  payrollCalendarID: 9aa56064-990f-4ad3-a189-d966d8f6a030
                  updatedDateUTC: 2019-09-24T05:08:45
                  createdDateUTC: 2019-09-22T23:58:23
                  endDate: null
                  engagementType: FixedTerm
                  fixedTermEndDate: 2026-01-01T00:00:00
    put:
      security:
        - OAuth2:
            - payroll.employees
      tags:
        - PayrollNz
      operationId: updateEmployee
      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: 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
      summary: Updates an existing 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: 00000000-0000-0000-0000-000000000000
                providerName: provider-name
                dateTimeUTC: 2020-08-24T20:29:43.3452832
                httpStatusCode: OK
                pagination: null
                problem: null
                employee:
                  employeeID: 68342973-c405-4b86-b5d3-d7b877c27995
                  firstName: Tony
                  lastName: Starkgtrzgquusrson
                  dateOfBirth: 1999-01-01T00:00:00
                  gender: M
                  email: [email protected]
                  phoneNumber: null
                  startDate: 2019-02-07T00:00:00
                  address:
                    addressLine1: 101 Green St
                    addressLine2: null
                    city: San Francisco
                    suburb: null
                    countryName: null
                    postCode: "4432"
                  payrollCalendarID: 9aa56064-990f-4ad3-a189-d966d8f6a030
                  updatedDateUTC: 2020-08-24T20:29:43
                  createdDateUTC: 2019-09-22T23:58:23
                  endDate: null
                  engagementType: null
                  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/Employee"
            example:
              title: Mr
              firstName: Tony
              lastName: Starkgtrzgquusrson
              dateOfBirth: "1999-01-01"
              address:
                addressLine1: 101 Green St
                city: San Francisco
                postCode: "4432"
                countryName: United Kingdom
              email: [email protected]
              gender: M
  /Employees/{EmployeeID}/Employment:
    parameters:
      - $ref: "#/components/parameters/requiredHeader"
    post:
      security:
        - OAuth2:
            - payroll.employees
      tags:
        - PayrollNz
      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
        - engagementType:
          is_variable: true
          key: engagementType
          keyPascal: EngagementType
          keySnake: engagement_type
          object: employment
        - fixedTermEndDate:
          is_variable: true
          nonString: true
          key: fixedTermEndDate
          keyPascal: FixedTermEndDate
          keySnake: fixed_term_end_date
          object: employment
          is_last: true
      summary: Creates an employment detail 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/EmploymentObject"
              example:
                id: 00000000-0000-0000-0000-000000000000
                providerName: provider-name
                dateTimeUTC: 2020-08-24T20:53:58.8624623
                httpStatusCode: OK
                pagination: null
                problem: null
                employment:
                  payrollCalendarID: 9aa56064-990f-4ad3-a189-d966d8f6a030
                  startDate: 2020-09-02T00:00:00
                  engagementType: FixedTerm
                  fixedTermEndDate: 2026-01-01T00:00:00
        "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: 9aa56064-990f-4ad3-a189-d966d8f6a030
              startDate: "2020-09-02"
              engagementType: FixedTerm
              fixedTermEndDate: "2026-01-01"
  /Employees/{EmployeeID}/Tax:
    parameters:
      - $ref: "#/components/parameters/requiredHeader"
    get:
      security:
        - OAuth2:
            - payroll.employees
            - payroll.employees.read
      tags:
        - PayrollNz
      operationId: getEmployeeTax
      x-hasPayrollUkProblem: true
      summary: Retrieves tax records for a specific employee
      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: 00000000-0000-0000-0000-000000000000
                providerName: provider-name
                dateTimeUTC: 2020-08-24T20:57:27.5434491
                httpStatusCode: OK
                pagination: null
                problem: null
                employeeTax:
                  irdNumber: "111111111"
                  taxCode: M
                  esctRatePercentage: 17.5
                  isEligibleForKiwiSaver: true
                  hasSpecialStudentLoanRate: false
                  specialStudentLoanRatePercentage: null
                  specialTaxRatePercentage: null
                  kiwiSaverContributions: MakeContributions
                  kiwiSaverOptOutDate: null
                  kiwiSaverContributionHolidayEndDate: null
                  kiwiSaverEmployeeContributionRatePercentage: 3
                  kiwiSaverEmployerContributionRatePercentage: 3
                  kiwiSaverEmployerSalarySacrificeContributionRatePercentage: 0
                  hasStudentLoanBalance: false
                  studentLoanBalance: null
                  studentLoanAsAt: null
    post:
      security:
        - OAuth2:
            - payroll.employees
      tags:
        - PayrollNz
      operationId: updateEmployeeTax
      x-hasPayrollUkProblem: true
      x-example:
        - studentLoanAsAtValue:
          key: studentLoanAsAt
          keyPascal: StudentLoanAsAt
          keySnake: student_loan_as_at
          is_date: true
          java_datatype: LocalDate
          csharp_datatype: DateTime
          default: LocalDate.of(2020, Month.OCTOBER, 30)
          java: LocalDate.of(2020, Month.OCTOBER, 30)
          csharp: new DateTime(2020, 10, 12)
          php: new DateTime('2020-10-30')
          node: "'2020-10-30'"
          python: dateutil.parser.parse('2020-10-30T00:00:00Z')
          ruby: "'YYYY-MM-DD'"
        - employeeTax:
          key: employeeTax
          keyPascal: EmployeeTax
          keySnake: employee_tax
          is_object: true
        - irdNumber:
          key: irdNumber
          keyPascal: IrdNumber
          keySnake: ird_number
          default: 111111111
          object: employeeTax
        - hasSpecialStudentLoanRate:
          key: hasSpecialStudentLoanRate
          keyPascal: HasSpecialStudentLoanRate
          keySnake: has_special_student_loan_rate
          nonString: true
          default: true
          object: employeeTax
        - specialStudentLoanRatePercentage:
          key: specialStudentLoanRatePercentage
          keyPascal: SpecialStudentLoanRatePercentage
          keySnake: special_student_loan_rate_percentage
          nonString: true
          default: 2
          object: employeeTax
        - isEligibleForKiwiSaver:
          key: isEligibleForKiwiSaver
          keyPascal: IsEligibleForKiwiSaver
          keySnake: is_eligible_for_kiwi_saver
          nonString: true
          default: true
          object: employeeTax
        - esctRatePercentage:
          key: esctRatePercentage
          keyPascal: EsctRatePercentage
          keySnake: esct_rate_percentage
          default: 17.5
          nonString: true
          is_money: true
          object: employeeTax
        - kiwiSaverContributions:
          key: kiwiSaverContributions
          keyPascal: KiwiSaverContributions
          keySnake: kiwi_saver_contributions
          nonString: true
          default: DeductionCategory.NzOther
          php: XeroAPI\XeroPHP\Models\PayrollNz\EmployeeTax\KiwiSaverContributionsEnum.MakeContributions
          node: EmployeeTax.KiwiSaverContributionsEnum.MakeContributions
          ruby: XeroRuby::PayrollNz::EmployeeTax::kiwi_saver_contributions_enum::MAKECONTRIBUTIONS
          python: kiwi_saver_contributions_enum::MAKECONTRIBUTIONS
          java: com.xero.models.payrollnz.EmployeeTax.KiwiSaverContributionsEnum.MakeContributions
          csharp: EmployeeTax.KiwiSaverContributionsEnum.MakeContributions
          object: employeeTax
        - kiwiSaverEmployeeContributionRatePercentage:
          key: kiwiSaverEmployeeContributionRatePercentage
          keyPascal: KiwiSaverEmployeeContributionRatePercentage
          keySnake: kiwi_saver_employee_contribution_rate_percentage
          default: 4
          is_money: true
          nonString: true
          object: employeeTax
        - kiwiSaverEmployerSalarySacrificeContributionRatePercentage:
          key: kiwiSaverEmployerSalarySacrificeContributionRatePercentage
          keyPascal: KiwiSaverEmployerSalarySacrificeContributionRatePercentage
          keySnake: kiwi_saver_employer_salary_sacrifice_contribution_rate_percentage
          default: 2
          nonString: true
          object: employeeTax
        - taxCode:
          key: taxCode
          keyPascal: TaxCode
          keySnake: tax_code
          nonString: true
          default: TaxCode.MSL
          php: XeroAPI\XeroPHP\Models\PayrollNz\TaxCode\MSL
          node: TaxCode.MSL
          ruby: XeroRuby::PayrollNz::TaxCode::MSL
          python: tax_code:::MSL
          java: com.xero.models.payrollnz.TaxCode.MSL
          csharp: TaxCode.MSL
          object: employeeTax
        - hasStudentLoanBalance:
          key: hasStudentLoanBalance
          keyPascal: HasStudentLoanBalance
          keySnake: has_student_loan_balance
          nonString: true
          default: true
          object: employeeTax
        - studentLoanBalance:
          key: studentLoanBalance
          keyPascal: StudentLoanBalance
          keySnake: student_loan_balance
          default: 30.0000
          nonString: true
          is_money: true
          object: employeeTax
        - studentLoanAsAt:
          key: studentLoanAsAt
          keyPascal: StudentLoanAsAt
          keySnake: student_loan_as_at
          is_variable: true
          nonString: true
          default: studentLoanAsAt
          python: student_loan_as_at
          ruby: student_loan_as_at
          object: employeeTax
          is_last: true
      summary: Updates the tax records 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/EmployeeTaxObject"
              example:
                id: 00000000-0000-0000-0000-000000000000
                providerName: provider-name
                dateTimeUTC: 2020-08-24T20:57:27.5434491
                httpStatusCode: OK
                pagination: null
                problem: null
                employeeTax:
                  irdNumber: "111111111"
                  taxCode: M
                  esctRatePercentage: 17.5
                  isEligibleForKiwiSaver: true
                  hasSpecialStudentLoanRate: false
                  specialStudentLoanRatePercentage: null
                  specialTaxRatePercentage: null
                  kiwiSaverContributions: MakeContributions
                  kiwiSaverOptOutDate: null
                  kiwiSaverContributionHolidayEndDate: null
                  kiwiSaverEmployeeContributionRatePercentage: 3
                  kiwiSaverEmployerContributionRatePercentage: 3
                  kiwiSaverEmployerSalarySacrificeContributionRatePercentage: 0
                  hasStudentLoanBalance: false
                  studentLoanBalance: null
                  studentLoanAsAt: null
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EmployeeTax"
            example:
              irdNumber: "111111111"
              taxCode: M
              esctRatePercentage: 17.5
              isEligibleForKiwiSaver: true
              hasSpecialStudentLoanRate: false
              specialStudentLoanRatePercentage: null
              specialTaxRatePercentage: null
              kiwiSaverContributions: MakeContributions
              kiwiSaverOptOutDate: null
              kiwiSaverContributionHolidayEndDate: null
              kiwiSaverEmployeeContributionRatePercentage: 3
              kiwiSaverEmployerContributionRatePercentage: 3
              kiwiSaverEmployerSalarySacrificeContributionRatePercentage: 0
              hasStudentLoanBalance: false
              studentLoanBalance: null
              studentLoanAsAt: null
  /Employees/{EmployeeID}/OpeningBalances:
    parameters:
      - $ref: "#/components/parameters/requiredHeader"
    get:
      security:
        - OAuth2:
            - payroll.employees
            - payroll.employees.read
      tags:
        - PayrollNz
      operationId: getEmployeeOpeningBalances
      x-hasPayrollUkProblem: true
      summary: Retrieves the opening balance for a specific employee
      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: 00000000-0000-0000-0000-000000000000
                providerName: provider-name
                dateTimeUTC: 2020-08-28T20:00:07.7343966
                httpStatusCode: OK
                pagination:
                  page: 1
                  pageSize: 100
                  pageCount: 1
                  itemCount: 8
                problem: null
                openingBalances:
                  - periodEndDate: 2020-10-01T00:00:00
                    daysPaid: 3
                    unpaidWeeks: 2
                    grossEarnings: 40
    post:
      security:
        - OAuth2:
            - payroll.employees
      tags:
        - PayrollNz
      operationId: createEmployeeOpeningBalances
      x-hasPayrollUkProblem: true
      summary: Creates opening balances for a specific employee
      x-example:
        - periodEndDateValue:
          key: periodEndDate
          keyPascal: PeriodEndDate
          keySnake: period_end_date
          is_date: true
          java_datatype: LocalDate
          csharp_datatype: DateTime
          default: LocalDate.of(2020, Month.OCTOBER, 30)
          java: LocalDate.of(2020, Month.OCTOBER, 30)
          csharp: new DateTime(2020, 10, 12)
          php: new DateTime('2020-10-30')
          node: "'2020-10-30'"
          python: dateutil.parser.parse('2020-10-30T00:00:00Z')
          ruby: "'YYYY-MM-DD'"
        - employeeOpeningBalance:
          key: employeeOpeningBalance
          keyPascal: EmployeeOpeningBalance
          keySnake: employee_opening_balance
          is_object: true
        - periodEndDate:
          is_variable: true
          nonString: true
          key: periodEndDate
          keyPascal: PeriodEndDate
          keySnake: period_end_date
          default: periodEndDate
          python: period_end_date
          ruby: period_end_date
          object: employeeOpeningBalance
        - daysPaid:
          key: daysPaid
          keyPascal: DaysPaid
          keySnake: days_paid
          default: 5
          nonString: true
          object: employeeOpeningBalance
        - unpaidWeeks:
          key: unpaidWeeks
          keyPascal: UnpaidWeeks
          keySnake: unpaid_weeks
          default: 0
          nonString: true
          object: employeeOpeningBalance
        - grossEarnings:
          key: grossEarnings
          keyPascal: GrossEarnings
          keySnake: gross_earnings
          default: 1730.77
          is_money: true
          nonString: true
          object: employeeOpeningBalance
          is_last: true
        - employeeOpeningBalances:
   

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