Skip to main contentWelcome to Conductor’s new QuickBooks Desktop API v2.
API v2 brings the following improvements over v1.0:
- Proper HTTP methods:
GET for reading, POST for creating or updating. No more POST for everything.
- Cleaner URL endpoints:
/quickbooks_desktop/invoices instead of /end-users/{id}/passthrough/quickbooks_desktop with InvoiceQueryRq in the body.
- An OpenAPI spec for the entire API.
- Full online documentation of all fields and their types.
- API playground in the documentation to test requests and see responses.
- Always returns all response fields. Uses
null for undefined fields instead of omitting them.
- Consistently returns arrays for any nested fields that previously returned a single object for one item and an array for multiple items.
- Returns an empty array instead of
null for empty lists.
- Clean response bodies: No more unwrapping outer objects; e.g., no more
InvoiceQueryRs.InvoiceRet.
- Proper object wrapper for all list responses: Previously, we returned an array of objects. Now, we return an object with a
data field that contains the array of objects.
- Pagination for all list endpoints.
- Better parameter names instead of QuickBooks Desktop’s unconventional naming. For example:
MaxReturned → limit
TimeModified → updatedAt
DataExtRet → customFields
- Uses
camelCase for input and output field names instead of PascalCase.
- Simplified request structure. For example:
refNumberStartsWith: "REF" instead of RefNumberFilter: { MatchCriterion: "StartsWith", RefNumber: "REF" }
accountId: "123" instead of AccountRef: { ListID: "123" }
- Correct types for obscure fields: Previously, we inferred types from XML. Now, we define the type of every field to ensure it is always correct.
- Better field descriptions: we are using our own descriptions instead of QuickBooks’ descriptions.
- Field-specific coercions: better handling of dates and money amounts.
- Enforced upper bound on
limit of 150 records per page to prevent unintentionally overloading QuickBooks Desktop instances.
- Better defaults. For example:
includeLineItems is true by default because who wants an empty invoice?
ownerId is 0 by default to always include your end-users’ custom fields.
Feedback
We value your input! If you have suggestions or requests for improvements, changes, field names, documentation, or anything else, please let us know.