Migration Guide

Intuit is pleased to share the launch of the new QuickBooks Payroll API to access payroll data. If you are currently using our older APIs, you need to migrate to the new APIs.

If you are using the endpoint https://v4thirdparty.api.intuit.com/graphql, you are migrating from our Alpha API.

If you are using the endpoint https://public.api.intuit.com/2020-04/graphql, you are migrating from our Beta API.

ID mapping

The employee ID returned in the new API is in a new format and is not the same employee Id in existing APIs. For example, the employee Id returned from existing APIs is in a format similar to djQtLToxU5NjB65:0020715c71ba83 or djQtLToxU5NjB65:2. In the new API, the employee ID is numeric values such as 2 or 3. The old IDs are returned in the alternateIds.id field.

  1. Read the employee roster for the company using this query:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  {
    workerManagementEmployees {
      edges {
        node {
          id
          firstName
          middleName
          lastName
          alternateIds {
            id
            nameSpace
          }
        }
      }
      pageInfo {
        endCursor
        hasNextPage
        hasPreviousPage
        startCursor
      }
      totalCount
    }
  }
  1. Map the new IDs against the alternateIds.id field that you already have stored.
  2. Use the new IDs going forward.
Migrating from the alpha API

If you currently use the com.intuit.quickbooks.payroll scope, you will be able to use the new APIs for your existing customers. When new customers connect to your app or when existing users reconnect to your app, include new scopes in your authorization call. The required scopes for each resource are described on the individual reference pages.

Employer Compensation
Field in Alpha API Field in new API
$type N/A. This field isn’t available.
id payrollEmployeeDetails.compensations.employerCompensation.id
name payrollEmployeeDetails.compensations.employerCompensation.id
statutoryCompensationPolicy payrollEmployeeDetails.compensations.employerCompensation.type.value
Employee Compensation
Field in Alpha API Field in new API
$type N/A. This field isn’t available.
id payrollEmployeeDetails.compensations.id
entityVersion N/A. This field isn’t available.
meta.created N/A. This field isn’t available.
meta.updated N/A. This field isn’t available.
amount payrollEmployeeDetails.compensations.rate.amount.value
employee.id id
employerCompensation payrollEmployeeDetails.compensations.employerCompensation
endDate N/A. This field isn’t available.
Employer Deductions
Field in Alpha API Field in new API
id payrollEmployerInfo.deductions.edges.node.id
name payrollEmployerInfo.deductions.edges.node.name
clientMutationId N/A Use the ID field for mutations.
employer N/A
statutoryDeductionPolicy payrollEmployerInfo.deductions.edges.node.statutoryType.value
Employee Deductions
Field in Alpha API Field in new API
id workerManagementEmployees.edges.node.payrollEmployeeDetails.deductions.id
clientMutationId N/A Use the ID field for mutations
name N/A
amount Derived from workerManagementEmployees.edges.node.payrollEmployeeDetails.deductions.amount.value and workerManagementEmployees.edges.node.payrollEmployeeDetails.deductions.amount.type
annualMaximum workerManagementEmployees.edges.node.payrollEmployeeDetails.deductions.employeeContributions.capping.amount.value
active workerManagementEmployees.edges.node.payrollEmployeeDetails.deductions.active
endDate N/A
employee workerManagementEmployees.edges.node.id OR workerManagementEmployees.edges.node.alternateIds.id
employerDeduction.id workerManagementEmployees.edges.node.payrollEmployeeDetails.deductions.deductionPolicy.id
employerDeduction.name workerManagementEmployees.edges.node.payrollEmployeeDetails.deductions.deductionPolicy.name
Employer Benefits
Field in Alpha API Field in new API
id payrollEmployerInfo.benefits.edges.node.id
name payrollEmployerInfo.benefits.edges.node.name
clientMutationId N/A Use the ID field for mutations
employer N/A
statutoryBenefitPolicy payrollEmployerInfo.benefits.edges.node.statutoryType.value
Employee Benefits
Field in Alpha API Field in new API
employee workerManagementEmployees.edges.node.id OR workerManagementEmployees.edges.node.alternateIds.id
employerBenefit.id workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.deductionPolicy.id
employerBenefit.name workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.deductionPolicy.name
id workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.id
clientMutationId N/A Use the ID field for mutations
name N/A
employerSetup.amount.value workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.employerContribution.amount.value
employerSetup.cappings.amount workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.employerContribution.capping.amount.value
employeeSetup.amount.value workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.employeeContribution.amount.value
employeeSetup.cappings.amount workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.employeeContribution.capping.amount
active workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.active
Employer Pensions
Field in Alpha API Field in new API
id payrollEmployerInfo.pensions.edges.node.id
name payrollEmployerInfo.pensions.edges.node.name
clientMutationId N/A Use the ID field for mutations
employer N/A
statutoryPensionPolicy payrollEmployerInfo.pensions.edges.node.statutoryType.value
Employee Pensions
Field in Alpha API Field in new API
employee workerManagementEmployees.edges.node.id OR workerManagementEmployees.edges.node.alternateIds.id
employerPension.id workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.deductionPolicy.id
employerPension.name workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.deductionPolicy.name
id workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.id
clientMutationId N/A Use the ID field for mutations
employerSetup.amount.value workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.employerContribution.amount.value
employerSetup.cappings.amount workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.employerContribution.capping.amount.value
employeeSetup.amount.value workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.id.employeeContributions.capping.amount.value
employeeSetup.cappings.amount workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.id.employeeContributions.capping.amount.value
active workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.active
endDate N/A
Migrating from the beta API

