# Editions, versions and features
Source: https://www.desktopaccountingapi.com/docs/quickbooks/editions-and-features/

> How QuickBooks editions, versions and company settings such as Advanced Inventory, multicurrency, units of measure and payroll affect API calls.

The same API call can behave differently in two company files. The QuickBooks edition, its version and the company's own preferences decide which features exist. This page explains how the API handles those differences, so a missing feature produces a clear error instead of a confusing one.

## Versions and qbXML

Each QuickBooks Desktop release supports a range of qbXML versions, the language the API speaks to it. The first session with a company file records the newest version both sides support (for example `16.0` for QuickBooks 2023 and later), shown as `qbxmlVersion` on the connection and on every request.

Some fields and operations need a newer qbXML version than older QuickBooks releases offer. The API reference marks them with their minimum version. Sending such a field to an older QuickBooks returns `422 QBD_FIELD_UNSUPPORTED_BY_VERSION` with `details.minimumQbxmlVersion`, before anything is sent. QuickBooks releases older than qbXML 13.0 are not supported at all (`QBD_VERSION_UNSUPPORTED`).

## Editions

| Edition | Supported | Notes |
| --- | --- | --- |
| QuickBooks Desktop Enterprise Solutions, all industry editions | Yes, releases with qbXML 13.0 or newer | The broadest feature set: Advanced Inventory, Advanced Pricing, more users and larger lists |
| QuickBooks Desktop Premier and Accountant, including Plus | Yes, 2018 and later | No Advanced Inventory |
| QuickBooks Desktop Pro, including Plus | Yes, 2018 and later | Fewer features, for example no sales orders and no per-item price levels |
| Non-US editions (Canada, UK, Australia) | No | Returns `QBD_REGION_UNSUPPORTED` |

When a feature does not exist in an edition, or is turned off in the company's preferences, QuickBooks rejects the request and the API returns `422 QBD_FEATURE_NOT_ENABLED` (qbXML status 3250) with the reason. Read company settings up front with `GET /v1/quickbooks-desktop/preferences` to adapt your UI, rather than discovering missing features through errors.

## Advanced Inventory

Inventory sites (`/v1/quickbooks-desktop/inventory-sites`), item sites (`/v1/quickbooks-desktop/item-sites`), site fields on lines (`inventorySiteId`, `inventorySiteLocationId`), and serial and lot numbers need QuickBooks Enterprise with an Advanced Inventory subscription, turned on in the company file. Without it, those operations and fields return `QBD_FEATURE_NOT_ENABLED`. Leave site fields out for companies that do not use Advanced Inventory.

## Multicurrency

When the company turns on multicurrency in its preferences:

- Customers, vendors and accounts have a `currency`, which cannot change once transactions exist.
- Transactions for foreign-currency customers and vendors are in that currency, with an `exchangeRate` and home-currency amounts such as `balanceRemainingInHomeCurrency`.
- `GET /v1/quickbooks-desktop/currencies` lists the currencies and their rates.
- Filters such as `currencyIds` narrow lists by currency.

Amounts in a transaction are always in that transaction's currency. Multicurrency cannot be turned off again once enabled, so do not suggest that customers enable it just for your integration.

## Units of measure

Companies with unit of measure sets turned on can sell and buy items in different units. Lines carry `unitOfMeasure`, and `overrideUnitOfMeasureSet` where a line uses a different set. Unit of measure sets are available in Premier, Accountant and Enterprise.

## Sales tax

US companies track sales tax with sales tax items, sales tax group items and sales tax codes. A customer or line's `salesTaxCode` decides whether it is taxable; the `salesTaxItem` decides the rate and the agency. Pay sales tax with sales tax payment checks; QuickBooks cannot void those through qbXML, so delete them instead (see [documented incompatibilities](https://www.desktopaccountingapi.com/docs/platform/supported-environments/#documented-incompatibilities)).

## Payroll

Payroll wage items and the payroll reports reflect QuickBooks' payroll setup. Companies without QuickBooks payroll return empty lists or QuickBooks errors for payroll reports. The API does not run payroll or create paychecks.

## Personal data

QuickBooks keeps some fields behind an extra permission: Social Security numbers and full credit card numbers. Our connector does not ask for that permission, so those fields are never returned, and QuickBooks does not show the end user a request for sensitive data during setup.

Payroll reports (`/v1/quickbooks-desktop/reports/payroll-summary` and `payroll-detail`) sit behind the same permission. Without it, QuickBooks rejects them with status 3261 and the API returns `403 QBD_INSUFFICIENT_PERMISSION`, whose fixes tell the QuickBooks Admin how to allow personal-data access for the app under **Edit › Preferences › Integrated Applications**. See [The QuickBooks user lacks permission](https://www.desktopaccountingapi.com/docs/help/connection-errors/insufficient-permission/#personal-data-status-3261).

## QuickBooks user permissions

Requests run as the QuickBooks user chosen during setup (**Login as**). If that user's role lacks access to an area, such as payroll or banking, QuickBooks rejects the request with `403 QBD_INSUFFICIENT_PERMISSION` (status 3260). Use the Admin user or a dedicated user with full access. See [Create a dedicated QuickBooks user](https://www.desktopaccountingapi.com/docs/help/guides/dedicated-quickbooks-user/).
