openapi: 3.0.1
info:
  title: Encompass.Api
  version: '1.0'
paths:
  /companies/{companyId}/benefits/company:
    post:
      tags:
        - Benefits - Company
      operationId: Create Company Benefit
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCompanyBenefitRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyBenefit'
    get:
      tags:
        - Benefits - Company
      operationId: Query Company Benefits
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: description
          in: query
          schema:
            type: string
        - name: period
          in: query
          schema:
            $ref: '#/components/schemas/BenefitPeriod'
        - name: type
          in: query
          schema:
            $ref: '#/components/schemas/BenefitType'
        - name: effective
          in: query
          schema:
            type: string
            format: date
        - name: employeeContributionAmountAbove
          in: query
          schema:
            type: number
            format: double
        - name: employeeContributionPercentAbove
          in: query
          schema:
            type: number
            format: double
        - name: companyContributionAmountAbove
          in: query
          schema:
            type: number
            format: double
        - name: companyContributionPercentAbove
          in: query
          schema:
            type: number
            format: double
        - name: employeeContributionAmountBelow
          in: query
          schema:
            type: number
            format: double
        - name: employeeContributionPercentBelow
          in: query
          schema:
            type: number
            format: double
        - name: companyContributionAmountBelow
          in: query
          schema:
            type: number
            format: double
        - name: companyContributionPercentBelow
          in: query
          schema:
            type: number
            format: double
        - name: page
          in: query
          schema:
            type: integer
            format: int32
            default: 1
        - name: pageSize
          in: query
          schema:
            type: integer
            format: int32
            default: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyBenefitApiQueryResponse'
  /companies/{companyId}/benefits/company/{benefitId}:
    get:
      tags:
        - Benefits - Company
      operationId: Get Company Benefit
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: benefitId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyBenefit'
    patch:
      tags:
        - Benefits - Company
      operationId: Update Company Benefit
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: benefitId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCompanyBenefitRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyBenefit'
    delete:
      tags:
        - Benefits - Company
      operationId: Delete Company Benefit
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: benefitId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
  /companies/{companyId}/benefits/employee:
    post:
      tags:
        - Benefits - Employee
      operationId: Create Employee Benefit
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEmployeeBenefitRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmployeeBenefit'
    get:
      tags:
        - Benefits - Employee
      operationId: Query Employee Benefits
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: employeeId
          in: query
          schema:
            type: string
        - name: description
          in: query
          schema:
            type: string
        - name: period
          in: query
          schema:
            $ref: '#/components/schemas/BenefitPeriod'
        - name: type
          in: query
          schema:
            $ref: '#/components/schemas/BenefitType'
        - name: hsaContributionLimit
          in: query
          schema:
            $ref: '#/components/schemas/HsaContributionLimit'
        - name: effective
          in: query
          schema:
            type: string
            format: date
        - name: employeeContributionAmountAbove
          in: query
          schema:
            type: number
            format: double
        - name: employeeContributionPercentAbove
          in: query
          schema:
            type: number
            format: double
        - name: companyContributionAmountAbove
          in: query
          schema:
            type: number
            format: double
        - name: companyContributionPercentAbove
          in: query
          schema:
            type: number
            format: double
        - name: employeeContributionAmountBelow
          in: query
          schema:
            type: number
            format: double
        - name: employeeContributionPercentBelow
          in: query
          schema:
            type: number
            format: double
        - name: companyContributionAmountBelow
          in: query
          schema:
            type: number
            format: double
        - name: companyContributionPercentBelow
          in: query
          schema:
            type: number
            format: double
        - name: page
          in: query
          schema:
            type: integer
            format: int32
            default: 1
        - name: pageSize
          in: query
          schema:
            type: integer
            format: int32
            default: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmployeeBenefitApiQueryResponse'
  /companies/{companyId}/benefits/employee/{benefitId}:
    get:
      tags:
        - Benefits - Employee
      operationId: Get Employee Benefit
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: benefitId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmployeeBenefit'
    patch:
      tags:
        - Benefits - Employee
      operationId: Update Employee Benefit
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: benefitId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateEmployeeBenefitRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmployeeBenefit'
    delete:
      tags:
        - Benefits - Employee
      operationId: Delete Employee Benefit
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: benefitId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
  /companies:
    post:
      tags:
        - Companies
      operationId: Create Company
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCompanyRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Company'
    get:
      tags:
        - Companies
      operationId: Queries Companies
      parameters:
        - name: id
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: corporationId
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: partnerId
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: status
          in: query
          schema:
            $ref: '#/components/schemas/CompanyStatus'
        - name: search
          in: query
          schema:
            type: string
        - name: includeId
          in: query
          schema:
            type: boolean
            default: true
        - name: includeCorporationId
          in: query
          schema:
            type: boolean
            default: true
        - name: includePartnerId
          in: query
          schema:
            type: boolean
            default: true
        - name: includeStatus
          in: query
          schema:
            type: boolean
            default: true
        - name: includeSearch
          in: query
          schema:
            type: boolean
            default: true
        - name: page
          in: query
          schema:
            type: integer
            format: int32
            default: 1
        - name: pageSize
          in: query
          schema:
            type: integer
            format: int32
            default: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyApiQueryResponse'
  /companies/{companyId}:
    get:
      tags:
        - Companies
      operationId: Get Company
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Company'
    patch:
      tags:
        - Companies
      operationId: Update Company
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCompanyRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Company'
  /companies/{companyId}/start_payroll:
    post:
      tags:
        - Companies
      operationId: Start Payroll
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StartPayrollRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Company'
  /companies/{companyId}/signatories:
    post:
      tags:
        - Companies
      operationId: Create Signatory
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSignatoryRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Signatory'
    get:
      tags:
        - Companies
      operationId: Query Signatories
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: cursor
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SignatoryApiListResponse'
  /companies/{companyId}/onboard/signatory_agreements:
    post:
      tags:
        - Companies
      operationId: Company Signatory Agreements
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CompanyAuthorizedSignerRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
  /companies/{companyId}/onboard/employee_setup:
    post:
      tags:
        - Companies
      operationId: Company Employee Setup
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
  /companies/{companyId}/onboard/connect_bank_account:
    post:
      tags:
        - Companies
      operationId: Company Connect Bank Account
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CompanyAuthorizedSignerRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
  /companies/{companyId}/onboard/tax_setup:
    post:
      tags:
        - Companies
      operationId: Company Tax Setup
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CompanyAuthorizedSignerRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
  /companies/{companyId}/onboard/filing_authorization:
    post:
      tags:
        - Companies
      operationId: Company Filing Authorization
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CompanyAuthorizedSignerRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
  /companies/{companyId}/onboard/verification_documents:
    post:
      tags:
        - Companies
      operationId: Company Verification Documents
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
  /companies/{companyId}/onboard/accounting_integration:
    post:
      tags:
        - Companies
      operationId: Company Accounting Integration
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
  /companies/{companyId}/start_implementation:
    post:
      tags:
        - Companies
      operationId: Start Payroll Implementation
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Company'
  /companies/{companyId}/cancel_implementation:
    post:
      tags:
        - Companies
      operationId: Cancel Payroll Implementation
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
  /companies/{companyId}/tax_deposits:
    get:
      tags:
        - Companies
      operationId: Tax Deposits
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: startDate
          in: query
          schema:
            type: string
            format: date
        - name: endDate
          in: query
          schema:
            type: string
            format: date
        - name: cursor
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaxDepositApiListResponse'
  /companies/{companyId}/contractors:
    post:
      tags:
        - Contractors
      operationId: Create Contractor
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateContractorRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contractor'
    get:
      tags:
        - Contractors
      operationId: Query Contractors
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: workplaceId
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: departmentId
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: state
          in: query
          required: true
          schema:
            type: array
            items:
              $ref: '#/components/schemas/USState'
        - name: search
          in: query
          schema:
            type: string
        - name: active
          in: query
          schema:
            type: boolean
        - name: includeSearch
          in: query
          schema:
            type: boolean
            default: true
        - name: includeId
          in: query
          schema:
            type: boolean
            default: true
        - name: includeWorkplaceId
          in: query
          schema:
            type: boolean
            default: true
        - name: includeDepartmentId
          in: query
          schema:
            type: boolean
            default: true
        - name: includeState
          in: query
          schema:
            type: boolean
            default: true
        - name: page
          in: query
          schema:
            type: integer
            format: int32
            default: 1
        - name: pageSize
          in: query
          schema:
            type: integer
            format: int32
            default: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContractorApiQueryResponse'
  /companies/{companyId}/contractors/{contractorId}:
    get:
      tags:
        - Contractors
      operationId: Get Contractor
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: contractorId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contractor'
    patch:
      tags:
        - Contractors
      operationId: Update Contractor
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: contractorId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateContractorRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contractor'
  /companies/{companyId}/contractors/{contractorId}/paystubs/{payrollId}:
    get:
      tags:
        - Contractors
      operationId: Get Contractor Paystub
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: contractorId
          in: path
          required: true
          schema:
            type: string
        - name: payrollId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContractorPaystub'
  /companies/{companyId}/contractors/{contractorId}/paystubs:
    get:
      tags:
        - Contractors
      operationId: Query Contractor Paystubs
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: contractorId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContractorPaystubApiListResponse'
  /companies/{companyId}/contractors/{contractorId}/paystubs/{payrollId}/download:
    get:
      tags:
        - Contractors
      operationId: Download Contractor Paystub
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: contractorId
          in: path
          required: true
          schema:
            type: string
        - name: payrollId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileData'
  /companies/{companyId}/contractors/{contractorId}/forms:
    get:
      tags:
        - Contractors
      operationId: Query Contractor Forms
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: contractorId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayrollFormDocumentApiListResponse'
  /companies/{companyId}/contractors/{contractorId}/forms/{formId}:
    get:
      tags:
        - Contractors
      operationId: Get Contractor Form
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: contractorId
          in: path
          required: true
          schema:
            type: string
        - name: formId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayrollForm'
  /companies/{companyId}/contractors/{contractorId}/forms/{formId}/preview:
    post:
      tags:
        - Contractors
      operationId: Preview Contractor Form
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: contractorId
          in: path
          required: true
          schema:
            type: string
        - name: formId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitContractorFormRequest'
        required: true
      responses:
        '200':
          description: OK
  /companies/{companyId}/contractors/{contractorId}/forms/{formId}/submit:
    post:
      tags:
        - Contractors
      operationId: Submit Contractor Form
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: contractorId
          in: path
          required: true
          schema:
            type: string
        - name: formId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitContractorFormRequest'
        required: true
      responses:
        '200':
          description: OK
  /companies/{companyId}/contractors/{contractorId}/bank_accounts:
    post:
      tags:
        - Contractors
      operationId: Create Contractor Bank Account
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: contractorId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateBankAccountRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BankAccount'
    get:
      tags:
        - Contractors
      operationId: Query Contractor Bank Accounts
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: contractorId
          in: path
          required: true
          schema:
            type: string
        - name: cursor
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BankAccountApiListResponse'
  /companies/{companyId}/contractors/{contractorId}/bank_accounts/{bankAccountId}:
    get:
      tags:
        - Contractors
      operationId: Get Contractor Bank Account
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: contractorId
          in: path
          required: true
          schema:
            type: string
        - name: bankAccountId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BankAccount'
    patch:
      tags:
        - Contractors
      operationId: Update Contractor Bank Account
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: contractorId
          in: path
          required: true
          schema:
            type: string
        - name: bankAccountId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateBankAccountRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BankAccount'
    delete:
      tags:
        - Contractors
      operationId: Delete Contractor Bank Account
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: contractorId
          in: path
          required: true
          schema:
            type: string
        - name: bankAccountId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
  /companies/{companyId}/contractors/{contractorId}/net_pay_splits:
    post:
      tags:
        - Contractors
      operationId: Create Contractor Net Pay Split
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: contractorId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateNetPaySplitRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NetPaySplit'
    get:
      tags:
        - Contractors
      operationId: Query Contractor Net Pay Splits
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: contractorId
          in: path
          required: true
          schema:
            type: string
        - name: cursor
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NetPaySplitApiListResponse'
  /companies/{companyId}/contractors/{contractorId}/net_pay_splits/{netPaySplitId}:
    get:
      tags:
        - Contractors
      operationId: Get Contractor Net Pay Split
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: contractorId
          in: path
          required: true
          schema:
            type: string
        - name: netPaySplitId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NetPaySplit'
  /companies/{companyId}/contractors/{contractorId}/onboard/forms:
    post:
      tags:
        - Contractors
      operationId: Contractor Tax Forms
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: contractorId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
  /corporations/{corporationId}:
    get:
      tags:
        - Corporations
      operationId: Get Corporation
      parameters:
        - name: corporationId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Corporation'
  /companies/{companyId}/post_tax_deductions/child_support:
    post:
      tags:
        - Deductions - Child Support
      operationId: Create Child Support Deduction
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateChildSupportDeductionRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChildSupportDeduction'
    get:
      tags:
        - Deductions - Child Support
      operationId: Query Child Support Deductions
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: employeeId
          in: query
          schema:
            type: string
        - name: description
          in: query
          schema:
            type: string
        - name: effective
          in: query
          schema:
            type: string
            format: date
        - name: amountAbove
          in: query
          schema:
            type: number
            format: double
        - name: amountBelow
          in: query
          schema:
            type: number
            format: double
        - name: page
          in: query
          schema:
            type: integer
            format: int32
            default: 1
        - name: pageSize
          in: query
          schema:
            type: integer
            format: int32
            default: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChildSupportDeductionApiQueryResponse'
  /companies/{companyId}/post_tax_deductions/child_support/{deductionId}:
    get:
      tags:
        - Deductions - Child Support
      operationId: Get Child Support Deduction
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: deductionId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChildSupportDeduction'
    patch:
      tags:
        - Deductions - Child Support
      operationId: Update Child Support Deduction
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: deductionId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateChildSupportDeductionRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChildSupportDeduction'
    delete:
      tags:
        - Deductions - Child Support
      operationId: Delete Child Support Deduction
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: deductionId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
  /companies/{companyId}/post_tax_deductions/miscellaneous:
    post:
      tags:
        - Deductions - Miscellaneous
      operationId: Create Miscellaneous Deduction
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateMiscellaneousDeductionRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MiscellaneousDeduction'
    get:
      tags:
        - Deductions - Miscellaneous
      operationId: Query Miscellaneous Deductions
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: employeeId
          in: query
          schema:
            type: string
        - name: description
          in: query
          schema:
            type: string
        - name: effective
          in: query
          schema:
            type: string
            format: date
        - name: amountAbove
          in: query
          schema:
            type: number
            format: double
        - name: amountBelow
          in: query
          schema:
            type: number
            format: double
        - name: percentAbove
          in: query
          schema:
            type: number
            format: double
        - name: percentBelow
          in: query
          schema:
            type: number
            format: double
        - name: annualAbove
          in: query
          schema:
            type: number
            format: double
        - name: annualBelow
          in: query
          schema:
            type: number
            format: double
        - name: totalAbove
          in: query
          schema:
            type: number
            format: double
        - name: totalBelow
          in: query
          schema:
            type: number
            format: double
        - name: page
          in: query
          schema:
            type: integer
            format: int32
            default: 1
        - name: pageSize
          in: query
          schema:
            type: integer
            format: int32
            default: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MiscellaneousDeductionApiQueryResponse'
  /companies/{companyId}/post_tax_deductions/miscellaneous/{deductionId}:
    get:
      tags:
        - Deductions - Miscellaneous
      operationId: Get Miscellaneous Deduction
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: deductionId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MiscellaneousDeduction'
    patch:
      tags:
        - Deductions - Miscellaneous
      operationId: Update Miscellaneous Deduction
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: deductionId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateMiscellaneousDeductionRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MiscellaneousDeduction'
    delete:
      tags:
        - Deductions - Miscellaneous
      operationId: Delete Miscellaneous Deduction
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: deductionId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
  /companies/{companyId}/departments:
    post:
      tags:
        - Departments
      operationId: Create Department
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateDepartmentRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Department'
    get:
      tags:
        - Departments
      operationId: Query Departments
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: workplaceId
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: search
          in: query
          schema:
            type: string
        - name: active
          in: query
          schema:
            type: boolean
        - name: includeSearch
          in: query
          schema:
            type: boolean
            default: true
        - name: includeId
          in: query
          schema:
            type: boolean
            default: true
        - name: includeWorkplaceId
          in: query
          schema:
            type: boolean
            default: true
        - name: page
          in: query
          schema:
            type: integer
            format: int32
            default: 1
        - name: pageSize
          in: query
          schema:
            type: integer
            format: int32
            default: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DepartmentApiQueryResponse'
  /companies/{companyId}/departments/{departmentId}:
    get:
      tags:
        - Departments
      operationId: Get Department
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: departmentId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Department'
    patch:
      tags:
        - Departments
      operationId: Update Department
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: departmentId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateDepartmentRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Department'
  /companies/{companyId}/documents/company_authorization_documents/{documentId}:
    get:
      tags:
        - Documents
      operationId: Get Company Authorization Document
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: documentId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyAuthorizationDocument'
  /companies/{companyId}/documents/company_authorization_documents:
    get:
      tags:
        - Documents
      operationId: Query Company Authorization Documents
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: year
          in: query
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/CompanyAuthorizationDocumentApiListResponse
  /companies/{companyId}/documents/company_authorization_documents/{documentId}/download:
    get:
      tags:
        - Documents
      operationId: Download Company Authorization Document
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: documentId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileData'
  /companies/{companyId}/documents/company_tax_documents/{documentId}:
    get:
      tags:
        - Documents
      operationId: Get Company Tax Document
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: documentId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyTaxDocument'
  /companies/{companyId}/documents/company_tax_documents:
    get:
      tags:
        - Documents
      operationId: Query Company Tax Documents
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: year
          in: query
          schema:
            type: integer
            format: int32
        - name: quarter
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyTaxDocumentApiListResponse'
  /companies/{companyId}/documents/company_tax_documents/{documentId}/download:
    get:
      tags:
        - Documents
      operationId: Download Company Tax Document
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: documentId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileData'
  /companies/{companyId}/documents/contractor_tax_documents/{documentId}:
    get:
      tags:
        - Documents
      operationId: Get Contractor Tax Document
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: documentId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContractorTaxDocument'
  /companies/{companyId}/documents/contractor_tax_documents:
    get:
      tags:
        - Documents
      operationId: Query Contractor Tax Documents
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: contractorId
          in: query
          schema:
            type: string
        - name: year
          in: query
          schema:
            type: integer
            format: int32
        - name: quarter
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContractorTaxDocumentApiListResponse'
  /companies/{companyId}/documents/contractor_tax_documents/{documentId}/download:
    get:
      tags:
        - Documents
      operationId: Download Contractor Tax Document
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: documentId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileData'
  /companies/{companyId}/documents/employee_tax_documents/{documentId}:
    get:
      tags:
        - Documents
      operationId: Get Employee Tax Document
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: documentId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmployeeTaxDocument'
  /companies/{companyId}/documents/employee_tax_documents:
    get:
      tags:
        - Documents
      operationId: Query Employee Tax Documents
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: query
          schema:
            type: string
        - name: year
          in: query
          schema:
            type: integer
            format: int32
        - name: quarter
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmployeeTaxDocumentApiListResponse'
  /companies/{companyId}/documents/employee_tax_documents/{documentId}/download:
    get:
      tags:
        - Documents
      operationId: Download Employee Tax Document
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: documentId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileData'
  /companies/{companyId}/earning_codes:
    post:
      tags:
        - Earning Codes
      operationId: Create Earning Code
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEarningCodeRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EarningCode'
    get:
      tags:
        - Earning Codes
      operationId: Query Earning Codes
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: name
          in: query
          schema:
            type: string
        - name: active
          in: query
          schema:
            type: boolean
        - name: page
          in: query
          schema:
            type: integer
            format: int32
            default: 1
        - name: pageSize
          in: query
          schema:
            type: integer
            format: int32
            default: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EarningCodeApiQueryResponse'
  /companies/{companyId}/earning_codes/{earningCodeId}:
    get:
      tags:
        - Earning Codes
      operationId: Get Earning Code
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: earningCodeId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EarningCode'
    patch:
      tags:
        - Earning Codes
      operationId: Update Earning Code
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: earningCodeId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateEarningCodeRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EarningCode'
  /companies/{companyId}/employees:
    post:
      tags:
        - Employees
      operationId: Create Employee
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEmployeeRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Employee'
    get:
      tags:
        - Employees
      operationId: Query Employees
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: workplaceId
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: departmentId
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: state
          in: query
          required: true
          schema:
            type: array
            items:
              $ref: '#/components/schemas/USState'
        - name: search
          in: query
          schema:
            type: string
        - name: active
          in: query
          schema:
            type: boolean
        - name: includeSearch
          in: query
          schema:
            type: boolean
            default: true
        - name: includeId
          in: query
          schema:
            type: boolean
            default: true
        - name: includeWorkplaceId
          in: query
          schema:
            type: boolean
            default: true
        - name: includeDepartmentId
          in: query
          schema:
            type: boolean
            default: true
        - name: includeState
          in: query
          schema:
            type: boolean
            default: true
        - name: page
          in: query
          schema:
            type: integer
            format: int32
            default: 1
        - name: pageSize
          in: query
          schema:
            type: integer
            format: int32
            default: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmployeeApiQueryResponse'
  /companies/{companyId}/employees/{employeeId}:
    get:
      tags:
        - Employees
      operationId: Get Employee
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Employee'
    patch:
      tags:
        - Employees
      operationId: Update Employee
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateEmployeeRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Employee'
  /companies/{companyId}/employees/{employeeId}/paystubs/{payrollId}:
    get:
      tags:
        - Employees
      operationId: Get Employee Paystub
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: payrollId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmployeePaystub'
  /companies/{companyId}/employees/{employeeId}/paystubs:
    get:
      tags:
        - Employees
      operationId: Query Employee Paystubs
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: cursor
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmployeePaystubApiListResponse'
  /companies/{companyId}/employees/{employeeId}/paystubs/{payrollId}/download:
    get:
      tags:
        - Employees
      operationId: Download Employee Paystub
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: payrollId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileData'
  /companies/{companyId}/employees/{employeeId}/forms:
    get:
      tags:
        - Employees
      operationId: Query Employee Forms
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: cursor
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayrollFormDocumentApiListResponse'
  /companies/{companyId}/employees/{employeeId}/forms/{formId}:
    get:
      tags:
        - Employees
      operationId: Get Employee Form
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: formId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayrollForm'
    post:
      tags:
        - Employees
      operationId: Submit Employee Form
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: formId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitEmployeeFormRequest'
        required: true
      responses:
        '200':
          description: OK
  /companies/{companyId}/employees/{employeeId}/company_defined_attributes:
    get:
      tags:
        - Employees
      operationId: Query Company Defined Attributes
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CompanyDefinedAttribute'
    patch:
      tags:
        - Employees
      operationId: Update Company Defined Attributes
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/CompanyDefinedAttributeSubmission'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CompanyDefinedAttribute'
  /companies/{companyId}/employees/{employeeId}/reciprocity_elections:
    get:
      tags:
        - Employees
      operationId: Query Reciprocity Elections
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: cursor
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReciprocityElectionApiListResponse'
    patch:
      tags:
        - Employees
      operationId: Update Reciprocity Elections
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: cursor
          in: query
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/ReciprocityElectionSubmission'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReciprocityElectionApiListResponse'
  /companies/{companyId}/employees/{employeeId}/bank_accounts:
    post:
      tags:
        - Employees
      operationId: Create Employee Bank Account
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateBankAccountRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BankAccount'
    get:
      tags:
        - Employees
      operationId: Query Employee Bank Accounts
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: cursor
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BankAccountApiListResponse'
  /companies/{companyId}/employees/{employeeId}/bank_accounts/{bankAccountId}:
    get:
      tags:
        - Employees
      operationId: Get Employee Bank Account
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: bankAccountId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BankAccount'
    patch:
      tags:
        - Employees
      operationId: Update Employee Bank Account
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: bankAccountId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateBankAccountRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BankAccount'
    delete:
      tags:
        - Employees
      operationId: Delete Employee Bank Account
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: bankAccountId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
  /companies/{companyId}/employees/{employeeId}/net_pay_splits:
    post:
      tags:
        - Employees
      operationId: Create Employee Net Pay Split
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateNetPaySplitRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NetPaySplit'
    get:
      tags:
        - Employees
      operationId: Query Employee Net Pay Splits
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: cursor
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NetPaySplitApiListResponse'
  /companies/{companyId}/employees/{employeeId}/net_pay_splits/{netPaySplitId}:
    get:
      tags:
        - Employees
      operationId: Get Employee Net Pay Split
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
        - name: netPaySplitId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NetPaySplit'
  /companies/{companyId}/employees/{employeeId}/onboard/ssn_setup:
    post:
      tags:
        - Employees
      operationId: Employee SSN Setup
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
  /companies/{companyId}/employees/{employeeId}/onboard/withholdings_setup:
    post:
      tags:
        - Employees
      operationId: Employee Withholdings Setup
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: employeeId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Link'
  /companies/{companyId}/enrollment_profile:
    get:
      tags:
        - Enrollment Profiles
      operationId: Get Enrollment Profile
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrollmentProfile'
    patch:
      tags:
        - Enrollment Profiles
      operationId: Update Enrollment Profile
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateEnrollmentRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrollmentProfile'
  /countries:
    get:
      tags:
        - Miscellaneous
      operationId: Query Countries
      parameters:
        - name: search
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CountryIso3'
  /currencies:
    get:
      tags:
        - Miscellaneous
      operationId: Query Currencies
      parameters:
        - name: search
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Currency'
  /merchant_codes:
    get:
      tags:
        - Miscellaneous
      operationId: Query Merchant Codes
      parameters:
        - name: search
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MerchantCode'
  /partners/{partnerId}:
    get:
      tags:
        - Partners
      operationId: Get Partner
      parameters:
        - name: partnerId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Partner'
  /companies/{companyId}/payment_schedules:
    post:
      tags:
        - Payment Schedules
      operationId: Create Payment Schedule
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePaymentScheduleRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentSchedule'
    get:
      tags:
        - Payment Schedules
      operationId: Query Payment Schedules
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: active
          in: query
          schema:
            type: boolean
        - name: page
          in: query
          schema:
            type: integer
            format: int32
            default: 1
        - name: pageSize
          in: query
          schema:
            type: integer
            format: int32
            default: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentScheduleApiQueryResponse'
  /companies/{companyId}/payment_schedules/{paymentScheduleId}:
    get:
      tags:
        - Payment Schedules
      operationId: Get Payment Schedule
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: paymentScheduleId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentSchedule'
    patch:
      tags:
        - Payment Schedules
      operationId: Update Payment Schedule
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: paymentScheduleId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePaymentScheduleRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentSchedule'
  /companies/{companyId}/payment_schedules/{paymentScheduleId}/paydays:
    get:
      tags:
        - Payment Schedules
      operationId: Get Payment Schedule Paydays
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: paymentScheduleId
          in: path
          required: true
          schema:
            type: string
        - name: startDate
          in: query
          schema:
            type: string
            format: date
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScheduledPaydayApiListResponse'
  /companies/{companyId}/payrolls:
    post:
      tags:
        - Payrolls
      operationId: Create Payroll
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePayrollRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll'
    get:
      tags:
        - Payrolls
      operationId: Query Payrolls
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: page
          in: query
          schema:
            type: integer
            format: int32
            default: 1
        - name: pageSize
          in: query
          schema:
            type: integer
            format: int32
            default: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayrollApiQueryResponse'
  /companies/{companyId}/payrolls/{payrollId}:
    get:
      tags:
        - Payrolls
      operationId: Get Payroll
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: payrollId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll'
    patch:
      tags:
        - Payrolls
      operationId: Update Payroll
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: payrollId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePayrollRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll'
    delete:
      tags:
        - Payrolls
      operationId: Delete Payroll
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: payrollId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
  /companies/{companyId}/payrolls/{payrollId}/preview:
    get:
      tags:
        - Payrolls
      operationId: Preview Payroll
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: payrollId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll'
  /companies/{companyId}/payrolls/{payrollId}/approve:
    post:
      tags:
        - Payrolls
      operationId: Approve Payroll
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: payrollId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll'
  /companies/{companyId}/payrolls/{payrollId}/reopen:
    post:
      tags:
        - Payrolls
      operationId: Reopen Payroll
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: payrollId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payroll'
  /companies/{companyId}/payrolls/{payrollId}/paper_checks:
    get:
      tags:
        - Payrolls
      operationId: Payroll Paper Checks
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: payrollId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayrollPaperChecksResponse'
  /companies/{companyId}/timecards/employees/{timecardId}:
    get:
      tags:
        - Timecards
      operationId: Get Employee Timecard
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: timecardId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmployeeTimecard'
  /companies/{companyId}/timecards/employees:
    get:
      tags:
        - Timecards
      operationId: Query Employee Timecards
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: employeeId
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: workplaceId
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: status
          in: query
          required: true
          schema:
            type: array
            items:
              $ref: '#/components/schemas/TimecardStatus'
        - name: search
          in: query
          schema:
            type: string
        - name: includeId
          in: query
          schema:
            type: boolean
            default: true
        - name: includeEmployeeId
          in: query
          schema:
            type: boolean
            default: true
        - name: includeWorkplaceId
          in: query
          schema:
            type: boolean
            default: true
        - name: includeStatus
          in: query
          schema:
            type: boolean
            default: true
        - name: includeSearch
          in: query
          schema:
            type: boolean
            default: true
        - name: page
          in: query
          schema:
            type: integer
            format: int32
            default: 1
        - name: pageSize
          in: query
          schema:
            type: integer
            format: int32
            default: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmployeeTimecardApiQueryResponse'
  /companies/{companyId}/timecards/employees/clock_in:
    post:
      tags:
        - Timecards
      operationId: Employee Clock In
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmployeeClockInRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmployeeTimecard'
  /companies/{companyId}/timecards/employees/{timecardId}/clock_out:
    post:
      tags:
        - Timecards
      operationId: Employee Clock Out
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: timecardId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmployeeClockOutRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmployeeTimecard'
  /companies/{companyId}/timecards/employees/{timecardId}/start_break:
    post:
      tags:
        - Timecards
      operationId: Employee Break Start
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: timecardId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmployeeBreakStartRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmployeeTimecardBreak'
  /companies/{companyId}/timecards/employees/{timecardId}/end_break:
    post:
      tags:
        - Timecards
      operationId: Employee Break End
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: timecardId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmployeeBreakEndRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmployeeTimecardBreak'
  /companies/{companyId}/workplaces:
    post:
      tags:
        - Workplaces
      operationId: Create Workplace
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateWorkplaceRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Workplace'
    get:
      tags:
        - Workplaces
      operationId: Query Workplaces
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: id
          in: query
          required: true
          schema:
            type: array
            items:
              type: string
        - name: search
          in: query
          schema:
            type: string
        - name: active
          in: query
          schema:
            type: boolean
        - name: state
          in: query
          required: true
          schema:
            type: array
            items:
              $ref: '#/components/schemas/USState'
        - name: includeId
          in: query
          schema:
            type: boolean
            default: true
        - name: includeSearch
          in: query
          schema:
            type: boolean
            default: true
        - name: includeState
          in: query
          schema:
            type: boolean
            default: true
        - name: page
          in: query
          schema:
            type: integer
            format: int32
            default: 1
        - name: pageSize
          in: query
          schema:
            type: integer
            format: int32
            default: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkplaceApiQueryResponse'
  /companies/{companyId}/workplaces/{workplaceId}:
    get:
      tags:
        - Workplaces
      operationId: Get Workplace
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: workplaceId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Workplace'
    patch:
      tags:
        - Workplaces
      operationId: Update Workplace
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
        - name: workplaceId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateWorkplaceRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Workplace'