The following tables show how to map from beta fields to the new fields.

Company information

Use our QuickBooks Online API to read company information .

Employee compensation
Field in Beta API Field in new API
Employee.payrollProfile.compensations.id workerManagementEmployees.edges.node.payrollEmployeeDetails.compensations.id
Employee.payrollProfile.compensations.active workerManagementEmployees.edges.node.payrollEmployeeDetails.compensations.active
Employee.payrollProfile.compensations.amount payrollEmployeeDetails.compensations.rate.amount.value
Employee.payrollProfile.compensations.timeWorked.unit N/A
Employee.payrollProfile.compensations.timeWorked.value N/A
Employee.payrollProfile.compensations.multiplier N/A
Employee.payrollProfile.compensations.employerCompensation.id workerManagementEmployees.edges.node.payrollEmployeeDetails.compensations.employerCompensation.id
Employee.payrollProfile.compensations.employerCompensation.name workerManagementEmployees.edges.node.payrollEmployeeDetails.compensations.employerCompensation.name
Employee.payrollProfile.compensations.employerCompensation.active N/A
Employee.payrollProfile.compensations.employerCompensation.amount N/A
Employee.payrollProfile.compensations.employerCompensation.timeWorked.unit N/A
Employee.payrollProfile.compensations.employerCompensation.timeWorked.value N/A
Employee.payrollProfile.compensations.employerCompensation.multiplier N/A
Employee.payrollProfile.compensations.employerCompensation.statutoryCompensationPolicy workerManagementEmployees.edges.node.payrollEmployeeDetails.compensations.employerCompensation.type.value
Employee deductions
Field in Beta API Field in new API
Employee.payrollProfile.deductions.id workerManagementEmployees.edges.node.payrollEmployeeDetails.deductions.id
Employee.payrollProfile.deductions.active workerManagementEmployees.edges.node.payrollEmployeeDetails.deductions.active
Employee.payrollProfile.deductions.amount.percentage Derived from workerManagementEmployees.edges.node.payrollEmployeeDetails.deductions.amount.type
Employee.payrollProfile.deductions.amount.value workerManagementEmployees.edges.node.payrollEmployeeDetails.deductions.amount.value
Employee.payrollProfile.deductions.annualMaximumAmount workerManagementEmployees.edges.node.payrollEmployeeDetails.deductions.employeeContributions.capping.amount.value
Employee.payrollProfile.deductions.employerDeduction.id workerManagementEmployees.edges.node.payrollEmployeeDetails.deductions.deductionPolicy.id
Employee.payrollProfile.deductions.employerDeduction.name workerManagementEmployees.edges.node.payrollEmployeeDetails.deductions.deductionPolicy.name
Employee.payrollProfile.deductions.employerDeduction.statutoryDeductionPolicy workerManagementEmployees.edges.node.payrollEmployeeDetails.deductions.deductionPolicy.statutoryType.value
Employer benefit
Field in Beta API Field in new API
employerBenefit.id payrollEmployerInfo.benefits.edges.node.id
employerBenefit.name payrollEmployerInfo.benefits.edges.node.name
N/A payrollEmployerInfo.benefits.edges.node.category.description
employerBenefit.statutoryBenefitPolicy payrollEmployerInfo.benefits.edges.node.statutoryType.value
Employee benefits
Field in Beta API Field in new API
Employee.payrollProfile.benefits.id workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.id
Employee.payrollProfile.benefits.active workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.active
Employee.payrollProfile.benefits.employerSetup.amount.value workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.employerContribution.amount.value
Employee.payrollProfile.benefits.employerSetup.amount.percentage Derived from workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.employerContribution.amount.type
Employee.payrollProfile.benefits.employerSetup.cappings.amount workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.employerContribution.capping.amount.value
Employee.payrollProfile.benefits.employerSetup.cappings.timeInterval workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.employerContribution.capping.frequency
Employee.payrollProfile.benefits.employeeSetup.amount.value workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.employeeContribution.amount.value
Employee.payrollProfile.benefits.employeeSetup.amount.percentage Derived from workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.employeeContribution.amount.type
Employee.payrollProfile.benefits.employeeSetup.cappings.amount workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.employeeContribution.capping.amount
Employee.payrollProfile.benefits.employeeSetup.cappings.timeInterval workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.employeeContribution.capping.frequenct
Employee.payrollProfile.benefits.employerBenefit.id workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.deductionPolicy.id
Employee.payrollProfile.benefits.employerBenefit.name workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.deductionPolicy.name
Employee.payrollProfile.benefits.employerBenefit.statutoryBenefitPolicy workerManagementEmployees.edges.node.payrollEmployeeDetails.benefits.deductionPolicy.category.value
Employer pension
Field in Beta API Field in new API
employerPension.id payrollEmployerInfo.pensions.edges.node.id
employerPension.name payrollEmployerInfo.pensions.edges.node.name
N/A payrollEmployerInfo.pensions.edges.node.category.description
employerPension.statutoryPensionPolicy payrollEmployerInfo.pensions.edges.node.statutoryType.value
Old ID / employerPension.id payrollEmployerInfo.pensions.edges.node.alternateIds.id
Employee pensions
Field in Beta API Field in new API
Employee.payrollProfile.pensions.id workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.id
Employee.payrollProfile.pensions.active workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.active
Employee.payrollProfile.pensions.employerSetup.amount.value workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.employerContribution.amount.value
Employee.payrollProfile.pensions.employerSetup.amount.percentage Derived from workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.employerContribution.amount.type
Employee.payrollProfile.pensions.employerSetup.cappings.amount workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.employerContribution.capping.amount.value
Employee.payrollProfile.pensions.employerSetup.cappings.timeInterval workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.employerContribution.capping.frequency
Employee.payrollProfile.pensions.employeeSetup.amount workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.employeeContributions.amount.value
Employee.payrollProfile.pensions.employeeSetup.cappings.amount workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.id.employeeContributions.capping.amount.value
Employee.payrollProfile.pensions.employeeSetup.cappings.timeInterval workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.id.employeeContributions.capping.frequency
Employee.payrollProfile.pensions.employerPension.id workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.deductionPolicy.id
Employee.payrollProfile.pensions.employerPension.name workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.deductionPolicy.name
Employee.payrollProfile.pensions.employerPension.statutoryPensionPolicy workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.deductionPolicy.statutoryType.value
Employee.payrollProfile.pensions.customFields.name (used to derive outside contributions) N/A
Employee.payrollProfile.pensions.customFields.value (used to derive outside contributions) workerManagementEmployees.edges.node.payrollEmployeeDetails.pensions.employeeExternalContribution.amount.value
Employee
Field in Alpha API Field in new API
Employee.id workerManagementEmployees.edges.node.id
Employee.firstName workerManagementEmployees.edges.node.firstName
Employee.lastName workerManagementEmployees.edges.node.lastName
Employee.displayName N/A
Employee.middleName workerManagementEmployees.edges.node.middleName
Employee.birthDate workerManagementEmployees.edges.node.limitedAccessFields.birthDate
Employee.contactMethods.type N/A
Employee.contactMethods.primary workerManagementEmployees.edges.node.contactInfo.primaryAddress
Employee.contactMethods.active N/A
Employee.contactMethods.email workerManagementEmployees.edges.node.contactInfo.primaryEmailAddress.email
Employee.contactMethods.phone workerManagementEmployees.edges.node.contactInfo.primaryPhoneNumber.number
Employee.contactMethods.fax N/A
Employee.contactMethods.mobile N/A
Employee.contactMethods.address.streetAddress1 workerManagementEmployees.edges.node.contactInfo.primaryAddress.streetAddress1
Employee.contactMethods.address.streetAddress2 workerManagementEmployees.edges.node.contactInfo.primaryAddress.streetAddress2
Employee.contactMethods.address.state workerManagementEmployees.edges.node.contactInfo.primaryAddress.state
Employee.contactMethods.address.country workerManagementEmployees.edges.node.contactInfo.primaryAddress.country
Employee.contactMethods.address.city workerManagementEmployees.edges.node.contactInfo.primaryAddress.city
Employee.contactMethods.address.zipcode workerManagementEmployees.edges.node.contactInfo.primaryAddress.zipcode
Employee.taxIdentifiers.taxIdentifierType N/A
Employee.taxIdentifiers.value workerManagementEmployees.edges.node.taxIdentifiers.value
Employee.employmentDetail.active workerManagementEmployees.edges.node.employmentStatus.detailedStatus (String) OR employmentStatus.active (Boolean)
Employee.employmentDetail.hireDate workerManagementEmployees.edges.node.employmentDetail.hireDate
Employee.employmentDetail.terminationDate workerManagementEmployees.edges.node.employmentDetail.terminationDate
Employee.employmentDetail.employmentStatus workerManagementEmployees.edges.node.employmentStatus.detailedStatus
Employee.payrollProfile.preferredAddress.streetAddress1 N/A
Employee.payrollProfile.preferredAddress.streetAddress2 N/A
Employee.payrollProfile.preferredAddress.state N/A
Employee.payrollProfile.preferredAddress.country N/A
Employee.payrollProfile.preferredAddress.city N/A
Employee.payrollProfile.preferredAddress.zipcode N/A
Employee.payrollProfile.preferredPhone N/A
Employee.payrollProfile.preferredEmail N/A
Employee.payrollProfile.workAddress.streetAddress1 workerManagementEmployees.edges.node.payrollEmployeeDetails.workLocation.addressComponents.streetAddressLine1
Employee.payrollProfile.workAddress.streetAddress2 workerManagementEmployees.edges.node.payrollEmployeeDetails.workLocation.addressComponents.streetAddressLine2
Employee.payrollProfile.workAddress.state workerManagementEmployees.edges.node.payrollEmployeeDetails.workLocation.addressComponents.state
Employee.payrollProfile.workAddress.country workerManagementEmployees.edges.node.payrollEmployeeDetails.workLocation.addressComponents.country
Employee.payrollProfile.workAddress.city workerManagementEmployees.edges.node.payrollEmployeeDetails.workLocation.addressComponents.city
Employee.payrollProfile.workAddress.zipcode workerManagementEmployees.edges.node.payrollEmployeeDetails.workLocation.addressComponents.zipcode
Employee.payrollProfile.paySchedule.id N/A
Employee.payrollProfile.paySchedule.name workerManagementEmployees.edges.node.payrollEmployeeDetails.paySchedule.name
Employee.payrollProfile.paySchedule.initialPayDate workerManagementEmployees.edges.node.payrollEmployeeDetails.paySchedule.referenceDates.initialPayDate
Employee.payrollProfile.paySchedule.frequency workerManagementEmployees.edges.node.payrollEmployeeDetails.paySchedule.frequency
Payslips
Payslip.id payrollPayslips.edges.node.id
Payslip.payDate payrollPayslips.edges.node.payDate
Payslip.payrollProcessDateTime N/A
Payslip.grossPay.amount payrollPayslips.edges.node.grossPay.currentAmount
Payslip.grossPay.yearToDateAmount payrollPayslips.edges.node.grossPay.yearToDateAmount
Payslip.contributions.type N/A
Payslip.contributions.description N/A
Payslip.contributions.contributionAmount.amount N/A
Payslip.contributions.contributionAmount.yearToDateAmount N/A
Payslip.deductions.type payrollPayslips.edges.node.deductions.employeeDeduction.deductionPolicy.statutoryType.value
Payslip.deductions.description payrollPayslips.edges.node.deductions.employeeDeduction.deductionPolicy.name
Payslip.deductions.deductionAmount.amount For employee contributions, deductions.employeeContributionAccumulationAmount.currentAmount.value. For employer contributions,deductions.payrollPayslips.edges.node.employerContributionAccumulationAmount.currentAmount.value
Payslip.deductions.deductionAmount.yearToDateAmount For employee contributions, derive from (deductions.employeeContributionAccumulationAmount.toDateAmounts.value and deductions.employeeContributionAccumulationAmount.toDateAmounts.toDateAmountType). For employer contributions, derive from (deductions.employerContributionAccumulationAmount.toDateAmounts.value and deductions.employerContributionAccumulationAmount.toDateAmounts.toDateAmountType)
Payslip.compensations.type payrollPayslips.edges.node.type
Payslip.compensations.description N/A
Payslip.compensations.timeWorked.unit payrollPayslips.edges.node.compensations.calculatedCompensationDetail.hours
Payslip.compensations.timeWorked.value payrollPayslips.edges.node.compensations.calculatedCompensationDetail.rate.amount.value
Payslip.compensations.compensationAmount.amount payrollPayslips.edges.node.compensations.calculatedCompensationAccumulationAmount.currentAmount.value
Payslip.compensations.compensationAmount.yearToDateAmount Derive from payrollPayslips.edges.node.compensations.calculatedCompensationAccumulationAmount.toDateAmounts.value AND payrollPayslips.edges.node.compensations.calculatedCompensationAccumulationAmount.toDateAmounts.toDateAmountType
Payslip.paySchedule.id N/A
Payslip.paySchedule.name workerManagementEmployees.edges.node.payrollEmployeeDetails.paySchedule.name
Payslip.paySchedule.initialPayDate workerManagementEmployees.edges.node.payrollEmployeeDetails.paySchedule.referenceDates.initialPayDate
Payslip.paySchedule.frequency workerManagementEmployees.edges.node.payrollEmployeeDetails.paySchedule.frequency
Payslip.payPeriod.beginDate payrollPayslips.edges.node.payPeriod.beginDate
Payslip.payPeriod.endDate payrollPayslips.edges.node.payPeriod.endDate