components:
  schemas:
    Address:
      type: object
      properties:
        street1:
          type: string
          nullable: true
        street2:
          type: string
          nullable: true
        city:
          type: string
          nullable: true
        zipcode:
          type: string
          nullable: true
        state:
          $ref: '#/components/schemas/USState'
        country:
          $ref: '#/components/schemas/Country'
      additionalProperties: false
    BankAccount:
      type: object
      properties:
        id:
          type: string
          nullable: true
        companyId:
          type: string
          nullable: true
        employeeId:
          type: string
          nullable: true
        contractorId:
          type: string
          nullable: true
        status:
          $ref: '#/components/schemas/BankAccountStatus'
        disabledReason:
          $ref: '#/components/schemas/BankAccountDisabledReason'
        rawBankAccount:
          $ref: '#/components/schemas/RawBankAccount'
        plaidBankAccount:
          $ref: '#/components/schemas/PlaidBankAccount'
      additionalProperties: false
    BankAccountApiListResponse:
      type: object
      properties:
        previousPage:
          type: string
          nullable: true
        nextPage:
          type: string
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/BankAccount'
          nullable: true
      additionalProperties: false
    BankAccountDisabledReason:
      enum:
        - ValidationFailed
        - FailedPayment
        - VerificationPending
        - VerificationFailed
        - ConsumerAccount
      type: string
    BankAccountStatus:
      enum:
        - ValidationPending
        - Validated
        - OwnershipVerified
        - DisabledRecoverable
        - DisabledIrrecoverable
      type: string
    BankAccountSubtype:
      enum:
        - Checking
        - Savings
      type: string
    BenefitPeriod:
      enum:
        - Monthly
      type: string
    BenefitType:
      enum:
        - Medical125
        - Vision125
        - Dental125
        - Disability125
        - Accident125
        - Cancer125
        - CriticalIllness125
        - Hospital125
        - Life125
        - Pension401K
        - Pension403B
        - Pension457
        - PensionRoth401K
        - PensionRoth403B
        - PensionRoth457
        - FsaMedical
        - FsaDependentCare
        - Hsa
        - SimpleIra
      type: string
    CheckCompanyDefinedAttributeType:
      enum:
        - String
        - Numeric
        - Currency
        - Percent
        - Boolean
        - Select
      type: string
    ChildSupportDeduction:
      type: object
      properties:
        id:
          type: string
        employeeId:
          type: string
        source:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
        effectiveStart:
          type: string
          format: date
        effectiveEnd:
          type: string
          format: date
          nullable: true
        externalId:
          type: string
          nullable: true
        fipsCode:
          type: string
          nullable: true
        issuingState:
          $ref: '#/components/schemas/USState'
        issueDate:
          type: string
          format: date
        amount:
          type: number
          format: double
        maxPercent:
          type: number
          format: double
          nullable: true
        isManaged:
          type: boolean
        isExternal:
          type: boolean
      additionalProperties: false
    ChildSupportDeductionApiQueryResponse:
      type: object
      properties:
        hasResources:
          type: boolean
        totalResources:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
        pageSize:
          type: integer
          format: int32
        currentPage:
          type: integer
          format: int32
          nullable: true
        previousPage:
          type: integer
          format: int32
          nullable: true
        nextPage:
          type: integer
          format: int32
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/ChildSupportDeduction'
          nullable: true
      additionalProperties: false
    Company:
      type: object
      properties:
        id:
          type: string
        legalName:
          type: string
          nullable: true
        tradeName:
          type: string
          nullable: true
        email:
          type: string
          nullable: true
        phone:
          type: string
          nullable: true
        website:
          type: string
          nullable: true
        taxId:
          type: string
          nullable: true
        timekeepingCode:
          type: string
          nullable: true
        deactivationReason:
          type: string
          nullable: true
        acceptedTerms:
          type: boolean
        legalType:
          $ref: '#/components/schemas/CompanyLegalType'
        industry:
          $ref: '#/components/schemas/CompanyIndustry'
        status:
          $ref: '#/components/schemas/CompanyStatus'
        address:
          $ref: '#/components/schemas/Address'
        created:
          type: string
          format: date-time
        termsAcceptedAt:
          type: string
          format: date-time
          nullable: true
        payrollDetails:
          $ref: '#/components/schemas/CompanyPayrollDetails'
        merchantDetails:
          $ref: '#/components/schemas/CompanyMerchantDetails'
      additionalProperties: false
    CompanyApiQueryResponse:
      type: object
      properties:
        hasResources:
          type: boolean
        totalResources:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
        pageSize:
          type: integer
          format: int32
        currentPage:
          type: integer
          format: int32
          nullable: true
        previousPage:
          type: integer
          format: int32
          nullable: true
        nextPage:
          type: integer
          format: int32
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/Company'
          nullable: true
      additionalProperties: false
    CompanyAuthorizationDocument:
      type: object
      properties:
        id:
          type: string
          nullable: true
        companyId:
          type: string
        category:
          $ref: '#/components/schemas/DocumentCategory'
        label:
          type: string
          nullable: true
        jurisdiction:
          type: string
          nullable: true
        year:
          type: integer
          format: int32
        filedOn:
          type: string
          format: date
      additionalProperties: false
    CompanyAuthorizationDocumentApiListResponse:
      type: object
      properties:
        previousPage:
          type: string
          nullable: true
        nextPage:
          type: string
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/CompanyAuthorizationDocument'
          nullable: true
      additionalProperties: false
    CompanyAuthorizedSignerRequest:
      type: object
      properties:
        signatoryId:
          type: string
          nullable: true
        signerName:
          type: string
          nullable: true
        signerTitle:
          type: string
          nullable: true
        signerEmail:
          type: string
          nullable: true
      additionalProperties: false
    CompanyBenefit:
      type: object
      properties:
        id:
          type: string
        companyId:
          type: string
        source:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
        effectiveStart:
          type: string
          format: date
        effectiveEnd:
          type: string
          format: date
          nullable: true
        type:
          $ref: '#/components/schemas/BenefitType'
        period:
          $ref: '#/components/schemas/BenefitPeriod'
        employeeContributionAmount:
          type: number
          format: double
          nullable: true
        employeeContributionPercent:
          type: number
          format: double
          nullable: true
        companyContributionAmount:
          type: number
          format: double
          nullable: true
        companyContributionPercent:
          type: number
          format: double
          nullable: true
        associatedEmployeeBenefits:
          type: integer
          format: int32
      additionalProperties: false
    CompanyBenefitApiQueryResponse:
      type: object
      properties:
        hasResources:
          type: boolean
        totalResources:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
        pageSize:
          type: integer
          format: int32
        currentPage:
          type: integer
          format: int32
          nullable: true
        previousPage:
          type: integer
          format: int32
          nullable: true
        nextPage:
          type: integer
          format: int32
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/CompanyBenefit'
          nullable: true
      additionalProperties: false
    CompanyDefinedAttribute:
      type: object
      properties:
        name:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
        label:
          type: string
          nullable: true
        value:
          type: string
          nullable: true
        defaultValue:
          type: string
          nullable: true
        effectiveStart:
          type: string
          format: date
          nullable: true
        effectiveStartRequired:
          type: boolean
        type:
          $ref: '#/components/schemas/CheckCompanyDefinedAttributeType'
        options:
          type: array
          items:
            $ref: '#/components/schemas/CompanyDefinedAttributeOption'
          nullable: true
      additionalProperties: false
    CompanyDefinedAttributeOption:
      type: object
      properties:
        label:
          type: string
          nullable: true
        value:
          type: string
          nullable: true
      additionalProperties: false
    CompanyDefinedAttributeSubmission:
      type: object
      properties:
        name:
          type: string
          nullable: true
        value:
          type: string
          nullable: true
        effectiveStart:
          type: string
          format: date
          nullable: true
      additionalProperties: false
    CompanyImplementation:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/ImplementationStatus'
        remainingSteps:
          $ref: '#/components/schemas/CompanyImplementationSteps'
      additionalProperties: false
    CompanyImplementationKyb:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/ImplementationKybStatus'
      additionalProperties: false
    CompanyImplementationSteps:
      type: object
      properties:
        kyb:
          $ref: '#/components/schemas/CompanyImplementationKyb'
      additionalProperties: false
    CompanyIndustry:
      enum:
        - GeneralConstructionGeneralContracting
        - HvacPlumbingAndElectricalContracting
        - FoodAndBeverageRetailAndWholesale
        - ArtsEntertainmentAndRecreation
        - ScientificAndTechnicalServices
        - NonFoodRetailAndWholesale
        - HospitalityAccommodation
        - TobaccoOrAlcoholSales
        - PersonalCareServices
        - EducationalServices
        - FamilyCareServices
        - ConsultingServices
        - AutoMachineRepair
        - AutoMachineSales
        - FinancialServices
        - CleaningServices
        - SecurityServices
        - Transportation
        - LegalServices
        - HealthCare
        - RealEstate
        - Restaurant
        - Other
      type: string
    CompanyLegalType:
      enum:
        - SoleProprietorship
        - LimitedLiabilityCompany
        - Partnership
        - NonProfitOrganization
        - GovernmentOrganization
        - CCorporation
        - SCorporation
      type: string
    CompanyMerchantDetails:
      type: object
      properties:
        deliveryPolicyUrl:
          type: string
          nullable: true
        returnPolicyUrl:
          type: string
          nullable: true
        termsOfServiceUrl:
          type: string
          nullable: true
        activated:
          type: boolean
        canBoardMerchants:
          type: boolean
        onboardingStartedAt:
          type: string
          format: date-time
          nullable: true
        onboardingCompletedAt:
          type: string
          format: date-time
          nullable: true
        onboardingStatus:
          $ref: '#/components/schemas/MerchantOnboardingStatus'
      additionalProperties: false
    CompanyOnboard:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/OnboardStatus'
        blockingSteps:
          type: array
          items:
            type: string
          nullable: true
        remainingSteps:
          type: array
          items:
            type: string
          nullable: true
        bankAccount:
          type: array
          items:
            type: string
          nullable: true
        setupParameters:
          type: array
          items:
            $ref: '#/components/schemas/CompanyOnboardItem'
          nullable: true
        filingAuthorizations:
          type: array
          items:
            $ref: '#/components/schemas/CompanyOnboardItem'
          nullable: true
      additionalProperties: false
    CompanyOnboardItem:
      type: object
      properties:
        id:
          type: string
          nullable: true
        name:
          type: string
          nullable: true
        status:
          $ref: '#/components/schemas/OnboardStatus'
      additionalProperties: false
    CompanyPayrollDetails:
      type: object
      properties:
        activated:
          type: boolean
        canBoardPayroll:
          type: boolean
        onboardingStartedAt:
          type: string
          format: date-time
          nullable: true
        onboardingCompletedAt:
          type: string
          format: date-time
          nullable: true
        completedItems:
          type: array
          items:
            $ref: '#/components/schemas/PayrollOnboardItems'
          nullable: true
        terminated:
          type: boolean
          nullable: true
        inGoodStanding:
          type: boolean
          nullable: true
        startDate:
          type: string
          format: date
          nullable: true
        payFrequency:
          $ref: '#/components/schemas/PayFrequency'
        processingPeriod:
          $ref: '#/components/schemas/ProcessingPeriod'
        employeeW2DeliveryMethod:
          $ref: '#/components/schemas/DeliveryMethod'
        contractor1099DeliveryMethod:
          $ref: '#/components/schemas/DeliveryMethod'
        onboardDetails:
          $ref: '#/components/schemas/CompanyOnboard'
        implementationDetails:
          $ref: '#/components/schemas/CompanyImplementation'
      additionalProperties: false
    CompanyStatus:
      enum:
        - Active
        - Fraud
        - Closed
        - Duplicate
      type: string
    CompanyTaxDocument:
      type: object
      properties:
        id:
          type: string
          nullable: true
        companyId:
          type: string
        category:
          $ref: '#/components/schemas/DocumentCategory'
        label:
          type: string
          nullable: true
        jurisdiction:
          type: string
          nullable: true
        year:
          type: integer
          format: int32
        filedOn:
          type: string
          format: date
        description:
          type: string
          nullable: true
        quarter:
          type: string
          nullable: true
      additionalProperties: false
    CompanyTaxDocumentApiListResponse:
      type: object
      properties:
        previousPage:
          type: string
          nullable: true
        nextPage:
          type: string
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/CompanyTaxDocument'
          nullable: true
      additionalProperties: false
    Contractor:
      type: object
      properties:
        id:
          type: string
        companyId:
          type: string
        firstName:
          type: string
          nullable: true
        middleName:
          type: string
          nullable: true
        lastName:
          type: string
          nullable: true
        businessName:
          type: string
          nullable: true
        email:
          type: string
          nullable: true
        ein:
          type: string
          nullable: true
        ssnLastFour:
          type: string
          nullable: true
        ssnValidationStatus:
          $ref: '#/components/schemas/SsnValidationStatus'
        dateOfBirth:
          type: string
          format: date
          nullable: true
        startDate:
          type: string
          format: date
          nullable: true
        terminationDate:
          type: string
          format: date
          nullable: true
        type:
          $ref: '#/components/schemas/ContractorType'
        defaultPaymentMethod:
          $ref: '#/components/schemas/PaymentMethod'
        defaultNetPaySplit:
          type: string
          nullable: true
        bankAccounts:
          type: array
          items:
            type: string
          nullable: true
        primaryWorkplace:
          type: string
          nullable: true
        workplaces:
          type: array
          items:
            $ref: '#/components/schemas/ContractorWorkplace'
          nullable: true
        department:
          $ref: '#/components/schemas/ContractorDepartment'
        address:
          $ref: '#/components/schemas/Address'
        wage:
          $ref: '#/components/schemas/ContractorWage'
        onboard:
          $ref: '#/components/schemas/ContractorOnboard'
        form1099ElectronicConsent:
          type: boolean
        active:
          type: boolean
      additionalProperties: false
    ContractorApiQueryResponse:
      type: object
      properties:
        hasResources:
          type: boolean
        totalResources:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
        pageSize:
          type: integer
          format: int32
        currentPage:
          type: integer
          format: int32
          nullable: true
        previousPage:
          type: integer
          format: int32
          nullable: true
        nextPage:
          type: integer
          format: int32
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/Contractor'
          nullable: true
      additionalProperties: false
    ContractorDepartment:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
          nullable: true
      additionalProperties: false
    ContractorOnboard:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/OnboardStatus'
        blockingSteps:
          type: array
          items:
            type: string
          nullable: true
        remainingSteps:
          type: array
          items:
            type: string
          nullable: true
        type:
          type: array
          items:
            type: string
          nullable: true
        ssn:
          type: array
          items:
            type: string
          nullable: true
        ein:
          type: array
          items:
            type: string
          nullable: true
        paymentMethod:
          type: array
          items:
            type: string
          nullable: true
      additionalProperties: false
    ContractorPaystub:
      type: object
      properties:
        payroll:
          $ref: '#/components/schemas/ContractorPaystubPayroll'
        company:
          $ref: '#/components/schemas/ContractorPaystubCompany'
        contractor:
          $ref: '#/components/schemas/ContractorPaystubContractor'
        netPay:
          type: number
          format: double
        netPayYtd:
          type: number
          format: double
        amount:
          type: number
          format: double
        amountYtd:
          type: number
          format: double
        reimbursement:
          type: number
          format: double
        reimbursementYtd:
          type: number
          format: double
      additionalProperties: false
    ContractorPaystubApiListResponse:
      type: object
      properties:
        previousPage:
          type: string
          nullable: true
        nextPage:
          type: string
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/ContractorPaystub'
          nullable: true
      additionalProperties: false
    ContractorPaystubCompany:
      type: object
      properties:
        legalName:
          type: string
          nullable: true
        tradeName:
          type: string
          nullable: true
        phone:
          type: string
          nullable: true
        address:
          $ref: '#/components/schemas/Address'
      additionalProperties: false
    ContractorPaystubContractor:
      type: object
      properties:
        firstName:
          type: string
          nullable: true
        middleName:
          type: string
          nullable: true
        lastName:
          type: string
          nullable: true
        businessName:
          type: string
          nullable: true
        email:
          type: string
          nullable: true
        ssnLastFour:
          type: string
          nullable: true
        ein:
          type: string
          nullable: true
        type:
          $ref: '#/components/schemas/ContractorType'
        address:
          $ref: '#/components/schemas/Address'
      additionalProperties: false
    ContractorPaystubPayroll:
      type: object
      properties:
        payrollId:
          type: string
        payday:
          type: string
          format: date
        periodStart:
          type: string
          format: date
        periodEnd:
          type: string
          format: date
        voidedPayrollId:
          type: string
          nullable: true
        voidedBy:
          type: string
          nullable: true
      additionalProperties: false
    ContractorTaxDocument:
      type: object
      properties:
        id:
          type: string
          nullable: true
        contractorId:
          type: string
        category:
          $ref: '#/components/schemas/DocumentCategory'
        label:
          type: string
          nullable: true
        jurisdiction:
          type: string
          nullable: true
        year:
          type: integer
          format: int32
        filedOn:
          type: string
          format: date
        description:
          type: string
          nullable: true
      additionalProperties: false
    ContractorTaxDocumentApiListResponse:
      type: object
      properties:
        previousPage:
          type: string
          nullable: true
        nextPage:
          type: string
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/ContractorTaxDocument'
          nullable: true
      additionalProperties: false
    ContractorType:
      enum:
        - Individual
        - Business
      type: string
    ContractorWage:
      type: object
      properties:
        rate:
          type: number
          format: double
        period:
          $ref: '#/components/schemas/WagePeriod'
      additionalProperties: false
    ContractorWorkplace:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
          nullable: true
        address:
          $ref: '#/components/schemas/Address'
      additionalProperties: false
    Corporation:
      type: object
      properties:
        id:
          type: string
        legalName:
          type: string
          nullable: true
        tradeName:
          type: string
          nullable: true
        email:
          type: string
          nullable: true
        phone:
          type: string
          nullable: true
        address:
          $ref: '#/components/schemas/Address'
        status:
          $ref: '#/components/schemas/CorporationStatus'
        created:
          type: string
          format: date-time
      additionalProperties: false
    CorporationStatus:
      enum:
        - Active
        - Suspended
        - Deactivated
      type: string
    Country:
      enum:
        - US
      type: string
    CountryIso3:
      type: object
      properties:
        name:
          type: string
          nullable: true
        abbr:
          type: string
          nullable: true
      additionalProperties: false
    CreateAddressRequest:
      type: object
      properties:
        street1:
          type: string
          nullable: true
        street2:
          type: string
          nullable: true
        city:
          type: string
          nullable: true
        zipcode:
          type: string
          nullable: true
        state:
          $ref: '#/components/schemas/USState'
        country:
          $ref: '#/components/schemas/Country'
      additionalProperties: false
    CreateBankAccountRequest:
      type: object
      properties:
        accountNumber:
          type: string
          nullable: true
        routingNumber:
          type: string
          nullable: true
        institutionName:
          type: string
          nullable: true
        subtype:
          $ref: '#/components/schemas/BankAccountSubtype'
      additionalProperties: false
    CreateChildSupportDeductionRequest:
      type: object
      properties:
        employeeId:
          type: string
        description:
          type: string
          nullable: true
        externalId:
          type: string
          nullable: true
        fipsCode:
          type: string
          nullable: true
        effectiveStart:
          type: string
          format: date
        effectiveEnd:
          type: string
          format: date
          nullable: true
        issuingState:
          $ref: '#/components/schemas/USState'
        issueDate:
          type: string
          format: date
        amount:
          type: number
          format: double
        maxPercent:
          type: number
          format: double
          nullable: true
        isManaged:
          type: boolean
      additionalProperties: false
    CreateCompanyBenefitRequest:
      type: object
      properties:
        description:
          type: string
          nullable: true
        effectiveStart:
          type: string
          format: date
        effectiveEnd:
          type: string
          format: date
          nullable: true
        type:
          $ref: '#/components/schemas/BenefitType'
        period:
          $ref: '#/components/schemas/BenefitPeriod'
        employeeContributionAmount:
          type: number
          format: double
          nullable: true
        employeeContributionPercent:
          type: number
          format: double
          nullable: true
        companyContributionAmount:
          type: number
          format: double
          nullable: true
        companyContributionPercent:
          type: number
          format: double
          nullable: true
      additionalProperties: false
    CreateCompanyRequest:
      type: object
      properties:
        legalName:
          type: string
          nullable: true
        tradeName:
          type: string
          nullable: true
        email:
          type: string
          nullable: true
        phone:
          type: string
          nullable: true
        taxId:
          type: string
          nullable: true
        legalType:
          $ref: '#/components/schemas/CompanyLegalType'
        address:
          $ref: '#/components/schemas/CreateAddressRequest'
      additionalProperties: false
    CreateContractorRequest:
      type: object
      properties:
        firstName:
          type: string
          nullable: true
        middleName:
          type: string
          nullable: true
        lastName:
          type: string
          nullable: true
        businessName:
          type: string
          nullable: true
        email:
          type: string
          nullable: true
        ssn:
          type: string
          nullable: true
        ein:
          type: string
          nullable: true
        departmentId:
          type: string
          nullable: true
        primaryWorkplaceId:
          type: string
          nullable: true
        workplaces:
          type: array
          items:
            type: string
          nullable: true
        dateOfBirth:
          type: string
          format: date
          nullable: true
        startDate:
          type: string
          format: date
          nullable: true
        terminationDate:
          type: string
          format: date
          nullable: true
        type:
          $ref: '#/components/schemas/ContractorType'
        defaultPaymentMethod:
          $ref: '#/components/schemas/PaymentMethod'
        form1099ElectronicConsent:
          type: boolean
        active:
          type: boolean
        address:
          $ref: '#/components/schemas/CreateAddressRequest'
        wage:
          $ref: '#/components/schemas/CreateContractorWageRequest'
      additionalProperties: false
    CreateContractorWageRequest:
      type: object
      properties:
        rate:
          type: number
          format: double
        period:
          $ref: '#/components/schemas/WagePeriod'
      additionalProperties: false
    CreateDepartmentRequest:
      required:
        - name
      type: object
      properties:
        name:
          type: string
          nullable: true
        workplaceId:
          type: string
          nullable: true
        employees:
          type: array
          items:
            type: string
          nullable: true
        contractors:
          type: array
          items:
            type: string
          nullable: true
      additionalProperties: false
    CreateEarningCodeRequest:
      type: object
      properties:
        name:
          type: string
          nullable: true
        type:
          $ref: '#/components/schemas/EarningType'
        active:
          type: boolean
      additionalProperties: false
    CreateEmployeeBenefitRequest:
      type: object
      properties:
        description:
          type: string
          nullable: true
        employeeId:
          type: string
        companyBenefitId:
          type: string
          nullable: true
        effectiveStart:
          type: string
          format: date
          nullable: true
        effectiveEnd:
          type: string
          format: date
        type:
          $ref: '#/components/schemas/BenefitType'
        hsaContributionLimit:
          $ref: '#/components/schemas/HsaContributionLimit'
        period:
          type: string
        employeeContributionAmount:
          type: number
          format: double
          nullable: true
        employeeContributionPercent:
          type: number
          format: double
          nullable: true
        companyContributionAmount:
          type: number
          format: double
          nullable: true
        companyContributionPercent:
          type: number
          format: double
          nullable: true
      additionalProperties: false
    CreateEmployeeRequest:
      required:
        - firstName
        - lastName
      type: object
      properties:
        firstName:
          type: string
          nullable: true
        middleName:
          type: string
          nullable: true
        lastName:
          type: string
          nullable: true
        email:
          type: string
          nullable: true
        ssn:
          type: string
          nullable: true
        active:
          type: boolean
        primaryWorkplaceId:
          type: string
          nullable: true
        workplaces:
          type: array
          items:
            type: string
          nullable: true
        departmentId:
          type: string
          nullable: true
        dateOfBirth:
          type: string
          format: date
          nullable: true
        startDate:
          type: string
          format: date
          nullable: true
        terminationDate:
          type: string
          format: date
          nullable: true
        defaultPaymentMethod:
          $ref: '#/components/schemas/PaymentMethod'
        formW2ElectronicConsent:
          type: boolean
          nullable: true
        residence:
          $ref: '#/components/schemas/CreateAddressRequest'
        wage:
          $ref: '#/components/schemas/CreateEmployeeWageRequest'
      additionalProperties: false
    CreateEmployeeWageRequest:
      type: object
      properties:
        rate:
          type: number
          format: double
        period:
          $ref: '#/components/schemas/WagePeriod'
        flsaOvertimeExemptionStatus:
          $ref: '#/components/schemas/FlsaOvertimeExemptionStatus'
        supplementalTaxMethod:
          $ref: '#/components/schemas/SupplementalTaxMethod'
        fullTimeHours:
          type: number
          format: double
      additionalProperties: false
    CreateMiscellaneousDeductionRequest:
      type: object
      properties:
        employeeId:
          type: string
        description:
          type: string
          nullable: true
        effectiveStart:
          type: string
          format: date
        effectiveEnd:
          type: string
          format: date
          nullable: true
        amount:
          type: number
          format: double
          nullable: true
        percent:
          type: number
          format: double
          nullable: true
        annualLimitAmount:
          type: number
          format: double
          nullable: true
        totalLimitAmount:
          type: number
          format: double
          nullable: true
      additionalProperties: false
    CreateNetPaySplitItemRequest:
      type: object
      properties:
        bankAccountId:
          type: string
          nullable: true
        priority:
          type: integer
          format: int32
        amount:
          type: number
          format: double
          nullable: true
        percent:
          type: number
          format: double
          nullable: true
      additionalProperties: false
    CreateNetPaySplitRequest:
      type: object
      properties:
        isDefault:
          type: boolean
        splits:
          type: array
          items:
            $ref: '#/components/schemas/CreateNetPaySplitItemRequest'
          nullable: true
      additionalProperties: false
    CreatePaymentScheduleRequest:
      required:
        - active
        - firstPayday
        - firstPeriodEnd
        - frequency
        - name
      type: object
      properties:
        name:
          type: string
          nullable: true
        active:
          type: boolean
        frequency:
          $ref: '#/components/schemas/PayFrequency'
        firstPeriodEnd:
          type: string
          format: date
        firstPayday:
          type: string
          format: date
        secondPayday:
          type: string
          format: date
          nullable: true
      additionalProperties: false
    CreatePayrollContractorItem:
      type: object
      properties:
        contractorId:
          type: string
        workplaceId:
          type: string
          nullable: true
        paymentMethod:
          $ref: '#/components/schemas/PaymentMethod'
        hours:
          type: number
          format: double
          nullable: true
        payRate:
          type: number
          format: double
          nullable: true
        reimbursement:
          type: number
          format: double
          nullable: true
      additionalProperties: false
    CreatePayrollEmployeeEarningCodeEarning:
      type: object
      properties:
        earningCodeId:
          type: string
        value:
          type: number
          format: double
          nullable: true
        valueOverride:
          type: number
          format: double
          nullable: true
      additionalProperties: false
    CreatePayrollEmployeeItem:
      type: object
      properties:
        employeeId:
          type: string
        paymentMethod:
          $ref: '#/components/schemas/PaymentMethod'
        flsaOvertimeExemption:
          $ref: '#/components/schemas/FlsaOvertimeExemptionStatus'
        supplementalTaxMethod:
          $ref: '#/components/schemas/SupplementalTaxMethod'
        payments:
          type: array
          items:
            $ref: '#/components/schemas/CreatePayrollEmployeePayment'
          nullable: true
        reimbursements:
          type: array
          items:
            $ref: '#/components/schemas/CreatePayrollEmployeeReimbursement'
          nullable: true
      additionalProperties: false
    CreatePayrollEmployeePayment:
      type: object
      properties:
        workplaceId:
          type: string
          nullable: true
        isSalaryRate:
          type: boolean
        payRate:
          type: number
          format: double
          nullable: true
        regularHours:
          type: number
          format: double
          nullable: true
        overtimeHours:
          type: number
          format: double
          nullable: true
        doubleOvertimeHours:
          type: number
          format: double
          nullable: true
        paidHolidayHours:
          type: number
          format: double
          nullable: true
        sickHours:
          type: number
          format: double
          nullable: true
        ptoHours:
          type: number
          format: double
          nullable: true
        regularOverride:
          type: number
          format: double
          nullable: true
        overtimeOverride:
          type: number
          format: double
          nullable: true
        doubleOvertimeOverride:
          type: number
          format: double
          nullable: true
        paidHolidayOverride:
          type: number
          format: double
          nullable: true
        ptoOverride:
          type: number
          format: double
          nullable: true
        sickOverride:
          type: number
          format: double
          nullable: true
        nonHourlyRegular:
          type: number
          format: double
          nullable: true
        bonus:
          type: number
          format: double
          nullable: true
        commission:
          type: number
          format: double
          nullable: true
        cashTips:
          type: number
          format: double
          nullable: true
        paycheckTips:
          type: number
          format: double
          nullable: true
        severance:
          type: number
          format: double
          nullable: true
        groupTermLife:
          type: number
          format: double
          nullable: true
        otherImputed:
          type: number
          format: double
          nullable: true
        shareholderBenefits:
          type: number
          format: double
          nullable: true
        shareholderHsa:
          type: number
          format: double
          nullable: true
        earningCodeEarnings:
          type: array
          items:
            $ref: '#/components/schemas/CreatePayrollEmployeeEarningCodeEarning'
          nullable: true
      additionalProperties: false
    CreatePayrollEmployeeReimbursement:
      type: object
      properties:
        amount:
          type: number
          format: double
          nullable: true
        description:
          type: string
          nullable: true
      additionalProperties: false
    CreatePayrollRequest:
      type: object
      properties:
        paymentScheduleId:
          type: string
          nullable: true
        periodStart:
          type: string
          format: date
        periodEnd:
          type: string
          format: date
        payday:
          type: string
          format: date
        type:
          $ref: '#/components/schemas/PayrollType'
        frequency:
          $ref: '#/components/schemas/PayFrequency'
        processingPeriod:
          $ref: '#/components/schemas/ProcessingPeriod'
        forceSupplementalWithholdings:
          type: boolean
        applyBenefits:
          type: boolean
        applyDeductions:
          type: boolean
        employeeItems:
          type: array
          items:
            $ref: '#/components/schemas/CreatePayrollEmployeeItem'
          nullable: true
        contractorItems:
          type: array
          items:
            $ref: '#/components/schemas/CreatePayrollContractorItem'
          nullable: true
      additionalProperties: false
    CreateSignatoryRequest:
      type: object
      properties:
        firstName:
          type: string
          nullable: true
        middleName:
          type: string
          nullable: true
        lastName:
          type: string
          nullable: true
        title:
          type: string
          nullable: true
        email:
          type: string
          nullable: true
      additionalProperties: false
    CreateWorkplaceRequest:
      type: object
      properties:
        name:
          type: string
          nullable: true
        active:
          type: boolean
        address:
          $ref: '#/components/schemas/CreateAddressRequest'
        timekeepingSettings:
          $ref: '#/components/schemas/CreateWorkplaceTimekeepingSettingsRequest'
      additionalProperties: false
    CreateWorkplaceTimekeepingSettingsRequest:
      type: object
      properties:
        defaultTimeZoneId:
          type: string
          nullable: true
        dailyOvertimeHoursStart:
          type: number
          format: double
          nullable: true
        weeklyOvertimeHoursStart:
          type: number
          format: double
          nullable: true
        dailyDoubleOvertimeHoursStart:
          type: number
          format: double
          nullable: true
        weeklyDoubleOvertimeHoursStart:
          type: number
          format: double
          nullable: true
        enablePaidMealBreaks:
          type: boolean
        enablePaidRestBreaks:
          type: boolean
      additionalProperties: false
    Currency:
      type: object
      properties:
        name:
          type: string
          nullable: true
        abbr:
          type: string
          nullable: true
      additionalProperties: false
    DeductionType:
      enum:
        - Miscellaneous
        - ChildSupport
      type: string
    DeliveryMethod:
      enum:
        - PrintAndMailAll
        - Manual
      type: string
    Department:
      type: object
      properties:
        id:
          type: string
        companyId:
          type: string
        workplace:
          $ref: '#/components/schemas/DepartmentWorkplace'
        name:
          type: string
          nullable: true
        active:
          type: boolean
        assignedEmployees:
          type: integer
          format: int32
        assignedContractors:
          type: integer
          format: int32
      additionalProperties: false
    DepartmentApiQueryResponse:
      type: object
      properties:
        hasResources:
          type: boolean
        totalResources:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
        pageSize:
          type: integer
          format: int32
        currentPage:
          type: integer
          format: int32
          nullable: true
        previousPage:
          type: integer
          format: int32
          nullable: true
        nextPage:
          type: integer
          format: int32
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/Department'
          nullable: true
      additionalProperties: false
    DepartmentWorkplace:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
          nullable: true
        active:
          type: boolean
        address:
          $ref: '#/components/schemas/Address'
      additionalProperties: false
    DocumentCategory:
      enum:
        - CompanyTaxDocument
        - CompanyAuthorizationDocument
        - EmployeeTaxDocument
        - ContractorTaxDocument
      type: string
    EarningCode:
      type: object
      properties:
        id:
          type: string
        companyId:
          type: string
        type:
          $ref: '#/components/schemas/EarningType'
        name:
          type: string
          nullable: true
        active:
          type: boolean
      additionalProperties: false
    EarningCodeApiQueryResponse:
      type: object
      properties:
        hasResources:
          type: boolean
        totalResources:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
        pageSize:
          type: integer
          format: int32
        currentPage:
          type: integer
          format: int32
          nullable: true
        previousPage:
          type: integer
          format: int32
          nullable: true
        nextPage:
          type: integer
          format: int32
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/EarningCode'
          nullable: true
      additionalProperties: false
    EarningType:
      enum:
        - Salaried
        - Hourly
        - Overtime
        - DoubleOvertime
        - PaidHoliday
        - PTO
        - Sick
        - NonHourlyRegular
        - Bonus
        - Commission
        - Severance
        - CashTips
        - PaycheckTips
        - GroupTermLife
        - OtherImputed
        - ShareholderBenefits
        - ShareholderHsa
        - FFCRASickIndividual
        - FFCRASickOther
        - FFCRAFamilyLeave
        - agriculture_hourly
        - agriculture_salaried
        - piece
        - agriculture_piece
        - piece_adjustment_to_minimum_wage
        - agriculture_piece_adjustment_to_minimum_wage
        - non_productive
        - agriculture_non_productive
        - rest_and_recovery
        - agriculture_rest_and_recovery
        - agriculture_overtime
        - weighted_overtime
        - agriculture_weighted_overtime
        - agriculture_double_overtime
        - weighted_double_overtime
        - agriculture_weighted_double_overtime
        - agriculture_paid_holiday
        - agriculture_pto
        - agriculture_sick
        - ca_spsl
        - agriculture_bonus
        - agriculture_severance
        - tip_credit_adjustment_to_minimum_wage
        - agriculture_non_cash
        - non_qualifying_stock_option_regular
        - non_taxable_short_term_disability
        - taxable_short_term_disability
        - long_term_disability
        - allowance
        - clergy_housing
        - reported_allowance
        - reported_clergy_housing
      type: string
    Employee:
      type: object
      properties:
        id:
          type: string
        companyId:
          type: string
        code:
          type: string
          nullable: true
        firstName:
          type: string
          nullable: true
        middleName:
          type: string
          nullable: true
        lastName:
          type: string
          nullable: true
        email:
          type: string
          nullable: true
        ssnLastFour:
          type: string
          nullable: true
        ssnValidationStatus:
          $ref: '#/components/schemas/SsnValidationStatus'
        active:
          type: boolean
        formW2ElectronicConsent:
          type: boolean
        dateOfBirth:
          type: string
          format: date
          nullable: true
        startDate:
          type: string
          format: date
          nullable: true
        terminationDate:
          type: string
          format: date
          nullable: true
        defaultPaymentMethod:
          $ref: '#/components/schemas/PaymentMethod'
        defaultNetPaySplit:
          type: string
          nullable: true
        bankAccounts:
          type: array
          items:
            type: string
          nullable: true
        primaryWorkplaceId:
          type: string
          nullable: true
        workplaces:
          type: array
          items:
            $ref: '#/components/schemas/EmployeeWorkplace'
          nullable: true
        department:
          $ref: '#/components/schemas/EmployeeDepartment'
        residence:
          $ref: '#/components/schemas/Address'
        wage:
          $ref: '#/components/schemas/EmployeeWage'
        onboard:
          $ref: '#/components/schemas/EmployeeOnboard'
      additionalProperties: false
    EmployeeApiQueryResponse:
      type: object
      properties:
        hasResources:
          type: boolean
        totalResources:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
        pageSize:
          type: integer
          format: int32
        currentPage:
          type: integer
          format: int32
          nullable: true
        previousPage:
          type: integer
          format: int32
          nullable: true
        nextPage:
          type: integer
          format: int32
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/Employee'
          nullable: true
      additionalProperties: false
    EmployeeBenefit:
      type: object
      properties:
        id:
          type: string
        employeeId:
          type: string
        companyBenefitId:
          type: string
          nullable: true
        source:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
        effectiveStart:
          type: string
          format: date
        effectiveEnd:
          type: string
          format: date
          nullable: true
        type:
          $ref: '#/components/schemas/BenefitType'
        hsaContributionLimit:
          $ref: '#/components/schemas/HsaContributionLimit'
        period:
          $ref: '#/components/schemas/BenefitPeriod'
        employeeContributionAmount:
          type: number
          format: double
          nullable: true
        employeeContributionPercent:
          type: number
          format: double
          nullable: true
        companyContributionAmount:
          type: number
          format: double
          nullable: true
        companyContributionPercent:
          type: number
          format: double
          nullable: true
        isExternal:
          type: boolean
      additionalProperties: false
    EmployeeBenefitApiQueryResponse:
      type: object
      properties:
        hasResources:
          type: boolean
        totalResources:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
        pageSize:
          type: integer
          format: int32
        currentPage:
          type: integer
          format: int32
          nullable: true
        previousPage:
          type: integer
          format: int32
          nullable: true
        nextPage:
          type: integer
          format: int32
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/EmployeeBenefit'
          nullable: true
      additionalProperties: false
    EmployeeBreakEndRequest:
      type: object
      properties:
        note:
          type: string
          nullable: true
      additionalProperties: false
    EmployeeBreakStartRequest:
      type: object
      properties:
        note:
          type: string
          nullable: true
        type:
          $ref: '#/components/schemas/TimecardBreakType'
      additionalProperties: false
    EmployeeClockInRequest:
      type: object
      properties:
        employeeId:
          type: string
        workplaceId:
          type: string
        note:
          type: string
          nullable: true
      additionalProperties: false
    EmployeeClockOutRequest:
      type: object
      properties:
        note:
          type: string
          nullable: true
      additionalProperties: false
    EmployeeDepartment:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
          nullable: true
      additionalProperties: false
    EmployeeOnboard:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/OnboardStatus'
        blockingSteps:
          type: array
          items:
            type: string
          nullable: true
        remainingSteps:
          type: array
          items:
            type: string
          nullable: true
        ssn:
          type: array
          items:
            type: string
          nullable: true
        paymentMethod:
          type: array
          items:
            type: string
          nullable: true
        workplaces:
          type: array
          items:
            type: string
          nullable: true
        employeeDetails:
          type: array
          items:
            type: string
          nullable: true
        withholdings:
          type: array
          items:
            $ref: '#/components/schemas/EmployeeOnboardItem'
          nullable: true
        companyDefinedAttributes:
          type: array
          items:
            $ref: '#/components/schemas/EmployeeOnboardItem'
          nullable: true
      additionalProperties: false
    EmployeeOnboardItem:
      type: object
      properties:
        id:
          type: string
          nullable: true
        name:
          type: string
          nullable: true
        status:
          $ref: '#/components/schemas/OnboardStatus'
      additionalProperties: false
    EmployeePaidReimbursement:
      type: object
      properties:
        amount:
          type: number
          format: double
        description:
          type: string
          nullable: true
      additionalProperties: false
    EmployeePayrollWarning:
      type: object
      properties:
        code:
          $ref: '#/components/schemas/EmployeeWarningCode'
        reason:
          $ref: '#/components/schemas/EmployeeWarningReason'
        deductionType:
          $ref: '#/components/schemas/PayrollEmployeeWarningType'
        deductionId:
          type: string
          nullable: true
        actualDeductionAmount:
          type: number
          format: double
        expectedDeductionAmount:
          type: number
          format: double
      additionalProperties: false
    EmployeePaystub:
      type: object
      properties:
        payroll:
          $ref: '#/components/schemas/EmployeePaystubPayroll'
        company:
          $ref: '#/components/schemas/EmployeePaystubCompany'
        employee:
          $ref: '#/components/schemas/EmployeePaystubEmployee'
        timeOffBalance:
          $ref: '#/components/schemas/EmployeePaystubTimeOffBalance'
        summary:
          $ref: '#/components/schemas/EmployeePaystubSummary'
        earnings:
          type: array
          items:
            $ref: '#/components/schemas/EmployeePaystubEarning'
          nullable: true
        reimbursements:
          type: array
          items:
            $ref: '#/components/schemas/EmployeePaystubReimbursement'
          nullable: true
        postTaxDeductions:
          type: array
          items:
            $ref: '#/components/schemas/EmployeePaystubDeduction'
          nullable: true
        employeeBenefitContributions:
          type: array
          items:
            $ref: '#/components/schemas/EmployeePaystubBenefit'
          nullable: true
        companyBenefitContributions:
          type: array
          items:
            $ref: '#/components/schemas/EmployeePaystubBenefit'
          nullable: true
        employeeTaxes:
          type: array
          items:
            $ref: '#/components/schemas/EmployeePaystubTax'
          nullable: true
        companyTaxes:
          type: array
          items:
            $ref: '#/components/schemas/EmployeePaystubTax'
          nullable: true
      additionalProperties: false
    EmployeePaystubApiListResponse:
      type: object
      properties:
        previousPage:
          type: string
          nullable: true
        nextPage:
          type: string
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/EmployeePaystub'
          nullable: true
      additionalProperties: false
    EmployeePaystubBenefit:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/BenefitType'
        amount:
          type: number
          format: double
        amountYtd:
          type: number
          format: double
        description:
          type: string
          nullable: true
      additionalProperties: false
    EmployeePaystubCompany:
      type: object
      properties:
        legalName:
          type: string
          nullable: true
        tradeName:
          type: string
          nullable: true
        phone:
          type: string
          nullable: true
        address:
          $ref: '#/components/schemas/Address'
      additionalProperties: false
    EmployeePaystubCurrentEarning:
      type: object
      properties:
        workplaceId:
          type: string
        description:
          type: string
          nullable: true
        amount:
          type: number
          format: double
        hours:
          type: number
          format: double
          nullable: true
        rate:
          type: number
          format: double
          nullable: true
      additionalProperties: false
    EmployeePaystubDeduction:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/DeductionType'
        amount:
          type: number
          format: double
        amountYtd:
          type: number
          format: double
        calculationMethod:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
      additionalProperties: false
    EmployeePaystubEarning:
      type: object
      properties:
        code:
          type: string
          nullable: true
        checkEarningCodeId:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
        type:
          type: string
          nullable: true
        amount:
          type: number
          format: double
        amountYtd:
          type: number
          format: double
        hours:
          type: number
          format: double
          nullable: true
        hoursYtd:
          type: number
          format: double
          nullable: true
        rate:
          type: number
          format: double
          nullable: true
        currentEarnings:
          type: array
          items:
            $ref: '#/components/schemas/EmployeePaystubCurrentEarning'
          nullable: true
      additionalProperties: false
    EmployeePaystubEmployee:
      type: object
      properties:
        firstName:
          type: string
          nullable: true
        middleName:
          type: string
          nullable: true
        lastName:
          type: string
          nullable: true
        ssnLastFour:
          type: string
          nullable: true
        residence:
          $ref: '#/components/schemas/Address'
      additionalProperties: false
    EmployeePaystubPayroll:
      type: object
      properties:
        payrollId:
          type: string
        payday:
          type: string
          format: date
        periodStart:
          type: string
          format: date
        periodEnd:
          type: string
          format: date
        voidedPayrollId:
          type: string
          nullable: true
        voidedBy:
          type: string
          nullable: true
      additionalProperties: false
    EmployeePaystubReimbursement:
      type: object
      properties:
        amount:
          type: number
          format: double
        amountYtd:
          type: number
          format: double
        description:
          type: string
          nullable: true
      additionalProperties: false
    EmployeePaystubSummary:
      type: object
      properties:
        netPay:
          type: number
          format: double
        netPayYtd:
          type: number
          format: double
        earnings:
          type: number
          format: double
        earningsYtd:
          type: number
          format: double
        reimbursements:
          type: number
          format: double
        reimbursementsYtd:
          type: number
          format: double
        postTaxDeductions:
          type: number
          format: double
        postTaxDeductionsYtd:
          type: number
          format: double
        employeeBenefitContributions:
          type: number
          format: double
        employeeBenefitContributionsYtd:
          type: number
          format: double
        companyBenefitContributions:
          type: number
          format: double
        companyBenefitContributionsYtd:
          type: number
          format: double
        employeeTaxes:
          type: number
          format: double
        employeeTaxesYtd:
          type: number
          format: double
        companyTaxes:
          type: number
          format: double
        companyTaxesYtd:
          type: number
          format: double
      additionalProperties: false
    EmployeePaystubTax:
      type: object
      properties:
        amount:
          type: number
          format: double
        amountYtd:
          type: number
          format: double
        description:
          type: string
          nullable: true
      additionalProperties: false
    EmployeePaystubTimeOffBalance:
      type: object
      properties:
        ptoBalanceHours:
          type: number
          format: double
          nullable: true
        sickBalanceHours:
          type: number
          format: double
          nullable: true
        stateCovidSickBalanceHours:
          type: number
          format: double
          nullable: true
      additionalProperties: false
    EmployeeTaxDocument:
      type: object
      properties:
        id:
          type: string
          nullable: true
        employeeId:
          type: string
        category:
          $ref: '#/components/schemas/DocumentCategory'
        label:
          type: string
          nullable: true
        jurisdiction:
          type: string
          nullable: true
        year:
          type: integer
          format: int32
        filedOn:
          type: string
          format: date
      additionalProperties: false
    EmployeeTaxDocumentApiListResponse:
      type: object
      properties:
        previousPage:
          type: string
          nullable: true
        nextPage:
          type: string
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/EmployeeTaxDocument'
          nullable: true
      additionalProperties: false
    EmployeeTimecard:
      type: object
      properties:
        id:
          type: string
        employeeId:
          type: string
        workplaceId:
          type: string
        status:
          $ref: '#/components/schemas/TimecardStatus'
        clockInNote:
          type: string
          nullable: true
        clockOutNote:
          type: string
          nullable: true
        clockIn:
          type: string
          format: date-time
          nullable: true
        clockOut:
          type: string
          format: date-time
          nullable: true
        breaks:
          type: array
          items:
            $ref: '#/components/schemas/EmployeeTimecardBreak'
          nullable: true
        changes:
          type: array
          items:
            $ref: '#/components/schemas/EmployeeTimecardChange'
          nullable: true
      additionalProperties: false
    EmployeeTimecardApiQueryResponse:
      type: object
      properties:
        hasResources:
          type: boolean
        totalResources:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
        pageSize:
          type: integer
          format: int32
        currentPage:
          type: integer
          format: int32
          nullable: true
        previousPage:
          type: integer
          format: int32
          nullable: true
        nextPage:
          type: integer
          format: int32
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/EmployeeTimecard'
          nullable: true
      additionalProperties: false
    EmployeeTimecardBreak:
      type: object
      properties:
        id:
          type: string
        acceptedStatus:
          type: boolean
        type:
          $ref: '#/components/schemas/TimecardBreakType'
        breakStartNote:
          type: string
          nullable: true
        breakEndNote:
          type: string
          nullable: true
        breakStart:
          type: string
          format: date-time
          nullable: true
        breakEnd:
          type: string
          format: date-time
          nullable: true
        changes:
          type: array
          items:
            $ref: '#/components/schemas/EmployeeTimecardBreakChange'
          nullable: true
      additionalProperties: false
    EmployeeTimecardBreakChange:
      type: object
      properties:
        originalAcceptedStatus:
          type: boolean
        newAcceptedStatus:
          type: boolean
        originalType:
          $ref: '#/components/schemas/TimecardBreakType'
        newType:
          $ref: '#/components/schemas/TimecardBreakType'
        originalBreakStart:
          type: string
          format: date-time
          nullable: true
        newBreakStart:
          type: string
          format: date-time
          nullable: true
        originalBreakEnd:
          type: string
          format: date-time
          nullable: true
        newBreakEnd:
          type: string
          format: date-time
          nullable: true
        modifiedById:
          type: string
          nullable: true
        modifiedByName:
          type: string
          nullable: true
        modifiedByEmail:
          type: string
          nullable: true
        modifiedByPhone:
          type: string
          nullable: true
        modifiedReason:
          type: string
          nullable: true
        modifiedAt:
          type: string
          format: date-time
      additionalProperties: false
    EmployeeTimecardChange:
      type: object
      properties:
        originalWorkplacePId:
          type: string
          nullable: true
        newWorkplacePId:
          type: string
          nullable: true
        originalStatus:
          $ref: '#/components/schemas/TimecardStatus'
        newStatus:
          $ref: '#/components/schemas/TimecardStatus'
        originalClockIn:
          type: string
          format: date-time
          nullable: true
        originalClockOut:
          type: string
          format: date-time
          nullable: true
        newClockIn:
          type: string
          format: date-time
          nullable: true
        newClockOut:
          type: string
          format: date-time
          nullable: true
        modifiedById:
          type: string
          nullable: true
        modifiedByName:
          type: string
          nullable: true
        modifiedByEmail:
          type: string
          nullable: true
        modifiedByPhone:
          type: string
          nullable: true
        modifiedReason:
          type: string
          nullable: true
        modifiedAt:
          type: string
          format: date-time
      additionalProperties: false
    EmployeeWage:
      type: object
      properties:
        rate:
          type: number
          format: double
        period:
          $ref: '#/components/schemas/WagePeriod'
        flsaOvertimeExemptionStatus:
          $ref: '#/components/schemas/FlsaOvertimeExemptionStatus'
        supplementalTaxMethod:
          $ref: '#/components/schemas/SupplementalTaxMethod'
        fullTimeHours:
          type: number
          format: double
      additionalProperties: false
    EmployeeWarningCode:
      enum:
        - Skipped
        - PartiallyApplied
      type: string
    EmployeeWarningReason:
      enum:
        - NegativeNetPay
        - ExceedsMaxPercent
      type: string
    EmployeeWorkplace:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
          nullable: true
        address:
          $ref: '#/components/schemas/Address'
      additionalProperties: false
    EnrollmentMode:
      enum:
        - SelfService
        - ImplementationServices
      type: string
    EnrollmentProfile:
      type: object
      properties:
        employeeCount:
          type: integer
          format: int32
          nullable: true
        contractorCount:
          type: integer
          format: int32
          nullable: true
        payPeriodAmount:
          type: number
          format: double
          nullable: true
        previousPayrollProvider:
          $ref: '#/components/schemas/PreviousPayrollProvider'
        monthsOnPreviousPayrollProvider:
          type: integer
          format: int32
          nullable: true
        socialMedia:
          type: array
          items:
            type: string
          nullable: true
        firstPayroll:
          type: boolean
          nullable: true
        firstPayrollOfYear:
          type: boolean
          nullable: true
        averageMonthlyRevenue:
          type: number
          format: double
          nullable: true
        earliestKnownRevenue:
          type: string
          format: date
          nullable: true
        userSince:
          type: string
          format: date
          nullable: true
        approvedForPaymentProcessing:
          type: boolean
          nullable: true
        fraudScore:
          type: number
          format: double
          nullable: true
        predictedFraud:
          type: boolean
          nullable: true
        submissionComment:
          type: string
          nullable: true
        enrollmentMode:
          $ref: '#/components/schemas/EnrollmentMode'
      additionalProperties: false
    FileData:
      type: object
      properties:
        file:
          type: string
          nullable: true
      additionalProperties: false
    FlsaOvertimeExemptionStatus:
      enum:
        - NonExempt
        - Exempt
      type: string
    HsaContributionLimit:
      enum:
        - Single
        - Family
      type: string
    ImplementationKybStatus:
      enum:
        - NotInitiated
        - InReview
        - Denied
        - FourDayApproved
        - TwoDayApproved
      type: string
    ImplementationStatus:
      enum:
        - NeedsAttention
        - InReview
        - Completed
      type: string
    Link:
      type: object
      properties:
        url:
          type: string
          nullable: true
      additionalProperties: false
    MerchantCode:
      type: object
      properties:
        description:
          type: string
          nullable: true
        code:
          type: string
          nullable: true
        value:
          type: string
          nullable: true
      additionalProperties: false
    MerchantOnboardingStatus:
      enum:
        - NotStarted
        - Incomplete
        - AwaitingApproval
        - AwaitingActivation
        - Completed
      type: string
    MiscellaneousDeduction:
      type: object
      properties:
        id:
          type: string
        employeeId:
          type: string
        source:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
        effectiveStart:
          type: string
          format: date
        effectiveEnd:
          type: string
          format: date
          nullable: true
        amount:
          type: number
          format: double
          nullable: true
        percent:
          type: number
          format: double
          nullable: true
        annualLimitAmount:
          type: number
          format: double
          nullable: true
        totalLimitAmount:
          type: number
          format: double
          nullable: true
        isExternal:
          type: boolean
      additionalProperties: false
    MiscellaneousDeductionApiQueryResponse:
      type: object
      properties:
        hasResources:
          type: boolean
        totalResources:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
        pageSize:
          type: integer
          format: int32
        currentPage:
          type: integer
          format: int32
          nullable: true
        previousPage:
          type: integer
          format: int32
          nullable: true
        nextPage:
          type: integer
          format: int32
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/MiscellaneousDeduction'
          nullable: true
      additionalProperties: false
    NetPaySplit:
      type: object
      properties:
        id:
          type: string
          nullable: true
        employeeId:
          type: string
          nullable: true
        contractorId:
          type: string
          nullable: true
        deactivatedAt:
          type: string
          format: date-time
          nullable: true
        deactivatedReason:
          type: string
          nullable: true
        isDefault:
          type: boolean
        splits:
          type: array
          items:
            $ref: '#/components/schemas/NetPaySplitItem'
          nullable: true
      additionalProperties: false
    NetPaySplitApiListResponse:
      type: object
      properties:
        previousPage:
          type: string
          nullable: true
        nextPage:
          type: string
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/NetPaySplit'
          nullable: true
      additionalProperties: false
    NetPaySplitItem:
      type: object
      properties:
        bankAccountId:
          type: string
          nullable: true
        priority:
          type: integer
          format: int32
        amount:
          type: number
          format: double
          nullable: true
        percent:
          type: number
          format: double
          nullable: true
      additionalProperties: false
    OnboardStatus:
      enum:
        - Blocking
        - NeedsAttention
        - Completed
      type: string
    Partner:
      type: object
      properties:
        id:
          type: string
        legalName:
          type: string
          nullable: true
        tradeName:
          type: string
          nullable: true
        email:
          type: string
          nullable: true
        phone:
          type: string
          nullable: true
        address:
          $ref: '#/components/schemas/Address'
        status:
          $ref: '#/components/schemas/PartnerStatus'
        created:
          type: string
          format: date-time
      additionalProperties: false
    PartnerStatus:
      enum:
        - Active
        - Suspended
        - Deactivated
      type: string
    PatchableInt:
      type: object
      properties:
        value:
          type: integer
          format: int32
          nullable: true
        included:
          type: boolean
        excluded:
          type: boolean
          readOnly: true
        isNull:
          type: boolean
          readOnly: true
        isNotNull:
          type: boolean
          readOnly: true
      additionalProperties: false
    PayFrequency:
      enum:
        - Weekly
        - Biweekly
        - Semimonthly
        - Monthly
        - Quarterly
        - Annually
      type: string
    PaymentMethod:
      enum:
        - DirectDeposit
        - Manual
      type: string
    PaymentSchedule:
      type: object
      properties:
        id:
          type: string
        companyId:
          type: string
        active:
          type: boolean
        name:
          type: string
          nullable: true
        frequency:
          $ref: '#/components/schemas/PayFrequency'
        firstPeriodEnd:
          type: string
          format: date-time
        firstPayday:
          type: string
          format: date-time
        secondPayday:
          type: string
          format: date-time
          nullable: true
      additionalProperties: false
    PaymentScheduleApiQueryResponse:
      type: object
      properties:
        hasResources:
          type: boolean
        totalResources:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
        pageSize:
          type: integer
          format: int32
        currentPage:
          type: integer
          format: int32
          nullable: true
        previousPage:
          type: integer
          format: int32
          nullable: true
        nextPage:
          type: integer
          format: int32
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/PaymentSchedule'
          nullable: true
      additionalProperties: false
    Payroll:
      type: object
      properties:
        id:
          type: string
        companyId:
          type: string
        paymentScheduleId:
          type: string
          nullable: true
        periodStart:
          type: string
          format: date
        periodEnd:
          type: string
          format: date
        deadline:
          type: string
          format: date
        payday:
          type: string
          format: date
        approvedAt:
          type: string
          format: date-time
          nullable: true
        status:
          $ref: '#/components/schemas/PayrollStatus'
        type:
          $ref: '#/components/schemas/PayrollType'
        frequency:
          $ref: '#/components/schemas/PayFrequency'
        processingPeriod:
          $ref: '#/components/schemas/ProcessingPeriod'
        fundingMethod:
          $ref: '#/components/schemas/PayrollFundingMethod'
        totals:
          $ref: '#/components/schemas/PayrollTotals'
        offCycleOptions:
          $ref: '#/components/schemas/PayrollOffCycleOptions'
        employeeItems:
          type: array
          items:
            $ref: '#/components/schemas/PayrollEmployeeItem'
          nullable: true
        contractorItems:
          type: array
          items:
            $ref: '#/components/schemas/PayrollContractorItem'
          nullable: true
        warnings:
          type: array
          items:
            $ref: '#/components/schemas/PayrollWarning'
          nullable: true
        isVoid:
          type: boolean
        isManaged:
          type: boolean
      additionalProperties: false
    PayrollApiQueryResponse:
      type: object
      properties:
        hasResources:
          type: boolean
        totalResources:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
        pageSize:
          type: integer
          format: int32
        currentPage:
          type: integer
          format: int32
          nullable: true
        previousPage:
          type: integer
          format: int32
          nullable: true
        nextPage:
          type: integer
          format: int32
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/Payroll'
          nullable: true
      additionalProperties: false
    PayrollAppliedBenefit:
      type: object
      properties:
        id:
          type: string
        description:
          type: string
          nullable: true
        type:
          $ref: '#/components/schemas/BenefitType'
        employeeContribution:
          type: number
          format: double
        companyContribution:
          type: number
          format: double
      additionalProperties: false
    PayrollAppliedChildSupportDeduction:
      type: object
      properties:
        id:
          type: string
        description:
          type: string
          nullable: true
        amount:
          type: number
          format: double
        isManaged:
          type: boolean
      additionalProperties: false
    PayrollAppliedMiscellaneousDeduction:
      type: object
      properties:
        id:
          type: string
        description:
          type: string
          nullable: true
        amount:
          type: number
          format: double
      additionalProperties: false
    PayrollContractorItem:
      type: object
      properties:
        id:
          type: string
        contractorId:
          type: string
        workplaceId:
          type: string
          nullable: true
        status:
          $ref: '#/components/schemas/PayrollStatus'
        paymentMethod:
          $ref: '#/components/schemas/PaymentMethod'
        netPay:
          type: number
          format: double
          nullable: true
        amount:
          type: number
          format: double
          nullable: true
        hours:
          type: number
          format: double
          nullable: true
        payRate:
          type: number
          format: double
          nullable: true
        reimbursement:
          type: number
          format: double
          nullable: true
        paperCheckNumber:
          type: string
          nullable: true
      additionalProperties: false
    PayrollEarningCodeEarning:
      type: object
      properties:
        earningCodeId:
          type: string
        value:
          type: number
          format: double
          nullable: true
        valueOverride:
          type: number
          format: double
          nullable: true
      additionalProperties: false
    PayrollEmployeeEarning:
      type: object
      properties:
        workplaceId:
          type: string
        earningCodeId:
          type: string
          nullable: true
        type:
          $ref: '#/components/schemas/EarningType'
        description:
          type: string
          nullable: true
        amount:
          type: number
          format: double
        hours:
          type: number
          format: double
          nullable: true
        payRate:
          type: number
          format: double
          nullable: true
      additionalProperties: false
    PayrollEmployeeItem:
      type: object
      properties:
        employeeItemId:
          type: string
        employeeId:
          type: string
        netPay:
          type: number
          format: double
          nullable: true
        ptoBalanceHours:
          type: number
          format: double
          nullable: true
        sickBalanceHours:
          type: number
          format: double
          nullable: true
        stateCovidSickBalanceHours:
          type: number
          format: double
          nullable: true
        paperCheckNumber:
          type: string
          nullable: true
        status:
          $ref: '#/components/schemas/PayrollStatus'
        paymentMethod:
          $ref: '#/components/schemas/PaymentMethod'
        flsaOvertimeExemption:
          $ref: '#/components/schemas/FlsaOvertimeExemptionStatus'
        supplementalTaxMethod:
          $ref: '#/components/schemas/SupplementalTaxMethod'
        payments:
          type: array
          items:
            $ref: '#/components/schemas/PayrollEmployeePayment'
          nullable: true
        reimbursements:
          type: array
          items:
            $ref: '#/components/schemas/PayrollEmployeeReimbursement'
          nullable: true
        paidEarnings:
          type: array
          items:
            $ref: '#/components/schemas/PayrollEmployeeEarning'
          nullable: true
        paidReimbursements:
          type: array
          items:
            $ref: '#/components/schemas/EmployeePaidReimbursement'
          nullable: true
        benefits:
          type: array
          items:
            $ref: '#/components/schemas/PayrollAppliedBenefit'
          nullable: true
        miscellaneousDeductions:
          type: array
          items:
            $ref: '#/components/schemas/PayrollAppliedMiscellaneousDeduction'
          nullable: true
        childSupportDeductions:
          type: array
          items:
            $ref: '#/components/schemas/PayrollAppliedChildSupportDeduction'
          nullable: true
        taxes:
          type: array
          items:
            $ref: '#/components/schemas/PayrollTax'
          nullable: true
        warnings:
          type: array
          items:
            $ref: '#/components/schemas/EmployeePayrollWarning'
          nullable: true
      additionalProperties: false
    PayrollEmployeePayment:
      type: object
      properties:
        employeePaymentId:
          type: string
        workplaceId:
          type: string
          nullable: true
        isSalaryRate:
          type: boolean
        payRate:
          type: number
          format: double
          nullable: true
        regularHours:
          type: number
          format: double
          nullable: true
        overtimeHours:
          type: number
          format: double
          nullable: true
        doubleOvertimeHours:
          type: number
          format: double
          nullable: true
        paidHolidayHours:
          type: number
          format: double
          nullable: true
        ptoHours:
          type: number
          format: double
          nullable: true
        regularOverride:
          type: number
          format: double
          nullable: true
        overtimeOverride:
          type: number
          format: double
          nullable: true
        doubleOvertimeOverride:
          type: number
          format: double
          nullable: true
        paidHolidayOverride:
          type: number
          format: double
          nullable: true
        ptoOverride:
          type: number
          format: double
          nullable: true
        sickHours:
          type: number
          format: double
          nullable: true
        nonHourlyRegular:
          type: number
          format: double
          nullable: true
        bonus:
          type: number
          format: double
          nullable: true
        commission:
          type: number
          format: double
          nullable: true
        cashTips:
          type: number
          format: double
          nullable: true
        paycheckTips:
          type: number
          format: double
          nullable: true
        severance:
          type: number
          format: double
          nullable: true
        groupTermLife:
          type: number
          format: double
          nullable: true
        otherImputed:
          type: number
          format: double
          nullable: true
        shareholderBenefits:
          type: number
          format: double
          nullable: true
        shareholderHsa:
          type: number
          format: double
          nullable: true
        earningCodeEarnings:
          type: array
          items:
            $ref: '#/components/schemas/PayrollEarningCodeEarning'
          nullable: true
      additionalProperties: false
    PayrollEmployeeReimbursement:
      type: object
      properties:
        employeeReimbursementId:
          type: string
        amount:
          type: number
          format: double
          nullable: true
        description:
          type: string
          nullable: true
      additionalProperties: false
    PayrollEmployeeWarningType:
      enum:
        - Deduction
        - Benefit
        - Tax
      type: string
    PayrollForm:
      type: object
      properties:
        id:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
        link:
          type: string
          nullable: true
        jurisdictionName:
          type: string
          nullable: true
        revisionDate:
          type: string
          format: date
          nullable: true
        parameters:
          type: array
          items:
            $ref: '#/components/schemas/PayrollFormParameter'
          nullable: true
        signatureConfirmationText:
          type: string
          nullable: true
      additionalProperties: false
    PayrollFormDocument:
      type: object
      properties:
        form:
          $ref: '#/components/schemas/PayrollForm'
        document:
          type: string
          nullable: true
        submittedAt:
          type: string
          format: date-time
          nullable: true
      additionalProperties: false
    PayrollFormDocumentApiListResponse:
      type: object
      properties:
        previousPage:
          type: string
          nullable: true
        nextPage:
          type: string
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/PayrollFormDocument'
          nullable: true
      additionalProperties: false
    PayrollFormParameter:
      type: object
      properties:
        name:
          type: string
          nullable: true
        label:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
        required:
          type: boolean
        type:
          $ref: '#/components/schemas/PayrollFormParameterType'
        dependsOn:
          $ref: '#/components/schemas/PayrollFormParameterDependency'
        options:
          type: array
          items:
            $ref: '#/components/schemas/PayrollFormParameterOption'
          nullable: true
      additionalProperties: false
    PayrollFormParameterDependency:
      type: object
      properties:
        name:
          type: string
          nullable: true
        valueMatchRegex:
          type: string
          nullable: true
      additionalProperties: false
    PayrollFormParameterOption:
      type: object
      properties:
        label:
          type: string
          nullable: true
        value:
          type: string
          nullable: true
      additionalProperties: false
    PayrollFormParameterType:
      enum:
        - String
        - Numeric
        - Currency
        - Select
      type: string
    PayrollFormSubmissionParameter:
      type: object
      properties:
        name:
          type: string
          nullable: true
        value:
          type: string
          nullable: true
      additionalProperties: false
    PayrollFundingMethod:
      enum:
        - Ach
        - Wire
      type: string
    PayrollOffCycleOptions:
      type: object
      properties:
        forceSupplementalWithholdings:
          type: boolean
        applyBenefits:
          type: boolean
        applyDeductions:
          type: boolean
      additionalProperties: false
    PayrollOnboardItems:
      enum:
        - Initiated
        - Enrollment
        - PaymentSchedules
        - Workplaces
        - Departments
        - Benefits
        - Deductions
        - Employees
        - Contractors
        - EarningCodes
        - Historicals
      type: string
    PayrollPaperChecksResponse:
      type: object
      properties:
        base64Content:
          type: string
          nullable: true
        paperChecksAvailable:
          type: boolean
      additionalProperties: false
    PayrollStatus:
      enum:
        - Draft
        - Pending
        - Processing
        - Paid
        - PartiallyPaid
        - Failed
      type: string
    PayrollTax:
      type: object
      properties:
        id:
          type: string
          nullable: true
        payer:
          $ref: '#/components/schemas/PayrollTaxPayer'
        description:
          type: string
          nullable: true
        shortDescription:
          type: string
          nullable: true
        amount:
          type: number
          format: double
      additionalProperties: false
    PayrollTaxPayer:
      enum:
        - Company
        - Employee
      type: string
    PayrollTotals:
      type: object
      properties:
        employeeGross:
          type: number
          format: double
        employeeReimbursements:
          type: number
          format: double
        employeeTaxes:
          type: number
          format: double
        employeeBenefits:
          type: number
          format: double
        deductions:
          type: number
          format: double
        employeeNet:
          type: number
          format: double
        contractorGross:
          type: number
          format: double
        contractorReimbursements:
          type: number
          format: double
        contractorNet:
          type: number
          format: double
        companyTaxes:
          type: number
          format: double
        companyBenefits:
          type: number
          format: double
        liability:
          type: number
          format: double
        cashRequirement:
          type: number
          format: double
      additionalProperties: false
    PayrollType:
      enum:
        - Regular
        - OffCycle
        - Adjustment
        - ThirdPartySickPay
      type: string
    PayrollWarning:
      type: object
      properties:
        code:
          $ref: '#/components/schemas/PayrollWarningCode'
        reason:
          $ref: '#/components/schemas/PayrollWarningReason'
        reasonDescription:
          type: string
          nullable: true
      additionalProperties: false
    PayrollWarningCode:
      enum:
        - TaxPaymentsHeld
        - MissingEmployeeSetupInformation
      type: string
    PayrollWarningReason:
      enum:
        - FundingNotCleared
        - EmployeePrimaryWorkplaceNotSet
      type: string
    PlaidBankAccount:
      type: object
      properties:
        name:
          type: string
          nullable: true
        plaidPublicToken:
          type: string
          nullable: true
        institutionName:
          type: string
          nullable: true
        accountLastFour:
          type: string
          nullable: true
        subtype:
          $ref: '#/components/schemas/BankAccountSubtype'
        verified:
          type: boolean
        microdepositVerificationStatus:
          type: string
          nullable: true
      additionalProperties: false
    PreviousPayrollProvider:
      enum:
        - Accupay
        - ADPEnterprise
        - ADPPayforce
        - ADPPCPW
        - ADPRun
        - ADPTotalsource
        - ADPWorkforceNow
        - BenefitMallCompupay
        - CBIZ
        - Ceridian
        - Emangrove
        - Evolution
        - Execupay
        - Gusto
        - HeartlandPayroll
        - Isolved
        - MicrosoftDynamicsGP
        - Mint
        - Netpay
        - Onpay
        - Patriot
        - PaychexFlex
        - PaychexPreview
        - Paycom
        - Paycor
        - Payrollmatters
        - PayrollPeople
        - Paylocity
        - Payworks
        - PrimePay
        - Proliant
        - QuickbooksOnline
        - QuickbooksDesktop
        - SageHR
        - SquarePayroll
        - Sure
        - Toast
        - Trinet
        - Trupay
        - UltiproOnline
        - UltiproPC
        - Wave
        - Zeal
        - Zendona
        - Zenefits
        - Manual
        - Accountant
        - Other
      type: string
    ProcessingPeriod:
      enum:
        - FourDay
        - TwoDay
        - OneDay
        - ThreeDay
      type: string
    RawBankAccount:
      type: object
      properties:
        institutionName:
          type: string
          nullable: true
        accountLastFour:
          type: string
          nullable: true
        routingNumber:
          type: string
          nullable: true
        subtype:
          $ref: '#/components/schemas/BankAccountSubtype'
      additionalProperties: false
    ReciprocityElection:
      type: object
      properties:
        jurisdiction:
          type: string
          nullable: true
        jurisdictionName:
          type: string
          nullable: true
        applicable:
          type: boolean
        optIn:
          type: boolean
        effectiveStart:
          type: string
          format: date
          nullable: true
      additionalProperties: false
    ReciprocityElectionApiListResponse:
      type: object
      properties:
        previousPage:
          type: string
          nullable: true
        nextPage:
          type: string
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/ReciprocityElection'
          nullable: true
      additionalProperties: false
    ReciprocityElectionSubmission:
      type: object
      properties:
        jurisdiction:
          type: string
          nullable: true
        optIn:
          type: boolean
        effectiveStart:
          type: string
          format: date
          nullable: true
      additionalProperties: false
    ScheduledPayday:
      type: object
      properties:
        payday:
          type: string
          format: date
        periodStart:
          type: string
          format: date
        periodEnd:
          type: string
          format: date
        approvalDeadline:
          type: string
          format: date
        impactedByWeekendOrHoliday:
          type: boolean
      additionalProperties: false
    ScheduledPaydayApiListResponse:
      type: object
      properties:
        previousPage:
          type: string
          nullable: true
        nextPage:
          type: string
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/ScheduledPayday'
          nullable: true
      additionalProperties: false
    Signatory:
      type: object
      properties:
        id:
          type: string
          nullable: true
        companyId:
          type: string
        firstName:
          type: string
          nullable: true
        middleName:
          type: string
          nullable: true
        lastName:
          type: string
          nullable: true
        title:
          type: string
          nullable: true
        email:
          type: string
          nullable: true
      additionalProperties: false
    SignatoryApiListResponse:
      type: object
      properties:
        previousPage:
          type: string
          nullable: true
        nextPage:
          type: string
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/Signatory'
          nullable: true
      additionalProperties: false
    SsnValidationStatus:
      enum:
        - Pending
        - Invalid
        - Validated
      type: string
    StartPayrollRequest:
      type: object
      properties:
        startDate:
          type: string
          format: date
      additionalProperties: false
    SubmitContractorFormRequest:
      required:
        - parameters
      type: object
      properties:
        parameters:
          type: array
          items:
            $ref: '#/components/schemas/PayrollFormSubmissionParameter'
          nullable: true
      additionalProperties: false
    SubmitEmployeeFormRequest:
      required:
        - parameters
      type: object
      properties:
        parameters:
          type: array
          items:
            $ref: '#/components/schemas/PayrollFormSubmissionParameter'
          nullable: true
      additionalProperties: false
    SupplementalTaxMethod:
      enum:
        - Flat
        - Aggregate
      type: string
    TaxDeposit:
      type: object
      properties:
        payrollId:
          type: string
        taxId:
          type: string
          nullable: true
        taxLabel:
          type: string
          nullable: true
        payday:
          type: string
          format: date
        dueDate:
          type: string
          format: date
          nullable: true
        amount:
          type: number
          format: double
        fundingStatus:
          $ref: '#/components/schemas/TaxDepositFundingStatus'
        depositStatus:
          $ref: '#/components/schemas/TaxDepositDepositStatus'
      additionalProperties: false
    TaxDepositApiListResponse:
      type: object
      properties:
        previousPage:
          type: string
          nullable: true
        nextPage:
          type: string
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/TaxDeposit'
          nullable: true
      additionalProperties: false
    TaxDepositDepositStatus:
      enum:
        - Pending
        - Deposited
      type: string
    TaxDepositFundingStatus:
      enum:
        - Pending
        - Funded
        - Failed
      type: string
    TimecardBreakType:
      enum:
        - PaidMealBreak
        - UnpaidMealBreak
        - PaidRestBreak
        - UnpaidRestBreak
      type: string
    TimecardStatus:
      enum:
        - InProgress
        - Pending
        - Approved
        - Denied
      type: string
    USState:
      enum:
        - AL
        - AK
        - AR
        - AZ
        - CA
        - CO
        - CT
        - DC
        - DE
        - FL
        - GA
        - HI
        - IA
        - ID
        - IL
        - IN
        - KS
        - KY
        - LA
        - MA
        - MD
        - ME
        - MI
        - MN
        - MO
        - MS
        - MT
        - NC
        - ND
        - NE
        - NH
        - NJ
        - NM
        - NV
        - NY
        - OK
        - OH
        - OR
        - PA
        - RI
        - SC
        - SD
        - TN
        - TX
        - UT
        - VA
        - VT
        - WA
        - WI
        - WV
        - WY
      type: string
    UpdateAddressRequest:
      type: object
      properties:
        street1:
          type: string
        street2:
          type: string
        city:
          type: string
        zipcode:
          type: string
        state:
          type: string
        country:
          type: string
      additionalProperties: false
    UpdateBankAccountRequest:
      type: object
      properties:
        accountNumber:
          type: string
        routingNumber:
          type: string
        institutionName:
          type: string
        subtype:
          type: string
      additionalProperties: false
    UpdateChildSupportDeductionRequest:
      type: object
      properties:
        description:
          type: string
        effectiveStart:
          type: string
          format: date
        effectiveEnd:
          type: string
          format: date
        externalId:
          type: string
        fipsCode:
          type: string
        issuingState:
          type: string
        issueDate:
          type: string
          format: date
        amount:
          type: number
          format: double
        maxPercent:
          type: number
          format: double
        isManaged:
          type: boolean
      additionalProperties: false
    UpdateCompanyBenefitRequest:
      type: object
      properties:
        description:
          type: string
        effectiveStart:
          type: string
          format: date
        effectiveEnd:
          type: string
          format: date
        employeeContributionAmount:
          type: number
          format: double
        employeeContributionPercent:
          type: number
          format: double
        companyContributionAmount:
          type: number
          format: double
        companyContributionPercent:
          type: number
          format: double
        period:
          type: string
      additionalProperties: false
    UpdateCompanyRequest:
      type: object
      properties:
        legalName:
          type: string
        tradeName:
          type: string
        website:
          type: string
        deliveryPolicyUrl:
          type: string
        returnPolicyUrl:
          type: string
        termsOfServiceUrl:
          type: string
        email:
          type: string
        phone:
          type: string
        taxId:
          type: string
        startDate:
          type: string
          format: date
        legalType:
          type: string
        taxIdType:
          type: string
        industry:
          type: string
        payFrequency:
          type: string
        processingPeriod:
          type: string
        employeeW2DeliveryMethod:
          type: string
        contractor1099DeliveryMethod:
          type: string
        primaryWorkplace:
          type: string
        address:
          $ref: '#/components/schemas/UpdateAddressRequest'
      additionalProperties: false
    UpdateContractorRequest:
      type: object
      properties:
        departmentId:
          type: string
        primaryWorkplaceId:
          type: string
        workplaces:
          type: array
          items:
            type: string
          nullable: true
        firstName:
          type: string
        middleName:
          type: string
        lastName:
          type: string
        businessName:
          type: string
        email:
          type: string
        ssn:
          type: string
        ein:
          type: string
        dateOfBirth:
          type: string
          format: date
        startDate:
          type: string
          format: date
        terminationDate:
          type: string
          format: date
        type:
          type: string
        defaultPaymentMethod:
          type: string
        form1099ElectronicConsent:
          type: boolean
        active:
          type: boolean
        address:
          $ref: '#/components/schemas/UpdateAddressRequest'
        wage:
          $ref: '#/components/schemas/UpdateContractorWageRequest'
      additionalProperties: false
    UpdateContractorWageRequest:
      type: object
      properties:
        rate:
          type: number
          format: double
        period:
          type: string
      additionalProperties: false
    UpdateDepartmentRequest:
      type: object
      properties:
        name:
          type: string
        active:
          type: boolean
        workplaceId:
          type: string
        employeeIds:
          type: array
          items:
            type: string
          nullable: true
        contractorIds:
          type: array
          items:
            type: string
          nullable: true
      additionalProperties: false
    UpdateEarningCodeRequest:
      type: object
      properties:
        active:
          type: boolean
      additionalProperties: false
    UpdateEmployeeBenefitRequest:
      type: object
      properties:
        description:
          type: string
        effectiveStart:
          type: string
          format: date
        effectiveEnd:
          type: string
          format: date
        period:
          type: string
        hsaContributionLimit:
          type: string
        employeeContributionAmount:
          type: number
          format: double
        employeeContributionPercent:
          type: number
          format: double
        companyContributionAmount:
          type: number
          format: double
        companyContributionPercent:
          type: number
          format: double
      additionalProperties: false
    UpdateEmployeeRequest:
      type: object
      properties:
        firstName:
          type: string
        middleName:
          type: string
        lastName:
          type: string
        email:
          type: string
        ssn:
          type: string
        defaultNetPaySplit:
          type: string
        dateOfBirth:
          type: string
          format: date
        startDate:
          type: string
          format: date
        terminationDate:
          type: string
          format: date
        defaultPaymentMethod:
          type: string
        departmentId:
          type: string
        primaryWorkplaceId:
          type: string
        workplaces:
          type: array
          items:
            type: string
          nullable: true
        formW2ElectronicConsent:
          type: boolean
        active:
          type: boolean
        residence:
          $ref: '#/components/schemas/UpdateAddressRequest'
        wage:
          $ref: '#/components/schemas/UpdateEmployeeWageRequest'
      additionalProperties: false
    UpdateEmployeeWageRequest:
      type: object
      properties:
        rate:
          type: number
          format: double
        period:
          type: string
        flsaOvertimeExemptionStatus:
          type: string
        supplementalTaxMethod:
          type: string
        fullTimeHours:
          type: number
          format: double
      additionalProperties: false
    UpdateEnrollmentRequest:
      type: object
      properties:
        employeeCount:
          $ref: '#/components/schemas/PatchableInt'
        contractorCount:
          $ref: '#/components/schemas/PatchableInt'
        payPeriodAmount:
          type: number
          format: double
        previousPayrollProvider:
          type: string
        monthsOnPreviousPayrollProvider:
          $ref: '#/components/schemas/PatchableInt'
        firstPayroll:
          type: boolean
        firstPayrollOfYear:
          type: boolean
        averageMonthlyRevenue:
          type: number
          format: double
        earliestKnownRevenue:
          type: string
          format: date
        socialMedia:
          type: array
          items:
            type: string
          nullable: true
      additionalProperties: false
    UpdateMiscellaneousDeductionRequest:
      type: object
      properties:
        description:
          type: string
        effectiveStart:
          type: string
          format: date
        effectiveEnd:
          type: string
          format: date
        amount:
          type: number
          format: double
        percent:
          type: number
          format: double
        annualLimitAmount:
          type: number
          format: double
        totalLimitAmount:
          type: number
          format: double
      additionalProperties: false
    UpdatePaymentScheduleRequest:
      type: object
      properties:
        name:
          type: string
          nullable: true
        frequency:
          $ref: '#/components/schemas/PayFrequency'
        firstPeriodEnd:
          type: string
          format: date
          nullable: true
        firstPayday:
          type: string
          format: date
          nullable: true
        secondPayday:
          type: string
          format: date
          nullable: true
        active:
          type: boolean
          nullable: true
      additionalProperties: false
    UpdatePayrollRequest:
      type: object
      properties:
        paymentScheduleId:
          type: string
        periodStart:
          type: string
          format: date
        periodEnd:
          type: string
          format: date
        payday:
          type: string
          format: date
        type:
          type: string
        frequency:
          type: string
        processingPeriod:
          type: string
        forceSupplementalWithholdings:
          type: boolean
        applyBenefits:
          type: boolean
        applyDeductions:
          type: boolean
        employeeItems:
          type: array
          items:
            $ref: '#/components/schemas/CreatePayrollEmployeeItem'
          nullable: true
        contractorItems:
          type: array
          items:
            $ref: '#/components/schemas/CreatePayrollContractorItem'
          nullable: true
      additionalProperties: false
    UpdateWorkplaceRequest:
      type: object
      properties:
        name:
          type: string
        active:
          type: boolean
        address:
          $ref: '#/components/schemas/UpdateAddressRequest'
        timekeepingSettings:
          $ref: '#/components/schemas/UpdateWorkplaceTimekeepingSettingsRequest'
      additionalProperties: false
    UpdateWorkplaceTimekeepingSettingsRequest:
      type: object
      properties:
        defaultTimeZoneId:
          type: string
        dailyOvertimeHoursStart:
          type: number
          format: double
        weeklyOvertimeHoursStart:
          type: number
          format: double
        dailyDoubleOvertimeHoursStart:
          type: number
          format: double
        weeklyDoubleOvertimeHoursStart:
          type: number
          format: double
        enablePaidMealBreaks:
          type: boolean
        enablePaidRestBreaks:
          type: boolean
      additionalProperties: false
    WagePeriod:
      enum:
        - Hourly
        - Daily
        - Weekly
        - Biweekly
        - Semimonthly
        - Monthly
        - Quarterly
        - Annually
      type: string
    Workplace:
      type: object
      properties:
        id:
          type: string
        companyId:
          type: string
        name:
          type: string
          nullable: true
        active:
          type: boolean
        address:
          $ref: '#/components/schemas/Address'
        timekeepingSettings:
          $ref: '#/components/schemas/WorkplaceTimekeepingSettings'
      additionalProperties: false
    WorkplaceApiQueryResponse:
      type: object
      properties:
        hasResources:
          type: boolean
        totalResources:
          type: integer
          format: int32
        totalPages:
          type: integer
          format: int32
        pageSize:
          type: integer
          format: int32
        currentPage:
          type: integer
          format: int32
          nullable: true
        previousPage:
          type: integer
          format: int32
          nullable: true
        nextPage:
          type: integer
          format: int32
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/Workplace'
          nullable: true
      additionalProperties: false
    WorkplaceTimekeepingSettings:
      type: object
      properties:
        dailyOvertimeHoursStart:
          type: number
          format: double
          nullable: true
        weeklyOvertimeHoursStart:
          type: number
          format: double
          nullable: true
        dailyDoubleOvertimeHoursStart:
          type: number
          format: double
          nullable: true
        weeklyDoubleOvertimeHoursStart:
          type: number
          format: double
          nullable: true
        enablePaidMealBreaks:
          type: boolean
        enablePaidRestBreaks:
          type: boolean
        defaultTimeZoneId:
          type: string
          nullable: true
      additionalProperties: false
