# What is Conductor?
Source: https://docs.conductor.is/about

The best QuickBooks Desktop integration on the planet.

Conductor is a real-time, fully-typed API for QuickBooks Desktop (sometimes called QuickBooks Enterprise), available via Python, Node.js, TypeScript, and REST. In just a few lines, get real-time access to fetch, create, or update [*any* QuickBooks Desktop object type](/api-ref) and receive a fully-typed response.

We put a ridiculous amount of effort into making Conductor as amazing as possible. Seriously.

## Key features

* **Any data type:** Query, create, or update any QuickBooks Desktop data type.
* **Real-time**: Get real-time updates on your QuickBooks Desktop data. No queues, no polling.
* **Modern API:** JSON-based REST API, replacing the old XML-based SOAP model.
* **Typed client libraries:** Fully typed libraries in Node.js and Python with autocomplete, inline docs, and type validation for endpoints, parameters, and responses.
* **Request handling:** Invisibly manages queues, timeouts, retries, and pagination.
* **Multi-company support:** Connects to multiple QuickBooks Desktop company files.
* **Validation:** Sanitizes and validates all inputs and outputs.
* **Unified error handling:** Streamlines error handling across the QuickBooks stack.
* **Authentication flow UI:** Simple UI for securely connecting QuickBooks Desktop accounts.
* **Dashboard**: UI to monitor and manage your QuickBooks Desktop connections and data.
* **Error resolution:** Detailed guides and instructions for resolving errors and handling edge cases.


# Create an auth session
Source: https://docs.conductor.is/api-ref/auth-sessions/create

POST /auth-sessions
To launch the authentication flow, create an auth session and pass the returned session's `authFlowUrl` to the client for your end-user to visit in their browser. Demo: https://connect.conductor.is/qbd/demo



# The Auth Session object
Source: https://docs.conductor.is/api-ref/auth-sessions/object

An auth session is the secure way to programmatically launch the client-side Conductor authentication flow that lets your users connect their accounts to your integration.



# Authentication
Source: https://docs.conductor.is/api-ref/authentication



The Conductor API uses [API keys](/usage/keys) to authenticate requests.

Your secret API keys carry many privileges, so be sure to keep them secure. Do not share your secret API keys in publicly accessible areas such as Git, client-side code, or a public website.

You must make all API calls over HTTPS. Calls that you make over plain HTTP will fail. API requests without authentication will also fail.

<Tabs>
  <Tab title="Node.js">
    Use your API Secret Key by setting it in the constructor when instantiating the Conductor client or by setting the environment variable `CONDUCTOR_SECRET_KEY`. The Python library will automatically include this key in all API requests. For enhanced security, we recommend using environment variables to avoid hardcoding sensitive credentials in your code.

    ```ts Example authenticated request theme={"system"}
    import Conductor from "conductor-node";

    const conductor = new Conductor({ apiKey: "YOUR_SECRET_KEY" });

    const endUsers = await conductor.endUsers.list();
    ```
  </Tab>

  <Tab title="Python">
    Use your API Secret Key by setting it in the constructor when instantiating the Conductor client or by setting the environment variable `CONDUCTOR_SECRET_KEY`. The Python library will automatically include this key in all API requests. For enhanced security, we recommend using environment variables to avoid hardcoding sensitive credentials in your code.

    ```python Example authenticated request theme={"system"}
    from conductor import Conductor

    conductor = Conductor(api_key="YOUR_SECRET_KEY")

    end_users = conductor.end_users.list()
    ```
  </Tab>

  <Tab title="cURL">
    Authentication to the API is performed with bearer auth. Provide your API Secret Key in the `Authorization` header.

    ```sh Example authenticated request theme={"system"}
    curl -X GET https://api.conductor.is/v1/end-users \
         -H "Authorization: Bearer {{YOUR_SECRET_KEY}}"
    ```
  </Tab>
</Tabs>


# Create an end-user
Source: https://docs.conductor.is/api-ref/end-users/create

POST /end-users
Creates an end-user.



# Delete an end-user
Source: https://docs.conductor.is/api-ref/end-users/delete

DELETE /end-users/{id}
Permanently deletes an end-user object and all of its connections.



# List all end-users
Source: https://docs.conductor.is/api-ref/end-users/list

GET /end-users
Returns a list of your end-users.



# The End-User object
Source: https://docs.conductor.is/api-ref/end-users/object

An end-user represents a user of your application. Use it to connect integrations.



# Retrieve an end-user
Source: https://docs.conductor.is/api-ref/end-users/retrieve

GET /end-users/{id}
Retrieves an end-user object.



# The Error object
Source: https://docs.conductor.is/api-ref/errors

The standard error format that the Conductor API returns for all errors.



# MCP
Source: https://docs.conductor.is/api-ref/mcp

Bridge Conductor API into AI tools with the Model Context Protocol

<Note>
  Need to integrate Conductor's QuickBooks Desktop API into an AI assistant?
  Check out Conductor's MCP (Model Context Protocol) server that exposes every
  Conductor API endpoint to LLMs: [Conductor MCP server](/usage/mcp).
</Note>


# Missing QBD types
Source: https://docs.conductor.is/api-ref/missing-qbd-types



Conductor has painstakingly designed 240+ endpoints and **45,000+** parameters and response fields for QuickBooks Desktop.

Yet, there are still some less common QuickBooks Desktop types and endpoints that have not yet been added to Conductor. Below is a list of missing types that we plan to eventually support, but it is a low priority:

1. Custom fields:
   * [DataExt](https://developer.intuit.com/app/developer/qbdesktop/docs/api-reference/qbdesktop/dataextadd)
   * [DataExtDef](https://developer.intuit.com/app/developer/qbdesktop/docs/api-reference/qbdesktop/dataextdefadd)
2. Generic list-object operations:
   * [ListDel](https://developer.intuit.com/app/developer/qbdesktop/docs/api-reference/qbdesktop/listdel)
3. Item operations:
   * [ItemQuery](https://developer.intuit.com/app/developer/qbdesktop/docs/api-reference/qbdesktop/itemquery)
   * [ItemFixedAsset](https://developer.intuit.com/app/developer/qbdesktop/docs/api-reference/qbdesktop/itemfixedassetadd)
   * [ItemPayment](https://developer.intuit.com/app/developer/qbdesktop/docs/api-reference/qbdesktop/itempaymentadd)
4. [HostQuery](https://developer.intuit.com/app/developer/qbdesktop/docs/api-reference/qbdesktop/hostquery)

There are even more types beyond those listed above ([see the full list here](https://developer.intuit.com/app/developer/qbdesktop/docs/api-reference/qbdesktop)), but they are so rare that no one has requested them.

If you need Conductor to support one of the missing types, please email us at [support@conductor.is](mailto:support@conductor.is?subject=Missing%20QBD%20types). Priority will be given to paying customers.


# OpenAPI
Source: https://docs.conductor.is/api-ref/openapi

Download and use our OpenAPI specification

Conductor provides a complete [OpenAPI](https://www.openapis.org/what-is-openapi) specification for our API, which you can use to generate client libraries, validate requests, and explore the API.

## Download

You can [download our OpenAPI specification here](https://app.stainless.com/api/spec/documented/conductor).

<Note>
  The specification uses OpenAPI v3.1, is in YAML format, and is approximately
  110,000 lines long.
</Note>

## Coverage

Our OpenAPI specification includes:

* **Core Resources**: API endpoints for managing end users, auth sessions, and more
* **QuickBooks Desktop API**: Complete set of QuickBooks Desktop API operation for transactions, items, and general resources

## Use Cases

* Generate client libraries in various programming languages
* Create custom documentation
* Test API endpoints with tools like Postman
* Validate requests and responses
* Create mock servers for testing


# Pagination
Source: https://docs.conductor.is/api-ref/pagination

Learn how to efficiently retrieve large datasets in API v2 from QuickBooks Desktop using cursor-based pagination.

Conductor's QuickBooks Desktop API v2 uses cursor-based pagination to handle large datasets efficiently, allowing you to retrieve results in manageable chunks. This guide explains how to implement pagination and its key limitations.

## How pagination works

For list endpoints that support pagination (indicated by the presence of a `cursor` query parameter in the API specification), the process works as follows:

1. Make your initial request to the list endpoint without a cursor.
   * Use the `limit` query parameter to control how many items are returned per page.
     * The default and maximum value is `150` items per page. We enforce this limit to prevent overloading QuickBooks Desktop.

2. The response will contain the following pagination fields:
   * `nextCursor` - The cursor value to use when requesting the next page of results. This field is `null` if there are no more pages.
   * `hasMore` - Indicates whether there are more pages of results available.
   * `remainingCount` - The number of remaining items that can be retrieved in subsequent pages.

3. To fetch the next page, make another request with the `cursor` query parameter set to the `nextCursor` value from the previous response.

   <Warning>
     **You must make subsequent pagination requests within 10 seconds of
     receiving the previous response.** If you exceed this time limit, you'll
     receive an error.
   </Warning>

   * This limitation is inherent to QuickBooks Desktop's design. - While this is
     not an issue when using code to automatically fetch pages in sequence (e.g.,
     in a loop), it may affect manual API testing where you're copying and pasting
     cursor values between requests.

4. Repeat until `hasMore` is `false`.

5. Attempting to request another page when `hasMore` is `false` will result in an error.

## Important limitations

### Same `cursor` value used for all pages

The `cursor` value remains constant throughout the entire pagination sequence. This means you should reuse the same cursor value for all subsequent requests in the sequence, which is a design characteristic inherent to the QuickBooks Desktop system.

### No custom sorting available

The order of results is determined entirely by QuickBooks Desktop, and no information about the ordering is provided in the response. Due to this limitation, custom sorting of results is not supported through the API.

### Non-paginated endpoints

Some QuickBooks Desktop list APIs do not support pagination due to limitations in QuickBooks Desktop itself. These endpoints can be identified by the absence of the `cursor` parameter in their API specification. This typically applies to endpoints where the end-user is highly unlikely to have a large set of objects of that type, so the absence of pagination will not impact performance.

## Pagination in Conductor SDKs

Our official client libraries handle pagination automatically, making it easier to work with paginated responses. Check out their documentation for implementation details:

* [Node.js SDK](https://github.com/conductor-is/quickbooks-desktop-node?tab=readme-ov-file#auto-pagination)
* [Python SDK](https://github.com/conductor-is/quickbooks-desktop-python?tab=readme-ov-file#pagination)

## Example

1. Initial request:

   ```http theme={"system"}
   GET https://api.conductor.is/v1/quickbooks_desktop/customers
   ```

   ```json Example initial response theme={"system"}
   {
     "data": [...],
     "nextCursor": "abc123",
     "hasMore": true,
     "remainingCount": 99
   }
   ```

2. Next page request with `cursor` query parameter:

   ```http theme={"system"}
   GET https://api.conductor.is/v1/quickbooks_desktop/customers?cursor=abc123
   ```

   ```json Example next page response theme={"system"}
   {
     "data": [...],
     "nextCursor": "abc123",
     "hasMore": false,
     "remainingCount": 0
   }
   ```

3. Requesting another page after `hasMore` is `false` will result in an error:

   ```http theme={"system"}
   GET https://api.conductor.is/v1/quickbooks_desktop/customers?cursor=abc123
   ```

   ```json Example error response theme={"system"}
   {
     "error": {
       "message": "No more results available"
       // ...
     }
   }
   ```


# List all account tax lines
Source: https://docs.conductor.is/api-ref/qbd/account-tax-lines/list

GET /quickbooks-desktop/account-tax-lines
Returns a list of account tax lines.

**NOTE:** QuickBooks Desktop does not support pagination for account tax lines; hence, there is no `cursor` parameter. Users typically have few account tax lines.



# The Account Tax Line object
Source: https://docs.conductor.is/api-ref/qbd/account-tax-lines/object

A tax line maps specific income and expense accounts to federal tax form lines for tax reporting purposes.



# Create an account
Source: https://docs.conductor.is/api-ref/qbd/accounts/create

POST /quickbooks-desktop/accounts
Creates a new financial account. QuickBooks requires you to pick a supported account type for the chart of accounts, and non-posting types can’t be created through the API.



# List all accounts
Source: https://docs.conductor.is/api-ref/qbd/accounts/list

GET /quickbooks-desktop/accounts
Returns a list of accounts.

**NOTE:** QuickBooks Desktop does not support pagination for accounts; hence, there is no `cursor` parameter. Users typically have few accounts.



# The Account object
Source: https://docs.conductor.is/api-ref/qbd/accounts/object

An account in QuickBooks Desktop represents a financial account used to track money and transactions. It can be customized with features like hierarchical sub-accounts, account numbers, and opening balances. Accounts form the foundation of the chart of accounts and can represent various types like bank accounts, credit cards, income, expense, and other financial categories.



# Retrieve an account
Source: https://docs.conductor.is/api-ref/qbd/accounts/retrieve

GET /quickbooks-desktop/accounts/{id}
Retrieves an account by ID.

**IMPORTANT:** If you need to fetch multiple specific accounts by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update an account
Source: https://docs.conductor.is/api-ref/qbd/accounts/update

POST /quickbooks-desktop/accounts/{id}
Updates an existing financial account. You can rename the account, adjust numbering, or change supported attributes, but QuickBooks won’t let you convert it to a non-posting type via the API.



# Create a bill check payment
Source: https://docs.conductor.is/api-ref/qbd/bill-check-payments/create

POST /quickbooks-desktop/bill-check-payments
Records a check payment against one vendor’s open bills. Each bill allocation must include a payment amount, discount, or vendor credit, and the accounts payable account has to match the one used on the bills you’re closing.



# Delete a bill check payment
Source: https://docs.conductor.is/api-ref/qbd/bill-check-payments/delete

DELETE /quickbooks-desktop/bill-check-payments/{id}
Permanently deletes a bill check payment. The deletion will fail if the bill check payment is currently in use or has any linked transactions that are in use.



# List all bill check payments
Source: https://docs.conductor.is/api-ref/qbd/bill-check-payments/list

GET /quickbooks-desktop/bill-check-payments
Returns a list of bill check payments. Use the `cursor` parameter to paginate through the results.



# The Bill Check Payment object
Source: https://docs.conductor.is/api-ref/qbd/bill-check-payments/object

A bill check payment records a payment made by check to pay off one or more vendor bills. It reduces accounts payable and decreases the bank account balance. This transaction links the original bill(s) with the payment, allowing QuickBooks to track which bills have been paid and maintain accurate vendor balances.



# Retrieve a bill check payment
Source: https://docs.conductor.is/api-ref/qbd/bill-check-payments/retrieve

GET /quickbooks-desktop/bill-check-payments/{id}
Retrieves a bill check payment by ID.

**IMPORTANT:** If you need to fetch multiple specific bill check payments by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a bill check payment
Source: https://docs.conductor.is/api-ref/qbd/bill-check-payments/update

POST /quickbooks-desktop/bill-check-payments/{id}
Updates a bill check payment so you can reallocate how amounts, discounts, or credits are applied to the vendor’s bills. When you update a payment, QuickBooks clears the prior allocations but keeps any existing vendor credits unchanged, so submit the full list of bill applications in this request.



# Void a bill check payment
Source: https://docs.conductor.is/api-ref/qbd/bill-check-payments/void

POST /quickbooks-desktop/bill-check-payments/{id}/void
Voids a bill check payment by setting its amount to zero while keeping a record of it in QuickBooks. The void will fail if the bill check payment is currently in use or has any linked transactions that are in use.



# Create a bill credit card payment
Source: https://docs.conductor.is/api-ref/qbd/bill-credit-card-payments/create

POST /quickbooks-desktop/bill-credit-card-payments
Charges one vendor’s bills to a credit card account. Each bill allocation must supply a payment amount, discount, or credit, and you have to use the same accounts payable account that’s on the bills being closed.



# Delete a bill credit card payment
Source: https://docs.conductor.is/api-ref/qbd/bill-credit-card-payments/delete

DELETE /quickbooks-desktop/bill-credit-card-payments/{id}
Permanently deletes a bill credit card payment. The deletion will fail if the bill credit card payment is currently in use or has any linked transactions that are in use.



# List all bill credit card payments
Source: https://docs.conductor.is/api-ref/qbd/bill-credit-card-payments/list

GET /quickbooks-desktop/bill-credit-card-payments
Returns a list of bill credit card payments. Use the `cursor` parameter to paginate through the results.



# The Bill Credit Card Payment object
Source: https://docs.conductor.is/api-ref/qbd/bill-credit-card-payments/object

A bill credit card payment records a payment made via credit card to pay off one or more vendor bills. It reduces accounts payable and increases the credit card account balance. This transaction links the original bill(s) with the payment, allowing QuickBooks to track which bills have been paid and maintain accurate vendor balances.



# Retrieve a bill credit card payment
Source: https://docs.conductor.is/api-ref/qbd/bill-credit-card-payments/retrieve

GET /quickbooks-desktop/bill-credit-card-payments/{id}
Retrieves a bill credit card payment by ID.

**IMPORTANT:** If you need to fetch multiple specific bill credit card payments by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Void a bill credit card payment
Source: https://docs.conductor.is/api-ref/qbd/bill-credit-card-payments/void

POST /quickbooks-desktop/bill-credit-card-payments/{id}/void
Voids a bill credit card payment by setting its amount to zero while keeping a record of it in QuickBooks. The void will fail if the bill credit card payment is currently in use or has any linked transactions that are in use.



# List bills and credits available to pay for a vendor
Source: https://docs.conductor.is/api-ref/qbd/bills-to-pay/list

GET /quickbooks-desktop/bills-to-pay
Lists open vendor bills and available vendor credits for a specific QuickBooks Desktop vendor. Use each `bill.billId` as `applyToTransactions[].transactionId` in bill-payment requests. To apply a returned credit, place it under the target bill's `applyToTransactions[].applyCredits[]` entry, set `creditTransactionId` to `credit.creditTransactionId`, and choose an `appliedAmount` that does not exceed `credit.creditRemaining` or the target bill's remaining amount due.

**NOTE:** QuickBooks Desktop does not support pagination for bills to pay; hence, there is no `cursor` parameter. Users typically have few bills to pay.



# The Bill To Pay object
Source: https://docs.conductor.is/api-ref/qbd/bills-to-pay/object

Bills to pay are open vendor bills and available vendor credits returned by QuickBooks Desktop for a specific vendor. Use these records when deciding which bills and credits to include in bill check payments or bill credit card payments.



# Create a bill
Source: https://docs.conductor.is/api-ref/qbd/bills/create

POST /quickbooks-desktop/bills
Creates a vendor bill and posts it to accounts payable. You can also link eligible purchase orders so QuickBooks pulls their lines onto the bill before it's saved.



# Delete a bill
Source: https://docs.conductor.is/api-ref/qbd/bills/delete

DELETE /quickbooks-desktop/bills/{id}
Permanently deletes a bill. The deletion will fail if the bill is currently in use or has any linked transactions that are in use.



# List all bills
Source: https://docs.conductor.is/api-ref/qbd/bills/list

GET /quickbooks-desktop/bills
Returns a list of bills. Use the `cursor` parameter to paginate through the results.



# The Bill object
Source: https://docs.conductor.is/api-ref/qbd/bills/object

A bill represents an obligation to pay a vendor for goods or services received. It records the amount owed, due date, and payment terms, and increases accounts payable. Bills can be partially paid over time and may be linked to purchase orders.



# Retrieve a bill
Source: https://docs.conductor.is/api-ref/qbd/bills/retrieve

GET /quickbooks-desktop/bills/{id}
Retrieves a bill by ID.

**IMPORTANT:** If you need to fetch multiple specific bills by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.

NOTE: The response automatically includes any linked transactions.



# Update a bill
Source: https://docs.conductor.is/api-ref/qbd/bills/update

POST /quickbooks-desktop/bills/{id}
Updates an existing vendor bill while keeping the required references intact. QuickBooks does not let this update request add new purchase order links, and you must continue to supply the vendor, accounts payable account, and at least one expense or item line when you resubmit the bill.

**NOTE:** If you include `expenseLines`, `itemLines`, or `itemGroupLines`, QuickBooks Desktop replaces each included line list with the array you send, so include unchanged lines you want to keep and use `id: "-1"` for new lines.



# Void a bill
Source: https://docs.conductor.is/api-ref/qbd/bills/void

POST /quickbooks-desktop/bills/{id}/void
Voids a bill by setting its amount to zero while keeping a record of it in QuickBooks. The void will fail if the bill is currently in use or has any linked transactions that are in use.



# Create a build assembly
Source: https://docs.conductor.is/api-ref/qbd/build-assemblies/create

POST /quickbooks-desktop/build-assemblies
Creates a build assembly transaction that consumes component quantities and increases the finished assembly on hand. If components are short you can mark the build as pending instead of failing.



# Delete a build assembly
Source: https://docs.conductor.is/api-ref/qbd/build-assemblies/delete

DELETE /quickbooks-desktop/build-assemblies/{id}
Permanently deletes a build assembly. The deletion will fail if the build assembly is currently in use or has any linked transactions that are in use.



# List all build assemblies
Source: https://docs.conductor.is/api-ref/qbd/build-assemblies/list

GET /quickbooks-desktop/build-assemblies
Returns a list of build assemblies. Use the `cursor` parameter to paginate through the results.



# The Build Assembly object
Source: https://docs.conductor.is/api-ref/qbd/build-assemblies/object

A build assembly is a collection of items that are assembled to create a finished product. It is used to track the components and quantities of a product.



# Retrieve a build assembly
Source: https://docs.conductor.is/api-ref/qbd/build-assemblies/retrieve

GET /quickbooks-desktop/build-assemblies/{id}
Retrieves a build assembly by ID.

**IMPORTANT:** If you need to fetch multiple specific build assemblies by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a build assembly
Source: https://docs.conductor.is/api-ref/qbd/build-assemblies/update

POST /quickbooks-desktop/build-assemblies/{id}
Updates an existing build assembly.



# Create a check
Source: https://docs.conductor.is/api-ref/qbd/checks/create

POST /quickbooks-desktop/checks
Creates a non-payroll check from a bank account. QuickBooks uses this request for direct expense disbursements; to pay vendor bills or payroll liabilities you must use the dedicated bill-payment or payroll transactions instead.



# Delete a check
Source: https://docs.conductor.is/api-ref/qbd/checks/delete

DELETE /quickbooks-desktop/checks/{id}
Permanently deletes a check. The deletion will fail if the check is currently in use or has any linked transactions that are in use.



# List all checks
Source: https://docs.conductor.is/api-ref/qbd/checks/list

GET /quickbooks-desktop/checks
Returns a list of checks. Use the `cursor` parameter to paginate through the results.



# The Check object
Source: https://docs.conductor.is/api-ref/qbd/checks/object

A check represents a payment made from a bank account, typically via paper check. It records the withdrawal of funds paid to a vendor, employee, or other payee. The transaction reduces the balance of the specified bank account and can be linked to bills or other transactions being paid.



# Retrieve a check
Source: https://docs.conductor.is/api-ref/qbd/checks/retrieve

GET /quickbooks-desktop/checks/{id}
Retrieves a check by ID.

**IMPORTANT:** If you need to fetch multiple specific checks by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.

NOTE: The response automatically includes any linked transactions.



# Update a check
Source: https://docs.conductor.is/api-ref/qbd/checks/update

POST /quickbooks-desktop/checks/{id}
Updates a standard check so you can adjust the issuing account, payee details, memo, transaction date, or expense and item lines. This request cannot modify checks created through the bill-payment workflow.

**NOTE:** If you include `expenseLines`, `itemLines`, or `itemGroupLines`, QuickBooks Desktop replaces each included line list with the array you send, so include unchanged lines you want to keep and use `id: "-1"` for new lines.



# Void a check
Source: https://docs.conductor.is/api-ref/qbd/checks/void

POST /quickbooks-desktop/checks/{id}/void
Voids a check by setting its amount to zero while keeping a record of it in QuickBooks. The void will fail if the check is currently in use or has any linked transactions that are in use.



# Create a class
Source: https://docs.conductor.is/api-ref/qbd/classes/create

POST /quickbooks-desktop/classes
Creates a new class.



# List all classes
Source: https://docs.conductor.is/api-ref/qbd/classes/list

GET /quickbooks-desktop/classes
Returns a list of classes.

**NOTE:** QuickBooks Desktop does not support pagination for classes; hence, there is no `cursor` parameter. Users typically have few classes.



# The Class object
Source: https://docs.conductor.is/api-ref/qbd/classes/object

A class is a category used to group QuickBooks objects into meaningful categories. For example, classes can be used to classify transactions by department, location, or type of work.



# Retrieve a class
Source: https://docs.conductor.is/api-ref/qbd/classes/retrieve

GET /quickbooks-desktop/classes/{id}
Retrieves a class by ID.

**IMPORTANT:** If you need to fetch multiple specific classes by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a class
Source: https://docs.conductor.is/api-ref/qbd/classes/update

POST /quickbooks-desktop/classes/{id}
Updates an existing class.



# The Company object
Source: https://docs.conductor.is/api-ref/qbd/company/object

Detailed information about the connected QuickBooks company file, including company address, legal name, preferences, and subscribed services.



# Retrieve company file info
Source: https://docs.conductor.is/api-ref/qbd/company/retrieve

GET /quickbooks-desktop/company
Returns detailed information about the connected QuickBooks company file, including company address, legal name, preferences, and subscribed services. Note that company information cannot be modified through the API, only through the QuickBooks Desktop user interface.



# Create a credit card charge
Source: https://docs.conductor.is/api-ref/qbd/credit-card-charges/create

POST /quickbooks-desktop/credit-card-charges
Creates a new credit card charge for the specified account.



# Delete a credit card charge
Source: https://docs.conductor.is/api-ref/qbd/credit-card-charges/delete

DELETE /quickbooks-desktop/credit-card-charges/{id}
Permanently deletes a credit card charge. The deletion will fail if the credit card charge is currently in use or has any linked transactions that are in use.



# List all credit card charges
Source: https://docs.conductor.is/api-ref/qbd/credit-card-charges/list

GET /quickbooks-desktop/credit-card-charges
Returns a list of credit card charges. Use the `cursor` parameter to paginate through the results.



# The Credit Card Charge object
Source: https://docs.conductor.is/api-ref/qbd/credit-card-charges/object

A credit card charge is a general charge incurred when a QuickBooks user makes a purchase using a credit card. Credit card charges for purchases can be tracked as expenses (in expense accounts) or as items.



# Retrieve a credit card charge
Source: https://docs.conductor.is/api-ref/qbd/credit-card-charges/retrieve

GET /quickbooks-desktop/credit-card-charges/{id}
Retrieves a credit card charge by ID.

**IMPORTANT:** If you need to fetch multiple specific credit card charges by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a credit card charge
Source: https://docs.conductor.is/api-ref/qbd/credit-card-charges/update

POST /quickbooks-desktop/credit-card-charges/{id}
Updates an existing credit card charge so you can adjust the credit card account, payee, memo, transaction date, and expense or item lines. The total is recalculated from the line details.

**NOTE:** If you include `expenseLines`, `itemLines`, or `itemGroupLines`, QuickBooks Desktop replaces each included line list with the array you send, so include unchanged lines you want to keep and use `id: "-1"` for new lines.



# Void a credit card charge
Source: https://docs.conductor.is/api-ref/qbd/credit-card-charges/void

POST /quickbooks-desktop/credit-card-charges/{id}/void
Voids a credit card charge by setting its amount to zero while keeping a record of it in QuickBooks. The void will fail if the credit card charge is currently in use or has any linked transactions that are in use.



# Create a credit card credit
Source: https://docs.conductor.is/api-ref/qbd/credit-card-credits/create

POST /quickbooks-desktop/credit-card-credits
Creates a new credit card credit for the specified account.



# Delete a credit card credit
Source: https://docs.conductor.is/api-ref/qbd/credit-card-credits/delete

DELETE /quickbooks-desktop/credit-card-credits/{id}
Permanently deletes a credit card credit. The deletion will fail if the credit card credit is currently in use or has any linked transactions that are in use.



# List all credit card credits
Source: https://docs.conductor.is/api-ref/qbd/credit-card-credits/list

GET /quickbooks-desktop/credit-card-credits
Returns a list of credit card credits. Use the `cursor` parameter to paginate through the results.



# The Credit Card Credit object
Source: https://docs.conductor.is/api-ref/qbd/credit-card-credits/object

A credit card credit represents a credit or refund received from a vendor for returned merchandise, billing adjustment, or other credit. It reduces the balance owed on the credit card account.



# Retrieve a credit card credit
Source: https://docs.conductor.is/api-ref/qbd/credit-card-credits/retrieve

GET /quickbooks-desktop/credit-card-credits/{id}
Retrieves a credit card credit by ID.

**IMPORTANT:** If you need to fetch multiple specific credit card credits by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a credit card credit
Source: https://docs.conductor.is/api-ref/qbd/credit-card-credits/update

POST /quickbooks-desktop/credit-card-credits/{id}
Updates an existing credit card credit.

**NOTE:** If you include `expenseLines`, `itemLines`, or `itemGroupLines`, QuickBooks Desktop replaces each included line list with the array you send, so include unchanged lines you want to keep and use `id: "-1"` for new lines.



# Void a credit card credit
Source: https://docs.conductor.is/api-ref/qbd/credit-card-credits/void

POST /quickbooks-desktop/credit-card-credits/{id}/void
Voids a credit card credit by setting its amount to zero while keeping a record of it in QuickBooks. The void will fail if the credit card credit is currently in use or has any linked transactions that are in use.



# Create a credit card refund
Source: https://docs.conductor.is/api-ref/qbd/credit-card-refunds/create

POST /quickbooks-desktop/credit-card-refunds
Creates a credit card refund linked to one or more existing credit transactions, such as credit memos or overpayments. You must supply at least one entry in `refundAppliedToTransactions`, and the refund amount cannot exceed the available balance on the linked credits.



# Delete a credit card refund
Source: https://docs.conductor.is/api-ref/qbd/credit-card-refunds/delete

DELETE /quickbooks-desktop/credit-card-refunds/{id}
Permanently deletes a credit card refund. The deletion will fail if the credit card refund is currently in use or has any linked transactions that are in use.



# List all credit card refunds
Source: https://docs.conductor.is/api-ref/qbd/credit-card-refunds/list

GET /quickbooks-desktop/credit-card-refunds
Returns a list of credit card refunds. Use the `cursor` parameter to paginate through the results.



# The Credit Card Refund object
Source: https://docs.conductor.is/api-ref/qbd/credit-card-refunds/object

A credit card refund transaction issues money back to a customer's credit card, typically reversing a previously recorded credit card payment. It reduces the customer's outstanding accounts receivable balance and withdraws funds from the specified refund source account (Undeposited Funds by default). Use this when refunding credit card payments rather than creating a credit memo or issuing a cash refund.



# Retrieve a credit card refund
Source: https://docs.conductor.is/api-ref/qbd/credit-card-refunds/retrieve

GET /quickbooks-desktop/credit-card-refunds/{id}
Retrieves a credit card refund by ID.

**IMPORTANT:** If you need to fetch multiple specific credit card refunds by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Void a credit card refund
Source: https://docs.conductor.is/api-ref/qbd/credit-card-refunds/void

POST /quickbooks-desktop/credit-card-refunds/{id}/void
Voids a credit card refund by setting its amount to zero while keeping a record of it in QuickBooks. The void will fail if the credit card refund is currently in use or has any linked transactions that are in use.



# Create a credit memo
Source: https://docs.conductor.is/api-ref/qbd/credit-memos/create

POST /quickbooks-desktop/credit-memos
Creates a new credit memo.



# Delete a credit memo
Source: https://docs.conductor.is/api-ref/qbd/credit-memos/delete

DELETE /quickbooks-desktop/credit-memos/{id}
Permanently deletes a credit memo. The deletion will fail if the credit memo is currently in use or has any linked transactions that are in use.



# List all credit memos
Source: https://docs.conductor.is/api-ref/qbd/credit-memos/list

GET /quickbooks-desktop/credit-memos
Returns a list of credit memos. Use the `cursor` parameter to paginate through the results.



# The Credit Memo object
Source: https://docs.conductor.is/api-ref/qbd/credit-memos/object

A credit memo records an amount owed to a customer (such as for returns, over-payments, or pre-payments), reducing their outstanding balance. The credit remains available (tracked in the `creditRemaining` field) until it's applied to other transactions (such as invoices or sales receipts) through a receive-payment's `applyToTransactions.applyCredits` field.



# Retrieve a credit memo
Source: https://docs.conductor.is/api-ref/qbd/credit-memos/retrieve

GET /quickbooks-desktop/credit-memos/{id}
Retrieves a credit memo by ID.

**IMPORTANT:** If you need to fetch multiple specific credit memos by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.

NOTE: The response automatically includes any linked transactions.



# Update a credit memo
Source: https://docs.conductor.is/api-ref/qbd/credit-memos/update

POST /quickbooks-desktop/credit-memos/{id}
Updates an existing credit memo.

**NOTE:** If you include `lines` or `lineGroups`, QuickBooks Desktop replaces each included line list with the array you send, so include unchanged lines you want to keep and use `id: "-1"` for new lines.



# Void a credit memo
Source: https://docs.conductor.is/api-ref/qbd/credit-memos/void

POST /quickbooks-desktop/credit-memos/{id}/void
Voids a credit memo by setting its amount to zero while keeping a record of it in QuickBooks. The void will fail if the credit memo is currently in use or has any linked transactions that are in use.



# Create a currency
Source: https://docs.conductor.is/api-ref/qbd/currencies/create

POST /quickbooks-desktop/currencies
Creates a user-defined currency with the specified name and currency code. Exchange rates for user-defined currencies are not updated automatically by QuickBooks Desktop; update them manually as needed.



# List all currencies
Source: https://docs.conductor.is/api-ref/qbd/currencies/list

GET /quickbooks-desktop/currencies
Returns a list of currencies.

**NOTE:** QuickBooks Desktop does not support pagination for currencies; hence, there is no `cursor` parameter. Users typically have few currencies.



# The Currency object
Source: https://docs.conductor.is/api-ref/qbd/currencies/object

A currency represents either a built-in ISO 4217 currency or a user-defined currency in a multi-currency QuickBooks company file. Built-in currencies have standardized names and codes and support automatic exchange-rate downloads in the QuickBooks UI. User-defined currencies behave the same in QuickBooks but their exchange rates are never auto-updated; you must maintain rates yourself.



# Retrieve a currency
Source: https://docs.conductor.is/api-ref/qbd/currencies/retrieve

GET /quickbooks-desktop/currencies/{id}
Retrieves a currency by ID.

**IMPORTANT:** If you need to fetch multiple specific currencies by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a currency
Source: https://docs.conductor.is/api-ref/qbd/currencies/update

POST /quickbooks-desktop/currencies/{id}
Updates an existing currency. For built-in currencies, only the `isActive` status can be changed; name and currency code are not editable. For user-defined currencies, all fields in this request are editable.



# Create a customer type
Source: https://docs.conductor.is/api-ref/qbd/customer-types/create

POST /quickbooks-desktop/customer-types
Creates a new customer type.



# List all customer types
Source: https://docs.conductor.is/api-ref/qbd/customer-types/list

GET /quickbooks-desktop/customer-types
Returns a list of customer types.

**NOTE:** QuickBooks Desktop does not support pagination for customer types; hence, there is no `cursor` parameter. Users typically have few customer types.



# The Customer Type object
Source: https://docs.conductor.is/api-ref/qbd/customer-types/object

A customer type categorizes customers into meaningful segments, such as industry or region, so QuickBooks Desktop users can organize reporting and workflows around those groupings.



# Retrieve a customer type
Source: https://docs.conductor.is/api-ref/qbd/customer-types/retrieve

GET /quickbooks-desktop/customer-types/{id}
Retrieves a customer type by ID.

**IMPORTANT:** If you need to fetch multiple specific customer types by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Create a customer
Source: https://docs.conductor.is/api-ref/qbd/customers/create

POST /quickbooks-desktop/customers
Creates a new customer.



# List all customers
Source: https://docs.conductor.is/api-ref/qbd/customers/list

GET /quickbooks-desktop/customers
Returns a list of customers. Use the `cursor` parameter to paginate through the results.

**IMPORTANT**: If this request times out or is slow, set `excludeAlternateShippingAddresses=true` to significantly improve performance. Use the `cursor` parameter to paginate through the results.



# The Customer object
Source: https://docs.conductor.is/api-ref/qbd/customers/object

A customer record in QuickBooks Desktop represents either a business or individual who purchases goods or services, or a specific job/project being performed for that customer. Jobs are treated as sub-customers and inherit billing information from their parent customer while allowing for job-specific details to be tracked.



# Retrieve a customer
Source: https://docs.conductor.is/api-ref/qbd/customers/retrieve

GET /quickbooks-desktop/customers/{id}
Retrieves a customer by ID.

**IMPORTANT:** If you need to fetch multiple specific customers by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a customer
Source: https://docs.conductor.is/api-ref/qbd/customers/update

POST /quickbooks-desktop/customers/{id}
Updates an existing customer.



# Create a date-driven term
Source: https://docs.conductor.is/api-ref/qbd/date-driven-terms/create

POST /quickbooks-desktop/date-driven-terms
Creates a date-driven term that sets the payment due on a specific day of the month and can optionally grant an early-payment discount before `discountDayOfMonth`. Use it when you need due dates tied to calendar days instead of a fixed number of days after the transaction.



# List all date-driven terms
Source: https://docs.conductor.is/api-ref/qbd/date-driven-terms/list

GET /quickbooks-desktop/date-driven-terms
Returns a list of date-driven terms.

**NOTE:** QuickBooks Desktop does not support pagination for date-driven terms; hence, there is no `cursor` parameter. Users typically have few date-driven terms.



# The Date-Driven Term object
Source: https://docs.conductor.is/api-ref/qbd/date-driven-terms/object

A date-driven term shows the day of the month by which payment is due and can include a discount for early payment.



# Retrieve a date-driven term
Source: https://docs.conductor.is/api-ref/qbd/date-driven-terms/retrieve

GET /quickbooks-desktop/date-driven-terms/{id}
Retrieves a date-driven term by ID.

**IMPORTANT:** If you need to fetch multiple specific date-driven terms by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# List all deleted list-objects
Source: https://docs.conductor.is/api-ref/qbd/deleted-list-objects/list

GET /quickbooks-desktop/deleted-list-objects
Lists deleted non-transaction list-objects (e.g., customers, vendors, employees, items) from the last 90 days. Results are grouped by list-object type and ordered by actual delete time (ascending). For deleted transactions (e.g., invoices, bills, estimates), see the deleted-transactions endpoint.

**NOTE:** QuickBooks Desktop does not support pagination for deleted list-objects; hence, there is no `cursor` parameter. Users typically have few deleted list-objects.



# The Deleted List-Object object
Source: https://docs.conductor.is/api-ref/qbd/deleted-list-objects/object

A deleted list-object represents a QuickBooks list object (e.g., customer, vendor, item) that has been removed from the company file within the last 90 days.



# List all deleted transactions
Source: https://docs.conductor.is/api-ref/qbd/deleted-transactions/list

GET /quickbooks-desktop/deleted-transactions
Lists deleted transactions of the specified type(s) (e.g., invoice, bill, estimate) in the last 90 days. Results are grouped by transaction type and ordered by actual delete time (ascending). NOTE: For deleted non-transaction list-objects (e.g., customer, vendor, employee), see the deleted-list-objects endpoint.

**NOTE:** QuickBooks Desktop does not support pagination for deleted transactions; hence, there is no `cursor` parameter. Users typically have few deleted transactions.



# The Deleted Transaction object
Source: https://docs.conductor.is/api-ref/qbd/deleted-transactions/object

A deleted transaction represents a QuickBooks transaction (e.g., invoice, bill, estimate) that has been deleted from the company file.



# Create a deposit
Source: https://docs.conductor.is/api-ref/qbd/deposits/create

POST /quickbooks-desktop/deposits
Creates a deposit into a QuickBooks Desktop bank or other asset account. Lines can either reference existing payments waiting to be deposited, using `paymentTransactionId` and optionally `paymentTransactionLineId`, or describe a manual transfer from another account using `accountId` and related line details.



# Delete a deposit
Source: https://docs.conductor.is/api-ref/qbd/deposits/delete

DELETE /quickbooks-desktop/deposits/{id}
Permanently deletes a deposit. The deletion will fail if the deposit is currently in use or has any linked transactions that are in use.



# List all deposits
Source: https://docs.conductor.is/api-ref/qbd/deposits/list

GET /quickbooks-desktop/deposits
Returns a list of deposits. Use the `cursor` parameter to paginate through the results.



# The Deposit object
Source: https://docs.conductor.is/api-ref/qbd/deposits/object

A deposit records funds moved into a QuickBooks Desktop bank or other asset account. It is commonly used to group customer payments from Undeposited Funds into the bank deposit that appears on the bank statement, and it can also include manual deposit lines and cash back.



# Retrieve a deposit
Source: https://docs.conductor.is/api-ref/qbd/deposits/retrieve

GET /quickbooks-desktop/deposits/{id}
Retrieves a deposit by ID.

**IMPORTANT:** If you need to fetch multiple specific deposits by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a deposit
Source: https://docs.conductor.is/api-ref/qbd/deposits/update

POST /quickbooks-desktop/deposits/{id}
Updates an existing deposit.

**NOTE:** If you include `lines`, QuickBooks Desktop replaces that line list with the array you send, so include unchanged lines you want to keep and use `id: "-1"` for new lines.



# Void a deposit
Source: https://docs.conductor.is/api-ref/qbd/deposits/void

POST /quickbooks-desktop/deposits/{id}/void
Voids a deposit by setting its amount to zero while keeping a record of it in QuickBooks. The void will fail if the deposit is currently in use or has any linked transactions that are in use.



# Create a discount item
Source: https://docs.conductor.is/api-ref/qbd/discount-items/create

POST /quickbooks-desktop/discount-items
Creates a discount item that subtracts either a percentage or fixed amount from transaction totals. Percentage discounts only affect the preceding line, while fixed-amount discounts reduce the accumulated amount above them unless you bound the target lines with a subtotal item.



# List all discount items
Source: https://docs.conductor.is/api-ref/qbd/discount-items/list

GET /quickbooks-desktop/discount-items
Returns a list of discount items. Use the `cursor` parameter to paginate through the results.



# The Discount Item object
Source: https://docs.conductor.is/api-ref/qbd/discount-items/object

A discount item applies a percentage or fixed amount reduction to the total or subtotal of the line directly above it. Items must be subtotaled first because discounts only affect the preceding line. Unlike discounts for early payments, which use standard-terms or date-driven-terms. Important: Never specify a quantity in a transaction when using a discount item.



# Retrieve a discount item
Source: https://docs.conductor.is/api-ref/qbd/discount-items/retrieve

GET /quickbooks-desktop/discount-items/{id}
Retrieves a discount item by ID.

**IMPORTANT:** If you need to fetch multiple specific discount items by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a discount item
Source: https://docs.conductor.is/api-ref/qbd/discount-items/update

POST /quickbooks-desktop/discount-items/{id}
Updates a discount item, including its linked account or discount rate. When changing the account, use `updateExistingTransactionsAccount` to control whether existing transactions that reference the item should also be updated.



# Create an employee
Source: https://docs.conductor.is/api-ref/qbd/employees/create

POST /quickbooks-desktop/employees
Creates an employee record that captures personal details, contact information, employment dates, and payroll settings in a single request so the employee is ready for scheduling, time tracking, and payroll processing.



# List all employees
Source: https://docs.conductor.is/api-ref/qbd/employees/list

GET /quickbooks-desktop/employees
Returns a list of employees.

**NOTE:** QuickBooks Desktop does not support pagination for employees; hence, there is no `cursor` parameter. Users typically have few employees.



# The Employee object
Source: https://docs.conductor.is/api-ref/qbd/employees/object

An employee represents a person employed by the company. It stores personal information, employment details, and payroll data used for personnel management and payroll processing.



# Retrieve an employee
Source: https://docs.conductor.is/api-ref/qbd/employees/retrieve

GET /quickbooks-desktop/employees/{id}
Retrieves an employee by ID.

**IMPORTANT:** If you need to fetch multiple specific employees by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update an employee
Source: https://docs.conductor.is/api-ref/qbd/employees/update

POST /quickbooks-desktop/employees/{id}
Updates an employee record, allowing you to revise contact details, employment status dates, supervisory assignments, payroll configuration, and additional notes to keep workforce data current.



# Create an estimate
Source: https://docs.conductor.is/api-ref/qbd/estimates/create

POST /quickbooks-desktop/estimates
Creates a new estimate.



# Delete an estimate
Source: https://docs.conductor.is/api-ref/qbd/estimates/delete

DELETE /quickbooks-desktop/estimates/{id}
Permanently deletes an estimate. The deletion will fail if the estimate is currently in use or has any linked transactions that are in use.



# List all estimates
Source: https://docs.conductor.is/api-ref/qbd/estimates/list

GET /quickbooks-desktop/estimates
Returns a list of estimates. Use the `cursor` parameter to paginate through the results.



# The Estimate object
Source: https://docs.conductor.is/api-ref/qbd/estimates/object

An estimate is a formal proposal detailing costs and terms for goods or services to a customer. It can be called a "bid" or "proposal" and uses similar fields to invoices in QuickBooks. As a non-posting transaction, it serves as a planning tool that can be converted to an invoice upon customer acceptance.



# Retrieve an estimate
Source: https://docs.conductor.is/api-ref/qbd/estimates/retrieve

GET /quickbooks-desktop/estimates/{id}
Retrieves an estimate by ID.

**IMPORTANT:** If you need to fetch multiple specific estimates by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.

NOTE: The response automatically includes any linked transactions.



# Update an estimate
Source: https://docs.conductor.is/api-ref/qbd/estimates/update

POST /quickbooks-desktop/estimates/{id}
Updates an existing estimate.

**NOTE:** If you include `lines` or `lineGroups`, QuickBooks Desktop replaces each included line list with the array you send, so include unchanged lines you want to keep and use `id: "-1"` for new lines.



# Create an inventory adjustment
Source: https://docs.conductor.is/api-ref/qbd/inventory-adjustments/create

POST /quickbooks-desktop/inventory-adjustments
Creates an inventory adjustment to correct on-hand quantities or values. QuickBooks requires single-user mode unless you're on Enterprise with Advanced Inventory enabled.



# Delete an inventory adjustment
Source: https://docs.conductor.is/api-ref/qbd/inventory-adjustments/delete

DELETE /quickbooks-desktop/inventory-adjustments/{id}
Permanently deletes an inventory adjustment. The deletion will fail if the inventory adjustment is currently in use or has any linked transactions that are in use.



# List all inventory adjustments
Source: https://docs.conductor.is/api-ref/qbd/inventory-adjustments/list

GET /quickbooks-desktop/inventory-adjustments
Returns a list of inventory adjustments.

**NOTE:** QuickBooks Desktop does not support pagination for inventory adjustments; hence, there is no `cursor` parameter. Users typically have few inventory adjustments.



# The Inventory Adjustment object
Source: https://docs.conductor.is/api-ref/qbd/inventory-adjustments/object

An inventory adjustment records changes to inventory item quantities and values in QuickBooks Desktop, typically used to correct discrepancies between physical counts and system records, or to account for damage, theft, or other inventory changes that aren't related to purchases or sales.



# Retrieve an inventory adjustment
Source: https://docs.conductor.is/api-ref/qbd/inventory-adjustments/retrieve

GET /quickbooks-desktop/inventory-adjustments/{id}
Retrieves an inventory adjustment by ID.

**IMPORTANT:** If you need to fetch multiple specific inventory adjustments by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update an inventory adjustment
Source: https://docs.conductor.is/api-ref/qbd/inventory-adjustments/update

POST /quickbooks-desktop/inventory-adjustments/{id}
Updates an existing inventory adjustment.

**NOTE:** If you include `lines`, QuickBooks Desktop replaces that line list with the array you send, so include unchanged lines you want to keep and use `id: "-1"` for new lines.



# Void an inventory adjustment
Source: https://docs.conductor.is/api-ref/qbd/inventory-adjustments/void

POST /quickbooks-desktop/inventory-adjustments/{id}/void
Voids an inventory adjustment by setting its amount to zero while keeping a record of it in QuickBooks. The void will fail if the inventory adjustment is currently in use or has any linked transactions that are in use.



# Create an inventory assembly item
Source: https://docs.conductor.is/api-ref/qbd/inventory-assembly-items/create

POST /quickbooks-desktop/inventory-assembly-items
Creates an inventory assembly item that bundles existing inventory items.



# List all inventory assembly items
Source: https://docs.conductor.is/api-ref/qbd/inventory-assembly-items/list

GET /quickbooks-desktop/inventory-assembly-items
Returns a list of inventory assembly items. Use the `cursor` parameter to paginate through the results.



# The Inventory Assembly Item object
Source: https://docs.conductor.is/api-ref/qbd/inventory-assembly-items/object

An inventory assembly item is an item that is assembled or manufactured from inventory items. The items and/or assemblies that make up the assembly are called components.



# Retrieve an inventory assembly item
Source: https://docs.conductor.is/api-ref/qbd/inventory-assembly-items/retrieve

GET /quickbooks-desktop/inventory-assembly-items/{id}
Retrieves an inventory assembly item by ID.

**IMPORTANT:** If you need to fetch multiple specific inventory assembly items by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update an inventory assembly item
Source: https://docs.conductor.is/api-ref/qbd/inventory-assembly-items/update

POST /quickbooks-desktop/inventory-assembly-items/{id}
Updates an inventory assembly item. If you change the income account, set `updateExistingTransactionsIncomeAccount` to true so QuickBooks applies the new account to existing transactions that use the assembly.



# Create an inventory item
Source: https://docs.conductor.is/api-ref/qbd/inventory-items/create

POST /quickbooks-desktop/inventory-items
Creates a new inventory item.



# List all inventory items
Source: https://docs.conductor.is/api-ref/qbd/inventory-items/list

GET /quickbooks-desktop/inventory-items
Returns a list of inventory items. Use the `cursor` parameter to paginate through the results.



# The Inventory Item object
Source: https://docs.conductor.is/api-ref/qbd/inventory-items/object

An inventory item is any merchandise or part that a business purchases, tracks as inventory, and then resells.



# Retrieve an inventory item
Source: https://docs.conductor.is/api-ref/qbd/inventory-items/retrieve

GET /quickbooks-desktop/inventory-items/{id}
Retrieves an inventory item by ID.

**IMPORTANT:** If you need to fetch multiple specific inventory items by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update an inventory item
Source: https://docs.conductor.is/api-ref/qbd/inventory-items/update

POST /quickbooks-desktop/inventory-items/{id}
Updates an inventory item. If you switch the income account, set `updateExistingTransactionsIncomeAccount` to true so QuickBooks applies the new account to existing transactions that reference the item.



# Create an inventory site
Source: https://docs.conductor.is/api-ref/qbd/inventory-sites/create

POST /quickbooks-desktop/inventory-sites
Creates an inventory site for companies using QuickBooks Enterprise with Advanced Inventory.



# List all inventory sites
Source: https://docs.conductor.is/api-ref/qbd/inventory-sites/list

GET /quickbooks-desktop/inventory-sites
Returns a list of inventory sites.

**NOTE:** QuickBooks Desktop does not support pagination for inventory sites; hence, there is no `cursor` parameter. Users typically have few inventory sites.



# The Inventory Site object
Source: https://docs.conductor.is/api-ref/qbd/inventory-sites/object

An inventory site is a location where inventory is stored. For example, a company might have a warehouse, a stockroom, and a showroom, each of which is an inventory site. NOTE: Inventory sites require QuickBooks Enterprise with an Advanced Inventory subscription.



# Retrieve an inventory site
Source: https://docs.conductor.is/api-ref/qbd/inventory-sites/retrieve

GET /quickbooks-desktop/inventory-sites/{id}
Retrieves an inventory site by ID.

**IMPORTANT:** If you need to fetch multiple specific inventory sites by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update an inventory site
Source: https://docs.conductor.is/api-ref/qbd/inventory-sites/update

POST /quickbooks-desktop/inventory-sites/{id}
Updates an existing inventory site.



# Create an invoice
Source: https://docs.conductor.is/api-ref/qbd/invoices/create

POST /quickbooks-desktop/invoices
Creates an invoice to bill a customer when goods or services were delivered before payment. Use a sales receipt instead if the sale was paid in full.



# Delete an invoice
Source: https://docs.conductor.is/api-ref/qbd/invoices/delete

DELETE /quickbooks-desktop/invoices/{id}
Permanently deletes an invoice. The deletion will fail if the invoice is currently in use or has any linked transactions that are in use.



# List all invoices
Source: https://docs.conductor.is/api-ref/qbd/invoices/list

GET /quickbooks-desktop/invoices
Returns a list of invoices. Use the `cursor` parameter to paginate through the results.



# The Invoice object
Source: https://docs.conductor.is/api-ref/qbd/invoices/object

An invoice is a commercial document issued to customers that itemizes and records a transaction between buyer and seller. It lists the products or services provided, their quantities, prices, payment terms, and the total amount due. In QuickBooks, invoices are used to track accounts receivable and record sales transactions where payment was not made in full at the time of purchase.



# Retrieve an invoice
Source: https://docs.conductor.is/api-ref/qbd/invoices/retrieve

GET /quickbooks-desktop/invoices/{id}
Retrieves an invoice by ID.

**IMPORTANT:** If you need to fetch multiple specific invoices by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.

NOTE: The response automatically includes any linked transactions.



# Update an invoice
Source: https://docs.conductor.is/api-ref/qbd/invoices/update

POST /quickbooks-desktop/invoices/{id}
Updates an existing invoice.

**NOTE:** If you include `lines` or `lineGroups`, QuickBooks Desktop replaces each included line list with the array you send, so include unchanged lines you want to keep and use `id: "-1"` for new lines.



# Void an invoice
Source: https://docs.conductor.is/api-ref/qbd/invoices/void

POST /quickbooks-desktop/invoices/{id}/void
Voids an invoice by setting its amount to zero while keeping a record of it in QuickBooks. The void will fail if the invoice is currently in use or has any linked transactions that are in use.



# Create an item group
Source: https://docs.conductor.is/api-ref/qbd/item-groups/create

POST /quickbooks-desktop/item-groups
Creates a new item group.



# List all item groups
Source: https://docs.conductor.is/api-ref/qbd/item-groups/list

GET /quickbooks-desktop/item-groups
Returns a list of item groups. Use the `cursor` parameter to paginate through the results.



# The Item Group object
Source: https://docs.conductor.is/api-ref/qbd/item-groups/object

An item group represents a predefined set of items bundled together because they are commonly purchased together or grouped for faster entry in QuickBooks Desktop, while allowing you to see individual items on forms and reports.



# Retrieve an item group
Source: https://docs.conductor.is/api-ref/qbd/item-groups/retrieve

GET /quickbooks-desktop/item-groups/{id}
Retrieves an item group by ID.

**IMPORTANT:** If you need to fetch multiple specific item groups by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update an item group
Source: https://docs.conductor.is/api-ref/qbd/item-groups/update

POST /quickbooks-desktop/item-groups/{id}
Updates an existing item group.



# Create an item receipt
Source: https://docs.conductor.is/api-ref/qbd/item-receipts/create

POST /quickbooks-desktop/item-receipts
Creates an item receipt to record inventory received from a vendor. You can link it to a purchase order during creation to pull in the order's lines automatically and update quantities, but that link can't be added later with an update.



# Delete an item receipt
Source: https://docs.conductor.is/api-ref/qbd/item-receipts/delete

DELETE /quickbooks-desktop/item-receipts/{id}
Permanently deletes an item receipt. The deletion will fail if the item receipt is currently in use or has any linked transactions that are in use.



# List all item receipts
Source: https://docs.conductor.is/api-ref/qbd/item-receipts/list

GET /quickbooks-desktop/item-receipts
Returns a list of item receipts. Use the `cursor` parameter to paginate through the results.



# The Item Receipt object
Source: https://docs.conductor.is/api-ref/qbd/item-receipts/object

An item receipt records the physical receipt of inventory items from a vendor. It can be linked to a purchase order to automatically update inventory quantities and close out the purchase order. When linked, line items are automatically pulled from the purchase order, eliminating the need to recreate them manually. This linking can only be done during item receipt creation, not during modification.



# Retrieve an item receipt
Source: https://docs.conductor.is/api-ref/qbd/item-receipts/retrieve

GET /quickbooks-desktop/item-receipts/{id}
Retrieves an item receipt by ID.

**IMPORTANT:** If you need to fetch multiple specific item receipts by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.

NOTE: The response automatically includes any linked transactions.



# Update an item receipt
Source: https://docs.conductor.is/api-ref/qbd/item-receipts/update

POST /quickbooks-desktop/item-receipts/{id}
Updates an existing item receipt.

**NOTE:** If you include `expenseLines`, `itemLines`, or `itemGroupLines`, QuickBooks Desktop replaces each included line list with the array you send, so include unchanged lines you want to keep and use `id: "-1"` for new lines.



# Void an item receipt
Source: https://docs.conductor.is/api-ref/qbd/item-receipts/void

POST /quickbooks-desktop/item-receipts/{id}/void
Voids an item receipt by setting its amount to zero while keeping a record of it in QuickBooks. The void will fail if the item receipt is currently in use or has any linked transactions that are in use.



# List all item sites
Source: https://docs.conductor.is/api-ref/qbd/item-sites/list

GET /quickbooks-desktop/item-sites
Returns a list of item sites. Use the `cursor` parameter to paginate through the results.



# The Item Site object
Source: https://docs.conductor.is/api-ref/qbd/item-sites/object

An item site represents a location where inventory items are stored. This is useful for tracking inventory at different locations, such as a warehouse or a store.



# Retrieve an item site
Source: https://docs.conductor.is/api-ref/qbd/item-sites/retrieve

GET /quickbooks-desktop/item-sites/{id}
Retrieves an item site by ID.

**IMPORTANT:** If you need to fetch multiple specific item sites by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Create a journal entry
Source: https://docs.conductor.is/api-ref/qbd/journal-entries/create

POST /quickbooks-desktop/journal-entries
Creates a journal entry with balanced debit and credit lines. QuickBooks Desktop requires total debits to equal total credits, and any line that posts to Accounts Receivable or Accounts Payable must include the related customer or vendor reference.



# Delete a journal entry
Source: https://docs.conductor.is/api-ref/qbd/journal-entries/delete

DELETE /quickbooks-desktop/journal-entries/{id}
Permanently deletes a journal entry. The deletion will fail if the journal entry is currently in use or has any linked transactions that are in use.



# List all journal entries
Source: https://docs.conductor.is/api-ref/qbd/journal-entries/list

GET /quickbooks-desktop/journal-entries
Returns a list of journal entries. Use the `cursor` parameter to paginate through the results.



# The Journal Entry object
Source: https://docs.conductor.is/api-ref/qbd/journal-entries/object

A journal entry is a direct way to record financial transactions by their debit and credit impacts on accounts, typically used for recording depreciation, adjusting entries, or other transactions that can't be entered through standard forms like bills or invoices.



# Retrieve a journal entry
Source: https://docs.conductor.is/api-ref/qbd/journal-entries/retrieve

GET /quickbooks-desktop/journal-entries/{id}
Retrieves a journal entry by ID.

**IMPORTANT:** If you need to fetch multiple specific journal entries by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a journal entry
Source: https://docs.conductor.is/api-ref/qbd/journal-entries/update

POST /quickbooks-desktop/journal-entries/{id}
Updates an existing journal entry. Keep the debits and credits in balance, and include the related customer or vendor on any A/R or A/P line you submit in the update body.

**NOTE:** If you include `lines`, QuickBooks Desktop replaces that line list with the array you send, so include unchanged lines you want to keep and use `id: "-1"` for new lines.



# Void a journal entry
Source: https://docs.conductor.is/api-ref/qbd/journal-entries/void

POST /quickbooks-desktop/journal-entries/{id}/void
Voids a journal entry by setting its amount to zero while keeping a record of it in QuickBooks. The void will fail if the journal entry is currently in use or has any linked transactions that are in use.



# Create a non-inventory item
Source: https://docs.conductor.is/api-ref/qbd/non-inventory-items/create

POST /quickbooks-desktop/non-inventory-items
Creates a new non-inventory item.



# List all non-inventory items
Source: https://docs.conductor.is/api-ref/qbd/non-inventory-items/list

GET /quickbooks-desktop/non-inventory-items
Returns a list of non-inventory items. Use the `cursor` parameter to paginate through the results.



# The Non-Inventory Item object
Source: https://docs.conductor.is/api-ref/qbd/non-inventory-items/object

A non-inventory item is any material or part that a business buys but does not keep on hand as inventory.
There are two types of non-inventory items: 1. Materials or parts that are part of the business's overhead (for example, office supplies) 2. Materials or parts that the business buys to finish a specific job and then charges back to the customer.



# Retrieve a non-inventory item
Source: https://docs.conductor.is/api-ref/qbd/non-inventory-items/retrieve

GET /quickbooks-desktop/non-inventory-items/{id}
Retrieves a non-inventory item by ID.

**IMPORTANT:** If you need to fetch multiple specific non-inventory items by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a non-inventory item
Source: https://docs.conductor.is/api-ref/qbd/non-inventory-items/update

POST /quickbooks-desktop/non-inventory-items/{id}
Updates a non-inventory item. You can modify either `salesOrPurchaseDetails` or `salesAndPurchaseDetails`, but the item must keep the same configuration it was created with. When you change `postingAccount`, `incomeAccount`, or `expenseAccount`, include the matching `updateExistingTransactions...` flag so QuickBooks applies the new account to existing transactions and doesn’t reject the update when historical activity is present.



# Create an other charge item
Source: https://docs.conductor.is/api-ref/qbd/other-charge-items/create

POST /quickbooks-desktop/other-charge-items
Creates a new other charge item.



# List all other charge items
Source: https://docs.conductor.is/api-ref/qbd/other-charge-items/list

GET /quickbooks-desktop/other-charge-items
Returns a list of other charge items. Use the `cursor` parameter to paginate through the results.



# The Other Charge Item object
Source: https://docs.conductor.is/api-ref/qbd/other-charge-items/object

An other charge item is a miscellaneous charge that does not fall into the categories of service, labor, materials, or parts. Examples include delivery charges, setup fees, and service charges. You can use other charge items to add fees or credits to invoices, sales receipts, and bills without tracking quantity.



# Retrieve an other charge item
Source: https://docs.conductor.is/api-ref/qbd/other-charge-items/retrieve

GET /quickbooks-desktop/other-charge-items/{id}
Retrieves an other charge item by ID.

**IMPORTANT:** If you need to fetch multiple specific other charge items by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update an other charge item
Source: https://docs.conductor.is/api-ref/qbd/other-charge-items/update

POST /quickbooks-desktop/other-charge-items/{id}
Updates an existing other charge item.



# Create an other-name
Source: https://docs.conductor.is/api-ref/qbd/other-names/create

POST /quickbooks-desktop/other-names
Creates a new other-name.



# List all other-names
Source: https://docs.conductor.is/api-ref/qbd/other-names/list

GET /quickbooks-desktop/other-names
Returns a list of other-names.

**NOTE:** QuickBooks Desktop does not support pagination for other-names; hence, there is no `cursor` parameter. Users typically have few other-names.



# The Other-Name object
Source: https://docs.conductor.is/api-ref/qbd/other-names/object

An "other name" entity in QuickBooks Desktop lets users track individuals or businesses that are neither customers, vendors, nor employees, allowing them to record occasional transactions without cluttering the primary lists.



# Retrieve an other-name
Source: https://docs.conductor.is/api-ref/qbd/other-names/retrieve

GET /quickbooks-desktop/other-names/{id}
Retrieves an other-name by ID.

**IMPORTANT:** If you need to fetch multiple specific other-names by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update an other-name
Source: https://docs.conductor.is/api-ref/qbd/other-names/update

POST /quickbooks-desktop/other-names/{id}
Updates an existing other-name.



# Create a payment method
Source: https://docs.conductor.is/api-ref/qbd/payment-methods/create

POST /quickbooks-desktop/payment-methods
Creates a new payment method.



# List all payment methods
Source: https://docs.conductor.is/api-ref/qbd/payment-methods/list

GET /quickbooks-desktop/payment-methods
Returns a list of payment methods.

**NOTE:** QuickBooks Desktop does not support pagination for payment methods; hence, there is no `cursor` parameter. Users typically have few payment methods.



# The Payment Method object
Source: https://docs.conductor.is/api-ref/qbd/payment-methods/object

A payment method defines a type of payment scheme in QuickBooks Desktop, such as Cash or Check, that specifies how a customer pays for goods or services.



# Retrieve a payment method
Source: https://docs.conductor.is/api-ref/qbd/payment-methods/retrieve

GET /quickbooks-desktop/payment-methods/{id}
Retrieves a payment method by ID.

**IMPORTANT:** If you need to fetch multiple specific payment methods by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# List all payments to deposit
Source: https://docs.conductor.is/api-ref/qbd/payments-to-deposit/list

GET /quickbooks-desktop/payments-to-deposit
Lists received customer payments that are currently available to include in a QuickBooks Desktop deposit. Use each result's `paymentTransactionId` and, when present, `paymentTransactionLineId` as the corresponding fields on a deposit line.

**NOTE:** QuickBooks Desktop does not support pagination for payments to deposit; hence, there is no `cursor` parameter. Users typically have few payments to deposit.



# The Payment To Deposit object
Source: https://docs.conductor.is/api-ref/qbd/payments-to-deposit/object

A payment to deposit is a received customer payment that is currently available to include in a QuickBooks Desktop deposit. Use its IDs when creating deposit lines that move payments from Undeposited Funds into a bank or other asset account.



# Create a payroll wage item
Source: https://docs.conductor.is/api-ref/qbd/payroll-wage-items/create

POST /quickbooks-desktop/payroll-wage-items
Creates a new payroll wage item.



# List all payroll wage items
Source: https://docs.conductor.is/api-ref/qbd/payroll-wage-items/list

GET /quickbooks-desktop/payroll-wage-items
Returns a list of payroll wage items. Use the `cursor` parameter to paginate through the results.



# The Payroll Wage Item object
Source: https://docs.conductor.is/api-ref/qbd/payroll-wage-items/object

A payroll wage item defines a type of payment scheme in QuickBooks Desktop, such as Regular Pay or Overtime Pay, that specifies how employee wages are calculated and tracked.



# Retrieve a payroll wage item
Source: https://docs.conductor.is/api-ref/qbd/payroll-wage-items/retrieve

GET /quickbooks-desktop/payroll-wage-items/{id}
Retrieves a payroll wage item by ID.

**IMPORTANT:** If you need to fetch multiple specific payroll wage items by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# The Preferences object
Source: https://docs.conductor.is/api-ref/qbd/preferences/object

The preferences that the QuickBooks administrator has set for all users of the connected company file.



# Retrieve company file preferences
Source: https://docs.conductor.is/api-ref/qbd/preferences/retrieve

GET /quickbooks-desktop/preferences
Returns the preferences that the QuickBooks administrator has set for all users of the connected company file. Note that preferences cannot be modified through the API, only through the QuickBooks Desktop user interface.



# Create a price level
Source: https://docs.conductor.is/api-ref/qbd/price-levels/create

POST /quickbooks-desktop/price-levels
Creates a new price level.



# List all price levels
Source: https://docs.conductor.is/api-ref/qbd/price-levels/list

GET /quickbooks-desktop/price-levels
Returns a list of price levels.

**NOTE:** QuickBooks Desktop does not support pagination for price levels; hence, there is no `cursor` parameter. Users typically have few price levels.



# The Price Level object
Source: https://docs.conductor.is/api-ref/qbd/price-levels/object

A price level is a configuration that establishes a default price for items. It can be applied to customers to automatically adjust item prices for those customers. Price levels can be either fixed percentages or per-item price levels.



# Retrieve a price level
Source: https://docs.conductor.is/api-ref/qbd/price-levels/retrieve

GET /quickbooks-desktop/price-levels/{id}
Retrieves a price level by ID.

**IMPORTANT:** If you need to fetch multiple specific price levels by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a price level
Source: https://docs.conductor.is/api-ref/qbd/price-levels/update

POST /quickbooks-desktop/price-levels/{id}
Updates an existing price level.



# Create a purchase order
Source: https://docs.conductor.is/api-ref/qbd/purchase-orders/create

POST /quickbooks-desktop/purchase-orders
Creates a new purchase order.



# Delete a purchase order
Source: https://docs.conductor.is/api-ref/qbd/purchase-orders/delete

DELETE /quickbooks-desktop/purchase-orders/{id}
Permanently deletes a purchase order. The deletion will fail if the purchase order is currently in use or has any linked transactions that are in use.



# List all purchase orders
Source: https://docs.conductor.is/api-ref/qbd/purchase-orders/list

GET /quickbooks-desktop/purchase-orders
Returns a list of purchase orders. Use the `cursor` parameter to paginate through the results.



# The Purchase Order object
Source: https://docs.conductor.is/api-ref/qbd/purchase-orders/object

A purchase order represents a formal request for goods or services sent to a vendor. Since it is a non-posting transaction, it serves as a commitment to purchase but does not impact the company's financial statements.



# Retrieve a purchase order
Source: https://docs.conductor.is/api-ref/qbd/purchase-orders/retrieve

GET /quickbooks-desktop/purchase-orders/{id}
Retrieves a purchase order by ID.

**IMPORTANT:** If you need to fetch multiple specific purchase orders by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.

NOTE: The response automatically includes any linked transactions.



# Update a purchase order
Source: https://docs.conductor.is/api-ref/qbd/purchase-orders/update

POST /quickbooks-desktop/purchase-orders/{id}
Updates an existing purchase order.

**NOTE:** If you include `lines` or `lineGroups`, QuickBooks Desktop replaces each included line list with the array you send, so include unchanged lines you want to keep and use `id: "-1"` for new lines.



# Create a receive-payment
Source: https://docs.conductor.is/api-ref/qbd/receive-payments/create

POST /quickbooks-desktop/receive-payments
Records a customer payment and optionally applies it to specific invoices, discounts, or credits. All allocations must target the same accounts receivable account as those invoices, and each one has to include a payment amount, discount, or credit so QuickBooks can close out the balance.



# Delete a receive-payment
Source: https://docs.conductor.is/api-ref/qbd/receive-payments/delete

DELETE /quickbooks-desktop/receive-payments/{id}
Permanently deletes a receive-payment. The deletion will fail if the receive-payment is currently in use or has any linked transactions that are in use.



# List all receive-payments
Source: https://docs.conductor.is/api-ref/qbd/receive-payments/list

GET /quickbooks-desktop/receive-payments
Returns a list of receive-payments. Use the `cursor` parameter to paginate through the results.



# The Receive-Payment object
Source: https://docs.conductor.is/api-ref/qbd/receive-payments/object

A receive-payment records when a payment is received from a customer *not* at the time of sale. It can be used for one or more of these purposes: (1) record a customer's payment against one or more invoices, (2) set a discount (e.g., for early payment), or (3) set a credit (e.g., from returned merchandise). Note: If full payment is received at the time of sale, use a sales receipt instead.



# Retrieve a receive-payment
Source: https://docs.conductor.is/api-ref/qbd/receive-payments/retrieve

GET /quickbooks-desktop/receive-payments/{id}
Retrieves a receive-payment by ID.

**IMPORTANT:** If you need to fetch multiple specific receive-payments by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a receive-payment
Source: https://docs.conductor.is/api-ref/qbd/receive-payments/update

POST /quickbooks-desktop/receive-payments/{id}
Updates a received payment. When you resubmit applications to invoices, keep them on the same accounts receivable account and include the payment amount, discount, or credit on every allocation you send.



# Retrieve an aging report
Source: https://docs.conductor.is/api-ref/qbd/reports/aging

GET /quickbooks-desktop/reports/aging
Retrieves an accounts receivable, accounts payable, or collections aging report showing unpaid invoices and bills by aging criteria. This report is useful for analyzing receivables, payables, and collection work across summary or detail aging views.



# Retrieve a budget summary report
Source: https://docs.conductor.is/api-ref/qbd/reports/budget-summary

GET /quickbooks-desktop/reports/budget-summary
Retrieves a QuickBooks Desktop budget summary report for Balance Sheet or Profit and Loss budgets, including budget overview, budget versus actual, and performance views. This report compares budgeted amounts against actual activity for a fiscal year and budget criterion; the target budget must already exist in QuickBooks Desktop.



# Retrieve a custom detail report
Source: https://docs.conductor.is/api-ref/qbd/reports/custom-detail

GET /quickbooks-desktop/reports/custom-detail
Retrieves a custom transaction detail report built from the row grouping, included columns, date period, and filters you request. This report is useful when no preset detail report exposes the transaction rows or report-only columns you need; QuickBooks Desktop does not choose default columns for this report.



# Retrieve a custom summary report
Source: https://docs.conductor.is/api-ref/qbd/reports/custom-summary

GET /quickbooks-desktop/reports/custom-summary
Retrieves a custom summary report built from the row and column axes, filters, date period, calendar, and basis options you request. This report is useful when preset summary reports do not match the dimensions you need; QuickBooks Desktop does not assume a default layout.



# Retrieve a general detail report
Source: https://docs.conductor.is/api-ref/qbd/reports/general-detail

GET /quickbooks-desktop/reports/general-detail
Retrieves a QuickBooks Desktop general detail report with transaction-level rows, such as General Ledger, Journal, Open Invoices, unpaid bills, sales detail, purchase detail, audit trail, and transaction lists. This report is useful for inspecting the transactions behind balances, receivables, payables, sales, purchases, inventory valuation, and audit activity, including report-only columns that may not be available from standard object queries.



# Retrieve a general summary report
Source: https://docs.conductor.is/api-ref/qbd/reports/general-summary

GET /quickbooks-desktop/reports/general-summary
Retrieves a QuickBooks Desktop general summary report, such as a balance sheet, profit and loss, trial balance, sales, purchase, inventory, customer balance, vendor balance, sales tax, or income tax summary. This report is useful for aggregated financial or operational totals with optional date periods, filters, calendar settings, and column summarization.



# Retrieve a job report
Source: https://docs.conductor.is/api-ref/qbd/reports/job

GET /quickbooks-desktop/reports/job
Retrieves a QuickBooks Desktop job report for estimates versus actuals, item profitability, or job profitability. This report is useful for project costing, margin analysis, and estimate tracking by customer or job; job profitability detail and estimates-versus-actuals detail report types require a customer or job filter.



# The Report object
Source: https://docs.conductor.is/api-ref/qbd/reports/object

A QuickBooks Desktop report result, including report metadata, column definitions, and ordered rows.



# Retrieve a payroll detail report
Source: https://docs.conductor.is/api-ref/qbd/reports/payroll-detail

GET /quickbooks-desktop/reports/payroll-detail
Retrieves a QuickBooks Desktop payroll detail report, including employee state tax detail, payroll item detail, payroll review detail, payroll transaction detail, and payroll transactions by payee. This report is useful for auditing paycheck line items, payroll item usage, tax calculations, and payee-level payroll activity.



# Retrieve a payroll summary report
Source: https://docs.conductor.is/api-ref/qbd/reports/payroll-summary

GET /quickbooks-desktop/reports/payroll-summary
Retrieves a QuickBooks Desktop payroll summary report, including payroll totals by employee, employee earnings by payroll item, and payroll liability balances. This report is useful for wage, tax, deduction, addition, employer contribution, and unpaid payroll liability reporting.



# Retrieve a time report
Source: https://docs.conductor.is/api-ref/qbd/reports/time

GET /quickbooks-desktop/reports/time
Retrieves a QuickBooks Desktop time report by item, job, or name, with summary or detail rows depending on the selected report type. This report is useful for analyzing tracked time for billing, costing, staffing, or project review.



# Create a sales order
Source: https://docs.conductor.is/api-ref/qbd/sales-orders/create

POST /quickbooks-desktop/sales-orders
Creates a new sales order.



# Delete a sales order
Source: https://docs.conductor.is/api-ref/qbd/sales-orders/delete

DELETE /quickbooks-desktop/sales-orders/{id}
Permanently deletes a sales order. The deletion will fail if the sales order is currently in use or has any linked transactions that are in use.



# List all sales orders
Source: https://docs.conductor.is/api-ref/qbd/sales-orders/list

GET /quickbooks-desktop/sales-orders
Returns a list of sales orders. Use the `cursor` parameter to paginate through the results.



# The Sales Order object
Source: https://docs.conductor.is/api-ref/qbd/sales-orders/object

A sales order tracks inventory that is on back order for a customer. In QuickBooks, sales orders and invoices use similar fields, and a sales order can be "converted" into an invoice (by linking the invoice to the sales order) once the inventory is in stock.



# Retrieve a sales order
Source: https://docs.conductor.is/api-ref/qbd/sales-orders/retrieve

GET /quickbooks-desktop/sales-orders/{id}
Retrieves a sales order by ID.

**IMPORTANT:** If you need to fetch multiple specific sales orders by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.

NOTE: The response automatically includes any linked transactions.



# Update a sales order
Source: https://docs.conductor.is/api-ref/qbd/sales-orders/update

POST /quickbooks-desktop/sales-orders/{id}
Updates an existing sales order.

**NOTE:** If you include `lines` or `lineGroups`, QuickBooks Desktop replaces each included line list with the array you send, so include unchanged lines you want to keep and use `id: "-1"` for new lines.



# Create a sales receipt
Source: https://docs.conductor.is/api-ref/qbd/sales-receipts/create

POST /quickbooks-desktop/sales-receipts
Creates a sales receipt for a sale paid in full. If you include credit card transaction details, QuickBooks requires the payment method to reference a credit card type and automatically deposits the funds to Undeposited Funds rather than a specific bank account.



# Delete a sales receipt
Source: https://docs.conductor.is/api-ref/qbd/sales-receipts/delete

DELETE /quickbooks-desktop/sales-receipts/{id}
Permanently deletes a sales receipt. The deletion will fail if the sales receipt is currently in use or has any linked transactions that are in use.



# List all sales receipts
Source: https://docs.conductor.is/api-ref/qbd/sales-receipts/list

GET /quickbooks-desktop/sales-receipts
Returns a list of sales receipts. Use the `cursor` parameter to paginate through the results.



# The Sales Receipt object
Source: https://docs.conductor.is/api-ref/qbd/sales-receipts/object

A sales receipt records a sale where complete payment is received at the time of the transaction, whether by cash, check, or credit card. It combines the sale and payment into a single transaction. For situations requiring partial or delayed payments, use an invoice with receive-payments instead.



# Retrieve a sales receipt
Source: https://docs.conductor.is/api-ref/qbd/sales-receipts/retrieve

GET /quickbooks-desktop/sales-receipts/{id}
Retrieves a sales receipt by ID.

**IMPORTANT:** If you need to fetch multiple specific sales receipts by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a sales receipt
Source: https://docs.conductor.is/api-ref/qbd/sales-receipts/update

POST /quickbooks-desktop/sales-receipts/{id}
Updates an existing sales receipt. Credit card payments still have to use a credit-card payment method and remain deposited to Undeposited Funds, so don’t switch the deposit account in those scenarios.

**NOTE:** If you include `lines` or `lineGroups`, QuickBooks Desktop replaces each included line list with the array you send, so include unchanged lines you want to keep and use `id: "-1"` for new lines.



# Void a sales receipt
Source: https://docs.conductor.is/api-ref/qbd/sales-receipts/void

POST /quickbooks-desktop/sales-receipts/{id}/void
Voids a sales receipt by setting its amount to zero while keeping a record of it in QuickBooks. The void will fail if the sales receipt is currently in use or has any linked transactions that are in use.



# Create a sales representative
Source: https://docs.conductor.is/api-ref/qbd/sales-representatives/create

POST /quickbooks-desktop/sales-representatives
Creates a sales representative that references an existing employee, vendor, or other-name record so it can be assigned on sales forms.



# List all sales representatives
Source: https://docs.conductor.is/api-ref/qbd/sales-representatives/list

GET /quickbooks-desktop/sales-representatives
Returns a list of sales representatives.

**NOTE:** QuickBooks Desktop does not support pagination for sales representatives; hence, there is no `cursor` parameter. Users typically have few sales representatives.



# The Sales Representative object
Source: https://docs.conductor.is/api-ref/qbd/sales-representatives/object

A sales representative is a person who can be assigned to sales transactions in QuickBooks Desktop. The sales representative corresponds to a separate employee, vendor, or other-name entity in QuickBooks.



# Retrieve a sales representative
Source: https://docs.conductor.is/api-ref/qbd/sales-representatives/retrieve

GET /quickbooks-desktop/sales-representatives/{id}
Retrieves a sales representative by ID.

**IMPORTANT:** If you need to fetch multiple specific sales representatives by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a sales representative
Source: https://docs.conductor.is/api-ref/qbd/sales-representatives/update

POST /quickbooks-desktop/sales-representatives/{id}
Updates an existing sales representative.



# Create a sales-tax code
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-codes/create

POST /quickbooks-desktop/sales-tax-codes
Creates a new sales-tax code.



# List all sales-tax codes
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-codes/list

GET /quickbooks-desktop/sales-tax-codes
Returns a list of sales-tax codes.

**NOTE:** QuickBooks Desktop does not support pagination for sales-tax codes; hence, there is no `cursor` parameter. Users typically have few sales-tax codes.



# The Sales-Tax Code object
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-codes/object

A sales tax code helps categorize items on a sales form as taxable or non-taxable, detailing reasons and associating tax codes with customers, items, or transactions.



# Retrieve a sales-tax code
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-codes/retrieve

GET /quickbooks-desktop/sales-tax-codes/{id}
Retrieves a sales-tax code by ID.

**IMPORTANT:** If you need to fetch multiple specific sales-tax codes by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a sales-tax code
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-codes/update

POST /quickbooks-desktop/sales-tax-codes/{id}
Updates a sales-tax code’s name, activity status, or linked tax items. Once a code has been used you can’t flip it between taxable and non-taxable, and the built-in TAX/NON codes keep their original taxable setting, so plan new codes if you need a different tax status.



# Create a sales-tax group item
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-group-items/create

POST /quickbooks-desktop/sales-tax-group-items
Creates a new sales-tax group item.



# List all sales-tax group items
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-group-items/list

GET /quickbooks-desktop/sales-tax-group-items
Returns a list of sales-tax group items. Use the `cursor` parameter to paginate through the results.



# The Sales-Tax Group Item object
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-group-items/object

A sales-tax group item represents a predefined set of sales-tax items bundled together because they are commonly applied to the same sale, allowing QuickBooks Desktop to apply them as one tax selection while calculating and tracking each sales tax separately.



# Retrieve a sales-tax group item
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-group-items/retrieve

GET /quickbooks-desktop/sales-tax-group-items/{id}
Retrieves a sales-tax group item by ID.

**IMPORTANT:** If you need to fetch multiple specific sales-tax group items by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a sales-tax group item
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-group-items/update

POST /quickbooks-desktop/sales-tax-group-items/{id}
Updates an existing sales-tax group item.



# Create a sales-tax item
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-items/create

POST /quickbooks-desktop/sales-tax-items
Creates a new sales-tax item.



# List all sales-tax items
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-items/list

GET /quickbooks-desktop/sales-tax-items
Returns a list of sales-tax items. Use the `cursor` parameter to paginate through the results.



# The Sales-Tax Item object
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-items/object

A sales-tax item is an item used to calculate a single sales tax that is collected at a specified rate and paid to a single agency.



# Retrieve a sales-tax item
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-items/retrieve

GET /quickbooks-desktop/sales-tax-items/{id}
Retrieves a sales-tax item by ID.

**IMPORTANT:** If you need to fetch multiple specific sales-tax items by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a sales-tax item
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-items/update

POST /quickbooks-desktop/sales-tax-items/{id}
Updates an existing sales-tax item.



# Create a sales-tax payment check
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-payment-checks/create

POST /quickbooks-desktop/sales-tax-payment-checks
Creates a new sales-tax payment check.



# Delete a sales-tax payment check
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-payment-checks/delete

DELETE /quickbooks-desktop/sales-tax-payment-checks/{id}
Permanently deletes a sales-tax payment check. The deletion will fail if the sales-tax payment check is currently in use or has any linked transactions that are in use.



# List all sales-tax payment checks
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-payment-checks/list

GET /quickbooks-desktop/sales-tax-payment-checks
Returns a list of sales-tax payment checks. Use the `cursor` parameter to paginate through the results.



# The Sales-Tax Payment Check object
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-payment-checks/object

A sales-tax payment check records a check written from a bank account to pay collected sales taxes to a tax agency. It allocates the payment across one or more sales-tax items so QuickBooks Desktop can reduce the sales-tax payable amounts for those items.



# Retrieve a sales-tax payment check
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-payment-checks/retrieve

GET /quickbooks-desktop/sales-tax-payment-checks/{id}
Retrieves a sales-tax payment check by ID.

**IMPORTANT:** If you need to fetch multiple specific sales-tax payment checks by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a sales-tax payment check
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-payment-checks/update

POST /quickbooks-desktop/sales-tax-payment-checks/{id}
Updates an existing sales-tax payment check.



# Void a sales-tax payment check
Source: https://docs.conductor.is/api-ref/qbd/sales-tax-payment-checks/void

POST /quickbooks-desktop/sales-tax-payment-checks/{id}/void
Voids a sales-tax payment check by setting its amount to zero while keeping a record of it in QuickBooks. The void will fail if the sales-tax payment check is currently in use or has any linked transactions that are in use.



# Create a service item
Source: https://docs.conductor.is/api-ref/qbd/service-items/create

POST /quickbooks-desktop/service-items
Creates a new service item.



# List all service items
Source: https://docs.conductor.is/api-ref/qbd/service-items/list

GET /quickbooks-desktop/service-items
Returns a list of service items. Use the `cursor` parameter to paginate through the results.



# The Service Item object
Source: https://docs.conductor.is/api-ref/qbd/service-items/object

A service item represents a billable service offered by or purchased by a business in QuickBooks Desktop. It can track both sales and purchases of services, with customizable pricing, descriptions, and tax settings. Common examples include professional services (consulting, legal advice), labor charges (installation, repairs), recurring services (maintenance contracts), and any non-physical items that generate revenue or expenses.



# Retrieve a service item
Source: https://docs.conductor.is/api-ref/qbd/service-items/retrieve

GET /quickbooks-desktop/service-items/{id}
Retrieves a service item by ID.

**IMPORTANT:** If you need to fetch multiple specific service items by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a service item
Source: https://docs.conductor.is/api-ref/qbd/service-items/update

POST /quickbooks-desktop/service-items/{id}
Updates a service item’s details, including its accounts and unit-of-measure set. QuickBooks won’t let you convert a sell-only service into a buy-and-sell service (or the reverse); create a separate item instead. If you’re switching the unit of measure, set `forceUnitOfMeasureChange` so QuickBooks replaces it on existing forms.



# Create a shipping method
Source: https://docs.conductor.is/api-ref/qbd/shipping-methods/create

POST /quickbooks-desktop/shipping-methods
Creates a new shipping method.



# List all shipping methods
Source: https://docs.conductor.is/api-ref/qbd/shipping-methods/list

GET /quickbooks-desktop/shipping-methods
Returns a list of shipping methods.

**NOTE:** QuickBooks Desktop does not support pagination for shipping methods; hence, there is no `cursor` parameter. Users typically have few shipping methods.



# The Shipping Method object
Source: https://docs.conductor.is/api-ref/qbd/shipping-methods/object

A shipping method defines how goods are delivered in QuickBooks Desktop, such as standard mail or overnight delivery.



# Retrieve a shipping method
Source: https://docs.conductor.is/api-ref/qbd/shipping-methods/retrieve

GET /quickbooks-desktop/shipping-methods/{id}
Retrieves a shipping method by ID.

**IMPORTANT:** If you need to fetch multiple specific shipping methods by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Create a standard term
Source: https://docs.conductor.is/api-ref/qbd/standard-terms/create

POST /quickbooks-desktop/standard-terms
Creates a new standard term.



# List all standard terms
Source: https://docs.conductor.is/api-ref/qbd/standard-terms/list

GET /quickbooks-desktop/standard-terms
Returns a list of standard terms.

**NOTE:** QuickBooks Desktop does not support pagination for standard terms; hence, there is no `cursor` parameter. Users typically have few standard terms.



# The Standard Term object
Source: https://docs.conductor.is/api-ref/qbd/standard-terms/object

A standard term is a payment term that shows the number of days within which payment is due and can include a discount for early payment.



# Retrieve a standard term
Source: https://docs.conductor.is/api-ref/qbd/standard-terms/retrieve

GET /quickbooks-desktop/standard-terms/{id}
Retrieves a standard term by ID.

**IMPORTANT:** If you need to fetch multiple specific standard terms by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Create a subtotal item
Source: https://docs.conductor.is/api-ref/qbd/subtotal-items/create

POST /quickbooks-desktop/subtotal-items
Creates a new subtotal item.



# List all subtotal items
Source: https://docs.conductor.is/api-ref/qbd/subtotal-items/list

GET /quickbooks-desktop/subtotal-items
Returns a list of subtotal items. Use the `cursor` parameter to paginate through the results.



# The Subtotal Item object
Source: https://docs.conductor.is/api-ref/qbd/subtotal-items/object

A subtotal item calculates the sum of all items above it on a sales form, up to the previous subtotal. This is particularly important for applying discounts because discounts can only be applied to the line directly above them, requiring items to be subtotaled first.



# Retrieve a subtotal item
Source: https://docs.conductor.is/api-ref/qbd/subtotal-items/retrieve

GET /quickbooks-desktop/subtotal-items/{id}
Retrieves a subtotal item by ID.

**IMPORTANT:** If you need to fetch multiple specific subtotal items by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a subtotal item
Source: https://docs.conductor.is/api-ref/qbd/subtotal-items/update

POST /quickbooks-desktop/subtotal-items/{id}
Updates an existing subtotal item.



# List all templates
Source: https://docs.conductor.is/api-ref/qbd/templates/list

GET /quickbooks-desktop/templates
Returns a list of templates. Use the `cursor` parameter to paginate through the results.



# The Template object
Source: https://docs.conductor.is/api-ref/qbd/templates/object

A template is a predefined format for printing certain transactions that a user can define in QuickBooks. The following transaction types support templates: credit memos, estimates, invoices, purchase orders, sales orders, sales receipts, receipt payments, and bill payments.



# Create a time tracking activity
Source: https://docs.conductor.is/api-ref/qbd/time-tracking-activities/create

POST /quickbooks-desktop/time-tracking-activities
Creates a new time tracking activity.



# Delete a time tracking activity
Source: https://docs.conductor.is/api-ref/qbd/time-tracking-activities/delete

DELETE /quickbooks-desktop/time-tracking-activities/{id}
Permanently deletes a time tracking activity. The deletion will fail if the time tracking activity is currently in use or has any linked transactions that are in use.



# List all time tracking activities
Source: https://docs.conductor.is/api-ref/qbd/time-tracking-activities/list

GET /quickbooks-desktop/time-tracking-activities
Returns a list of time tracking activities. Use the `cursor` parameter to paginate through the results.



# The Time Tracking Activity object
Source: https://docs.conductor.is/api-ref/qbd/time-tracking-activities/object

A time tracking activity records billable or non-billable time spent by an employee, vendor, or other person on a specific service item, optionally associated with a customer or job for payroll and invoicing.



# Retrieve a time tracking activity
Source: https://docs.conductor.is/api-ref/qbd/time-tracking-activities/retrieve

GET /quickbooks-desktop/time-tracking-activities/{id}
Retrieves a time tracking activity by ID.

**IMPORTANT:** If you need to fetch multiple specific time tracking activities by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a time tracking activity
Source: https://docs.conductor.is/api-ref/qbd/time-tracking-activities/update

POST /quickbooks-desktop/time-tracking-activities/{id}
Updates an existing time tracking activity.



# List all transactions
Source: https://docs.conductor.is/api-ref/qbd/transactions/list

GET /quickbooks-desktop/transactions
Searches across all transaction types. Unlike transaction-specific queries, this endpoint only returns fields common to all transaction types, such as ID, type, dates, account, and reference numbers. For more details specific to that transaction type, make a subsequent call to the relevant transaction-specific endpoint (such as invoices, bills, etc.). NOTE: This endpoint does not support time tracking activities. Use the `cursor` parameter to paginate through the results.



# The Transaction object
Source: https://docs.conductor.is/api-ref/qbd/transactions/object

A transaction in QuickBooks Desktop represents a financial event such as an invoice, bill, payment, or deposit that affects accounts and is recorded in the company's financial records. This object is returned by endpoints that search across all transaction types, and therefore only has fields common to all transaction types, such as ID, type, dates, account, and reference numbers.



# Retrieve a transaction
Source: https://docs.conductor.is/api-ref/qbd/transactions/retrieve

GET /quickbooks-desktop/transactions/{id}
Retrieves a transaction by ID.

**IMPORTANT:** If you need to fetch multiple specific transactions by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Create a transfer
Source: https://docs.conductor.is/api-ref/qbd/transfers/create

POST /quickbooks-desktop/transfers
Creates a new transfer.



# List all transfers
Source: https://docs.conductor.is/api-ref/qbd/transfers/list

GET /quickbooks-desktop/transfers
Returns a list of transfers. Use the `cursor` parameter to paginate through the results.



# The Transfer object
Source: https://docs.conductor.is/api-ref/qbd/transfers/object

A transfer records the movement of funds between two accounts in QuickBooks Desktop. It reduces the balance of one account (the "from" account) and increases the balance of another account (the "to" account) by the same amount. Transfers are commonly used for moving money between bank accounts or recording internal fund movements.



# Retrieve a transfer
Source: https://docs.conductor.is/api-ref/qbd/transfers/retrieve

GET /quickbooks-desktop/transfers/{id}
Retrieves a transfer by ID.

**IMPORTANT:** If you need to fetch multiple specific transfers by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a transfer
Source: https://docs.conductor.is/api-ref/qbd/transfers/update

POST /quickbooks-desktop/transfers/{id}
Updates an existing transfer.



# Create an unit-of-measure set
Source: https://docs.conductor.is/api-ref/qbd/unit-of-measure-sets/create

POST /quickbooks-desktop/unit-of-measure-sets
Creates a new unit-of-measure set.

NOTE: The QuickBooks company file must have unit-of-measure enabled (either a single unit per item or multiple units per item). To support both configurations, prefix all UOM set names with "By the" (for example, "By the Barrel"); otherwise, the set may not appear in the QuickBooks UI when the company file is configured for a single unit per item.



# List all unit-of-measure sets
Source: https://docs.conductor.is/api-ref/qbd/unit-of-measure-sets/list

GET /quickbooks-desktop/unit-of-measure-sets
Lists all unit-of-measure sets. NOTE: QuickBooks Desktop does not support pagination for unit-of-measure sets; hence, there is no cursor parameter. Users typically have few unit-of-measure sets.

NOTE: The QuickBooks company file must have unit-of-measure enabled (either a single unit per item or multiple units per item).

**NOTE:** QuickBooks Desktop does not support pagination for unit-of-measure sets; hence, there is no `cursor` parameter. Users typically have few unit-of-measure sets.



# The Unit-Of-Measure Set object
Source: https://docs.conductor.is/api-ref/qbd/unit-of-measure-sets/object

A unit-of-measure set (UOM set) defines a base unit and optional related units with conversion ratios, plus optional defaults for purchases, sales, and shipping.
NOTE: The QuickBooks company file must have unit-of-measure enabled (either a single unit per item or multiple units per item).



# Retrieve an unit-of-measure set
Source: https://docs.conductor.is/api-ref/qbd/unit-of-measure-sets/retrieve

GET /quickbooks-desktop/unit-of-measure-sets/{id}
Retrieves an unit-of-measure set by ID.

**IMPORTANT:** If you need to fetch multiple specific unit-of-measure sets by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Health check
Source: https://docs.conductor.is/api-ref/qbd/utilities/health-check

GET /quickbooks-desktop/health-check
Checks whether the specified QuickBooks Desktop connection is active and can process requests end-to-end. This is useful for showing a "connection status" indicator in your app. If an error occurs, the typical Conductor error response will be returned. As with any request to QuickBooks Desktop, the health check may fail if the application is not running, the wrong company file is open, or if a modal dialog is open. Timeout is 60 seconds.



# Passthrough
Source: https://docs.conductor.is/api-ref/qbd/utilities/passthrough

POST /end-users/{id}/passthrough/{integrationSlug}
Rare escape hatch for sending raw QuickBooks Desktop qbXML request objects directly. Prefer Conductor's native QuickBooks Desktop endpoints whenever possible: Conductor already exposes more than 250 typed QBD endpoints, covers nearly the entire underlying qbXML API surface, returns all documented response fields in a stable typed JSON shape, and powers Conductor SDK types, documentation, IDE autocomplete, and the API Playground. Use passthrough only when you need one of the few qbXML operations that is not yet available as a native Conductor endpoint, or while testing an unsupported qbXML operation. Known gaps are listed in [Missing QBD types](/api-ref/missing-qbd-types).



# Create a vendor credit
Source: https://docs.conductor.is/api-ref/qbd/vendor-credits/create

POST /quickbooks-desktop/vendor-credits
Creates a vendor credit to capture returns, rebates, or other amounts a vendor owes so you can apply the credit when recording future bill payments.



# Delete a vendor credit
Source: https://docs.conductor.is/api-ref/qbd/vendor-credits/delete

DELETE /quickbooks-desktop/vendor-credits/{id}
Permanently deletes a vendor credit. The deletion will fail if the vendor credit is currently in use or has any linked transactions that are in use.



# List all vendor credits
Source: https://docs.conductor.is/api-ref/qbd/vendor-credits/list

GET /quickbooks-desktop/vendor-credits
Returns a list of vendor credits. Use the `cursor` parameter to paginate through the results.



# The Vendor Credit object
Source: https://docs.conductor.is/api-ref/qbd/vendor-credits/object

A vendor credit (also known as a bill credit) represents money that a vendor owes back to your business, typically from overpayment or returned merchandise. When processing bill payments, you can apply these credits via `applyToTransactions[].applyCredits[]`, using the vendor credit's `id` as `creditTransactionId` and the amount to apply as `appliedAmount`. Note that vendor credits track money owed by vendors, while credit memos track money you owe customers and are handled through receive-payment transactions.



# Retrieve a vendor credit
Source: https://docs.conductor.is/api-ref/qbd/vendor-credits/retrieve

GET /quickbooks-desktop/vendor-credits/{id}
Retrieves a vendor credit by ID.

**IMPORTANT:** If you need to fetch multiple specific vendor credits by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.

NOTE: The response automatically includes any linked transactions.



# Update a vendor credit
Source: https://docs.conductor.is/api-ref/qbd/vendor-credits/update

POST /quickbooks-desktop/vendor-credits/{id}
Updates a vendor credit before you apply it to bills, letting you adjust the amounts, memo, or line allocations that make up the credit.

**NOTE:** If you include `expenseLines`, `itemLines`, or `itemGroupLines`, QuickBooks Desktop replaces each included line list with the array you send, so include unchanged lines you want to keep and use `id: "-1"` for new lines.



# Void a vendor credit
Source: https://docs.conductor.is/api-ref/qbd/vendor-credits/void

POST /quickbooks-desktop/vendor-credits/{id}/void
Voids a vendor credit by setting its amount to zero while keeping a record of it in QuickBooks. The void will fail if the vendor credit is currently in use or has any linked transactions that are in use.



# Create a vendor
Source: https://docs.conductor.is/api-ref/qbd/vendors/create

POST /quickbooks-desktop/vendors
Creates a new vendor.



# List all vendors
Source: https://docs.conductor.is/api-ref/qbd/vendors/list

GET /quickbooks-desktop/vendors
Returns a list of vendors. Use the `cursor` parameter to paginate through the results.



# The Vendor object
Source: https://docs.conductor.is/api-ref/qbd/vendors/object

A vendor is any person or company from whom a small business owner buys goods and services. (Banks and tax agencies usually are included on the vendor list.) A company's vendor list contains information such as account balance and contact information about each vendor.



# Retrieve a vendor
Source: https://docs.conductor.is/api-ref/qbd/vendors/retrieve

GET /quickbooks-desktop/vendors/{id}
Retrieves a vendor by ID.

**IMPORTANT:** If you need to fetch multiple specific vendors by ID, use the list endpoint instead with the `ids` parameter. It accepts an array of IDs so you can batch the request into a single call, which is significantly faster.



# Update a vendor
Source: https://docs.conductor.is/api-ref/qbd/vendors/update

POST /quickbooks-desktop/vendors/{id}
Updates an existing vendor.



# Request IDs
Source: https://docs.conductor.is/api-ref/request-ids



Each API request has an associated unique identifier. This identifier is returned in the response headers as `Conductor-Request-Id`. You can use this identifier to track the request in the logs. If you need to contact us about a specific request, providing the request identifier will ensure the fastest possible resolution.


# SDKs
Source: https://docs.conductor.is/api-ref/sdks

Check out Conductor's official Node.js and Python SDKs for integrating with the QuickBooks Desktop API.

Conductor provides powerful, fully-typed SDKs for **Node.js** and **Python** that provides a top-tier developer experience for integrating QuickBooks Desktop. Both SDKs provide:

* Full API coverage
* Type safety and autocomplete for every endpoint, parameter, and response field
* Inline docs for all fields and methods
* Automatic request retries
* Comprehensive error handling
* async/await operations
* Modern API design patterns

# Node.js SDK

See the [Node.js SDK Documentation](https://github.com/conductor-is/quickbooks-desktop-node) for more details.

<CodeGroup>
  ```bash npm theme={"system"}
  npm install conductor-node
  ```

  ```bash yarn theme={"system"}
  yarn add conductor-node
  ```

  ```bash pnpm theme={"system"}
  pnpm add conductor-node
  ```
</CodeGroup>

<Info>
  If you're migrating from the old `conductor-node` package (v11 or earlier),
  please see the [upgrade guide](/api-ref/upgrade-node).
</Info>

```ts theme={"system"}
import Conductor from "conductor-node";

const conductor = new Conductor({ apiKey: "YOUR_SECRET_KEY" });

async function main() {
  // Fetch the first page of invoices
  const invoices = await conductor.qbd.invoices.list({
    conductorEndUserId: "YOUR_END_USER_ID",
  });
  console.log(invoices.data);
}

main();
```

# Python SDK

See the [Python SDK Documentation](https://github.com/conductor-is/quickbooks-desktop-python) for more details.

```bash theme={"system"}
pip install conductor-py
```

```python theme={"system"}
from conductor import Conductor

conductor = Conductor(api_key="YOUR_SECRET_KEY")

# Fetch the first page of invoices
invoices = conductor.qbd.invoices.list(
  conductor_end_user_id="YOUR_END_USER_ID",
)
print(invoices.data)
```


# Timeouts
Source: https://docs.conductor.is/api-ref/timeouts



When you send a request to QuickBooks Desktop through Conductor, Conductor will wait up to **90 seconds** for QuickBooks Desktop to process the request and return a response.

<Note>
  If you prefer a different timeout period, you can customize it by setting the
  `Conductor-Timeout-Seconds` request header to your desired value.
</Note>

While the 90-second timeout might seem long, **it is necessary** for the following reasons:

1. **Large Data Requests:** Without paginating your requests (via the `MaxReturned` or other range-based parameters), you may unintentionally request tens of thousands of records in a single call. Processing such a large volume of data can take several minutes in QuickBooks Desktop.

2. **Sequential Processing:** QuickBooks Desktop can only process one request at a time. If multiple requests are sent concurrently, they are placed in a queue and processed sequentially, requiring sufficient time for each request to complete before the next one can begin.

3. **Potential Program Startup:** If QuickBooks Desktop is not open but the user's computer is on, online, signed in to the Windows user that runs the Web Connector, and the Web Connector is running in the background, Conductor will automatically launch QuickBooks Desktop when a request is made. Given that QuickBooks Desktop can take at least 30 seconds to start, this can add considerably to the response time.

<Info>
  If QuickBooks Desktop is already offline when you send the request, Conductor
  will immediately return an error **without** initiating the timeout period.
</Info>


# Upgrading to Conductor's new Node.js SDK
Source: https://docs.conductor.is/api-ref/upgrade-node

How to migrate from the old `conductor-node` package to Conductor's new Node.js SDK and QuickBooks Desktop API v2.

We're excited to announce a major update to `conductor-node` that brings full support for Conductor's new QuickBooks Desktop API v2. This new version introduces significant improvements in usability, consistency, and functionality.

<Info>
  Though the old version of `conductor-node` will continue to work, it will not
  receive any further updates. We strongly recommend upgrading to take advantage
  of the new features and improvements.
</Info>

## Key improvements

Our new QuickBooks Desktop API v2 has been completely redesigned from the ground up. We've carefully chosen every field name, parameter, and method description to be significantly more intuitive and clearer than QuickBooks's original documentation. The API structure has been simplified while maintaining full functionality.

Major improvements include:

* **[Automatic pagination](#automatic-pagination) support**
* **Automatic retries** with exponential backoff
* **Configurable timeouts**
* **Improved parameter and fields names**
* Completely **rewritten inline documentation**
* New methods like **`.retrieve()`** and **`.delete()`**
* All fields included in responses
* Consistent array handling

## How to upgrade

<CodeGroup>
  ```bash npm theme={"system"}
  npm install conductor-node@latest
  ```

  ```bash yarn theme={"system"}
  yarn add conductor-node@latest
  ```

  ```bash pnpm theme={"system"}
  pnpm add conductor-node@latest
  ```
</CodeGroup>

## Breaking changes

<Note>
  **No QuickBooks or Conductor business logic has changed!** We've simply made
  the interface simpler, more intuitive, and more robust, while adding new
  features like automatic pagination and retries.
</Note>

### ⚠️ Functional Changes

<AccordionGroup>
  <Accordion title="1. Missing QuickBooks Desktop types">
    <Warning>
      Several *less common* QuickBooks Desktop types/endpoints from the previous version of `conductor-node` are not *yet* available in the new SDK. **If the type is listed in the left sidebar of this page, it is supported in the new SDK.**

      Need a missing QBD type? [Contact us](mailto:support@conductor.is) and we'll add it ASAP.
    </Warning>
  </Accordion>

  <Accordion title="2. Pagination limited to 150 records per page">
    Previously, the API would return all matching records by default. This could lead to performance issues when unintentionally retrieving thousands of records, potentially causing long response times, overloading QuickBooks Desktop, and consuming excessive memory.

    To prevent these issues, **Conductor now limits responses to a maximum of 150 records per page by default**. This limit was carefully determined through extensive testing across different scenarios and system configurations to optimize performance while avoiding timeouts and resource constraints.

    With the new [automatic pagination](https://github.com/conductor-is/quickbooks-desktop-node?tab=readme-ov-file#auto-pagination), you can efficiently retrieve all records when needed, without worrying about these performance concerns.
  </Accordion>
</AccordionGroup>

### ⚠️ Naming and Structure Changes

<AccordionGroup>
  <Accordion title="1. Restructured constructor parameters">
    **Old:**

    ```typescript theme={"system"}
    import Conductor from "conductor-node";

    const conductor = new Conductor("{{YOUR_SECRET_KEY}}");
    ```

    **New:** You can now automatically load your secret key from the `CONDUCTOR_SECRET_KEY` environment variable (or pass it to the constructor as an argument like before):

    ```typescript theme={"system"}
    import Conductor from "conductor-node";

    const conductor = new Conductor({
      apiKey: process.env["CONDUCTOR_SECRET_KEY"], // This is the default and can be omitted
    });
    ```
  </Accordion>

  <Accordion title="2. Renamed resources">
    **Old:** Singular resource names.

    ```typescript theme={"system"}
    await conductor.qbd.bill.*
    await conductor.qbd.invoice.*
    await conductor.qbd.itemInventory.*
    ```

    **New:** Plural resource names and clearer naming.

    ```typescript theme={"system"}
    await conductor.qbd.bills.*
    await conductor.qbd.invoices.*
    await conductor.qbd.inventoryItems.*
    ```
  </Accordion>

  <Accordion title="3. Renamed methods">
    **Old:** Odd naming conventions.

    ```typescript theme={"system"}
    await conductor.qbd.bill.query(...)
    await conductor.qbd.bill.add(...)
    await conductor.qbd.bill.mod(...)
    ```

    **New:** Intuitive naming following REST conventions.

    ```typescript theme={"system"}
    await conductor.qbd.bills.list(...)
    await conductor.qbd.bills.create(...)
    await conductor.qbd.bills.update(...)
    await conductor.qbd.bills.retrieve(...) // New!
    await conductor.qbd.bills.delete(...) // New!
    ```
  </Accordion>

  <Accordion title="4. Moved end-user ID parameter">
    **Old:** Required as its own argument.

    ```typescript theme={"system"}
    await conductor.qbd.bill.query("end_usr_1234abcd", { ... });
    ```

    **New:** Required as a `conductorEndUserId` parameter in the parameters object.

    ```typescript theme={"system"}
    await conductor.qbd.bills.list({
      conductorEndUserId: "end_usr_1234abcd",
      // ... other params
    });
    ```
  </Accordion>

  <Accordion title="5. Renamed request parameters">
    <Info>
      All request parameters are now in camelCase and have been renamed for clarity
      and consistency. Most of the changes are straightforward that you can find
      using autocomplete in your IDE or checking the APIs in the sidebar.
    </Info>

    **Old:** Odd naming conventions.

    ```typescript theme={"system"}
    await conductor.qbd.bill.add("end_usr_1234abcd", {
      VendorRef: { ListID: "..." },
      RefNumber: "...",
      ExpenseLineAdd: [
        {
          Amount: "1.00",
        },
      ],
    });
    ```

    **New:** camelCase and clearer naming.

    ```typescript theme={"system"}
    await conductor.qbd.bills.create({
      conductorEndUserId: "end_usr_1234abcd",
      vendorId: "...",
      refNumber: "...",
      expenseLines: [
        {
          amount: "1.00",
        },
      ],
    });
    ```
  </Accordion>

  <Accordion title="6. Renamed response fields">
    <Info>
      All output fields are now in camelCase and have been renamed for clarity and
      consistency. Most of the changes are straightforward that you can find using
      autocomplete in your IDE or checking the APIs in the sidebar.
    </Info>

    Here are some key renamed fields:

    * `TxnID` and `ListID` → `id`
    * `TimeCreated` and `TimeModified` → `createdAt` and `updatedAt`
    * `EditSequence` → `revisionNumber`
    * `*Ref` fields (e.g., `CustomerRef`) → simplified (e.g., `customer`)

    **Old:** Odd naming conventions.

    ```typescript theme={"system"}
    const invoice = await conductor.qbd.invoice.query("end_usr_1234abcd", "...");
    // {
    //   TxnID: "...",
    //   TimeCreated: "...",
    //   TimeModified: "...",
    //   EditSequence: "...",
    //   TxnNumber: "...",
    //   CustomerRef: {
    //     ListID: "...",
    //     FullName: "..."
    //   }
    // }
    ```

    **New:** camelCase and clearer naming.

    ```typescript theme={"system"}
    const invoice = await conductor.qbd.invoices.retrieve({
      conductorEndUserId: "end_usr_1234abcd",
      id: "...",
    });
    // {
    //   id: "...",
    //   objectType: "qbd_invoice",
    //   createdAt: "...",
    //   updatedAt: "...",
    //   revisionNumber: "...",
    //   transactionNumber: "...",
    //   customer: {
    //     id: "...",
    //     fullName: "..."
    //   }
    // }
    ```
  </Accordion>

  <Accordion title="7. Restructured query/list request parameters">
    **Old:** Odd naming conventions and complex structure.

    ```typescript theme={"system"}
    const invoices = await conductor.qbd.invoice.query("end_usr_1234abcd", {
      ModifiedDateRangeFilter: {
        FromModifiedDate: "...",
        ToModifiedDate: "...",
      },
      AccountFilter: {
        ListID: "...",
      },
      RefNumberFilter: "...",
      RefNumberRangeFilter: {
        FromRefNumber: "...",
        ToRefNumber: "...",
      },
      MaxReturned: 100,
    });
    ```

    **New:** Significantly simplified structure and clearer naming.

    ```typescript theme={"system"}
    const invoices = await conductor.qbd.invoices.list({
      conductorEndUserId: "end_usr_1234abcd",
      updatedAfter: "...",
      updatedBefore: "...",
      accountId: "...",
      refNumber: "...",
      refNumberFrom: "...",
      refNumberTo: "...",
      limit: 100,
    });
    ```
  </Accordion>

  <Accordion title="8. Restructured query/list responses">
    To support automatic pagination, the query/list method now returns results in an object wrapper with properties for pagination metadata.

    **Old:** Returns an array of results directly.

    ```typescript theme={"system"}
    const invoices = await conductor.qbd.invoice.query("end_usr_1234abcd");
    // [
    //   {
    //     TxnID: "...",
    //     TimeCreated: "...",
    //     ...
    //   }
    // ]
    ```

    **New:** Returns results in an object wrapper with properties for pagination metadata.

    ```typescript theme={"system"}
    const response = await conductor.qbd.invoices.list({
      conductorEndUserId: "end_usr_1234abcd",
    });

    console.log(response);
    // {
    //   nextCursor: "...",
    //   hasMore: true,
    //   remainingCount: 100,
    //   data: [
    //     {
    //       id: "...",
    //       objectType: "qbd_invoice",
    //       createdAt: "...",
    //       ...
    //     }
    //   ]
    // }
    ```
  </Accordion>

  <Accordion title="9. Consistent array responses">
    Fields that can have multiple values are now always arrays, even when there's only one record:

    ```typescript theme={"system"}
    const response = await conductor.qbd.invoices.list({
      conductorEndUserId: "end_usr_1234abcd",
    });

    // All responses with potential multiple records use arrays consistently
    console.log(response.data[0].lines); // Always an array, even if there's only one line
    ```
  </Accordion>
</AccordionGroup>

## New features

<AccordionGroup>
  <Accordion title="Automatic pagination" icon="arrows-rotate">
    You can now easily paginate through all results. See the [automatic pagination](https://github.com/conductor-is/quickbooks-desktop-node?tab=readme-ov-file#auto-pagination) section of the README for more details.

    ```typescript theme={"system"}
    async function fetchAllQbdInvoices(params) {
      const allQbdInvoices = [];
      // Automatically fetches more pages as needed
      for await (const invoice of conductor.qbd.invoices.list({
        conductorEndUserId: "{{YOUR_END_USER_ID}}",
        ...params,
      })) {
        allQbdInvoices.push(invoice);
      }
      return allQbdInvoices;
    }
    ```
  </Accordion>

  <Accordion title="Automatic retries with exponential backoff" icon="arrow-rotate-right">
    Intelligently retries requests, but only those requests that can potentially succeed when retried (such as network errors).
  </Accordion>

  <Accordion title="New retrieve and delete methods" icon="code">
    All objects now have a `retrieve` method and all transaction objects have a `delete` method.

    ```typescript theme={"system"}
    await conductor.qbd.bills.retrieve({ conductorEndUserId: "...", id: "..." });
    await conductor.qbd.bills.delete({ conductorEndUserId: "...", id: "..." });
    ```
  </Accordion>

  <Accordion title="Complete field returns" icon="database">
    The new API now returns a consistent response structure with all possible fields, making it easier to work with the data. Fields that have no value are explicitly set to `null` rather than being omitted, and empty array fields return `[]` instead of being excluded. This means you can reliably access any field without checking if it exists first, and array operations will work consistently without special handling for missing fields.
  </Accordion>
</AccordionGroup>

## More information

For more detailed information about the new Node.js SDK, please check its [GitHub repository](https://github.com/conductor-is/quickbooks-desktop-node).


# Welcome to Conductor's QuickBooks Desktop API
Source: https://docs.conductor.is/api-ref/welcome



Welcome to Conductor's new QuickBooks Desktop API.

Conductor is a real-time, fully-typed API for QuickBooks Desktop (sometimes called QuickBooks Enterprise), available via Python, Node.js, and REST. In just a few lines, get real-time access to fetch, create, or update *any* QuickBooks Desktop object type and receive a fully-typed response.

Follow our [Quickstart guide](/quickstart) to get started.

## Key features

* **Any data type**: Query, create, or update any QuickBooks Desktop data type.
* **Real-time**: Get real-time updates on your QuickBooks Desktop data. No queues, no jobs, no cache layer -- just direct access to the data.
* **Modern API**: JSON-based REST API, replacing the old XML-based SOAP model.
* **Typed client libraries**: Fully typed libraries in Node.js and Python with autocomplete, inline docs, and type validation for endpoints, parameters, and responses.
* **Request handling**: Invisibly manages queues, timeouts, retries, and pagination.
* **Auto-pagination**: Automatically handles paginated responses to retrieve complete datasets.
* **Multi-company support**: Connects to multiple QuickBooks Desktop company files.
* **Validation**: Sanitizes and validates all inputs and outputs.
* **Unified error handling**: Streamlines error handling across the QuickBooks stack.
* **Authentication flow UI**: Simple UI for securely connecting QuickBooks Desktop accounts.
* **Dashboard**: UI to monitor and manage your QuickBooks Desktop connections and data.
* **Error resolution**: Detailed guides and instructions for resolving errors and handling edge cases.


# Product updates
Source: https://docs.conductor.is/changelog/overview

New updates and improvements.

<Update label="2026-07-19">
  * **API:** QBD expense lines now allow a null `id` when QuickBooks returns memo-only lines without its usual transaction-line identifier.
  * **API:** Correctly return numeric and decimal-string values from QuickBooks Desktop computers whose Windows regional settings use a comma as the decimal separator. Previously, quantities like `2,25` failed the request and amounts like `672,00` were returned unnormalized instead of in the documented `672.00` format. Additionally, optional numeric fields now return `null` instead of `0` when QuickBooks returns an empty value, and unrecognized numeric formats now fail with an error that names the offending value.
</Update>

<Update label="2026-07-01">
  * **API:** Allow output deposit line's `transactionType` to be `unknown`.
</Update>

<Update label="2026-06-25">
  * **API:** More errors now include end-user-safe recovery guidance directly in `error.message`, especially for QuickBooks Desktop connection and request failures. `error.userFacingMessage` continues to return the same guidance, so apps already using it do not need to change, while apps that display `error.message` now show clearer next steps with less unnecessary technical detail.
</Update>

<Update label="2026-06-15">
  * **API:** Added QBD [sales-tax payment check endpoints](/api-ref/qbd/sales-tax-payment-checks/list) for listing, creating, updating, deleting, and voiding checks used to pay collected sales tax.
  * **API:** Added QBD [sales-tax group item endpoints](/api-ref/qbd/sales-tax-group-items/list) for listing, creating, and updating grouped sales-tax items.
</Update>

<Update label="2026-06-10">
  * **QuickBooks Desktop:** Downloaded Web Connector configuration files now explicitly disable Web Connector system-tray notifications to reduce repeated popup noise during setup and sync recovery.
</Update>

<Update label="2026-06-05">
  * **Dashboard:** Added a "Reset company file path" action for end users whose QuickBooks Desktop company file was moved or renamed, which clears the stored path and records the new one on the next sync.
</Update>

<Update label="2026-06-02">
  * **API:** Added a QBD [bills-to-pay endpoint](/api-ref/qbd/bills-to-pay/list) for finding open vendor bills and credits that can be used when creating bill payments.
</Update>

<Update label="2026-05-29">
  * **API:** QBD inventory adjustments now support total-value adjustment lines through `adjustValue.newValue` and `adjustValue.valueDifference`.
</Update>

<Update label="2026-05-27">
  * **QuickBooks Desktop:** Production access free trials now last 30 days after first successful production use.
</Update>

<Update label="2026-05-14">
  ## 🚀 API: QuickBooks Desktop reports

  Use native [QuickBooks Desktop report APIs](/api-ref/qbd/reports/object) for fully typed report requests and responses, with type checking, IDE autocomplete, inline docs, richer field descriptions, and an API Playground for testing requests.

  * Fetch supported report categories, including general, aging, budget, job, time, custom, and payroll reports.
  * Build requests with typed filters and report-specific options instead of manually shaping passthrough payloads.
  * Receive cleaner report-table responses with structured metadata, columns, and ordered rows.
</Update>

<Update label="2026-05-05">
  * **SDKs:** Conductor now provides a hosted [MCP server](/usage/mcp), so you can connect supported AI tools without running the server yourself.
</Update>

<Update label="2026-05-03">
  * **Dashboard:** Added a dismissible AutoText offer for eligible accounts.
</Update>

<Update label="2026-05-02">
  * **Dashboard:** Opening the dashboard now returns you to your most recently selected organization.
</Update>

<Update label="2026-05-01">
  * **API:** Added a QBD [payments-to-deposit endpoint](/api-ref/qbd/payments-to-deposit/list) for finding received payments that are ready to include in a bank deposit.
  * **API:** QBD requests now return clearer validation errors for invalid field lengths, durations, prices, and monetary amounts.
  * **API:** QBD requests now return clearer validation errors when schema choice constraints or mutually exclusive fields are invalid.
</Update>

<Update label="2026-04-30">
  * **API:** Added QBD [deposit endpoints](/api-ref/qbd/deposits/list) for listing, creating, updating, deleting, and voiding bank deposits, including support for payment-based deposit lines, manual deposit lines, and cash back.
  * **API:** Added the query parameter `excludeAlternateShippingAddresses` for QBD [customer list requests](/api-ref/qbd/customers/list), which can improve the performance for company files with customers that have many shipping addresses by excluding them from the response.
  * **API:** QBD customer list timeout errors now recommend `excludeAlternateShippingAddresses=true` when applicable.
</Update>

<Update label="2026-04-27">
  * **API:** Added QBD void endpoints for supported transaction types, including [invoices](/api-ref/qbd/invoices/void), [bills](/api-ref/qbd/bills/void), and [sales receipts](/api-ref/qbd/sales-receipts/void), so you can void a transaction while keeping its QuickBooks record instead of removing it with delete.
</Update>

<Update label="2026-04-23">
  * **Auth flow:** Returning QuickBooks Desktop setups now ask if you are moving to another computer.
  * **Docs:** Added a guide for fixing QuickBooks Desktop connections after a company file is moved or renamed.
</Update>

<Update label="2026-04-20">
  * **API:** QBD vendors now support the undocumented `reportingPeriod: annual` value returned by some real-world company files.
  * **Auth flow:** Returning QuickBooks Desktop setups now warn users to disable Auto-Run on the old computer before moving a connection.
</Update>

<Update label="2026-04-17">
  * **Dashboard:** Email sign-in confirmation now completes more reliably, especially when switching accounts or finishing the secure link flow in browsers that interrupt redirect handoffs.
  * **Dashboard:** Renaming an organization URL from settings now keeps the header breadcrumb and switchers visible on the updated page.
</Update>

<Update label="2026-04-16">
  * **Dashboard:** Email sign-in is now safer and more reliable.
    * Safer first-party secure sign-in links now better survive browser privacy behavior and inbox scanners.
    * Still-live older links now keep working until they expire.
    * Interrupted or expired handoffs now recover more reliably.
    * Malformed or unsafe requests are now rejected earlier.
    * Recovery guidance is now clearer when a link is incomplete, expired, already used, or interrupted.
</Update>

<Update label="2026-04-15">
  * **API:** QBD inventory items and inventory assembly items now allow `incomeAccount` to be null to match real-world obscure cases where this field is missing.
</Update>

<Update label="2026-04-14">
  * **Dashboard:** Organization and project switching in the breadcrumb now keeps you on the matching page when possible, instead of dropping you back to the projects list or end users page.
  * **Dashboard:** Email sign-in links now catch incomplete copied URLs earlier and show clearer recovery guidance instead of a generic sign-in error.
</Update>

<Update label="2026-04-13">
  ## 🚀 Overhauled billing, self-serve management, and Stripe integration

  We rebuilt organization billing around Stripe-powered self-serve flows, a production-only free-trial model, and clearer visibility into what counts toward billing.

  * **Free trial on first real production usage:** Testing stays free, and the trial starts only when your organization first uses a real production QuickBooks Desktop connection.
  * **Self-serve billing from the dashboard:** Start Pro, restore billing, update payment details, review invoices, and schedule cancellation directly through Stripe Checkout and the billing portal, with clearer success and error feedback when you return.
  * **Clearer billing guidance across the dashboard:** Organization badges, billing page states, and upgrade or fix-billing callouts now make it much more obvious whether you are on `Free trial`, `Pro`, `Payment required`, `Payment failed`, or `Cancelled`, and what to do next.
  * **More billing timing details in the status card:** The billing page now highlights key dates directly in the main billing card, including active-trial end dates, expired-trial dates, renewal timing, scheduled cancellations, and cancellation dates when available.
  * **A real billing usage view:** The billing page now shows your current status, trial or renewal timing, and the specific billable production connections counted in the past month.
  * **Usage-based quantities that match real production activity:** Billing quantity now follows production QuickBooks Desktop connections used within the past month, excludes test and sample environments, deduplicates by company name, and does not prorate mid-cycle.
  * **More precise production access enforcement:** Billing blocks live production QuickBooks Desktop traffic when required, while setup flows, testing, and connection health checks remain available, and scheduled cancellations keep access through the end of the current billing period.
</Update>

<Update label="2026-04-09">
  * **API:** QuickBooks Desktop requests now fold common accented Latin characters in outbound text to ASCII instead of dropping the base letter entirely.
</Update>

<Update label="2026-04-02">
  * **Infrastructure:** Moved dashboard and auth flow deployments to Node.js 24 to mitigate Vercel Node.js 20 SIGSEGV errors that were causing intermittent auth and middleware failures in affected regions.
</Update>

<Update label="2026-04-01">
  * **API:** QBD invoices, sales receipts, credit memos, and purchase orders now support `lineGroups[].serviceDate` where QuickBooks Desktop includes or accepts it.
  * **API:** QBD service items, non-inventory items, and other charge items now allow `salesAndPurchaseDetails.incomeAccount` to be null to match real-world obscure cases where this field is missing.
  * **QuickBooks Desktop:** Improved the company-file path mismatch error to explain mapped-drive versus UNC path differences and when to re-download the Web Connector configuration file.
</Update>

<Update label="2026-03-26">
  * **Docs:** Clarified FAQ billing language so period-based connection counts and non-prorated billing changes are described more accurately.
</Update>

<Update label="2026-03-24">
  * **Infrastructure:** Updated our QuickBooks Desktop XML parser and builder dependency for upstream security hardening and maintenance, while preserving handling of large responses that contain many numeric character references.
  * **Docs:** Clarified that QBD bills can link only to purchase orders through the API.
</Update>

<Update label="2026-03-22">
  * **Docs:** Added a new [developer intro to QuickBooks Desktop](/qbd/developer-intro) covering company files, Web Connector architecture, connection realities, and recommended sync UX patterns.
</Update>

<Update label="2026-03-20">
  * **API:** QBD customers now allow `alternateShippingAddresses[].name` to be null to match real-world obscure cases where this field is missing.
</Update>

<Update label="2026-03-14">
  * **API:** QBD Invoices now support `customer` as `null` to match real-world obscure cases where this field is missing.
</Update>

<Update label="2026-03-10">
  * **API:** QuickBooks Desktop endpoints now reject blank or whitespace-padded IDs and blank exact-match `name`/`fullName` filters before sending requests upstream.
</Update>

<Update label="2026-03-09">
  * **API:** QBD vendor credits now allow `vendor` to be null to match real-world obscure cases where this field is missing.
</Update>

<Update label="2026-03-05">
  * **API:** QuickBooks Desktop responses now normalize numeric character references in returned text fields, including legacy smart-quote refs, so encoded character sequences are returned as plain text instead of entity-encoded values.
</Update>

<Update label="2026-03-02">
  * **Docs:** Our help AI assistant now gives clearer, simpler step-by-step answers for QuickBooks Desktop setup and connection issues.
</Update>

<Update label="2026-02-28">
  * **API:** QBD Credit Memos now support `customer` as `null` to match real-world obscure cases where this field is missing.
  * **Docs:** Expanded the [QBD data corruption guide](/help/guides/repair-data-corruption) with a QBWin.log-first workflow for fixing error `1000` list and transaction warnings.
</Update>

<Update label="2026-02-26">
  * **Error handling:** Improved guidance for handling QuickBooks Desktop permission resets that may follow a QuickBooks Desktop restore/copy/migration, a QuickBooks password change, or a QuickBooks update.
</Update>

<Update label="2026-02-24">
  * **Auth flow:** Faster, smoother QBD setup when moving between steps.
  * **Auth flow:** Reduced setup page load by lazy-loading step instructions and prefetching navigation.
  * **Error handling:** Clearer errors when QWC file downloads fail.
</Update>

<Update label="2026-02-18">
  * **Dashboard:** End Users page subtitle now shows unique production connections in use, matching billing deduplication by QuickBooks company name.
  * **Error handling:** Added a custom message for QuickBooks Desktop connection error `0x80040414`.
  * **Error handling:** Expanded the inactive QuickBooks Desktop connection message with concrete Web Connector troubleshooting steps.
</Update>

<Update label="2026-02-11">
  * **Auth flow:** Web Connector password now has its own dedicated, more prominent page.
  * **Auth flow:** Callout on the configure page for returning users who completed setup before.
</Update>

<Update label="2026-02-10">
  * **Infrastructure:** Handle late QuickBooks Web Connector SOAP callbacks after the active request has already been cleared.
</Update>

<Update label="2026-02-08">
  * **Infrastructure:** Prevent stuck QuickBooks Desktop requests from leaking memory when Redis snapshots mark them terminal before the local HTTP promise settles.
</Update>

<Update label="2026-02-04">
  * **Infrastructure:** Ensure adopted QuickBooks Desktop timeouts resolve local requests even if the response message is dropped.
</Update>

<Update label="2026-02-02">
  ## 🛡️ Security: SOC 2 Type 2 certified

  Conductor has completed its 2026 SOC 2 Type 2 audit, performed by [Insight Assurance](https://www.intasure.com/), the same firm that audits OpenAI and Perplexity. Our certification covers the Security Trust Service Criteria.

  * To request a copy of our most recent SOC 2 Type 2 report, email [support@conductor.is](mailto:support@conductor.is).
  * Learn more on our [Security page](/security).
</Update>

<Update label="2026-02-01">
  * **Infrastructure:** Improved QuickBooks Desktop response handling to prevent stuck requests when response dispatch is interrupted.
</Update>

<Update label="2026-01-30">
  * **API:** QBD Sales Tax Preferences now allow `defaultItemSalesTax` to be null to match real-world obscure cases where this field is missing, even though the QuickBooks Desktop schema says it is required.
</Update>

<Update label="2026-01-27">
  * **API:** QBD deleted list-objects now include `fullName` in responses.
</Update>

<Update label="2026-01-25">
  * **Dashboard:** Remove organization members from the Members tab with typed confirmation.
</Update>

<Update label="2026-01-24">
  * **API:** Added QuickBooks Desktop [shipping methods](/api-ref/qbd/shipping-methods) endpoints for create and list operations.
</Update>

<Update label="2026-01-23">
  ## 🚀 Dashboard: Organization invitations

  * Invite teammates by email to join your organization or create a Conductor account.
  * Existing Conductor users are added immediately when invited.
  * Invitation links prefill the invited email in sign-in and sign-up, including for signed-out visitors.
  * Track invitation status and resend or revoke invitations from the Members page.
</Update>

<Update label="2026-01-12">
  * **Error handling:** Add proper error handling for when a QuickBooks Desktop request payload exceeds our safety cap of 20 MiB.
</Update>

<Update label="2026-01-08">
  * **Dashboard & Auth flow:** Fixed organization and end-user logos not loading.
</Update>

<Update label="2026-01-06">
  * **Error handling:** Added a custom message for QuickBooks Desktop connection error `0x8004040B`.
  * **API:** QBD Receive Payments now supports `customerId` as `null` to match real-world obscure cases where this field is missing.
</Update>

<Update label="2026-01-05">
  * **Dashboard:** Added search and keyboard navigation to the organization and project switchers in the breadcrumb.
</Update>

<Update label="2025-12-31">
  * **API:** QBD Sales Orders now support `customerId` as `null` to match real-world obscure cases where this field is missing.
</Update>

<Update label="2025-12-24">
  * **Dashboard:** Email magic links now open a quick confirmation step to prevent inbox scanners from expiring the link before you click it.
</Update>

<Update label="2025-12-17">
  * **API:** Allow `vendor` to be null for bills in API to accomodate obscure real-world data where the field can be absent.
  * **API:** Added support for additional payroll wage item fields that QuickBooks Desktop returns in the wild but aren’t documented in the official QBD SDK docs (e.g. `overtimeMultiplier`, `rate`, `ratePercent`).
</Update>

<Update label="2025-12-12">
  ## 🚀 SDK: New zero-dependency Node.js / TypeScript SDK v13

  Released v13 of our Node.js / TypeScript / JavaScript SDK at [conductor-is/quickbooks-desktop-node](https://github.com/conductor-is/quickbooks-desktop-node).

  <Note>
    This release is a major version bump to v13, but ***99% of users will not need any code changes!*** See the [migration guide](https://github.com/conductor-is/quickbooks-desktop-node/blob/main/MIGRATION.md) if you encounter TypeScript errors after upgrading.
  </Note>

  ### Key improvements

  * **Zero dependencies: All runtime dependencies have been removed!** 🎉
  * **Native fetch support:** `node-fetch` has been removed in favor of the native Fetch API now that Node 16 support is dropped.
  * **Simplified pagination:** `nextPageRequestOptions()` replaces multiple pagination helpers for a consistent flow.
  * **Lighter type system:** Pagination classes are now simple type aliases instead of runtime classes.
  * **`fetchOptions` replaces `httpAgent`:** Configure proxies and transport via `fetchOptions` instead of `httpAgent`.
  * **Consistent method naming:** All delete operations now use `.delete()` instead of `.del()`.
  * **Clearer path parameters:** Methods with multiple path params now use named arguments instead of positional ones, and are automatically URI-encoded.
</Update>

<Update label="2025-12-11">
  * **Docs:** New guide on [fetching QuickBooks Desktop reports](/api-ref/qbd/reports) via the Conductor passthrough endpoint.
  * **Docs:** Fixed API reference code samples to show SDK snippets instead of raw fetch examples.
  * **Docs:** Added a one-click "Copy page" button on every docs page to make it easier to share content with LLMs.
</Update>

<Update label="2025-12-08">
  * **API:** Made `openAmount` optional on bills and vendor credits due to a rare QBD bug, with fallback computation instructions in the API docs.
  * **Dashboard:** Email magic links better bypass mail-scanner prefetches.
</Update>

<Update label="2025-12-04">
  * **Error handling:** Improved the error message shown when a QuickBooks Desktop company file contains corrupted data, with clearer repair guidance.
</Update>

<Update label="2025-11-19">
  * **Docs:** Added troubleshooting step for moved connections in the ["Web Connector cannot connect to QuickBooks Desktop" help guide](/help/connection-errors/cannot-connect-to-quickbooks).
  * **Auth flow:** Add callout emphasizing keeping QuickBooks Desktop open.
  * **Docs:** Improved FAQs on keeping QuickBooks Desktop open.
</Update>

<Update label="2025-11-08">
  * **Dashboard:** Add callout tips for how to reconnect an existing QuickBooks Desktop connection.
</Update>

<Update label="2025-11-03">
  * **Docs:** New help guide for [creating a dedicated QuickBooks Desktop user for a Web Connector connection](/help/guides/create-dedicated-qbd-user).
</Update>

<Update label="2025-10-23">
  ## 🚀 Infrastructure: Re-architected the integration request queue and QBD session manager into a Redis-backed distributed system

  * Durable queue recovery and session failover that let operators bounce infrastructure without dropping or replaying in-flight jobs.
  * Zero downtime during deploys.
  * Crash-safe queuing with durable persistence before requests are exposed.
  * Automated timeout recovery with cross-instance adoption so stalled work is reclaimed by healthy workers.
  * Self-healing queues that detect missing records and reclaim orphaned work.
  * Horizontal scaling without coordination limits since any pod can drain the shared Redis queue as project load grows.
  * Early backlog detection and controlled shutdown draining.
  * Full-fidelity diagnostics via persisted lifecycle snapshots.
  * Faster response times from reduced server load.

    <img alt="diff" />
</Update>

<Update label="2025-10-22">
  * **Docs:** Added instructions to remove and re-add the Web Connector connection in the ["Could not start QuickBooks" help guide](/help/connection-errors/could-not-start-quickbooks).
</Update>

<Update label="2025-10-19">
  * **API:** Support for [customer types](/api-ref/qbd/customer-types) in API v2.
</Update>

<Update label="2025-10-16">
  * **Dashboard:** Prevent corporate email scanners from consuming magic-link sign-in tokens before users attempt to sign in via email.
</Update>

<Update label="2025-10-14">
  * **API:** Corrected the `salesTaxTotal` field to be optional.
  * **Docs:** Highlighted ability to fetch a batch of specific records by ID in a single list request.
</Update>

<Update label="2025-10-08">
  * **Dashboard:** Added a hover copy shortcut for Conductor IDs in the End Users table.
</Update>

<Update label="2025-10-02">
  * **Error handling:** Add guide link to QBD timeout error message.
</Update>

<Update label="2025-10-01">
  * **Dashboard:** Show a clear error message when an emailed sign-in link expires so users can request a new one.
  * **Docs:** New guide for [ensuring QuickBooks Desktop opens at startup](/help/guides/ensure-quickbooks-desktop-opens-at-startup).
</Update>

<Update label="2025-09-28">
  ## 🚀 Dashboard: Add email-based account creation and sign-in.
</Update>

<Update label="2025-09-26">
  * **Dashboard:** Dashboard breadcrumb now shows each organization's subscription tier badge.
  * **Docs:** Added a step to the ["Could not start QuickBooks" help guide](/help/connection-errors/could-not-start-quickbooks) for when the user has moved the company file location.
</Update>

<Update label="2025-09-25">
  * **Docs:** Added FAQ about [QBD API request latency](/faq#how-long-do-conductor-api-requests-take-with-quickbooks-desktop).
</Update>

<Update label="2025-09-24">
  * **Dashboard:** Dashboard now shows the QuickBooks company name, as defined in the QuickBooks company file, in the end-users table.
  * **Auth flow:** Add note to Auth Flow for how to open the `.qwc` file if the Web Connector doesn't launch automatically.
</Update>

<Update label="2025-09-23">
  * **Error handling:** Conductor now auto-retries server-side when QuickBooks returns the transient error "This list has been modified by another user", reducing manual restarts.
</Update>

<Update label="2025-09-17">
  * **API:** Support for [credit card refunds](/api-ref/qbd/credit-card-refunds) in API v2.
  * **Docs:** Added more detailed endpoint descriptions to the API docs.
</Update>

<Update label="2025-09-16">
  * **Error handling:** Specialized Conductor error messages with resolution instructions for two obscure QuickBooks Desktop connection errors.
  * **API:** Support a linked-transaction object's field `transactionType` having the output value "???", which we've seen in the wild, even though it is not in the QuickBooks's own schema definition.
  * **API:** Allow output inventory adjustment line's `itemId` to be null.
</Update>

<Update label="2025-09-15">
  * **Auth flow:** Performance improvements for the auth flow UI.
</Update>

<Update label="2025-09-14">
  * **Docs:** Updated the [MCP guide](/usage/mcp) with improved client setup instructions.
</Update>

<Update label="2025-09-12">
  * **Dashboard:** Dashboard visibility on mobile.
</Update>

<Update label="2025-09-11">
  * **Dashboard:** Add search, sorting, and column visibility to the End Users table in the dashboard.
  * **Dashboard:** Faster loading of the dashboard End Users table for projects with many connections.
</Update>

<Update label="2025-09-08">
  * **Docs:** Image widths in docs render correctly.
</Update>

<Update label="2025-09-04">
  * **API:** Support for [currencies](/api-ref/qbd/currencies) in API v2.
  * **Docs:** Restructured the [End-User FAQ](/help/faq/end-user-faq) for readability.
  * **Docs:** Improved the FAQs for [setting up a Web Connector connection on one or multiple computers](/help/faq/end-user-faq#can-i-set-up-the-web-connector-connection-on-more-than-one-computer-for-the-same-company-file) for the same company file, emphasizing that the company file paths must be identical.
</Update>

<Update label="2025-09-02">
  * **Billing:** Refined logic for detecting duplicate connections used for billing.
</Update>

<Update label="2025-08-27">
  * **Docs:** Clarified in API docs that date-only values used as **upper bounds** in date-range filters are interpreted by QuickBooks Desktop as the **end of that day**.
</Update>

<Update label="2025-08-26">
  * **API:** List datetime filters now properly preserve timezone information, preventing unintended shifts where QBD would misinterpret the UTC timestamp as the end-user's local timezone.
  * **Docs:** Clarified date/time filter descriptions to better explain how QuickBooks interprets the timezone for different formats ([example](/api-ref/qbd/invoices/list#parameter-updated-after)).
  * **API:** Stricter validation for date/time inputs aligned with QuickBooks Desktop’s `DATETIMETYPE` specification.
  * **API:** Date-only and timezone‑less values are interpreted in the QuickBooks Desktop host’s local timezone; explicit offsets are respected.
</Update>

<Update label="2025-08-22">
  * **Error handling:** Added a custom error message for QuickBooks Web Connector error code `0x80040403`.
  * **Error handling:** Added guide link to error message for QuickBooks Web Connector error code `0x80040437`.
</Update>

<Update label="2025-08-21">
  * **Error handling:** Added a custom error message for QuickBooks Desktop error code `3415`, for which QuickBooks returns an empty error message.
</Update>

<Update label="2025-08-16">
  * **API:** Support for [unit-of-measure sets](/api-ref/qbd/unit-of-measure-sets) in API v2.
</Update>

<Update label="2025-08-15">
  * **API:** Allow `customerId` to be null for sales receipts in API to accomodate obscure real-world data.
</Update>

<Update label="2025-08-14">
  * **API:** Support for [deleted transactions](/api-ref/qbd/deleted-transactions) in API v2.
  * **API:** Support for [deleted list objects](/api-ref/qbd/deleted-list-objects) in API v2.
  * **API:** Fix the `transactionTypes` query parameter when [fetching transactions](/api-ref/qbd/transactions/list).
</Update>

<Update label="2025-08-13">
  * **Billing:** Automatically list active end-users in the Stripe invoice memo/footer.
  * **Billing:** Added company file paths to the Stripe invoice memo for active QuickBooks Desktop connections, if it fits.
</Update>

<Update label="2025-08-12">
  * **Dashboard:** All date and time values throughout the dashboard now show the absolute timestamp with timezone on hover.
</Update>

<Update label="2025-08-08">
  * **Docs:** Help guide for [QuickBooks "Insufficient permission level" error](/help/guides/insufficient-permission-level).
</Update>

<Update label="2025-08-06">
  * **API:** Enhanced handling of input numbers with more than 5 decimal places in API to comply with QBD requirements for quantity and amount-related fields.
</Update>

<Update label="2025-08-04">
  * **API:** Allow `transactionDate` to be null for receivable transactions in API to accomodate QBD breaking its own schema definition.
  * **API:** Allow `expenseAccount` to be null for sales-and-purchase details in API to accomodate QBD breaking its own schema definition.
</Update>

<Update label="2025-08-01">
  * **API:** Support for [other charge items](/api-ref/qbd/other-charge-items) in API v2.
  * **API:** Support for [templates](/api-ref/qbd/templates) in API v2.
  * **Error handling:** Improved user-facing resolution instructions for QBD timeout errors.
</Update>

<Update label="2025-07-23">
  * **Error handling:** Improved error handling for QuickBooks Desktop's opaque `3120` error.
  * **Docs:** Improved the description for the [`amount` field on estimate line items](/api-ref/qbd/estimates/object#schema-lines-amount) to include information about the markup fields.
</Update>

<Update label="2025-07-21">
  * **API:** Disable pagination for [employees](/api-ref/qbd/employees) because QuickBooks Desktop does not support it.
</Update>

<Update label="2025-07-18">
  * **SDKs:** Corrected MCP server handling of the required Conductor end-user ID parameter.
</Update>

<Update label="2025-07-17">
  * **Docs:** Clarified retrieve endpoint docs for transaction types to note linked transactions are always included.
</Update>

<Update label="2025-07-08">
  * **API:** Support for [build assemblies](/api-ref/qbd/build-assemblies) in API v2.
</Update>

<Update label="2025-07-07">
  * **Dashboard:** Support for transferring projects between organizations from the dashboard.
</Update>

<Update label="2025-07-02">
  * **Docs:** Help guide for [QuickBooks "Run as administrator" mismatch error](/help/guides/run-as-administrator-disabled).
  * **Docs:** Updated ["Could not start QuickBooks"](/help/connection-errors/could-not-start-quickbooks) guide with a step to check permission level mismatches.
</Update>

<Update label="2025-06-26">
  * **Docs:** Numerous refinements to the help guides for [inactive connections](/help/connection-errors/connection-not-active) and ["Could not start QuickBooks"](/help/connection-errors/could-not-start-quickbooks).
  * **API:** Better support for massive query responses (e.g., more than 1 GB) in the API.
</Update>

<Update label="2025-06-16">
  * **Auth flow:** Significantly reduced the bundle size of the auth flow, reducing the initial page load time.
  * **API:** Drop support for comma-separated values in query parameters to avoid breaking values that have commas in them (e.g., "Facebook, Inc."). We still support the exploded/repeat format (e.g., `?id=abc&id=def`).
</Update>

<Update label="2025-06-09">
  * **Docs:** Help guide for [Unable to cast COM object](/help/connection-errors/unable-to-cast-com-object).
  * **Docs:** Help guide for [QuickBooks Web Connector not starting](/help/guides/ensure-web-connector-opens-at-startup).
</Update>

<Update label="2025-06-06">
  * **SDKs:** [Conductor MCP server](/usage/mcp) - talk to your QuickBooks Desktop data from an LLM using our Model Context Protocol (MCP) server.
</Update>

<Update label="2025-05-25">
  * **Auth flow:** QuickBooks Desktop authentication flow now uses URL-based navigation for each step, enabling proper browser back button functionality.
</Update>

<Update label="2025-05-21">
  * **Docs:** Help guide for [error handling](/usage/error-handling).
  * **Docs:** Fix broken links in docs.
</Update>

<Update label="2025-05-16">
  * **API:** Support for [other names](/api-ref/qbd/other-names) in API v2.
</Update>

<Update label="2025-05-08">
  * **API:** Support for [payment methods](/api-ref/qbd/payment-methods) in API v2.
  * **API:** Handling of invalid QuickBooks Desktop data in API responses.
  * **API:** Changed the `context.value` field to be nullable on output to support unexpected values that somehow exist in some real-world company files.
</Update>

<Update label="2025-05-06">
  * **API:** The `state` field for employee addresses is now an enum when creating or updating an employee, but a plain string when returning an employee to support unexpected values that somehow exist in some real-world company files.
</Update>

<Update label="2025-05-05">
  * **Docs:** Help guide for [changing a QuickBooks Web Connector connection's settings](/help/guides/change-connection-settings).
</Update>

<Update label="2025-04-30">
  * **Docs:** Overhauled the [multiple connections](/help/guides/multiple-connections-one-computer) help guide to be easier to follow, more user-friendly, and hide technical details by default.
</Update>

<Update label="2025-04-29">
  * **Dashboard:** Support for deleting projects from the dashboard.
</Update>

<Update label="2025-04-28">
  * **Dashboard:** Create multiple API keys per project from the dashboard.
  * **Dashboard:** Revoke API keys from the dashboard.
  * **Docs:** Overhauled the [API keys documentation](/usage/keys).
</Update>

<Update label="2025-04-27">
  * **Auth flow:** Step in QBD auth flow checking if end-users are connecting multiple company files from a single computer.
  * **Docs:** Significantly expanded our [Repair data corruption](/help/guides/repair-data-corruption) help guide.
</Update>

<Update label="2025-04-25">
  * **Auth flow:** Clearer success messaging in the QuickBooks Desktop auth flow after the connection health check passes.
</Update>

<Update label="2025-04-23">
  * **Docs:** Add step to reboot your computer to the [Connection not active](/help/connection-errors/connection-not-active) help guide.
  * **Docs:** Clarified QuickBooks Desktop internal error message with a recommendation to rebuild and verify the company file.
  * **Docs:** Expanded the [Rebuild and verify data](/help/guides/repair-data-corruption) help guide with clearer explanations of potential data issues and repair steps.
</Update>

<Update label="2025-04-22">
  * **API:** Support for [item sites](/api-ref/qbd/item-sites) in API v2.
</Update>

<Update label="2025-04-21">
  * **API:** ListIDs containing the `E-\d+` pattern are no longer being parsed as 0.
</Update>

<Update label="2025-04-18">
  * **API:** Support for [item groups](/api-ref/qbd/item-groups) in API v2.
</Update>

<Update label="2025-04-16">
  * **Docs:** Help guide for [changing a connection's QuickBooks Desktop user](/help/guides/change-qbd-user).
</Update>

<Update label="2025-04-11">
  * **Docs:** Help guide for [removing a QuickBooks Desktop connection](/help/guides/remove-connection).
  * **Docs:** Updated the [UAC prompt help guide](/help/connection-errors/do-you-want-to-allow-this-app-to-make-changes-to-your-device) to recommend a much better solution to the issue.
</Update>

<Update label="2025-04-09">
  * **Auth flow:** Stronger emphasis for callout warnings in the QBD auth flow.
  * **Auth flow:** Add a second warning to the QBD auth flow about changing the Web Connector settings.
  * **Auth flow:** Reimplemented generation of the QWC file for efficiency.
  * **Auth flow:** Reimplemented auth-flow health check to use a direct fetch call to the new Conductor API.
  * **Auth flow:** Remove the old `conductor-node` package from auth-flow to reduce bundle size.
</Update>

<Update label="2025-04-04">
  * **Auth flow:** Refined final steps of the QBD auth flow.
</Update>

<Update label="2025-04-01">
  * **API:** Server-side auto-retry with a fresh QBD session when the maximum number of iterators is exceeded.
  * **SDKs:** Remove the `@beta` tag from the Node.js SDK.
</Update>

<Update label="2025-03-27">
  * **API:** Support for [account tax lines](/api-ref/qbd/account-tax-lines) in API v2.
  * **SDKs:** Fix handling of timeout set in SDKs.
</Update>

<Update label="2025-03-25">
  * **Docs:** Published our [OpenAPI schema](/api-ref/openapi) for use in development tools.
  * **API:** Fix the `transactionType` query parameter when fetching transactions.
</Update>

<Update label="2025-03-24">
  * **API:** Support for [item receipts](/api-ref/qbd/item-receipts) in API v2.
  * **Docs:** Added a recommendation to the [connection not active](/help/connection-errors/connection-not-active) help guide for recreating the QuickBooks Web Connector log file.
</Update>

<Update label="2025-03-23">
  * **API:** Support for [price levels](/api-ref/qbd/price-levels) in API v2.
</Update>

<Update label="2025-03-19">
  * **API:** Support for [fetching QBD company information](/api-ref/qbd/company/retrieve) in API v2.
  * **API:** Support for [fetching QBD company file preferences](/api-ref/qbd/preferences/retrieve) in API v2.
  * **Docs:** Documentation on [missing QBD types](/api-ref/missing-qbd-types) that are not yet supported in Conductor.
  * **Docs:** Correctly show date examples as date-only (YYYY-MM-DD) values instead of datetimes (YYYY-MM-DDTHH:MM:SS) in the API docs.
  * **Docs:** Example values for `createdAt` fields in the API docs.
</Update>

<Update label="2025-03-17">
  * **API:** Handling of absent *required* output fields in QuickBooks Desktop data, such as `totalAmount` on receive-payments, `amount` on checks, and `note` on additional-notes, that can be missing in real-world corrupt data.
</Update>

<Update label="2025-03-14">
  * **Docs:** Help guide for [Web Connector "Another update is in progress" error](/help/connection-errors/another-update-in-progress).
  * **Docs:** Added [`Error` and `ErrorResponse` schemas](/api-ref/errors) to the OpenAPI spec.
  * **API:** Exposed missing [`employeePayroll.deleteAllEarnings`](/api-ref/qbd/employees/update#body-employee-payroll-delete-all-earnings) field when updating employees.
</Update>

<Update label="2025-03-13">
  * **Dashboard:** Dashboard section for marketing site.
  * **Docs:** FAQ on [supported QuickBooks Desktop hosting providers](/faq#what-quickbooks-desktop-hosting-providers-does-conductor-support).
  * **Docs:** Error resolution instructions for QBD connection error.
</Update>

<Update label="2025-03-12">
  * **Dashboard:** "Test connection" button in the dashboard to verify QuickBooks Desktop connections.
</Update>

<Update label="2025-03-05">
  * **API:** Support for [searching across all QBD transaction types](/api-ref/qbd/transactions/list) in API v2.
</Update>

<Update label="2025-02-27">
  * **API:** Replaced the legacy endpoint `/v1/end-users/{end-user-id}/ping/{integration-slug}` with a more consistent `/v1/quickbooks-desktop/health-check` endpoint for connection health checks.
  * **API:** Maintained backward compatibility by continuing to support the legacy ping endpoint format.
</Update>

<Update label="2025-02-26">
  * **Dashboard:** Ability to transfer end users between projects in the dashboard.
  * **Dashboard:** Added cancel buttons to modals in the dashboard.
</Update>

<Update label="2025-02-23">
  * **Docs:** Migrated more legacy documentation to the new API v2 docs.
  * **Docs:** Reorganized API documentation.
  * **Docs:** Rewritten the [Authentication](/api-ref/authentication) document.
  * **API:** Removed the unused `GET /auth-sessions/:id` endpoint from the API, documentation, and SDKs.
</Update>

<Update label="2025-02-21">
  * **API:** Support for QBD [time tracking activities](/api-ref/qbd/time-tracking-activities) in API v2.
  * **Docs:** Expanded troubleshooting steps in the [inactive connection](/help/connection-errors/connection-not-active) help guide.
  * **Docs:** Removed legacy Node.js SDK installation from the quickstart guide.
  * **Docs:** Removed numerous legacy docs pages.
</Update>

<Update label="2025-02-18">
  * **SDKs:** Released the new [Node.js SDK](/api-ref/sdks#nodejs-sdk) behind an NPM `@beta` tag.
</Update>

<Update label="2025-02-17">
  * **SDKs:** Beautified READMEs for the Node.js and Python SDKs.
</Update>

<Update label="2025-02-15">
  * **Docs:** Trigger Mintlify docs refresh when updating OpenAPI spec.
</Update>

<Update label="2025-02-13">
  * **Docs:** Upgrade guide for the Node.js SDK to API v2.
  * **Auth flow:** Adjust auth-flow to exclaim the importance of never changing the Web Connector settings.
  * **Docs:** Add step for resetting the Every-Min value in the Web Connector to the [Connection not active](/help/connection-errors/connection-not-active) help guide.
  * **Docs:** Remove several unneeded docs pages for the old API v1.
</Update>

<Update label="2025-02-12">
  * **Docs:** JavaScript and Python code samples for every API v2 endpoint using our new SDKs.
</Update>

<Update label="2025-02-11">
  * **Auth flow:** Company logos to the auth flow, using the organization's email domain (set in the dashboard's Organization settings) or the organization's name.
</Update>

<Update label="2025-02-10">
  * **Docs:** [Upgrade guide](/api-ref/upgrade-node) for the Node.js SDK to API v2.
  * **Billing:** Enable new customers to purchase a subscription from the dashboard.
  * **SDKs:** Upgrade message in the current Node.js SDK links users to the upgrade guide.
</Update>

<Update label="2025-02-09">
  * **Dashboard:** Added dropdown menu in dashboard's Auth Session modal to easily select expiry times (e.g. "30 minutes", "1 day") instead of requiring manual input in minutes.
</Update>

<Update label="2025-02-07">
  * **API:** Support for QBD [discount items](/api-ref/qbd/discount-items) in API v2.
  * **Docs:** Intro docs for the [Node.js SDK](/api-ref/sdks#nodejs-sdk) and [Python SDK](/api-ref/sdks#python-sdk).
  * **Docs:** Upgrade docs config to Mintlify's new `docs.json` format.
</Update>

<Update label="2025-02-06">
  * **Infrastructure:** Internal error tracking.
</Update>

<Update label="2025-02-05">
  * **Docs:** Quickstart guide now includes a section for the Node.js SDK beta using API v2.
  * **Dashboard:** Dashboard now visually distinguishes between QuickBooks Desktop connections that have been reset versus those that have never been connected.
  * **API:** Always parse `EIN` field as a string in API v1.
</Update>

<Update label="2025-02-04">
  * **API:** [`lastSuccessfulRequestAt`](/api-ref/end-users/object#schema-integration-connections-last-successful-request-at) to the `IntegrationConnection` resource.
</Update>

<Update label="2025-01-30">
  * **API:** Support for QBD [inventory adjustments](/api-ref/qbd/inventory-adjustments) in API v2.
  * **Infrastructure:** The server will gracefully shutdown during deployments by letting in-process requests complete.
</Update>

<Update label="2025-01-29">
  * **API:** Support for QBD [sales representatives](/api-ref/qbd/sales-representatives) in API v2.
  * **Billing:** Count all connections in test projects as test users.
  * **Dashboard:** Move source ID from the end-user table to the expanded view in the dashboard.
  * **API:** QBD `JournalEntry.debitLines` now return `account` as a nullable field to reflect data from the wild.
  * **API:** QBD `Employee.address` now supports all address fields.
</Update>

<Update label="2025-01-28">
  * **Docs:** Help guide for [QBD admin required error](/help/connection-errors/qbd-admin-required).
  * **Dashboard:** Redesigned end-user table in the dashboard.

    <img alt="End-user table" />
</Update>

<Update label="2025-01-27">
  * **API:** Support for QBD [employees](/api-ref/qbd/employees) in API v2.
  * **API:** Support for QBD [payroll wage items](/api-ref/qbd/payroll-wage-items) in API v2.
</Update>

<Update label="2025-01-25">
  * **API:** Internal framework for defining OpenAPI schemas.
</Update>

<Update label="2025-01-23">
  * **SDKs:** Released the [Python SDK](https://pypi.org/project/conductor-py/) on PyPI, now available in stable release.
  * **Docs:** Pagination guide for API v2.
  * **Docs:** Quickstart guide now recommends installing SDKs instead of using the API Playground.
  * **Docs:** Quickstart guide no longer shows how to create end-users and an auth session via code.
  * **SDKs:** Prevented unnecessary retries in SDKs when receiving definitive error responses.
</Update>

<Update label="2025-01-22">
  * **API:** Support for deleting QBD transaction types, such as [invoices](/api-ref/qbd/invoices/delete), in API v2.
  * **Docs:** Documentation on [cursor-based pagination](/api-ref/pagination) in API v2.
  * **SDKs:** Automated internal SDK generator pipeline for faster release cycles.
</Update>

<Update label="2025-01-21">
  * **Dashboard:** Ability to generate QuickBooks Desktop authentication links directly from the dashboard.
  * **Dashboard:** Ability to configure expiry and redirect URL for auth sessions in the dashboard.
  * **Dashboard:** Quick "Generate auth link" button in the dashboard for end-users that haven't connected yet.
  * **Docs:** No-code Conductor quickstart guide.
  * **Dashboard:** Auth session is now automatically generated in the dashboard after creating a new end-user.
  * **Dashboard:** Restyled dashboard modals.
</Update>

<Update label="2025-01-13">
  * **Auth flow:** Validation of `publishableKey` against the authenticated project during auth session creation.
  * **Dashboard:** Moved the action menu in the dashboard's end-user table to the left side for better visibility.
</Update>

<Update label="2025-01-11">
  * **Dashboard:** Company logos to the dashboard for organizations and end-users.
</Update>

<Update label="2025-01-07">
  * **Dashboard:** Ability to delete end-users from the dashboard.
</Update>

<Update label="2025-01-06">
  * **Dashboard:** Ability to edit end-user properties from the dashboard.
</Update>

<Update label="2024-12-31">
  * **Docs:** This changelog page.
</Update>

<Update label="2024-12-30">
  * **API:** Support for QBD [vendor credits](/api-ref/qbd/vendor-credits) in API v2.
</Update>

<Update label="2024-12-29">
  * **API:** Support for QBD [subtotal items](/api-ref/qbd/subtotal-items) in API v2.
</Update>

<Update label="2024-12-26">
  * **API:** Support for QBD [credit memos](/api-ref/qbd/credit-memos) in API v2.
</Update>


# FAQ
Source: https://docs.conductor.is/faq

The fundamentals of Conductor.

## Conductor basics

<AccordionGroup>
  <Accordion title="How does Conductor work?">
    Conductor is a web service that securely connects your app to one or more QuickBooks Desktop instances. It provides a RESTful API and fully-typed client libraries that you can use to read and write data to/from QuickBooks Desktop.

    Behind the scenes, Conductor uses the QuickBooks Web Connector, which is a Windows SOAP-based program that comes preinstalled with QuickBooks Desktop on your end-users' computers. This program always runs invisibly in the background, waiting for requests from Conductor. When you send a request to Conductor, it forwards the request to the Web Connector, which then forwards the request to QuickBooks Desktop. The response follows the same path in reverse. Between each of those steps, there are many layers of error handling, validation, and data transformation.

    Conductor abstracts away multiple layers of complexity, idiosyncrasies, and fragility of working with QuickBooks Desktop so that interfacing with this tragically outdated technology is as easy and wonderful as using Stripe's API.
  </Accordion>

  <Accordion title="How do users set up the QuickBooks Desktop integration with Conductor?">
    Conductor leverages a program called QuickBooks Web Connector, which comes preinstalled with all versions of QuickBooks Desktop and runs invisibly in the background on the Windows computer to maintain the connection. To connect, the QuickBooks Desktop users will step through Conductor's [authentication flow](/usage/auth-flow), which has them download a config file that Conductor generates, open it in the Web Connector, authenticate, and connect to Conductor (and thereby to your application). Here is a [demo of the auth flow](https://connect.conductor.is/qbd/demo).
  </Accordion>

  <Accordion title="Pricing: How much does Conductor cost?">
    Conductor is priced at **\$49 per month for each established QuickBooks Desktop company file connection in use**. A connection counts as in-use when ***both*** of the following are true:

    1. Conductor has successfully established the QuickBooks Desktop connection.
    2. Your application made a Conductor API call to that connection within the rolling past month.

    Volume discounts are available for enterprises requiring a large number of connections.

    **No platform fees, no monthly minimum, no hidden costs**

    Billing is per connection in use with no monthly minimum. Your billed quantity tracks the count of production QuickBooks Desktop connections used within the rolling past month, so if you pause all production usage those connections fall out of the billed quantity once they fall outside the rolling past month. Charges still scale with connections in use, and connections that are not in use within the rolling past month are not billed.

    Changes are not prorated. Instead, the subscription quantity stays aligned to how many production connections were in use within the rolling past month.

    **Are connections free for testing and development?**

    1. Connections using QuickBooks "sample company files" or QuickBooks "Trial installations" are **free**.
    2. Connections using data from an active production environment are **not**.
    3. If you have a connection to a production company file that you want to use only for testing and development, please contact support to request a free exemption.

    **What counts as one billed company?**

    If you run multiple connectors that point to the same QuickBooks Desktop company, whether on different computers, Windows profiles, QuickBooks versions, or multiple versions of the same company file, **we deduplicate them and invoice you for a single company** because they all represent the same set of finances.
  </Accordion>

  <Accordion title="Should I use Conductor or build the integration from scratch?">
    Integrating with QuickBooks Desktop from scratch is a painful nightmare. It's a decades-old API that hasn't been modernized and is riddled with edge cases, idiosyncrasies, and bugs that are incredibly difficult to work with. Conductor solves all of these problems and takes only a fraction of the time to implement with none of the maintenance headaches. We have obsessed over the edge cases and performance. Beyond the significant time savings, **Conductor preserves your team's mental well-being**.
  </Accordion>
</AccordionGroup>

## Data handling and security

<AccordionGroup>
  <Accordion title="Does Conductor use a cache layer between me and my end-users' QuickBooks Desktop?">
    No, every Conductor API call is a real-time direct request to/from QuickBooks Desktop. If you make a request when the end-user's computer is off or QuickBooks Desktop is inaccessible, Conductor will return an error message with instructions for how the end-user can resolve the issue.

    By design, Conductor has no cache layer because it causes all sorts of problems when data is out-of-sync. E.g., you modify data on one end that has already been removed on the other.

    Ideally, the computer running QuickBooks Desktop is always on and accessible. If that is not possible for some end-users, this real-time design has still worked well because if such an end-user triggers a sync while using your app, they likely did so from the same computer as where QuickBooks Desktop is already running.
  </Accordion>

  <Accordion title="Does Conductor store any of my end-users' QuickBooks Desktop data?">
    No, Conductor does not retain any of your end-users' QuickBooks Desktop data on a permanent basis. For operational purposes, API request logs, which includes QuickBooks Desktop data, are temporarily, securely stored in a SOC 2 and GDPR-compliant log manager for 15 days before permanent deletion. Access to these logs is strictly limited to authorized Conductor engineers, who use them solely for debugging, offering customer support, and product improvement purposes. This approach ensures both the confidentiality of your data and compliance with the highest standards of data protection.
  </Accordion>
</AccordionGroup>

## API

<AccordionGroup>
  <Accordion title="How fast is the QuickBooks Desktop API? What is the latency?">
    The QuickBooks Web Connector polls our servers for new work, so the latency you see depends on where you are in that polling cycle:

    * **Cold start:** When a connector has been idle, **it checks in every 10 seconds**.
      * The first read/write after inactivity typically lands in the next poll, so the request usually completes within roughly 3-10 seconds (10 seconds worst case) plus QuickBooks processing time.
    * **Active window:** Once the first request arrives, the connector "wakes up" and **polls every 3 seconds for the next 10 minutes**.
      * New requests posted during this window are picked up in the next 3-second poll if the prior session has closed.
    * **Warm session:** After each request finishes, we keep the QuickBooks Desktop session open for 10 seconds. Any follow-up requests that arrive during this window reuse the session and **resolve almost instantly** (roughly 0.5 seconds end-to-end).

    <Note>
      Budget a brief multi-second handshake when the connector wakes up (3-10 seconds), then expect near-instant throughput for work that stays inside the warm-session window (until 10 seconds after the last request).

      For example, if you want to import a batch of invoices to QBD, you can expect 3-10 seconds to set up the connection, then **0.5 seconds for each remaining invoice in the sequence**.
    </Note>
  </Accordion>

  <Accordion title="Do you have an OpenAPI specification?">
    Yes, our [OpenAPI specification is available here](https://docs.conductor.is/api-ref/openapi). Additionally, our [API reference documentation](https://docs.conductor.is/api-ref/qbd/invoices/create) is generated from this spec and provides detailed descriptions and examples for every field and endpoint.
  </Accordion>

  <Accordion title="Does Conductor support webhooks?">
    No, Conductor does not support webhooks because **the nature of QuickBooks Desktop makes webhook-style triggers unreliable**. QuickBooks Desktop is a local, on-prem application running on a specific Windows computer, so an external event does not necessarily mean the company file is ready to process requests.

    For example, it would be technically possible to send a webhook when the QuickBooks Web Connector heartbeat resumes after a gap. But **a heartbeat only means the Web Connector checked in again**. It does not prove that QuickBooks Desktop is ready to process requests successfully, and it does not provide real-time notifications for every QuickBooks Desktop data change.

    The user's computer can be online while QuickBooks Desktop is still opening, the wrong company file is open, multiple company files are open, a pop-up dialog is blocking QuickBooks, or the configured QuickBooks Desktop user is signed in on another machine. In those cases, a "heartbeat is back" webhook would often trigger an automatic sync that fails immediately.

    For this reason, we generally recommend user-initiated sync flows, such as a "Sync with QuickBooks Desktop" button. If a sync issue occurs, the user is already in context and can resolve it right away. This is how our largest QuickBooks Desktop customers, including Ramp, have implemented their Conductor integrations.

    If you want a programmatic readiness check before syncing, **use the [Health Check API](/api-ref/qbd/utilities/health-check)**. It performs a real end-to-end request, so it confirms the connection is actually working, not just that the connector is online.

    If you still need background-style sync, you can run a scheduled process that periodically queries QuickBooks Desktop through Conductor. If the connection is unavailable, store the failure state in your app, show a clear message to the user, and fetch changes since the last successful sync once connectivity is restored. Polling can emulate limited webhook-like behavior, but it adds complexity around both data-change detection and error communication. Frequent polling can also add load to the user's workstation, so use this pattern carefully.
  </Accordion>

  <Accordion title="Does Conductor support batch processing?">
    No, Conductor's APIs currently only support working with a single object at a time because QuickBooks Desktop itself only resolves requests serially. If you want to create 50 invoices, for example, you will need to call the create-invoice API 50 times. However, you can send multiple requests in parallel; for example, you can use `await Promise.all([ ... ])` in JavaScript with multiple requests, but you cannot send multiple requests in a single HTTPS request.
  </Accordion>

  <Accordion title="Does Conductor support QuickBooks Desktop item categories?">
    No, QuickBooks Desktop itself does not expose item categories through its official underlying integration layer, so Conductor cannot access them.

    Intuit does not list item categories anywhere in the official [QuickBooks Desktop SDK object and operations list](https://developer.intuit.com/app/developer/qbdesktop/docs/additional-reference/quickbooks-objects-and-operations-accessible-with-the-sdk), and [Intuit describes them](https://quickbooks.intuit.com/learn-support/en-us/help-article/inventory-management/inventory-categories-quickbooks-desktop-enterprise/L9P3ArO3n_US_en_US) as a QuickBooks Desktop Enterprise UI feature, not as an SDK-accessible object.

    Related alternatives include [classes](/api-ref/qbd/classes/object), parent/sub-item hierarchies on [items](/api-ref/qbd/inventory-items/object), item custom fields, external mappings in your own app, and [item groups](/api-ref/qbd/item-groups/object).
  </Accordion>
</AccordionGroup>

## QuickBooks Desktop and Web Connector

<AccordionGroup>
  <Accordion title="What is the QuickBooks Web Connector?">
    The QuickBooks Web Connector is a Windows program that comes preinstalled with QuickBooks Desktop that Conductor uses to securely communicate with QuickBooks Desktop. This program runs invisibly in the background on the end-user's computer, waiting for requests from Conductor. The only time your end-user should see the Web Connector is when they first set up their QuickBooks Desktop connection with Conductor; other than that, it should be invisible to them.
  </Accordion>

  <Accordion title="Which QuickBooks Desktop user does the Web Connector use?">
    When the connection is first set up, QuickBooks Desktop must be open and signed in as the built-in QuickBooks Admin user. This is only for the initial setup, so QuickBooks can approve the app's access to the company file. The Admin user does not need to stay signed in after setup.

    After setup, there are two common sync states:

    * If the company file is already open in QuickBooks Desktop, the Web Connector uses the QuickBooks user who is already signed in.
    * If the company file is not open, such as when QuickBooks is sitting at the "No Company Open" screen, the Web Connector uses the user selected in the **Login as** dropdown during setup.

    The **Login as** user does not have to be Admin. It only needs **Full Access** permissions. This is especially useful if you leave QuickBooks at the "No Company Open" screen instead of staying signed in 24/7, for example to avoid occupying a QuickBooks Desktop seat or blocking Single-user Mode elsewhere.

    See [Changing a connection's QuickBooks Desktop user](/help/guides/change-qbd-user) for the full setup guidance.
  </Accordion>

  <Accordion title="What is a QuickBooks Desktop &#x22;company file&#x22;?">
    In the world of QuickBooks Desktop, a "company file" is the main local file for all the financial data for a specific company. Typically, a QuickBooks Desktop user will have only one company file: the one they use to manage their business. However, some users manage multiple company files on one computer and actively switch between them. For example, an accounting firm might manage the books for multiple clients, each with their own QuickBooks Desktop company file.

    Each Conductor connection is tied to a specific company file. If you need to connect to multiple company files, you will need to create multiple end-users in Conductor, each with their own connection. See this [guide](/help/guides/multiple-connections-one-computer) for more information.
  </Accordion>

  <Accordion title="What versions of QuickBooks Desktop does Conductor support?">
    Conductor supports every version, variant, and edition of QuickBooks Desktop since 2018, including:

    * **QuickBooks Enterprise Solutions - any version or year**
      * Any edition: Accountant, Contractor, Manufacturing and Wholesale, Nonprofit, Professional Services, Retail.
    * **QuickBooks Premier (Plus) - 2018 or later**
      * Any edition: Accountant, Contractor, Manufacturing and Wholesale, Nonprofit, Professional Services, Retail.
    * **QuickBooks Desktop Pro (Plus) - 2018 or later**
    * **QuickBooks Accountant Desktop (Plus) - 2018 or later**
  </Accordion>

  <Accordion title="Is QuickBooks Desktop being discontinued?">
    No, QuickBooks Desktop is not being discontinued. Intuit reported [**\$2.775B in revenue**](https://investors.intuit.com/sec-filings/all-sec-filings/content/0000896878-25-000035/0000896878-25-000035.pdf) from the QuickBooks Desktop ecosystem in 2025, growing 5% year-over-year.

    1. **Ongoing Support:** Intuit continues to support all existing versions of QuickBooks Desktop for current customers.
    2. **Continued Sales:** Intuit is still actively selling "QuickBooks Enterprise", the main version of QuickBooks Desktop tailored for medium to large businesses, to new customers.
    3. **Product Changes:** Intuit will soon cease sales of "QuickBooks Desktop Pro/Premier Plus" – a less popular variant primarily used by small family businesses – to *new* customers (existing customers will still be supported).

    While Intuit has encouraged users to migrate to QuickBooks Online, Desktop users consistently tell us that it doesn't fully meet their business needs. Consequently, the base of existing QuickBooks Desktop users, including both "Enterprise" and "Pro/Premier" versions, remains robust. Conductor continues to support these users and their ongoing reliance on QuickBooks Desktop.
  </Accordion>
</AccordionGroup>

## Compatibility and connectivity

<AccordionGroup>
  <Accordion title="Does QuickBooks Desktop need to be open for Conductor to sync?">
    **We strongly recommend keeping QuickBooks Desktop open** for the best performance. There is no downside to keeping it open.

    <Tip>
      If you cannot stay signed in to the company file, for example to avoid occupying a QuickBooks Desktop seat or blocking Single-user Mode elsewhere, leave QuickBooks at the **"No Company Open"** screen. QuickBooks will then sign in automatically during each sync.
    </Tip>

    Scenarios to consider:

    * **BEST: QuickBooks kept open with your company file loaded:** This provides the fastest sync experience and is recommended when possible.

      <Warning>
        If QuickBooks is open with a different company file than the one you're trying to sync, the operation will return an error.
      </Warning>

    * **GOOD: QuickBooks kept open but no company file loaded:** If you need to conserve license seats or want to be able to sign in on another computer, you can keep QuickBooks at the "No Company Open" screen. The Web Connector will automatically open your company file when syncing. This is slower than the previous option but faster than the next option.

    * **WORST: QuickBooks kept completely closed:** If QuickBooks Desktop is closed, the Web Connector will launch it automatically, but this significantly slows down the sync process due to application startup time and is a common cause of sync errors.

      * The Web Connector can launch QuickBooks Desktop if it's closed, but **this adds approximately 30 seconds to request processing time** and repeatedly opening/closing QuickBooks can cause Windows bugs. We strongly recommend keeping QuickBooks Desktop open continuously.

    <Info>
      Follow our [guide to ensure QuickBooks Desktop opens after reboot and Windows sign-in](/help/guides/ensure-quickbooks-desktop-opens-at-startup) for the best performance.
    </Info>
  </Accordion>

  <Accordion title="Can I set up the Web Connector connection on more than one computer for the same company file?">
    Yes. If your team shares a single QuickBooks Desktop company file on your office network, you can install the Web Connector connection on more than one Windows computer. Each computer will have its own entry in the QuickBooks Web Connector and can sync with that same company file. Many teams do this as a backup in case one computer is turned off or unavailable.

    <Warning>
      **Important:** The company file must live in the **exact same folder path on every computer**. The Web Connector uses the full path to decide which company file should receive a request. If the company file path is different on any computer (for example, different drive letters or folder names), syncs will fail.

      Simple ways to keep company file paths the same across all computers:

      * Map the shared folder to the **same drive letter** on all computers (e.g., all use `S:\Accounting\...`).
      * Or open the file using the **same network path** on every computer (e.g., `\\SERVER\Share\Accounting\MyCompany.QBW`).
    </Warning>

    <Tip>
      Best practice: Set up the connection on the Windows server that hosts the
      company file. These servers typically run 24/7, which removes the need to
      maintain connections on multiple workstations.
    </Tip>
  </Accordion>

  <Accordion title="Can Conductor access QuickBooks Desktop instances when the user's computer is off?">
    No, there is no way to access QuickBooks Desktop instances when the user's computer is off because QuickBooks Desktop data is not stored online. Instead, QuickBooks Desktop is a local application that runs on a user's computer. The Windows computer must be powered on, online, and signed in to the Windows user that runs the Web Connector. As a result, this means an active Conductor connection is always direct and real-time. Conductor intentionally avoids using a cache layer to prevent potential data conflicts when data is out-of-sync.

    While this may seem limiting to many developers, we find that typical QuickBooks Desktop users do not mind:

    1. **User Availability:** When a user is interacting with your application that syncs data with QuickBooks Desktop, they are typically at their computer anyway, which means that QuickBooks Desktop is accessible.

    2. **User Control:** Many QuickBooks Desktop users are protective of their data and prefer to manually initiate data syncs rather than rely on automatic background processes. This approach gives them greater control over their data and ensures that no syncs occur without their explicit consent.
  </Accordion>

  <Accordion title="Does Conductor support connections to multiple QuickBooks Desktop company files on the *same* computer?">
    Yes, please see this [guide](/help/guides/multiple-connections-one-computer) for more information.
  </Accordion>

  <Accordion title="What QuickBooks Desktop hosting providers does Conductor support?">
    A QuickBooks Desktop hosting provider is a company that hosts an end-user's QuickBooks Desktop instance and company file on a remote server that employees access via a remote desktop connection.

    <Tip>
      Conductor works with any system that has QuickBooks Web Connector installed, which comes pre-installed with QuickBooks Desktop itself. For this reason, **Conductor can support every QuickBooks Desktop hosting provider we have encountered to date**.
    </Tip>

    <Info>
      Some hosting providers, such as Rightworks, do not allow QuickBooks to continue running when users disconnect from their remote desktop session. In these scenarios, the user must remain connected to the remote desktop anytime they want to sync with QuickBooks (via Conductor). However, we've found that this is not a burden for most users because connecting to their remote desktop to work with QuickBooks data is already part of their daily workflow.
    </Info>

    #### Verified hosting providers

    We have individually verified Conductor compatibility with the following QuickBooks Desktop hosting providers:

    * [Cloud9](https://cloud9realtime.com)
    * [CloudAspects](https://cloudaspects.com)
    * [CloudTop Office](https://cloudtopoffice.com)
    * [Eezycloud](https://eezycloud.com)
    * [Gotomyerp](https://gotomyerp.com)
    * [InSynQ](https://insynq.com)
    * [IV Desk](https://ivdesk.com)
    * [MyRealData](https://myrealdata.com)
    * [Personable](https://personable.com)
    * [Prosource](https://getprosource.com)
    * [QuickBooks Enterprise with cloud access](https://quickbooks.intuit.com/desktop/enterprise/hosting)
    * [Rightworks (formerly Right Networks)](https://rightworks.com) - [special setup required](/help/guides/rightworks)
    * [Skyline Cloud Services by Unidata](https://skylinecloudservices.com)
    * [Summit Hosting](https://summithosting.com)
    * [SwizzNet/Visory](https://visory.net/application-hosting/quickbooks)
    * [Trapp Technology](https://trapptechnology.com/quickbooks-cloud)
  </Accordion>

  <Accordion title="Does Conductor support Rightworks (previously called Right Networks)?">
    Yes, Conductor is fully compatible with Rightworks. Users can establish the connection just as they would with a typical Windows instance running QuickBooks Desktop.

    However, there is an important consideration: Rightworks users must sign in to their remote desktop session each time they wish to sync with QuickBooks Desktop. This requirement exists because Rightworks terminates inactive instances once the connection is closed, preventing background processes from running when the user is signed out. Despite this, most users find this process manageable because signing in to Rightworks is a routine part of their workflow. It is worth noting that, based on our experience, remote QuickBooks Desktop hosts like Rightworks account for fewer than 2% of all QuickBooks Desktop companies.

    Please see [this guide](/help/guides/rightworks) for setting up a Conductor connection with a Rightworks QuickBooks Desktop instance.
  </Accordion>
</AccordionGroup>


# How to fix: "Another update is in progress"
Source: https://docs.conductor.is/help/connection-errors/another-update-in-progress



<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

If the QuickBooks Web Connector ever shows the error message "**Another update is in progress**", as shown in the screenshot below, it can interfere with the connection to your QuickBooks Desktop. Follow the steps below to resolve the issue.

<Image alt="Another update is in progress error message" />

## Solution

<Steps>
  <Step title="Check for other active integrations">
    Check if any other integration in the Web Connector is running. If so, try temporarily unchecking the Auto-Run box for those *other* Web Connector connections. Keep Auto-Run enabled for the connection you are trying to fix.

    If you still see the "Another update is in progress" error for the connection you are trying to fix, continue to the next step.
  </Step>

  <Step title="Reboot your computer">
    Save your work and restart your computer. This simple step often resolves
    conflicts with background processes and clears any stuck update processes.
  </Step>
</Steps>

If you continue to encounter the error after trying these steps, please email [support@conductor.is](mailto:support@conductor.is?subject=QuickBooks%20Desktop%20Help) for further assistance.
s


# How to fix: Web Connector cannot connect to QuickBooks Desktop
Source: https://docs.conductor.is/help/connection-errors/cannot-connect-to-quickbooks



<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

If you were directed to this page, it was likely because you encountered the following error attempting to sync with your QuickBooks Desktop:

```
We could not connect to your QuickBooks Desktop because there is a configuration issue with your QuickBooks Desktop.
```

This error means QuickBooks Desktop could not be opened for this connection. Common causes include a stale saved company-file path, multiple QuickBooks Desktop versions, permission mismatches, or other local QuickBooks Desktop configuration issues. Please follow the steps below to resolve the issue.

<Steps>
  <Step title="Ensure only one version of QuickBooks Desktop is installed">
    Only one version of QuickBooks Desktop can be installed on your Windows computer for this integration to work. **If the Web Connector crashes when syncing, this is almost certainly the culprit.** Please [complete this guide](/help/guides/ensure-only-one-version-installed) to ensure only one version of QuickBooks Desktop is installed on your computer.

    After completing the guide linked above, try syncing with QuickBooks Desktop again.
  </Step>

  <Step title="Recreate the Web Connector log file">
    If you continue to see the same error when syncing, you may need to recreate the Web Connector log file. Please [complete this guide to delete the log file](/help/connection-errors/there-was-a-problem-with-the-log-file#solution%3A-delete-the-web-connector-log-file). If you recognize the error pop-up below, then this is certainly the culprit. Even if not, it's a good idea to delete the log file (as described in the guide) to ensure it's not corrupted.

    <Image alt="There was a problem with the log file. QuickBooks Web Connector will continue without a log file" />

    After deleting the log file as described in the guide, try syncing with QuickBooks Desktop again.
  </Step>

  <Step title="Ensure QuickBooks Desktop and the Web Connector are not set to 'Run as administrator'">
    For the integration to work, **QuickBooks Desktop and the QuickBooks Web Connector must launch with the exact same Windows permission level**. If one is set to "Run as administrator" while the other is not, the Web Connector will be unable to connect to QuickBooks Desktop. Please [complete this short guide](/help/guides/run-as-administrator-disabled) to ensure "Run as administrator" is disabled for both programs.

    After completing the guide above, try syncing with QuickBooks Desktop again.
  </Step>

  <Step title="Remove and re-add the Web Connector connection">
    Reinstalling the connection resets QuickBooks's integration permissions, resolves many lingering connection issues, and often fixes problems that appear right after a QuickBooks Desktop update.

    1. Open QuickBooks Desktop with the correct company file, sign in as the built-in **Admin** user, and switch to Single-user Mode.
    2. In the top menu bar, click "**File**" → "**App Management**" → "**Update Web Services**" to launch the QuickBooks Web Connector.
    3. In the Web Connector window, click "**Remove**" to the right of the connection and then click "**Yes**" to confirm.
    4. **Return to the QuickBooks Desktop integration setup flow** you used to create this connection. If you do not know how to access it, contact the support team for the product that sent you this guide.
    5. Download a fresh configuration file from that setup guide. In the Web Connector, click "**Add an Application**" and select the file you just downloaded.
    6. Finish the setup flow until the final page confirms the connection is successful, and then try syncing again.

    <Info>
      QuickBooks Desktop may skip the permissions prompt this time. That is normal and does not indicate a problem.
    </Info>
  </Step>

  <Step title="Did you recently move the connection from one computer to a new computer?">
    If you recently moved the Web Connector connection from one computer to a new computer, double-check that the connection on the old computer is disabled. Having connections active on both computers can cause synchronization conflicts and lead to connection errors. Please [follow this guide to properly move your connection](/help/guides/move-computers) and **ensure the old connection is disabled**.

    After completing the guide above, try syncing with QuickBooks Desktop again.
  </Step>

  <Step title="Did you recently move or rename your QuickBooks company file?">
    If so, [follow this guide](/help/guides/moved-or-renamed-company-file) to reset the saved company file location (on our server) for this connection.

    After completing the guide above, try syncing with QuickBooks Desktop again.
  </Step>

  <Step title="Do you see a popup on your Windows computer saying 'Do you want to allow this app to make changes to your device?'?">
    If you still see the same error when syncing, check if the dialog box shown below appears on your Windows computer. If so, please [complete this guide to resolve that issue](/help/connection-errors/do-you-want-to-allow-this-app-to-make-changes-to-your-device). Then, try syncing with QuickBooks Desktop again.

    <Image alt="QuickBooks Desktop - Do you want to allow this app to make changes to your device" />
  </Step>
</Steps>

If you continue to see the error above after trying all of the solutions above, please email us at [support@conductor.is](mailto:support@conductor.is?subject=QuickBooks%20Desktop%20Help).


# How to fix: "Your QuickBooks Desktop connection is not active"
Source: https://docs.conductor.is/help/connection-errors/connection-not-active



<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

If Conductor is unable to sync your QuickBooks Desktop data, you may see the following error:

```
Your QuickBooks Desktop connection is not active. It was last active...
```

This error indicates that Conductor cannot establish a connection with the QuickBooks Web Connector on your computer. The Web Connector is an essential component that comes pre-installed with QuickBooks Desktop. It runs silently in the background, facilitating secure synchronization of your QuickBooks Desktop data with Conductor.

Follow these troubleshooting steps to resolve the issue:

## Troubleshooting steps

<Steps>
  <Step title="Ensure your computer is on, online, and signed in to Windows">
    The Web Connector requires your computer to be powered on, connected to the internet, and signed in to Windows.

    1. If your computer is off, turn it on and ensure it has an active internet connection.
    2. Sign in to Windows with the user that runs QuickBooks Desktop and the Web Connector. If the computer was shut down or restarted, the connection will not resume while Windows is waiting at the sign-in screen.
    3. Attempt to sync your QuickBooks Desktop data.

    If the error persists, proceed to the next step.
  </Step>

  <Step title="Ensure the Web Connector is running">
    The Web Connector should always be running in the background on your computer. If it's not, launch the program by following these steps:

    1. Open QuickBooks Desktop with the company file you want to sync.
    2. In the top menu bar, click "**File**" → "**App Management**" → "**Update Web Services**" to launch the QuickBooks Web Connector.
    3. Attempt to sync your QuickBooks Desktop data again.
    4. If the sync is successful, this issue is resolved and you should click "**Hide**" in the bottom-right corner to keep the Web Connector running in the background. If the error persists, continue to the next step.

    <Note>
      If the Web Connector doesn't restart automatically after reboot and Windows sign-in, Conductor may face difficulties in reliably syncing your QuickBooks Desktop data. To ensure it opens after reboot and Windows sign-in, [follow this guide](/help/guides/ensure-web-connector-opens-at-startup).
    </Note>
  </Step>

  <Step title="Confirm Auto-Run is enabled in the Web Connector ">
    <Image alt="Ensure Auto Run is enabled in the Web Connector" />

    From the Web Connector:

    1. Confirm the box for **Auto-Run is enabled** for your connection. If not, tick it.
    2. Attempt to sync your QuickBooks Desktop data again.
       * **If the sync is successful:** This issue is resolved and you should click "**Hide**" in the bottom-right corner to keep the Web Connector running in the background.
       * **If the sync fails:** Continue to the next step.

    <Warning>
      **Never disable the Auto-Run setting!** This is required to for a stable connection to your QuickBooks Desktop.
    </Warning>
  </Step>

  <Step title="Confirm the password is saved in the Web Connector">
    <Image alt="Confirm the password is saved in the Web Connector" />

    From the Web Connector: Confirm the **Password box is not empty** and looks like "**\*\*\*\*\*\*\*\***".

    <Accordion title="‼️ If the Password box is empty, click HERE for instructions to re-enter it.">
      1. **Return to the QuickBooks Desktop integration setup flow** that you initially used to create this connection. If you do not know where this is, contact the support team of the product that sent you this guide.
      2. Skip to the page for "**Step 4 of 5**" and find the section for "**Copy the unique password below**". It looks like this:
         <Frame>
           <img alt="Copy the unique password from your setup guide." />
         </Frame>
      3. When you paste the password into the **Password** box, be sure to hit "**Enter**" on your keyboard and click "**Yes**" on the dialog box that appears to save the password.
      4. Continue to the final page of the setup flow to test your connection:
         * **If the sync is successful:** This issue is resolved and you should click "**Hide**" in the bottom-right corner to keep the Web Connector running in the background.
         * **If the sync fails:** Continue to the next step.
    </Accordion>

    <Warning>
      **This is NOT your QuickBooks password!** This is the unique code provided in the setup guide, explained above.
    </Warning>
  </Step>

  <Step title="Confirm Every-Min is blank in the Web Connector">
    <Image alt="Ensure Every-Min is blank for your connection in the Web Connector" />

    From the Web Connector: Confirm **Every-Min is blank** for your connection.

    <Accordion title="‼️ If Every-Min is not blank, click HERE for instructions to reset it.">
      *These steps are the only way to reset the Every-Min value; you cannot directly clear it manually.*

      1. Click "**Remove**" to the right of the connection in the Web Connector. Click "**Yes**" to confirm.
      2. **Return to the QuickBooks Desktop integration setup flow** that you initially used to create this connection. If you do not know where this is, contact the support team of the product that sent you this guide.
      3. **Complete the same setup flow** to add the connection again. But, do not enter a value in the Every-Min field.
      4. Continue to the final page of the setup flow to test your connection:
         * **If the sync is successful:** This issue is resolved and you should click "**Hide**" in the bottom-right corner to keep the Web Connector running in the background.
         * **If the sync fails:** Continue to the next step.
    </Accordion>

    <Warning>
      **Never change the Every-Min setting!** This is required to for a stable connection to your QuickBooks Desktop.
    </Warning>
  </Step>

  <Step title="Ensure only one version of QuickBooks Desktop is installed">
    For the integration to work, **only one version of QuickBooks Desktop can be installed** on your Windows computer. Having multiple versions installed can cause the error above and several other issues. Please [complete this guide to ensure](/help/guides/ensure-only-one-version-installed) only one version of QuickBooks Desktop is installed on your computer. If the Web Connector ever crashed when syncing, this is almost certainly the culprit.

    After completing the guide, try syncing with QuickBooks Desktop again.
  </Step>

  <Step title="Delete the Web Connector log file">
    <Note>
      This is a common solution for various QuickBooks Desktop sync issues.
    </Note>

    If you're still experiencing connection issues, there might be a problem with the QuickBooks Web Connector log file. Please [follow this quick guide](/help/connection-errors/there-was-a-problem-with-the-log-file#solution-delete-the-web-connector-log-file) to delete and auto-regenerate the log file.
  </Step>

  <Step title="Reboot your computer and sign in to Windows">
    As a last resort, restarting your computer can resolve hidden issues with the Web Connector and other background processes.

    1. Save any open work and **reboot your computer**.
    2. After the computer restarts, sign in to Windows with the user that runs QuickBooks Desktop and the Web Connector.
    3. Open QuickBooks Desktop with the company file you want to sync.
    4. Attempt to sync your QuickBooks Desktop data again.
  </Step>
</Steps>

If you continue to receive the "Your QuickBooks Desktop connection is not active" error after completing this guide, please contact our support team at [support@conductor.is](mailto:support@conductor.is?subject=QuickBooks%20Desktop%20Connection%20Issue).


# How to fix: "Do you want to allow this app to make changes to your device?"
Source: https://docs.conductor.is/help/connection-errors/do-you-want-to-allow-this-app-to-make-changes-to-your-device



<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

If you ever see the Windows prompt shown below whenever you attempt to sync with QuickBooks Desktop, it is preventing the Web Connector from syncing with QuickBooks Desktop. To resolve this issue, you need to adjust your Windows User Account Control (UAC) settings to prevent this prompt from appearing. Please follow the steps in this guide to resolve this issue.

<Image alt="QuickBooks Desktop - Do you want to allow this app to make changes to your device" />

## Solution

<Steps>
  <Step title="Open User Account Control Settings">
    Click on the Windows Start button and type "**UAC**" in the search box. Select "**Change User Account Control settings**" from the search results.
  </Step>

  <Step title="Adjust the UAC level">
    A window will appear with a slider that controls the UAC notification level. Drag the slider all the way down to "**Never notify**".

    <Image alt="Windows User Account Control Settings showing slider set to Never notify" />
  </Step>

  <Step title="Confirm the changes">
    Click "**OK**" to save the changes. You may be prompted to confirm this action - click "**Yes**" to proceed.
  </Step>

  <Step title="Restart your computer">
    Restart your computer to ensure the changes take effect.
  </Step>
</Steps>

After completing these steps, Windows will no longer display UAC prompts when applications attempt to make changes to your device. This will prevent the prompt from interfering with the QuickBooks Desktop synchronization process.


# Fixing the "Insufficient permission level" error
Source: https://docs.conductor.is/help/connection-errors/insufficient-permission-level

Resolve the QuickBooks Desktop error shown by Web Connector when the connection user lacks the required access rights.

<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

When QuickBooks Desktop returns **"Insufficient permission level to perform this action"** during a sync, the QuickBooks user linked to your Web Connector connection does not have enough privileges.

The connection's QuickBooks user must be **either**:

* The **Admin** user, or
* A **Full Access** user used **only** for this connection on **this** computer,
  so QuickBooks never blocks requests because the same user is signed in elsewhere.

## How to check and fix the connection's QuickBooks user

<Steps>
  <Step title="Sign in as Admin, Single-user Mode">
    1. Open **QuickBooks Desktop** and the connected company file.
    2. Log in as **Admin**.
    3. Go to **File → Switch to Single-user Mode**.
  </Step>

  <Step title="See which user the connection uses">
    1. Go to **Edit → Preferences → Integrated Applications → Company Preferences**.
    2. Select your connection in the list, then click **Properties**.
    3. In **Login as**, note the QuickBooks user the Web Connector uses.
       If needed, check **Allow this application to log in automatically**, then choose the intended user.
  </Step>

  <Step title="Choose the best user">
    * **Simplest:** Keep using **Admin** if no one signs in as Admin on other computers.
    * **Recommended:** Create or pick a dedicated non-Admin user used only for syncing **with Full Access privileges**.
  </Step>

  <Step title="If not using Admin, grant Full Access to the connection user">
    While still signed in as Admin and in Single-user Mode:

    1. **Enterprise:** **Company → Users → Set Up Users and Roles** → open the user’s roles → assign **Full Access**.
    2. **Pro/Premier:** **Company → Set Up Users and Passwords → Set Up Users** → select the user → **Edit** → choose **All areas of QuickBooks (Full Access)** → **Finish**.
  </Step>

  <Step title="If you created a new user, update the connection to use that user">
    1. Return to **Edit → Preferences → Integrated Applications → Company Preferences**.
    2. Select your connection → **Properties**.
    3. Set **Login as** to the Admin or Full Access user you chose → **OK** → **OK**.
  </Step>

  <Step title="Retry the sync">
    When complete, try syncing again. The error should be resolved. You can now sign out of the QuickBooks Admin user and switch back to Multi-user Mode.
  </Step>
</Steps>


# How to fix: "QBWC1039: This application has not accessed this QuickBooks company data file before"
Source: https://docs.conductor.is/help/connection-errors/qbd-admin-required



<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

When setting up the QuickBooks Desktop integration, you might encounter the following error after attempting to open the downloaded config file:

<Image alt="QBWC1039: There was a problem adding the application. Check QWCLog.txt for details. Error connecting to QuickBooks. Error message received from QuickBooks was: This application has not accessed this QuickBooks company data file before. The QuickBooks administrator must grant an application permission to access a QuickBooks company data file for the first time." />

**This error occurs because you did not correctly sign in to QuickBooks Desktop using the built-in "Admin" user before starting the setup process.** Even if your current user has administrative privileges, the username must specifically be "Admin" - this is a QuickBooks Desktop requirement that cannot be bypassed.

## Solution: Sign in as the "Admin" user

<Steps>
  <Step title="Sign out of your current QuickBooks Desktop user account" />

  <Step title="Sign in using the QuickBooks built-in &#x22;Admin&#x22; user account">
    Sign in using the QuickBooks built-in "Admin" user. **The username must be exactly "Admin"** - not any other user, even if it has administrative privileges.

    <Info>
      Signing in as the "Admin" user is only needed for this one-time setup process. After setup is complete, you can return to using your regular QuickBooks Desktop user account.
    </Info>

    <Image alt="QuickBooks Desktop sign in as Admin" />
  </Step>

  <Step title="Re-open the QuickBooks config file">
    Re-open the QuickBooks config file again from your Downloads folder (it has the file extension `.qwc`). This is the file you just downloaded from the QuickBooks Desktop setup guide. Now, QuickBooks Desktop should no longer show the error shown above and you can continue setting up the connection.
  </Step>

  <Step title="Continue where you left off in the QuickBooks Desktop setup guide">
    After you complete the setup process, you can return to using your regular QuickBooks Desktop user account.
  </Step>
</Steps>

Following these steps will ensure you're properly signed in as the QuickBooks "Admin" user, which is required to grant the Web Connector permission to access your QuickBooks company data file for the first time.


# How to fix: "QBWC1085: There was a problem with the log file"
Source: https://docs.conductor.is/help/connection-errors/there-was-a-problem-with-the-log-file



<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

When connecting to QuickBooks Desktop, you might encounter the error shown below, which prevents the Web Connector from syncing your QuickBooks Desktop data. Follow the steps below to resolve this issue.

<Image alt="QuickBooks Web Connector error - QBWC1085: There was a problem with the log file. QuickBooks Web Connector will continue without a log file" />

## Solution: Delete the Web Connector log file

A corrupted QuickBooks Web Connector log file can cause this error. Typically, this file was already in this corrupted state even before setting up the connection. Deleting the log file will force the Web Connector to generate a new one. To do so, follow these steps:

<Steps>
  <Step title="Close QuickBooks Desktop">
    Ensure QuickBooks Desktop is completely closed.
  </Step>

  <Step title="Terminate the QuickBooks Web Connector">
    Terminate the QuickBooks Web Connector process to ensure it is not running in the background:

    1. Open the Windows Task Manager by searching for "Task Manager" in the Windows search bar (usually located in the bottom-left corner of your screen).
    2. In the Task Manager, find "QuickBooks Web Connector", right-click it, and select "**End Task**". You may need to click "**More details**" at the bottom of the Task Manager window to see all running processes.
    3. Close the Task Manager.
  </Step>

  <Step title="Navigate to the QuickBooks Web Connector log directory">
    Open File Explorer and navigate to the QuickBooks Web Connector log directory by copying and pasting the following path into the address bar:

    ```
    C:\ProgramData\Intuit\QBWebConnector\log
    ```
  </Step>

  <Step title="Delete the log file">
    In the log directory, locate the file named `QWCLog.txt`, right-click on it, and select "**Delete**".
  </Step>

  <Step title="Restart QuickBooks Desktop and the Web Connector">
    Restart QuickBooks Desktop and the QuickBooks Web Connector to generate a new log file:

    1. Open QuickBooks Desktop with the company file you want to sync.
    2. In the top menu bar, click "**File**" → "**App Management**" → "**Update Web Services**" to launch the QuickBooks Web Connector.
    3. In the window that appears, click "**Hide**" in the bottom-right corner to keep the Web Connector running in the background.
  </Step>
</Steps>

After completing these steps, the Web Connector will generate a new log file and you should be able to sync your QuickBooks Desktop data again.


# How to fix: "Unable to cast COM object of type System.__ComObject..."
Source: https://docs.conductor.is/help/connection-errors/unable-to-cast-com-object



<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

If a Conductor error message directed you to this page, it's because we encountered the following error when attempting to connect to QuickBooks Desktop on your computer:

```
Unable to cast COM object of type 'System.__ComObject' to interface type
'Interop.QBXMLRP2.RequestProcessor2'. This operation failed because the
QueryInterface call on the COM component for the interface with IID
'{8DB91B17-D5A2-41DB-80A7-CC6F1E449A05}' failed due to the following error:
No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
```

## Solution

Complete the following steps to re-register the QuickBooks Desktop components to resolve this issue:

<Steps>
  <Step title="Close QuickBooks Desktop">
    Ensure QuickBooks Desktop is completely closed.
  </Step>

  <Step title="Open Command Prompt (cmd.exe) as an administrator">
    Using Windows search (usually located in the bottom-left corner of your screen), type "**cmd**", right-click on the "**Command Prompt**" result, and select "**Run as administrator**".

    <Image alt="Run Command Prompt as administrator" />
  </Step>

  <Step title="Run the command to re-register QuickBooks components">
    Copy the **entire** command below, then paste it into the PowerShell window and press Enter.

    ```shell theme={"system"}
    "%windir%\SysWOW64\regsvr32.exe" "C:\Program Files (x86)\Common Files\Intuit\QuickBooks\QBXMLRP2.dll"
    ```

    <Image alt="Re-register QuickBooks components via Command Prompt" />

    If the command was successful, you will see a success message resembling the screenshot below.

    <Image alt="Re-register QuickBooks components via Command Prompt" />
  </Step>

  <Step title="Restart your computer">
    If the command was successful, restart your computer to ensure the changes take effect. After restarting, try connecting to QuickBooks Desktop again.
  </Step>
</Steps>

These steps should resolve the COM object casting error by properly registering the QuickBooks components with your system.


# How to fix: "QBWC1039: Unique OwnerID/FileID pair value required"
Source: https://docs.conductor.is/help/connection-errors/unique-owner-id-file-id-pair-required



This guide will walk you through resolving the following error that occurs when attempting to add a connection to the QuickBooks Web Connector:

<Image alt="QuickBooks Web Connector error - QBWC1039: Unique OwnerID/FileID pair value required" />

This error typically occurs when:

* You previously added a connection to the QuickBooks Web Connector, removed it, and are now attempting to add it again for the same QuickBooks company file.

* You previously added the connection to the QuickBooks Web Connector *on another computer* for the same QuickBooks company file, removed it, and are now attempting to add it *on a different computer*.

#### If you are also getting the "Unhandled exception has occurred" error

In addition to the error above, some users also encounter the following error *at the same time:*

<Image alt="QuickBooks Web Connector error - Unhandled exception has occurred in a component in your application. If you click Continue, the application will ignore this error and attempt to continue. Index (zero based) must be greater than or equal to zero and less than the size of the argument list." />

If you are encountering this error as well, we must first force-quit the QuickBooks Web Connector before we can fix the other error at the top of this page. To do this, follow the steps below.

1. Open the Windows Task Manager by searching for "Task Manager" in the Windows search bar (usually located in the bottom-left corner of your screen).

2. In the Task Manager, find the QuickBooks Web Connector, right-click it, and select "**End Task**". You may need to click "**More details**" at the bottom of the Task Manager window to see all running processes.

After force-quitting the QuickBooks Web Connector, continue to the next section to fix the original error for *"Unique OwnerID/FileID pair value required"*.

## Solution

Complete the following steps to fix the error shown above for *"Unique OwnerID/FileID pair value required"*.

<Steps>
  <Step title="Open QuickBooks Desktop" />

  <Step title="Download and run the QBWC CP3 Tool">
    Download the [QBWC CP3 tool](https://http-download.intuit.com/http.intuit/CP3Tool/QBWC_CP3Tool.exe?_ga=2.67283025.1765810068.1652776906-1422200743.1652776904), created by Intuit (the makers of QuickBooks Desktop), to address this issue. Open the program ("QBWC\_CP3Tool.exe") from your downloads folder.
  </Step>

  <Step title="Select the QWC file">
    In the window that opens, as shown below, click "**Select File**", locate the QWC file that you attempted to open earlier which resulted in the error, and click "**Open**". This file is often found in your downloads folder.

    <Image alt="QuickBooks Web Connector - QBWC1039: Unique OwnerID/FileID pair value required" />
  </Step>

  <Step title="Click &#x22;Remove Stamp&#x22;" />

  <Step title="Grant permission to the CP3 tool">
    QuickBooks Desktop will prompt you to grant permission to the CP3 Tool to make the necessary changes:

    1. In the QuickBooks Application Certificate window that appears, click "**Yes**", then "**Continue**".

    2. On the Access Confirmation window, select "**Done**".

    3. Follow the instructions, then select "**OK**".
  </Step>

  <Step title="Close the CP3 tool">
    You should receive a confirmation that the Owner ID was removed. Select "**OK**" and close the CP3 tool.
  </Step>

  <Step title="Retry adding the connection">
    Attempt to open the same QWC file you tried opening earlier. This time, it should work without any errors, and you should see the connection added to the QuickBooks Web Connector.
  </Step>
</Steps>

Following these steps should resolve the "Unique OwnerID/FileID pair required" error by removing the old connection stamp, allowing you to successfully add the connection to QuickBooks Web Connector.


# QuickBooks Desktop FAQ for end-users
Source: https://docs.conductor.is/help/faq/end-user-faq

An FAQ guide written for the end-users of Conductor's QuickBooks Desktop integration.

<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

This FAQ is designed to answer any questions you may have about your QuickBooks Desktop connection and Conductor, the technology provider that powers it.

## Basics and setup

<AccordionGroup>
  <Accordion title="What is the QuickBooks Desktop Web Connector?">
    The QuickBooks Web Connector is a program that comes preinstalled with
    QuickBooks Desktop that the integration uses to securely sync your data.
    This program always runs invisibly in the background on your computer and
    restarts automatically after reboot once you sign in to Windows with the
    user that runs the connection. If it does not start automatically, the
    integration cannot reliably sync your data. The only time you should ever
    see the Web Connector is when you first set up your QuickBooks Desktop
    connection with the integration; other than that, it should be invisible.
  </Accordion>

  <Accordion title="How does the integration connect with QuickBooks Desktop?">
    The integration uses the QuickBooks Web Connector, a built-in feature of
    QuickBooks Desktop designed for secure data synchronization. This method is
    officially recommended by QuickBooks and involves robust user authentication
    and SSL (Secure Socket Layer) encryption. This ensures that your data is
    encrypted during transmission, protecting it from unauthorized access.
  </Accordion>

  <Accordion title="Do I need to be signed in as the Admin user?">
    No, signing in as the Admin user is only required for the initial setup
    process. After setup is complete, you can switch back to your regular
    QuickBooks Desktop user.

    The saved "Login as" user for automatic sign-in does not have to be Admin,
    but it must have Full Access permissions. See [Changing a connection's
    QuickBooks Desktop user](/help/guides/change-qbd-user) for more detail.
  </Accordion>

  <Accordion title="Who is Conductor?">
    Conductor is a technology provider that powers the QuickBooks Desktop
    integration for the software you're using. We specialize in creating secure,
    reliable connections between different software platforms, ensuring your
    data flows smoothly and safely from QuickBooks Desktop to your business
    application.
  </Accordion>
</AccordionGroup>

## Security and data

<AccordionGroup>
  <Accordion title="Do you store any of my QuickBooks Desktop data?">
    **No, we do not store any of your QuickBooks Desktop data.** The integration acts as a secure conduit, facilitating the transfer of information between your QuickBooks Desktop and the software you are using, without retaining any of that information on our systems.
  </Accordion>

  <Accordion title="What security measures are implemented to secure data?">
    Our QuickBooks Desktop integration adheres to the industry's top security practices, including:

    * **SSL encryption:** For secure data transmission.
    * **Encrypted API keys:** Unique keys that ensure only authorized software can access your data.
    * **Zero data storage policy:** We don't store your QuickBooks data, maintaining your privacy.
    * **Continuous monitoring:** Our systems are monitored continuously for any unusual activity to prevent unauthorized access.
  </Accordion>

  <Accordion title="Which QuickBooks Desktop data can the integration access?">
    The integration can read and write most data types in your QuickBooks Desktop, *excluding* sensitive personal information like Social Security Numbers and customer credit card details. This broad access is necessary because the QuickBooks Web Connector does not support limited permissions for selective data access.
  </Accordion>
</AccordionGroup>

## Sync and performance

<AccordionGroup>
  <Accordion title="Does my computer need to be powered on and signed in to Windows to sync?">
    Yes, your computer must be powered on, connected to the internet, and signed in to Windows with the user that runs QuickBooks Desktop and the Web Connector.
  </Accordion>

  <Accordion title="Does QuickBooks Desktop need to be open to sync?">
    **We strongly recommend keeping QuickBooks Desktop open** for the best performance. There is no downside to keeping it open.

    <Tip>
      If you cannot stay signed in to the company file, for example to avoid occupying a QuickBooks Desktop seat or blocking Single-user Mode elsewhere, leave QuickBooks at the **"No Company Open"** screen. QuickBooks will then sign in automatically during each sync.
    </Tip>

    Scenarios to consider:

    * **BEST: QuickBooks kept open with your company file loaded:** This provides the fastest sync experience and is recommended when possible.

      <Warning>
        If QuickBooks is open with a different company file than the one you're trying to sync, the operation will return an error.
      </Warning>

    * **GOOD: QuickBooks kept open but no company file loaded:** If you need to conserve license seats or want to be able to sign in on another computer, you can keep QuickBooks at the "No Company Open" screen. The Web Connector will automatically open your company file when syncing. This is slower than the previous option but faster than the next option.

    * **WORST: QuickBooks kept completely closed:** If QuickBooks Desktop is closed, the Web Connector will launch it automatically, but this significantly slows down the sync process due to application startup time and is a common cause of sync errors.

    <Info>
      Follow our [guide to ensure QuickBooks Desktop opens after reboot and Windows sign-in](/help/guides/ensure-quickbooks-desktop-opens-at-startup) for the best performance.
    </Info>
  </Accordion>

  <Accordion title="How often does the integration access my data?">
    The frequency of data access is determined by the software you are using.
    Typically, data syncs occur when you initiate them (e.g., clicking a "sync"
    button in your software). For specifics, please contact your software
    provider.
  </Accordion>

  <Accordion title="Does the connection impact QuickBooks Desktop performance?">
    No, the integration does not slow down QuickBooks Desktop. Here's why:

    * It uses the built-in Web Connector. When idle, it simply waits for new requests and does not interact with QuickBooks Desktop.
    * Even when processing a request, QuickBooks Desktop performance would only be impacted by extremely large reads. We cap requests to reasonable page sizes to prevent this.
    * The Web Connector is lightweight and checks for new requests every 10 seconds.
    * We have never observed or received reports of the integration affecting system performance.
  </Accordion>

  <Accordion title="What does &#x22;Update postponed by application&#x22; mean? Is it a problem?">
    No problem at all. This message indicates the Web Connector checked for updates, but no sync is necessary at the moment.
  </Accordion>

  <Accordion title="How do I prevent QuickBooks pop-up dialogs from interrupting the Web Connector?">
    When QuickBooks Desktop displays a pop-up dialog, such as reminders, alerts, or update prompts, the Web Connector will pause syncing until you close the dialog. Simply closing the pop-up will allow the sync to continue.

    <Tip>
      **If you need to run syncs unattended and want pop-ups to close automatically**, you can use a tool like [Popup Killer](http://www.pablosoftwaresolutions.com/html/popup_killer.html). This tool lets you specify window titles so it can automatically close QuickBooks dialogs as they appear.
    </Tip>
  </Accordion>
</AccordionGroup>

## Multiple computers and company files

<AccordionGroup>
  <Accordion title="Can I connect multiple QuickBooks company files on the same computer?">
    Yes, you can connect to multiple company files on a single computer. It requires a specific setup to work correctly. Please see our [guide on connecting multiple company files](/help/guides/multiple-connections-one-computer) for critical setup instructions and best practices.
  </Accordion>

  <Accordion title="Can I set up the connection on more than one computer for the same company file?">
    Yes. If your team shares a single QuickBooks Desktop company file on your office network, you can install the Web Connector connection on more than one Windows computer. Each computer will have its own entry in the QuickBooks Web Connector and can sync with that same company file. Many teams do this as a backup in case one computer is turned off or unavailable.

    <Warning>
      **Important:** The company file must live in the **exact same folder path on every computer**. The Web Connector uses the full path to decide which company file should receive a request. If the company file path is different on any computer (for example, different drive letters or folder names), syncs will fail.

      Simple ways to keep company file paths the same across all computers:

      * Map the shared folder to the **same drive letter** on all computers (e.g., all use `S:\Accounting\...`).
      * Or open the file using the **same network path** on every computer (e.g., `\\SERVER\Share\Accounting\MyCompany.QBW`).
    </Warning>

    <Tip>
      Best practice: Set up the connection on the Windows server that hosts the
      company file. These servers typically run 24/7, which removes the need to
      maintain connections on multiple workstations.
    </Tip>
  </Accordion>
</AccordionGroup>

## Advanced setup and support

<AccordionGroup>
  <Accordion title="Does the integration support Rightworks (formerly Right Networks)?">
    Yes, the integration fully supports QuickBooks Desktop when hosted on
    Rightworks. For setup instructions, please see our [Connecting to Rightworks
    guide](/help/guides/rightworks).
  </Accordion>

  <Accordion title="How can I remove the QuickBooks Desktop connection?">
    Please follow [this guide](/help/guides/remove-connection) to remove the
    QuickBooks Desktop connection.
  </Accordion>

  <Accordion title="Any other questions?">
    If you have any other questions, please check the other guides in the
    sidebar, contact your software provider, or email us at
    [support@conductor.is](mailto:support@conductor.is).
  </Accordion>
</AccordionGroup>


# Changing a Web Connector connection's settings
Source: https://docs.conductor.is/help/guides/change-connection-settings

Learn how to change a QuickBooks Web Connector connection's settings so you can modify its access level, automatic login, personal data access, and more.

<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

When you first add a Web Connector connection, QuickBooks Desktop shows an Application Certificate window. In that window you choose important permissions for the connection – for example whether the application can connect when QuickBooks is closed, which user it should log in as, and whether it can access sensitive information.

This guide explains how to open that same configuration view again so you can change **any** preference for an existing Web Connector connection.

<Steps>
  <Step title="Open QuickBooks Desktop" />

  <Step title="Open the company file for the connection you want to modify" />

  <Step title="Sign in as the QuickBooks Admin user" />

  <Step title="Switch to Single-user Mode">
    If you're currently in Multi-user Mode, switch to Single-user Mode by going to "**File**" → "**Switch to Single-user Mode**" in the top menu bar.
  </Step>

  <Step title="Open the Integrated Applications preferences">
    1. Go to "**Edit**" → "**Preferences**" in the top menu bar.
    2. In the Preferences window that appears, navigate to "**Integrated Applications**" in the left sidebar.
    3. Click on the "**Company Preferences**" tab at the top of the window.
  </Step>

  <Step title="Open the connection's Properties window">
    1. In the list of connections, **find the row that matches your Web Connector connection**.
    2. Select it and click **Properties**.

    <Image alt="Select the connection and click Properties" />
  </Step>

  <Step title="Change the desired settings">
    The connection **Properties** window is the same window you saw when you intiially added the Web Connector connection. Here you can adjust:

    1. **Access rights** – for unattended syncing we recommend selecting "**Yes, always; allow access even when QuickBooks is not running**".
    2. **Login as** – choose which QuickBooks user the connection will use for automatic sign-in. (See [Changing a connection's QuickBooks Desktop user](/help/guides/change-qbd-user) for more details.)
    3. **Personal data access** – check or un-check "**Allow this application to access personal data such as Social Security Numbers and customer credit card information**" depending on your needs.
    4. Any other options provided by QuickBooks Desktop or your specific QuickBooks version.

    <Image alt="Connection Properties window showing the available options" />
  </Step>

  <Step title="Save your changes">
    1. Click **OK** to close the connection Properties window.
    2. Click **OK** again to close the Preferences window.
  </Step>
</Steps>

That's it! Your QuickBooks Desktop connection will now use the updated settings going forward.


# Changing a connection's QuickBooks Desktop user
Source: https://docs.conductor.is/help/guides/change-qbd-user

Learn how to change the saved QuickBooks Desktop user a Web Connector connection uses for automatic sign-in.

<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

Each QuickBooks Desktop Web Connector connection has a saved **Login as** user for automatic sign-in. This guide will show you how to change that user account and how QuickBooks decides which user is used during a sync.

<Warning>
  Automatic sign-in can fail if the selected QuickBooks Desktop user is already
  signed in on another computer. **Make sure to select a user who primarily
  works on the same computer to avoid conflicts.**
</Warning>

<Tip title="Need a dedicated user?">
  If you want a login that only your Web Connector connection uses so it never
  conflicts with a coworker’s session, follow our [guide to creating a dedicated
  QuickBooks Desktop user](/help/guides/create-dedicated-qbd-user) before
  proceeding.
</Tip>

## Which QuickBooks Desktop user is used during syncs?

There are two different QuickBooks Desktop user states to understand:

* **If the company file is already open in QuickBooks Desktop:** The Web Connector sends the sync through the currently signed-in QuickBooks session. For example, if Sam is signed in to the company file on the Web Connector computer, the sync runs through Sam's open session, even if the saved **Login as** user is a different Full Access user. Sam's permissions still apply to that sync.
* **If QuickBooks Desktop is closed or sitting at the "No Company Open" screen:** When automatic login is enabled, QuickBooks uses the saved **Login as** user from the connection properties to open the company file and run the sync.

The initial setup still must be completed while signed in as the built-in QuickBooks **Admin** user so QuickBooks can grant the application permission to access the company file for the first time. After setup, the saved **Login as** user does not have to be Admin, but it must have **Full Access** permissions. To avoid conflicts, select a user who normally uses this computer, or create a dedicated Full Access user if you want a login reserved for syncing. When QuickBooks Desktop is at the "No Company Open" screen, the Web Connector signs in automatically with the saved **Login as** user.

<Steps>
  <Step title="Open QuickBooks Desktop" />

  <Step title="Open the company file for the connection you want to modify" />

  <Step title="Sign in as the QuickBooks Admin user" />

  <Step title="Switch to Single-user Mode">
    If you're currently in Multi-user Mode, switch to Single-user Mode by going to "**File**" → "**Switch to Single-user Mode**" in the top menu bar.
  </Step>

  <Step title="Open the Integrated Applications preferences">
    1. Go to "**Edit**" → "**Preferences**" in the top menu bar.
    2. In the Preferences window that appears, navigate to "**Integrated Applications**" in the left sidebar.
    3. Click on the "**Company Preferences**" tab at the top of the window.
  </Step>

  <Step title="Open the connection's Properties window">
    1. In the list of connections, **find the row that matches your Web Connector connection**.
    2. Select it and click **Properties**.

    <Image alt="Select the connection and click Properties" />
  </Step>

  <Step title="Change the user for your connection">
    1. In the connection **Properties** window that appears, look for the "**Login as**" dropdown menu.
    2. Select the user you want to assign to this connection from the dropdown.

    <Warning>
      This QuickBooks Desktop user **must** have **Full Access** permissions. Limited access roles can block requests and cause sync failures.
    </Warning>

    <Image alt="Change the QuickBooks Desktop user for a connection" />
  </Step>

  <Step title="Save your changes">
    1. Click "**OK**" in the "**Application Properties**" dialog to confirm the user change.
    2. Click "**OK**" in the Preferences window to save all changes.
  </Step>
</Steps>

You're done! From now on, the QuickBooks Desktop connection will use the selected user account when it needs to sign in automatically.


# Creating a dedicated QuickBooks Desktop user for your Web Connector
Source: https://docs.conductor.is/help/guides/create-dedicated-qbd-user

Avoid user conflicts by creating a full-access QuickBooks Desktop user that only signs in when your Web Connector syncs.

<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

Keeping a Web Connector connection stable requires a QuickBooks Desktop user account that is always available. When your connection reuses an employee’s everyday login, QuickBooks can block the sync with a message that the same user is already signed in somewhere else. Creating a **dedicated** QuickBooks Desktop user for the Web Connector prevents that conflict, and it only consumes a license seat during the few seconds when a sync runs.

<Info>
  QuickBooks Desktop licensing is based on how many users are signed in at the
  same time, not how many usernames you create. This dedicated user only counts
  against your seat limit while a sync is actively running.
</Info>

## Set up the dedicated QuickBooks Desktop user

<Steps>
  <Step title="Open QuickBooks Desktop">
    Launch QuickBooks Desktop on the computer that hosts your Web Connector connection.
  </Step>

  <Step title="Open the company file as the Admin user">
    Open the company file that syncs through the Web Connector and sign in with the QuickBooks Admin user.
  </Step>

  <Step title="Switch QuickBooks to Single-user Mode">
    If the title bar shows “Multi-user Mode”, go to "**File**" → "**Switch to Single-user Mode**".
  </Step>

  <Step title="Open the new user window">
    **Pro or Premier:** Go to "**Company**" → "**Set Up Users and Passwords**" → "**Set Up Users**", then click "**Add User**".

    **Enterprise:** Go to "**Company**" → "**Users**" → "**Set Up Users and Roles**", then click "**New**".
  </Step>

  <Step title="Create the dedicated user">
    Complete the setup dialog exactly as shown below so the Web Connector can sign in every time:

    1. **Enter a distinctive username**, ideally the name of the service you are syncing with (for example, `Ramp`), so teammates know this login is reserved for automated syncs.

    2. **Set a strong password** even though QuickBooks labels it “optional”. Weak or blank passwords cause QuickBooks to reject sync attempts.

    3. In **Available Roles**, select **Full Access** and move it to the assigned roles so the Web Connector reaches every area of the company file. If a warning appears, click **Continue**.
       <Warning>
         This QuickBooks Desktop user ***must*** have **Full Access** permissions. Limited access roles can block requests and cause sync failures.
       </Warning>

    4. Provide an email address tied to an Intuit account. QuickBooks requires this to authorize automated access; without it, the sync will fail.
       <Warning>
         QuickBooks requires every QuickBooks Desktop user to have an Intuit account. Otherwise, the sync will fail.
       </Warning>

    5. Click **OK** to save the user, then click **Close** to exit the user list.

    Here is an *example* of the user creation dialog:

    <Image alt="New QuickBooks Desktop user with Full Access role assigned" />
  </Step>

  <Step title="Update the Web Connector connection to use this new user">
    Next, follow our [guide to changing a connection's QuickBooks Desktop user](/help/guides/change-qbd-user) so automatic sign-in uses this new dedicated user.
  </Step>

  <Step title="Keep QuickBooks open at the “No Company Open” window">
    Leave QuickBooks Desktop running as shown in the screenshot below on the computer that hosts the Web Connector so it can sign in briefly and then release the license seat.

    <Warning>
      Leaving QuickBooks at the “No Company Open” window ensures the Web Connector does not occupy a license 24/7; instead, only during a brief active sync. To make sure QuickBooks reopens to this screen after reboot once the Windows user signs in, follow our [guide for launching QuickBooks Desktop after reboot and Windows sign-in](/help/guides/ensure-quickbooks-desktop-opens-at-startup).
    </Warning>

    <Image alt="QuickBooks Desktop showing the required &#x22;No Company Open&#x22; window" />
  </Step>
</Steps>

With the dedicated user saved and QuickBooks sitting at the “No Company Open” window, your Web Connector can sign in automatically without bumping into anyone else’s account or consuming a license all day.


# Ensuring only one version of QuickBooks Desktop is installed
Source: https://docs.conductor.is/help/guides/ensure-only-one-version-installed

Conductor will not function properly if multiple versions of QuickBooks Desktop are installed on the same computer.

<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

Having multiple versions of QuickBooks Desktop installed on the same computer can cause issues with Conductor. Often, this prevents the QuickBooks Web Connector from connecting to QuickBooks Desktop or causes it to crash. Please follow the steps below to ensure only one version of QuickBooks Desktop is installed on your computer.

<Steps>
  <Step title="Open the Windows Control Panel">
    Using Windows search (usually located in the bottom-left corner of your screen), search for "Control Panel", and open it.
  </Step>

  <Step title="Click on Programs and Features">
    In the Control Panel, click on "**Programs and Features**" or "**Uninstall a program**" (exact wording may vary depending on your version of Windows).
  </Step>

  <Step title="Check for multiple versions of QuickBooks Desktop">
    In the list of installed programs, look for any versions of QuickBooks Desktop. If you see multiple versions, such as in the example below, continue to the next step. If you only see one version, you can stop here.

    <Image alt="Multiple versions of QuickBooks Desktop installed" />
  </Step>

  <Step title="Close QuickBooks Desktop">
    Before uninstalling any versions of QuickBooks Desktop, make sure QuickBooks Desktop is completely closed.
  </Step>

  <Step title="Uninstall the older version(s) of QuickBooks Desktop">
    Back in the Control Panel window, right-click on the older version(s) of QuickBooks Desktop in the list of installed programs and click "**Uninstall**". Follow the prompts to uninstall the program. For example:

    <Image alt="Uninstall older version of QuickBooks Desktop" />
  </Step>

  <Step title="Reopen QuickBooks Desktop">
    After uninstalling the older version(s), reopen QuickBooks Desktop and follow any prompts for updates.

    1. If QuickBooks Desktop asks you to fix the installation, click "**Continue**".

       <Image alt="Fix QuickBooks Desktop after uninstalling old version" />

    2. If QuickBooks Desktop asks you to reboot after fixing the installation, click "**OK**".

       <Image alt="Reboot required after fixing QuickBooks Desktop" />
  </Step>
</Steps>

By following these steps, you can ensure only one version of QuickBooks Desktop is installed on your computer, which will help prevent issues with Conductor.


# Ensure QuickBooks Desktop opens after reboot and Windows sign-in
Source: https://docs.conductor.is/help/guides/ensure-quickbooks-desktop-opens-at-startup

Keep QuickBooks Desktop ready after a reboot and Windows sign-in so Web Connector syncs faster.

<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

Keeping QuickBooks Desktop open 24/7 dramatically reduces sync times because the Web Connector no longer has to launch and close QuickBooks for every sync. This is essential on any machine that runs your connection, especially a shared Windows Server that hosts the company file, so that the computer returns to the optimal state after a restart, once a Windows user signs in.

<Info>
  The Windows computer must be powered on, online, and signed in to the user
  that runs QuickBooks Desktop and the Web Connector. For unattended reboots,
  ask your IT team to **configure that Windows user to sign in automatically**;
  otherwise, the computer can get stuck at the Windows sign-in screen.
</Info>

By default, the Web Connector already relaunches after reboot once you sign in to Windows. If it ever fails to do so, follow our [Web Connector reboot and Windows sign-in guide](/help/guides/ensure-web-connector-opens-at-startup) to diagnose and fix that first.

<Warning>
  **Important:** You should always leave QuickBooks Desktop running on the computer that hosts your Web Connector connection. There is no downside to keeping QuickBooks Desktop open: it keeps syncs fast and avoids the wear-and-tear of repeated launches.

  If you cannot stay signed in to the company file (for example, to avoid occupying a QuickBooks Desktop seat or blocking Single-user Mode elsewhere), you can leave QuickBooks open at the "No Company Open" screen, and QuickBooks will sign in and out automatically during each sync.
</Warning>

## Ensure QuickBooks Desktop opens after reboot and Windows sign-in

Most Windows PCs will launch QuickBooks Desktop after reboot once you sign in, as long as a shortcut to `QBW32.exe` lives in that Windows user's `Startup` folder. Follow the steps below so QuickBooks Desktop launches automatically after the computer restarts and the Windows user signs in.

<Steps>
  <Step title="Sign in with the Windows user that runs the connection">
    Make sure you are logged in to Windows with the user that should run QuickBooks Desktop and the Web Connector. If you are unsure which user to use, ask your IT team.
  </Step>

  <Step title="Open the Startup folder">
    Press `Win + R`, type `shell:startup`, and press **Enter**. File Explorer opens to:

    `%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup`

    Anything you place here launches automatically whenever this computer starts and this Windows user signs in.
  </Step>

  <Step title="Locate QuickBooks Desktop">
    Click **Start**, type "QuickBooks Desktop", then right-click the QuickBooks Desktop search result and choose **Open file location**. In the window that opens, right-click the QuickBooks Desktop shortcut again and choose **Open file location** so File Explorer jumps to the actual `QBW32.exe` program file.
  </Step>

  <Step title="Create the startup shortcut">
    Right-click and hold `QBW32.exe`, drag it into the `Startup` folder you opened earlier, and release the mouse. Choose **Create shortcuts here** from the context menu to add a shortcut in the Startup folder.
  </Step>

  <Step title="Restart, sign in, and confirm">
    Restart the computer, sign in to Windows with the same user, and wait for QuickBooks Desktop to start automatically. Confirm it by opening **Task Manager → Details** and checking that `QBW32.exe` is running.
  </Step>
</Steps>

With these steps, QuickBooks Desktop will relaunch after reboot once the Windows user signs in, keeping the Web Connector connection fast and reliable.


# Ensure the QuickBooks Web Connector opens after reboot and Windows sign-in
Source: https://docs.conductor.is/help/guides/ensure-web-connector-opens-at-startup

Set up the QuickBooks Web Connector to automatically launch and run in the background after reboot and Windows sign-in.

<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

The QuickBooks Web Connector is a program that comes preinstalled with QuickBooks Desktop that Conductor uses to securely sync your data. This program always runs invisibly in the background on your computer and starts automatically after reboot once you sign in to Windows. If it does not start automatically, Conductor cannot reliably sync your data.

<Info>
  The Windows computer must be powered on, online, and signed in to the user
  that runs QuickBooks Desktop and the Web Connector. For unattended reboots,
  ask your IT team to **configure that Windows user to sign in automatically**;
  otherwise, the computer can get stuck at the Windows sign-in screen.
</Info>

If you are having trouble syncing your data, please follow the steps below to ensure that the Web Connector starts automatically after reboot and Windows sign-in. If we discover it does not, we will configure Windows Task Scheduler to make the Web Connector launch more reliably.

## 1. Check if the Web Connector starts automatically after reboot and Windows sign-in

First, let's check whether the Web Connector starts automatically after the computer restarts and you sign in to Windows:

<Steps>
  <Step title="Restart your computer and sign in">
    Restart your computer and sign in to Windows with the user that runs the connection so we can check in the next step whether the Web Connector automatically starts.
  </Step>

  <Step title="Check the Task Manager for the Web Connector">
    After your computer finishes booting up and you sign in, the Web Connector should automatically start invisibly in the background. Let's check if it is running:

    1. Open the Windows Task Manager by searching for "Task Manager" in the Windows search bar (usually located in the bottom-left corner of your screen).

    2. If you see a "More details" button in the bottom-left corner of the Task Manager window, click it to expand the Task Manager.

    3. Navigate to the "Details" tab and scroll down until you see the "QBWebConnector.exe" process which should look like the screenshot below. **If you see it, you can skip the rest of this guide. Otherwise, continue to the section below.**

       <Image alt="The Web Connector running in the Task Manager" />
  </Step>
</Steps>

## 2. Add a Startup shortcut for the Web Connector to open automatically

Most Windows PCs will launch QuickBooks Web Connector after reboot once you sign in, as long as a shortcut to `QBWebConnector.exe` lives in that Windows user's `Startup` folder. Follow the steps below so QuickBooks Web Connector launches automatically after the computer restarts and the Windows user signs in, and follow our [QuickBooks Desktop guide to ensure it launches automatically after reboot and Windows sign-in](/help/guides/ensure-quickbooks-desktop-opens-at-startup).

<Steps>
  <Step title="Sign in with the Windows user that runs the connection">
    Make sure you are logged in to Windows with the user that should run QuickBooks Desktop and the Web Connector. If you are unsure which user to use, ask your IT team.
  </Step>

  <Step title="Open the Startup folder">
    Press `Win + R`, type `shell:startup`, and press **Enter**. File Explorer opens to:

    `%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup`

    Anything you place here launches automatically whenever this computer starts and this Windows user signs in.
  </Step>

  <Step title="Locate QuickBooks Web Connector">
    Click **Start**, type "Web Connector", then right-click the QuickBooks Web Connector search result and choose **Open file location**. In the window that opens, right-click the QuickBooks Web Connector shortcut again and choose **Open file location** so File Explorer jumps to the actual `QBWebConnector.exe` program file.
  </Step>

  <Step title="Create the startup shortcut">
    Right-click and hold `QBWebConnector.exe`, drag it into the `Startup` folder you opened earlier, and release the mouse. Choose **Create shortcuts here** from the context menu to add a shortcut in the Startup folder.
  </Step>

  <Step title="Restart, sign in, and confirm">
    Restart the computer, sign in to Windows with the same user, and wait for QuickBooks Web Connector to start automatically. Confirm it by opening **Task Manager → Details** and checking that `QBWebConnector.exe` is running.
  </Step>
</Steps>

## 3. (Alternative) If the shortcut doesn't work (above), create a Windows Task Scheduler task for the Web Connector to open automatically

If the Web Connector still fails to start on its own, you can instead use Windows Task Scheduler to launch it after the Windows user signs in.

<Steps>
  <Step title="Open Windows Task Scheduler">
    Open the Windows Task Scheduler by searching for "Task Scheduler" in the Windows search bar (usually located in the bottom-left corner of your screen).
  </Step>

  <Step title="Create a new task">
    In the Task Scheduler, go to the "Action" menu and select "**Create Task**".

    <Image alt="Task Scheduler create task" />
  </Step>

  <Step title="General tab">
    In the "General" tab of the new task window:

    1. Enter any name for your task, such as "Open QuickBooks Web Connector".

    2. Confirm the selected user account is the Windows user that runs QuickBooks Desktop and the Web Connector. If not, click "**Change User or Group...**" and choose that user.

    3. Check the option "**Run with highest privileges**" near the bottom to ensure the task runs with administrator rights.

    <Image alt="Task Scheduler general tab" />
  </Step>

  <Step title="Set trigger for Windows sign-in">
    Go to the "**Triggers**" tab and click "**New**".

    1. Under "Begin the task", select "**At log on**" from the dropdown menu.

    2. Select "**Specific user**" and choose the Windows user that runs the connection.

    3. Set a delay for 1 minute by checking "Delay task for" and choose "1 minute".

    Finally, click "**OK**".
  </Step>

  <Step title="Get the file path for the Web Connector">
    1. Using Windows search (usually located in the bottom-left corner of your screen), type "**Web Connector**", then right-click the QuickBooks Web Connector result (or press `Shift + F10`) and select "**Open file location**".

    2. In the folder that opens, you should see a shortcut for the Web Connector. Right-click on the Web Connector icon and select "**Properties**" from the context menu to open the Properties window.

    3. In the Properties window, as shown below, copy the file path in the "**Target**" field. You can do this by selecting the text and pressing `Ctrl + C` on your keyboard. Then click "**Cancel**" to close the Properties window.

       <Image alt="Copy the Web Connector file path" />
  </Step>

  <Step title="Set action to start QuickBooks Web Connector">
    Go back to the Task Scheduler window and go to the "Actions" tab. Click "**New**" and paste the file path you copied in the previous step into the "**Program/script**" field by right-clicking and selecting "**Paste**" from the context menu. Then click "**OK**".

    <Image alt="Task Scheduler new action" />
  </Step>

  <Step title="Configure settings to retry">
    In the "Settings" tab, check the option "**If the task fails, restart every**" and set the value to "**1 minute**" and the "**Attempt to restart up to**" value to "**3 times**". Then click "**OK**".

    <Image alt="Task Scheduler settings tab" />
  </Step>

  <Step title="Save and exit">
    Click "**OK**" to save your new task. You might be prompted to enter an administrator password at this point.
  </Step>

  <Step title="Test the task">
    Finally, test your task by restarting your computer, signing in to Windows, waiting one minute, and confirming that the QuickBooks Web Connector opened automatically using the same steps as in the first section of this guide.
  </Step>
</Steps>

By following these steps, the QuickBooks Web Connector will now relaunch after reboot once the Windows user signs in.


# Moving your QuickBooks Desktop connection to a different computer
Source: https://docs.conductor.is/help/guides/move-computers

Learn how to transfer your QuickBooks Desktop connection to a different computer for the same company file.

<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

<Steps>
  <Step title="Disable the connection on your current computer before moving!">
    Before setting up the new connection, follow [this guide to disable the existing connection](/help/guides/remove-connection) on your **current** computer.

    <Warning>
      It is essential that you complete this step first to avoid synchronization conflicts with your new computer's connection.
    </Warning>

    <Image alt="Uncheck Auto-Run on the old computer before moving the connection" />
  </Step>

  <Step title="Prepare QuickBooks Desktop on the new computer">
    1. Launch QuickBooks Desktop on your **new** computer.
    2. Open the company file you want to connect.
    3. Log in using your QuickBooks **Admin** user credentials.

    <Warning>
      Ensure you're using the exact same company file as before. The file path can be different, but it must be the same QuickBooks company file.
    </Warning>
  </Step>

  <Step title="Install the new connection">
    Return to the QuickBooks Desktop setup flow provided by the app that sent you here (if you do not know how to access this, please contact your app's support team). In the setup guide, click **"Download config file"**, and then the downloaded configuration file.

    <Info>
      QuickBooks Desktop might *not* show the permissions prompt when adding the new connection because you previously authorized access to this company file on your old computer. This is normal and doesn't indicate any problem with the setup.
    </Info>
  </Step>

  <Step title="Complete the connection setup">
    Follow the remaining steps in the setup guide. When complete, the final step of the guide will confirm that the connection is successful.
  </Step>
</Steps>

You have now successfully moved your connection to a different computer.


# Fixing a moved or renamed QuickBooks company file
Source: https://docs.conductor.is/help/guides/moved-or-renamed-company-file

Reset your Web Connector connection after moving or renaming your QuickBooks company file.

<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

If you recently moved or renamed your QuickBooks company file, **this connection may still be trying to open the file in its old location**.

Follow the steps below to reset the saved company file location (on our server) for this connection.

<Steps>
  <Step title="Open the correct company file in QuickBooks Desktop">
    1. Open QuickBooks Desktop.
    2. Open the company file from its **new** location.
    3. Leave that company file open while you complete the remaining steps.
  </Step>

  <Step title="Go back to the setup guide for this exact connection">
    Return to the original QuickBooks Desktop setup guide for this exact connection, provided by the product that sent you this guide. If you do not know how to get back there, contact the support team for that product.
  </Step>

  <Step title="Download a new configuration file">
    Click the button to **download a new configuration file**. This is the step that resets the saved company file location (on our server) for this connection.

    <Warning>
      **Only click the download button in this step.** Do not open or do anything else with the downloaded file, and do not delete the existing connection in QuickBooks Web Connector.
    </Warning>

    <Image alt="Download a new configuration file from the setup guide" />
  </Step>

  <Step title="Skip to the end of the setup flow">
    Continue through the rest of the setup flow that is already open.

    When you reach the end of the setup flow, it will trigger a new request for this connection. That request will use the company file that is currently open in QuickBooks Desktop.

    <Image alt="The end of the setup flow checking your QuickBooks Desktop connection" />

    If the request succeeds, this issue is fixed and this connection will now remember the new file location.
  </Step>
</Steps>

That's it. The connection should now keep using your QuickBooks company file at its new location.


# Connecting multiple QuickBooks company files on one computer
Source: https://docs.conductor.is/help/guides/multiple-connections-one-computer

Step-by-step instructions and best practices for connecting several QuickBooks Desktop company files that live on the same Windows machine.

<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

Most QuickBooks Desktop users work in a single **company file**, the local file that holds all of a company’s accounting data. If you work with multiple company files on the **same** Windows computer, you can still sync each file with your QuickBooks Desktop integration. The key is that **every company file gets its own Web Connector connection and QuickBooks Desktop must stay open with *no* file loaded**.

This guide explains exactly how to set that up, why the “blank” QuickBooks window is required, and what performance trade-offs to expect.

## 1. Create a Web Connector connection for **each** company file

You will run your integration’s usual QuickBooks Desktop setup flow once per file.

<Steps>
  <Step title="Open the first company file in QuickBooks Desktop">
    Start QuickBooks Desktop and **open the company file you would like to
    connect first**. Sign in as the **Admin** user.
  </Step>

  <Step title="Run the QuickBooks Desktop setup flow for your integration">
    Follow the on-screen steps exactly as you would for a single-file
    installation. When you finish, a new row appears inside the QuickBooks Web
    Connector that is linked to *only* this company file.
  </Step>

  <Step title="Close the first file, open the next company file, and repeat">
    Close the first file, open the next company file, and rerun the setup flow.
    Keep repeating until every company file on the machine has its own
    connection.
  </Step>
</Steps>

When you are done the Web Connector will look similar to the screenshot below, one connection per company file:

<Frame>
  <img
    alt="QuickBooks Web Connector with multiple
connections"
  />
</Frame>

## 2. ❗ Keep QuickBooks running **without** any company file loaded

<Warning>
  **QuickBooks Desktop must stay open with no company file** whenever your
  integration needs to sync data. This lets the Web Connector open the correct
  file on-demand, complete the request, and then close it again.
</Warning>

#### How to return QuickBooks to the No Company Open” state

1. Open **QuickBooks Desktop**.
2. Go to the "**File**" menu.
3. Select "**Close Company**".

<Accordion title="Why is this blank QuickBooks window necessary?">
  The [QuickBooks Web Connector](/help/faq/end-user-faq#what-is-the-quickbooks-desktop-web-connector) has certain limitations when working with multiple company files on a single computer:

  1. The Web Connector can only talk to one company file at a time.
  2. It only talks to the file that is currently open in QuickBooks Desktop.
  3. It will *not* force QuickBooks to switch files if another user already has a different file open.

  However, if QuickBooks Desktop itself is open but *no* company file is loaded, the Web Connector is allowed to:

  1. Open the file that matches the incoming request.
  2. Process the queued operations.
  3. Close that file again, returning QuickBooks to the blank state.

  That simple workflow makes it possible to serve multiple company files from one computer without disrupting anyone’s work.
</Accordion>

<Frame>
  <img
    alt="QuickBooks Desktop without any company file
loaded"
  />
</Frame>

## 3. Best practices for a reliable multi-file setup

* **Use a dedicated Windows server:** Most users managing multiple company files already have a Windows server in their office dedicated to managing their QuickBooks Desktop company files. **Set up the Web Connector connections on this server and keep QuickBooks running there instead of on someone’s everyday workstation.** That prevents a user from accidentally opening the wrong file and blocking syncs.

* **Launch QuickBooks Desktop after reboot and Windows sign-in.** Add QuickBooks to the Windows user's Startup programs, and ask your IT team to **configure that Windows user to sign in automatically** for unattended reboots. This ensures QuickBooks Desktop opens after the computer/server restarts, which eliminates the extra delay of QuickBooks Desktop having to launch every time you sync.

<Accordion title="Technical performance considerations">
  - **Increased request time:** Keeping QuickBooks Desktop open without a company file loaded adds 20-40 seconds to each request due to the time it takes to load a company file. However, when your integration sends numerous requests for the same company file in quick succession, the Web Connector will resolve the sequence rapidly because the company file is kept open between these requests.

  - **Serial processing:** The Web Connector can only process requests for one company file at a time because it can only communicate with QuickBooks Desktop when one company file is loaded. Therefore, we manage your requests in a queue, ensuring that the Web Connector processes them serially, opening and closing the appropriate company file for each request.
</Accordion>

## 4. Troubleshooting tips

* If a sync fails with an error about “the wrong company file is open”, switch QuickBooks back to the **No Company Open** window and try again.

* Make sure only one copy of QuickBooks Desktop is installed. Multiple versions can confuse the Web Connector. See our [guide on ensuring only one version of QuickBooks Desktop is installed](/help/guides/ensure-only-one-version-installed).

* If you receive an error that says "Your QuickBooks Desktop connection is not active. It was last active...", see our [guide on for troubleshooting this error](/help/connection-errors/connection-not-active).


# Removing a QuickBooks Desktop connection
Source: https://docs.conductor.is/help/guides/remove-connection

Learn how to remove a QuickBooks Desktop connection from the QuickBooks Web Connector.

<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

Follow the steps below to remove a QuickBooks Desktop connection from the QuickBooks Web Connector.

<Steps>
  <Step title="Open QuickBooks Desktop with the correct company file">
    1. Open QuickBooks Desktop.
    2. Open the company file associated with the connection you want to remove.
  </Step>

  <Step title="Open the QuickBooks Web Connector">
    In the top menu bar of QuickBooks Desktop, click "**File**" → "**App Management**" → "**Update Web Services**" to launch the QuickBooks Web Connector.
  </Step>

  <Step title="Remove the connection">
    In the Web Connector window that opens, click the "**Remove**" button next to the connection you want to disconnect.

    When the confirmation dialog appears, click "**Yes**" to confirm the removal.

    <Note>
      If for some reason you are unable to successfully remove the connection, you can alternatively just uncheck the "Auto-Run" box. This will also disable the connection so it won't run automatically.
    </Note>

    <Image alt="Click Remove to delete the Web Connector connection" />
  </Step>

  <Step title="Close the QuickBooks Web Connector">
    Finally, click "**Hide**" in the bottom-right corner of the window to close the Web Connector.

    <Image alt="Click Hide to close the QuickBooks Web Connector" />
  </Step>
</Steps>

The QuickBooks Desktop connection will no longer run on your computer.


# Repairing data corruption in QuickBooks Desktop
Source: https://docs.conductor.is/help/guides/repair-data-corruption

Learn how to use QuickBooks Desktop's built-in utilities to fix and identify data issues in your company file.

<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

Over time, your QuickBooks Desktop company file may accumulate data issues that can lead to errors like the following when you try to sync data:

```
An unknown error occurred inside QuickBooks Desktop when processing
the request.
```

Internally, QuickBooks Desktop is reporting error code `1000`, the catch-all **"internal error while processing the request"** response from the QuickBooks SDK. If other requests continue to succeed, this usually points to a data issue in a specific record or list table, not a connection issue.

<Note>
  Error code `1000` is generic and does **not** identify the exact root cause by
  itself. In practice, if only one record type fails (for example, Customer
  while most other syncs work), the issue is often isolated to a damaged list
  record, including blank or malformed name-list entries.
</Note>

QuickBooks ships with a number of utilities that can repair these issues. Work through the list below in order – if the sync error is still present after a given step, move on to the next.

## Troubleshooting steps

<Steps>
  <Step title="Run the Rebuild Data utility">
    Use the **Rebuild Data** utility to fix data issues in your company file:

    1. Open QuickBooks Desktop.

    2. Go to "**File**" → "**Utilities**" → "**Rebuild Data**".

       <Image alt="Accessing the Rebuild Data utility in QuickBooks Desktop" />

    3. When prompted to back up your company file, click "**OK**". QuickBooks will ask you to create a backup before rebuilding to prevent data loss.

    4. Choose a location to save the backup, then click "**OK**".

    5. QuickBooks will begin rebuilding your data. This may take some time, depending on the size of your company file.

       <Image alt="Rebuilding your data" />

    6. When the rebuild is complete, click "**OK**" when you see the message "Rebuild has completed".
  </Step>

  <Step title="Run & review the Verify Data utility">
    Next, use **Verify Data** to confirm the rebuild worked:

    1. Go to "**File**" → "**Utilities**" → "**Verify Data**".

       <Image alt="Accessing the Verify Data utility in QuickBooks Desktop" />

    2. QuickBooks will scan your company file (this may take a few minutes).

       <Image alt="Verifying your data" />

    3. When the scan finishes, QuickBooks displays one of three messages:

       * **"QuickBooks detected no problem with your data"** – Your file is healthy. Try the sync again.
       * **"Your data has lost integrity"** – Data issues still exist. Repeat the rebuild process once more before proceeding.
       * A specific error message or code – Note the details; they may be helpful if you need to contact support later.

    If the sync error re-appears after Verify Data reports no problem, continue to the next step.
  </Step>

  <Step title="Use QBWin.log to find warnings and fix the underlying records">
    1. Find and open `QBWin.log` (generated by the Verify Data step above):
       * In QuickBooks Desktop, press **F2** (or **Ctrl+1**).
       * Press **F3** (or **Ctrl+2**) to open **Tech Help**.
       * Open the **Open File** tab, select `QBWin.log`, then click **Open File**.
       * If this option is unavailable, open File Explorer and go to `%localappdata%\Intuit\QuickBooks\log\`, then open the newest version folder and `QBWin.log`.
    2. In `QBWin.log`, find warnings from the most recent Verify Data run:
       * Look near the bottom of the file first.
       * Use **Ctrl+F** to search for terms like `LVL_ERROR`, `WARN`, `Verify Name List`, `Namelist-Rebuild`, `duplicate`, `invalid`, or `link`.
    3. For each warning you find, apply the matching fix:
       * **List warnings** (Customer, Vendor, Employee, Item, Account):
         * Open the matching list, enable inactive entries, and run "**View**" → "**Re-sort List**".
         * **Duplicate name:** rename one of the duplicates to a unique temporary name, save, then merge or keep separate as needed.
         * **Blank or malformed entry:** edit the record to a valid unique name and save.
         * **Record won’t open or save:** create a replacement record, then merge into it when possible or make the damaged record inactive.
       * **Transaction warnings** (Invoice, Bill, Sales Receipt, Payment, etc.):
         * Open each flagged transaction.
         * **Broken link or date:** change the date, save, then change it back and save again.
         * **Out-of-balance totals:** add a temporary line item, save, remove it, and save again.
         * If syncing that transaction still returns the same corruption error, recreate it.
         * Void or remove the damaged original only after your accountant confirms.
    4. Run **Verify Data** again, then retry the sync.

    If the sync error still appears, repeat this step for any new warnings. If the error still does not clear, continue to the next step.
  </Step>

  <Step title="Run QuickBooks File Doctor">
    **QuickBooks File Doctor** performs a deeper database repair than Verify Data.

    1. Close QuickBooks Desktop.
    2. Open the **QuickBooks Tool Hub** (download it from Intuit if you don't already have it).
    3. Select "**Company File Issues**" → "**Run QuickBooks File Doctor**".
    4. Pick your company file (`*.qbw`) and click "**Check your file**".
    5. Wait for File Doctor to finish (large files can take quite a while), then reopen QuickBooks and try the sync.

    If the error is still present, move on to the next step.
  </Step>

  <Step title="Condense Data to rebuild indexes">
    Condensing with the **Keep all transactions** option rewrites and re-indexes every internal table without deleting any history. A fresh copy is created first, so your original file remains untouched.

    1. In QuickBooks Desktop, go to "**File**" → "**Utilities**" → "**Condense Data**".
    2. When prompted, choose "**Keep all transactions, but remove the audit trail**" (or the equivalent option for your version). This ensures no data is lost – only the index is rebuilt.
    3. Follow the on-screen prompts to let QuickBooks create the condensed copy (`*Condensed.qbw`).
    4. Open the condensed file and attempt the sync again.

    If the error persists, continue below.
  </Step>

  <Step title="Create and restore a portable copy">
    Restoring a **portable copy** forces QuickBooks to rewrite every record in the database, often flushing out corruption that other tools miss.

    1. Open the problematic company file.
    2. Choose "**File**" → "**Create Copy**" → "**Portable company file (.qbm)**" and save it to a convenient location.
    3. After the portable copy is created, choose "**File**" → "**Open or Restore Company**" → "**Restore a portable file**" and follow the prompts to create a new working copy (`*.qbw`).
    4. Open the restored copy and test the sync.

    If the same error still occurs, proceed to the final step.
  </Step>

  <Step title="Send the file to Intuit Data Services">
    If none of the steps above resolve the issue, the only remaining option is to engage **Intuit Data Services**. They have proprietary tools that can repair physical damage inside low-level tables in QuickBooks company files.

    1. Contact Intuit support and request a Data Services ticket.
    2. Provide the representative with the error details and the steps you've already tried (Rebuild, Verify, File Doctor, Condense, portable copy).
    3. Intuit will give you secure upload instructions and an estimated turnaround time.
  </Step>
</Steps>

Hopefully one of the steps above resolves the data-corruption error so you can continue syncing without interruption.


# Connecting to QuickBooks Desktop on Rightworks
Source: https://docs.conductor.is/help/guides/rightworks

How to set up the QuickBooks Web Connector when using Rightworks (formerly Right Networks) to host QuickBooks Desktop.

<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

Rightworks (formerly Right Networks) hosts QuickBooks Desktop in the cloud, allowing you to access it remotely. While we fully support connecting to Rightworks, there is **one important limitation you must remember**:

<Warning>
  **Important:** To sync data with your QuickBooks Desktop, you must be actively
  connected to your Rightworks remote desktop session with QuickBooks Desktop
  open. This is because Rightworks stops all background programs when you
  disconnect from your session.
</Warning>

## Step 1: Verify or install the QuickBooks Web Connector

Connecting to QuickBooks Desktop on Rightworks requires the QuickBooks Web Connector to be installed on your Rightworks remote desktop. The Web Connector is a small program that enables secure communication between QuickBooks Desktop and external applications. Let's first verify that it's installed on your Rightworks computer.

<Steps>
  <Step title="Check if the Web Connector is installed">
    1. Connect to your Rightworks remote desktop.
    2. Click the Windows Start menu.
    3. Type "Web Connector".
    4. Look for "QuickBooks Web Connector" in the search results.

    If you find it, skip to the next section of this guide. If not, continue with the installation step below.
  </Step>

  <Step title="Install the Web Connector">
    If you don't find the Web Connector in your Start menu, you can install it from the Rightworks Dashboard:

    1. Log in to your [Rightworks Dashboard](https://login.rightworks.com).
    2. Select "My Apps" in the left sidebar.
    3. In the search bar, type "Web Connector".
    4. Locate "QuickBooks Web Connector" in the results.
    5. Click the "+" button next to it to add it to your account.
    6. Wait 5-10 minutes for the installation to complete.
    7. Connect to your Rightworks remote desktop and verify the Web Connector is now installed using the steps above.

    <Image alt="Ensure the Web Connector is installed in the Rightworks dashboard" />
  </Step>
</Steps>

## Step 2: Configure the Web Connector to start automatically

Now that we've confirmed the Web Connector is installed, we must ensure both QuickBooks Desktop and the Web Connector start automatically when you log into Rightworks.

<Steps>
  <Step title="Contact Rightworks support">
    You must contact Rightworks support to configure the Web Connector to start automatically. This cannot be done on your own. Visit [Rightworks Support](https://helpdesk.rightnetworks.com) to begin.

    Rightworks support is available Monday - Friday, 8:00 AM - 8:00 PM ET.
  </Step>

  <Step title="Start a support chat">
    On the Rightworks support page, click the yellow "Chat" bubble in the bottom-right corner to start a live chat (there is no email or phone support available for this task).

    <Image alt="Rightworks support chat bubble" />
  </Step>

  <Step title="Provide your account information">
    In the chat window, **provide the full name and email address** associated with your Rightworks account. This is typically the information for ***the person at your company who set up or owns your Rightworks account***.

    <Image alt="Rightworks support chat name and email" />
  </Step>

  <Step title="Request to add the Web Connector to your startup programs">
    **Copy and paste this exact message** to the Rightworks support agent:

    ```
    Hello! Could you please configure our Rightworks account to ensure
    that BOTH of the following applications are added to our startup
    items and automatically launch in the background every time we sign
    into our Rightworks instance?

    1. QuickBooks Web Connector
    2. QuickBooks Desktop

    We need BOTH applications to launch automatically.

    Please apply this setting for ALL USERS on our Rightworks account.
    ```

    <Image alt="Rightworks support chat startup request" />
  </Step>

  <Step title="Confirm the changes with the support agent">
    1. Wait for the support agent to confirm that the Web Connector has been added to your startup programs.
    2. Sign out and sign back into your Rightworks desktop session for the changes to take effect.
  </Step>
</Steps>

That's it! From now on, the QuickBooks Web Connector will automatically start every time you connect to Rightworks, ensuring a stable connection to your QuickBooks Desktop company file.


# Ensuring QuickBooks Desktop and the Web Connector run with the same permissions
Source: https://docs.conductor.is/help/guides/run-as-administrator-disabled



<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

QuickBooks Desktop and the QuickBooks Web Connector **must run with the same Windows permission level**. The normal, recommended configuration is for *neither* program to be launched “as administrator”.

If you arrived at this guide because you are troubleshooting the [**Web Connector cannot connect to QuickBooks Desktop**](/help/connection-errors/cannot-connect-to-quickbooks), a mismatch in permission levels is a common cause: one program is running with elevated permissions while the other is not.

Follow the steps below to ensure the **“Run this program as an administrator”** option is ***unchecked*** for both programs.

<Steps>
  <Step title="Open the QuickBooks Desktop shortcut location">
    1. Click the Windows **Start** button and type "**QuickBooks Desktop**" in the search box.
    2. In the search results, **right-click** the QuickBooks Desktop app and select **Open file location**. This opens the folder that contains the shortcut Windows uses to launch QuickBooks Desktop.

    <Image alt="File Explorer window showing shortcuts for both QuickBooks Desktop and QuickBooks Web Connector" />
  </Step>

  <Step title="Disable ‘Run as administrator’ for QuickBooks Desktop">
    1. In the folder that appears, **right-click** the QuickBooks Desktop shortcut and choose **Properties**.
    2. Select the **Compatibility** tab.
    3. Near the bottom of the window, **ensure the box for “Run this program as an administrator” is *unchecked***.
    4. Click **Apply**, then **OK** to save the change.

    <Image alt="Properties window → Compatibility tab showing ‘Run this program as an administrator’ unchecked" />
  </Step>

  <Step title="Open the QuickBooks Web Connector shortcut location">
    1. Click the Windows **Start** button and type "**Web Connector**" in the search box.
    2. In the search results, **right-click** the QuickBooks Web Connector app and select **Open file location**.

    <Info>
      This will likely be the same folder as the QuickBooks Desktop shortcut from the previous step.
    </Info>
  </Step>

  <Step title="Disable ‘Run as administrator’ for the Web Connector">
    Repeat the same steps you performed for QuickBooks Desktop:

    1. **Right-click** the QuickBooks Web Connector shortcut and choose **Properties**.
    2. Select the **Compatibility** tab.
    3. **Ensure “Run this program as an administrator” is *unchecked***.
    4. Click **Apply**, then **OK**.
  </Step>

  <Step title="Close QuickBooks Desktop and the Web Connector">
    1. **Exit QuickBooks Desktop** by clicking **File → Exit** to close the program completely.

    2. **Exit the Web Connector** - either approach below will work:
       * In the Web Connector window, click **Exit**. If a confirmation dialog appears, click **OK**.
       * Or, open **Task Manager**, locate **QBWebConnector.exe**, and click **End task**.
  </Step>

  <Step title="REQUIRED: Recreate the Web Connector log file">
    After closing QuickBooks Desktop and the Web Connector, **you must [complete this guide](/help/connection-errors/there-was-a-problem-with-the-log-file#solution%3A-delete-the-web-connector-log-file) to delete the Web Connector log file** and auto-generate a new one. This resolves a permissions-related issue that occurs after changing permission settings.
  </Step>

  <Step title="Open QuickBooks Desktop and the Web Connector again">
    After deleting the log file, re-open QuickBooks Desktop and the Web Connector:

    1. Launch QuickBooks Desktop as you would normally.
    2. In QuickBooks Desktop, click **File → App Management → Update Web Services** to open the Web Connector.
  </Step>

  <Step title="Stop the UAC pop-ups">
    Finally, we recommend [completing this guide](/help/connection-errors/do-you-want-to-allow-this-app-to-make-changes-to-your-device) to stop the **“Do you want to allow this app to make changes to your device?”** prompts that can interrupt syncing. These pop-ups may start appearing after the recent permission change, which is why we recommend completing this step last.
  </Step>
</Steps>

Your QuickBooks Desktop and Web Connector are now configured with the **same** permission level. If you are still encountering connection errors, return to the [main troubleshooting guide](/help/connection-errors/cannot-connect-to-quickbooks) and continue with the remaining steps.


# Upgrading the QuickBooks Web Connector
Source: https://docs.conductor.is/help/guides/upgrade-web-connector

Learn how to upgrade the QuickBooks Web Connector to ensure compatibility with Conductor.

<Info>
  This guide is provided by Conductor, the service that powers the QuickBooks
  Desktop integration for many business tools, including the one that sent you
  here.
</Info>

The QuickBooks Web Connector is a vital component that comes pre-installed with QuickBooks Desktop. Conductor uses this tool to securely sync your data. To use Conductor, you must have at least **version 2.1.0.30** of the QuickBooks Web Connector installed. In our experience, fewer than 1% of users have an older version. If you're using an outdated version, you might see an error message like this:

<Image alt="Error message indicating an outdated QuickBooks Web Connector version" />

Follow these steps to upgrade the QuickBooks Web Connector to the latest version:

<Steps>
  <Step title="Close QuickBooks Desktop">
    Ensure that QuickBooks Desktop is completely closed before proceeding.
  </Step>

  <Step title="Terminate the QuickBooks Web Connector">
    Close the QuickBooks Web Connector process to ensure it's not running in the background:

    1. Open the Windows Task Manager by pressing `Ctrl + Shift + Esc` or by searching for "Task Manager" in the Windows search bar.
    2. In the Task Manager, locate "QuickBooks Web Connector". Right-click it and select "**End Task**". If you don't see it, click "**More details**" at the bottom of the Task Manager window to view all running processes.
    3. Close the Task Manager.
  </Step>

  <Step title="Delete the current QuickBooks Web Connector installation">
    To upgrade, you must first delete the current installation:

    1. Open File Explorer and navigate to `C:\Program Files (x86)\Common Files\Intuit\QuickBooks`.
    2. Delete the folder named `QBWebConnector` and, if present, the folder named `QBWebConnector3.0`.
  </Step>

  <Step title="Download the latest QuickBooks Web Connector">
    Visit Intuit's [official download page](https://developer.intuit.com/app/developer/qbdesktop/docs/get-started/get-started-with-quickbooks-web-connector#download-and-install-the-quickbooks-web-connector) to get the QuickBooks Web Connector.

    * If you're using **QuickBooks Desktop 2015 or newer**, download the most recent version of the Web Connector.
    * If you're using **QuickBooks Desktop 2014 or older**, download Web Connector **version 2.1.0.30** instead. Per Intuit, newer Web Connector versions do not support QuickBooks Desktop 2014 and older.

    <Image alt="QuickBooks Web Connector download page on Intuit's website" />
  </Step>

  <Step title="Install the QuickBooks Web Connector">
    Once the download is complete, open the downloaded file and follow the installation wizard's instructions.
  </Step>

  <Step title="Relaunch the QuickBooks Web Connector">
    1. Open QuickBooks Desktop.
    2. In the top menu bar, click "**File**" → "**App Management**" → "**Update Web Services**" to launch the QuickBooks Web Connector.
    3. In the window that appears, click "**Hide**" in the bottom-right corner to keep the Web Connector running in the background.
  </Step>
</Steps>

You have now successfully upgraded to the latest version of the QuickBooks Web Connector and can proceed with setting up your connection to Conductor.


# Get a free QuickBooks Desktop developer license
Source: https://docs.conductor.is/qbd/dev-license

Obtain a free Not-For-Resale (NFR) license to use QuickBooks Desktop indefinitely for development and testing with Conductor. Takes 2 minutes.

To develop and test integrations with Conductor, you need your own QuickBooks Desktop instance. If you don't have an existing instance, you can [install the QuickBooks Desktop free trial](/qbd/test-instance). The trial includes all features of the full version but expires after 30 days. To continue using QuickBooks Desktop for development beyond this period, you'll need a free Not-For-Resale (NFR) license. Follow these steps to obtain one:

<Steps>
  <Step title="Install QuickBooks Desktop trial">
    If you haven't already, follow our guide for [installing the QuickBooks Desktop free trial](/qbd/test-instance).
  </Step>

  <Step title="Create an Intuit developer account">
    [Sign up for an Intuit developer account](https://accounts.intuit.com/app/sign-in?start_screen_hint=SignUp) if you don't have one. This account is required to request the NFR license.
  </Step>

  <Step title="Create a support ticket">
    1. Go to [Intuit's developer support page](https://help.developer.intuit.com/s/contactsupport).
    2. Choose the following options:
       * **Product**: QuickBooks Desktop
       * **Category**: NFR License
    3. Click "Next" to proceed.

    <Frame>
      <img
        alt="Support ticket creation page with 'QuickBooks Desktop' selected as the
Product and 'NFR License' selected as the
Category"
      />
    </Frame>
  </Step>

  <Step title="Provide version details">
    On the next page, specify:

    * **Product Year**: 2024 (or the latest available)
    * **Product Country**: US
    * **Product Version**: QuickBooks Enterprise v24 (or the latest version)
      <Info>
        Conductor works identically with all QuickBooks Desktop versions and editions. We recommend the Enterprise edition for development to avoid potential limitations in user count and dataset size.
      </Info>
    * **Enable Advanced Inventory?** Yes (Allows testing with the full feature set)

    After filling out these details, click "Create Support Ticket".

    <Frame>
      <img alt="Support ticket creation page with the specified options selected" />
    </Frame>
  </Step>

  <Step title="Wait for the license key via email">
    After you click "Create Support Ticket", Intuit will send you a confirmation email. Intuit will send you another email within 24-48 hours with your license key.
  </Step>

  <Step title="Activate your license once you receive it">
    Once you have the license key:

    1. Open your existing QuickBooks Desktop trial installation.
    2. Go to **Help → Manage My License → Change My License Number**.
    3. Enter the NFR license key when prompted.
    4. Follow any additional on-screen instructions to complete activation.

    Your QuickBooks Desktop is now licensed for indefinite use in development and testing with Conductor.
  </Step>
</Steps>


# A developer's intro to QuickBooks Desktop
Source: https://docs.conductor.is/qbd/developer-intro

The mental model every SaaS team should have before building a QuickBooks Desktop integration.

If you have only built against cloud APIs, QuickBooks Desktop can feel confusing at first. The biggest mistake developers make is assuming it behaves like an always-on SaaS integration. It does not. QuickBooks Desktop is Windows software attached to a specific machine and a specific company file.

This page gives the mental model we wish every developer had before building a QBD integration.

## 1. QuickBooks Desktop still matters

One widely cited industry estimate put QuickBooks Desktop at about 17% of U.S. SMBs that use accounting software. Whatever exact study or year you use, the practical takeaway is the same: QuickBooks Desktop still represents a meaningful share of the market.

* It is also not being discontinued in any practical sense. In Intuit's fiscal year ended July 31, 2025, its Desktop Ecosystem generated [**\$2.775B in revenue**](https://investors.intuit.com/sec-filings/all-sec-filings/content/0000896878-25-000035/0000896878-25-000035.pdf), up 5% year over year.

It is especially common in lower-tech and operationally complex industries such as construction, healthcare, manufacturing, logistics and trucking, professional services, HVAC and plumbing, associations, government-adjacent organizations, and religious organizations.

For many vertical SaaS companies, supporting QBD eventually stops being a niche request and becomes a prerequisite for closing certain customers. Teams often try to defer it because the product feels old. Then the same request keeps showing up in sales calls until it becomes unavoidable.

<Info>
  Treat QuickBooks Desktop less like a legacy edge case and more like a real
  capability requirement if you sell into operationally complex SMBs.
</Info>

## 2. QuickBooks Desktop is on-prem software, not a cloud API

A QuickBooks Desktop "company file" is the local datastore for a business's accounting data. If a customer manages multiple legal entities, each entity usually has its own separate company file. This is a core concept in the QBD world, and end-users are very familiar with it.

The most common real-world setup is not "QuickBooks on somebody's laptop." It is a Windows machine that effectively acts as the accounting server for the business. Sometimes that is an actual office server. Sometimes it is a hosted Windows environment that the customer reaches through remote desktop. In many cases, an outside IT firm set this up for them years ago. In both cases, the important point is the same: the accounting data lives on a particular Windows machine.

That has two implications for developers:

* Your integration is talking to a real machine, in real time.
* QuickBooks Desktop processes requests serially, so you should think in terms of queueing and sync flows, not unlimited parallel API throughput.

## 3. Conductor connects through the built-in QuickBooks Web Connector

Conductor uses the QuickBooks Web Connector, the Windows program that ships with QuickBooks Desktop itself. It runs on the Windows machine and polls Conductor for new work, which is what makes Internet-based access to QBD possible.

We intentionally build on the built-in Web Connector instead of requiring a separate Windows agent. Some vendors ship a custom Windows program instead. We do not, because a meaningful minority of QBD users run in hosted QuickBooks environments such as [Rightworks](/help/guides/rightworks), where installing extra third-party software can be difficult or impossible. Building on the Web Connector is what lets Conductor reach the full QBD market instead of only the subset of users with unrestricted Windows admin access.

<Tip>
  Using the Web Connector means Conductor can work anywhere QuickBooks Desktop
  itself is allowed to run, which is the compatibility constraint that matters
  most in practice.
</Tip>

## 4. How a Conductor connection gets installed

With Conductor, each end-user goes through an [auth flow](/usage/auth-flow) where they download a unique Web Connector config file and open it on the Windows machine that should own the connection. You can see an example in this [auth flow demo](https://connect.conductor.is/qbd/demo).

That config file creates a connection between that machine and Conductor for that end-user's company file. Once configured, the Web Connector normally runs in the background and restarts after reboot once the Windows user signs in. As long as that machine is powered on, online, and signed in to the Windows user that runs the Web Connector, Conductor can connect to it.

Our auth flow explicitly recommends setting the connection up on the always-on Windows server or hosted Windows instance that already hosts the company file, not on an employee's day-to-day workstation. Most customers follow that recommendation. When they do, the connection is materially more reliable because the machine stays on, the Windows session is predictable, QuickBooks stays in a predictable state, and nobody is casually disrupting the sync environment.

## 5. Expect connection issues and design for them

Connection issues are not constant. A healthy QBD setup can run reliably for long stretches. But because this is on-prem Windows software, you should expect environment-driven failures often enough that your product needs to handle them well.

Common examples include:

* The machine is off because the connection was installed on a personal workstation.
* The wrong company file is open.
* Multiple company files are open.
* A pop-up dialog or modal window in QuickBooks is blocking automation, for example an Intuit sign-in prompt.
* The same QuickBooks user is already signed in on another computer. Our auth flow recommends using a dedicated QBD user for the connection, but some customers do not want to dedicate the extra seat or simply do not follow the guidance.
* A QuickBooks update or migration reset the integration permissions.
* Another version of QuickBooks Desktop was installed on the same machine.

Conductor is built around this reality. For these cases, and many more, our API returns a primary `message` and a user-friendly `error.userFacingMessage`. Prefer `error.userFacingMessage` for end-user UI, and use `error.message` for logs, developer/admin surfaces, and test projects. See [error handling](/usage/error-handling) for the full model.

Native QuickBooks errors are often vague or cryptic. Clear error messaging is not a nice-to-have in a QBD integration. It is part of the product.

<Note>
  QuickBooks Desktop users are generally accustomed to dealing with operational
  quirks in their accounting stack. A sync error with a clear next step is
  normal. It is not a product failure.
</Note>

Part of the reason many vertical SaaS products exist is to modernize industries that still depend on older operational software. QuickBooks Desktop is part of that reality. If your product serves the long tail of the economy, dealing gracefully with QBD quirks is usually part of the job, not an anomaly.

## 6. Prefer user-triggered syncs over invisible background automation

SaaS teams integrating with QBD usually face an early product decision: should your systems try to sync automatically in the background, or should the user explicitly trigger syncs?

We strongly recommend a user-triggered flow, such as "Sync with QuickBooks Desktop" or "Export to QuickBooks Desktop." This is how all of our largest customers structure their integrations, including Ramp.

The reason is simple: when a connection issue does happen, the person who can fix it is almost always the end-user on the QuickBooks machine. If the user triggered the sync, they are already present and can resolve the issue immediately. That is much better than silently queueing work in the background, failing later, and surfacing a confusing async problem after the moment has passed.

This approach also matches user expectations. Many QBD users prefer having clear control over when their accounting system is modified.

If you want a secondary safety net, some teams add a low-frequency catch-up job in the background. That can be useful. It should supplement the main workflow, not define it.

## 7. A heartbeat is not the same as a healthy connection

One subtle but important point: a resumed Web Connector heartbeat does not guarantee that the next sync will succeed.

A heartbeat only tells you that the connector is checking in again. It does not tell you that QuickBooks is fully ready to process requests end to end. The Web Connector can be alive while QuickBooks is still blocked by the wrong company file, a modal dialog, a conflicting user session, a permissions issue, or startup state.

That is why we do not recommend building your core product workflow around heartbeat-based webhooks. If you need a readiness signal, use the [Health Check API](/api-ref/qbd/utilities/health-check), which performs a real end-to-end request.

## Practical recommendations

* Put a clear sync button in your UI.
* Show the last successful sync time.
* Prefer displaying `error.userFacingMessage` directly to the end-user.
* Use the [Health Check API](/api-ref/qbd/utilities/health-check) for connection status indicators or preflight checks.
* Recommend a dedicated QuickBooks user with full access for the connection. See [this guide](/help/guides/create-dedicated-qbd-user).
* Recommend installing the connection on the Windows machine that hosts the company file, and keeping that machine powered on, online, and signed in.
* Recommend keeping QuickBooks open whenever possible. See [this guide](/help/guides/ensure-quickbooks-desktop-opens-at-startup).

## Related docs

* [Connect your users via the auth flow](/usage/auth-flow)
* [Error handling](/usage/error-handling)
* [QuickBooks Desktop health check](/api-ref/qbd/utilities/health-check)
* [Connecting to QuickBooks Desktop on Rightworks](/help/guides/rightworks)
* [Changing a connection's QuickBooks Desktop user](/help/guides/change-qbd-user)
* [Connecting multiple QuickBooks company files on one computer](/help/guides/multiple-connections-one-computer)


# Mapping your app's objects to QuickBooks Desktop
Source: https://docs.conductor.is/qbd/mapping-objects

How to handle syncing your application's data objects with QuickBooks Desktop objects.

Most complex QuickBooks Desktop (QBD) object types, such as [invoices](/api-ref/qbd/invoices) and [sales receipts](/api-ref/qbd/sales-receipts), interact with various related objects. For instance, an invoice may contain multiple line items, with each item linked to a specific QBD inventory item via an ID. **When creating these objects in QBD, you must ensure that all related objects are correctly linked.**

For effective integration, depending on the data type of these related objects and you application requirements, you can either:

1. **Create new QBD objects** and store their IDs in your application's database for future reference.
2. **Map existing QBD objects to corresponding objects in your application** through manual configurations made by users within your application's UI. Consider the following example for inventory items:
   1. Fetch all existing QBD inventory items using Conductor's API (e.g., `await conductor.qbd.inventoryItems.list()`).
   2. Display these QBD items alongside items from your application in the UI.
   3. Users can then specify mappings, or opt to create new items in QBD.
   4. Record the corresponding QBD item ID in your application's database (e.g., add a **`qbd_item_id`** column to the **`items`** table).

<Tip>
  **Important**: The need to map or create objects may vary based on object type
  (e.g., some users might prefer mapping existing QBD objects for certain types
  while creating new ones for others). Regardless, it is crucial for your
  application to store these QBD IDs in its database for all future
  interactions, ensuring no duplicate objects are created.
</Tip>


# Create a QuickBooks Desktop test instance
Source: https://docs.conductor.is/qbd/test-instance

Create your own QuickBooks Desktop test instance with an AWS WorkSpace.

To develop and test integrations with Conductor, you need your own QuickBooks Desktop instance to send and receive data. This guide shows you how to set up a QuickBooks Desktop test environment by creating a virtual Windows instance and installing the QuickBooks Desktop free trial. Once set up, you can connect to this QuickBooks Desktop test instance from your local development environment via Conductor.

<Warning>
  **Also important**: This guide may be outdated as AWS WorkSpaces.
  Alternatively, check out [this
  guide](https://chatgpt.com/share/67813957-e52c-8003-8776-be82b725215f) or
  asking an LLM (like ChatGPT) for different approaches to setting up a Windows
  instance with QuickBooks Desktop installed.
</Warning>

## 1. Set up a virtual Windows environment

<AccordionGroup>
  <Accordion title="1. Create an Amazon Workspace">
    Create a new Amazon WorkSpace at [https://us-west-2.console.aws.amazon.com/workspaces/v2/workspaces](https://us-west-2.console.aws.amazon.com/workspaces/v2/workspaces).

    <img />
  </Accordion>

  <Accordion title="2. Create a new Directory">
    Either select the directory in the list or click `Create a new Directory` if there are none:

    <img />
  </Accordion>

  <Accordion title="3. Add yourself as a user">
    Add yourself as a user with your email address:

    <img />
  </Accordion>

  <Accordion title="4. Select the bundle">
    Select the bundle `Standard with Windows 10 (Server 2019 based) (PCoIP)`:

    <img />
  </Accordion>

  <Accordion title="5. Select AlwaysOn">
    Select `AlwaysOn`:

    <img />
  </Accordion>

  <Accordion title="6. Skip the Customization step">
    Skip the Customization step, then review the final page and click the button `Create` in the bottom-right corner:

    <img />
  </Accordion>

  <Accordion title="7. Set a password">
    After 20-30 minutes, look for an email from Amazon WorkSpaces with a link to set a password.
  </Accordion>

  <Accordion title="8. Download Amazon WorkSpaces">
    Download Amazon WorkSpaces on your local computer:

    ```sh theme={"system"}
    brew install amazon-workspaces
    ```
  </Accordion>

  <Accordion title="9. Open the WorkSpaces app">
    Open the WorkSpaces app, enter the registration key from the email, and sign in using the username and password you set via the reset link in the email. You must enter this password every time you open WorkSpaces, so best to save it to your local password manager.

    <img />
  </Accordion>

  <Accordion title="10. Connect to your new Windows desktop instance">
    After it loads, you will see your new Windows desktop instance!

    <img />
  </Accordion>
</AccordionGroup>

## 2. Disable IE Enhanced Security Configuration

By default, you will see the following warning whenever you open QuickBooks Desktop. If you do not resolve this issue, this warning will freeze QuickBooks Desktop whenever the QuickBooks Web Connector opens QuickBooks Desktop when it is closed.

<Image alt="Windows error - Internet security levels are set too high" />

To prevent this error, follow these steps:

<AccordionGroup>
  <Accordion title="1. Open the Server Manager">
    Search for and open Server Manager:

    <img />

    <img />
  </Accordion>

  <Accordion title="2. Choose Local Server">
    Choose `Local Server` from the left navigation pane:

    <img />
  </Accordion>

  <Accordion title="3. Open settings for IE Enhanced Security Configuration">
    For `IE Enhanced Security Configuration`, click the button that says `On`:

    <img />
  </Accordion>

  <Accordion title="4. Turn off IE Enhanced Security Configuration">
    For Administrators, select `Off`. For Users, select `Off`. Choose `OK`. Then
    you are done!

    <img />
  </Accordion>
</AccordionGroup>

## 3. Install QuickBooks Desktop

<AccordionGroup>
  <Accordion title="1. Download the QuickBooks Desktop Enterprise trial">
    From the Windows instance, open Firefox and download the QuickBooks Desktop
    Enterprise trial:
    [https://quickbooks.intuit.com/learn-support/en-us/new-subscriptions/download-a-trial-of-quickbooks-desktop/00/185974](https://quickbooks.intuit.com/learn-support/en-us/new-subscriptions/download-a-trial-of-quickbooks-desktop/00/185974)
  </Accordion>

  <Accordion title="2. Open the installer">
    Navigate to the "Downloads" directory in the Windows File Explorer, and
    launch the application named `QuickBooksEnterprise23Trial.exe`. Then, walk
    through the installation.

    <img />
  </Accordion>

  <Accordion title="3. Install QuickBooks Desktop">
    After that installation finishes, another installer should launch
    automatically. Walk through that installer, too. This can take 20-30 minutes
    to finish.

    <img />

    <img />
  </Accordion>

  <Accordion title="4. Select the correct variant">
    Next, the following window will appear. Select the variant `QuickBooks
            Desktop Enterprise General Business`:

    <img />
  </Accordion>

  <Accordion title="5. Create a mock company file">
    Click "I want to see a Sample company file", which will provide a mock
    dataset for you to use with QuickBooks Desktop. If this option does not
    work, which sometimes happens, then click "I'm ready to create my own
    company file" to create a new, empty company file.

    <img />
  </Accordion>

  <Accordion title="6. Sign in to your Intuit developer account">
    If prompted, sign in to your Intuit developer account in QuickBooks Desktop.
    If you do not have one, [you can create account
    here](https://accounts.intuit.com/app/sign-in?start_screen_hint=SignUp).

    <img />
  </Accordion>

  <Accordion title="7. Open the company file">
    When you are done, you will see the QuickBooks Desktop interface:

    <img />
  </Accordion>

  <Accordion title="8. Create a password for the company file">
    At some point, QuickBooks Desktop might ask you to create a password.
    Conductor will not ask for this password; it is internal to QuickBooks
    Desktop.

    <img />
  </Accordion>

  <Accordion title="9. Get a free developer (NFR) license">
    The trial installation will work for 30 days, after which you will need a
    developer (NFR) license, which you can [get for free by following our
    guide](/qbd/dev-license). After completing that guide, you can continue to
    use the trial version while you wait for your NFR license to arrive.
  </Accordion>
</AccordionGroup>

## 4. Connect Conductor to your QuickBooks Desktop instance

Now that you have your own QuickBooks Desktop test instance, you can return to the [Quickstart](/quickstart) guide to connect it to Conductor. Don't worry; this part is much easier.


# Quickstart
Source: https://docs.conductor.is/quickstart

Connect to QuickBooks Desktop via a modern API in 5 minutes.

<Image alt="Quickstart hero" />

Welcome! 👋 Follow the instructions below to connect your QuickBooks Desktop instance and start working with your data in just a few minutes. You'll be able to fetch, create, and update any object type in real-time with our modern APIs and SDKs.

## Part 1: Set up your Conductor account

<AccordionGroup>
  <Accordion title="1. Create a Conductor account">
    Sign up for a Conductor account [here](https://dashboard.conductor.is/sign-up) with your work email.
  </Accordion>

  <Accordion title="2. Create an organization">
    Create an organization in the Conductor dashboard. This should be the name of your company.

    <Image alt="Create an organization" />
  </Accordion>

  <Accordion title="3. Select the testing project">
    In the organization you created, let's select the **"testing"** project. An organization can have multiple projects, but we'll use this one for now.

    <Image alt="Select the testing project" />
  </Accordion>
</AccordionGroup>

## Part 2: Connect to QuickBooks Desktop

<Note>
  **Important**: A QuickBooks Desktop instance for testing is **required**. If
  you do not have one, you can [create a free test
  instance](/qbd/test-instance).
</Note>

<AccordionGroup>
  <Accordion title="1. Create an end-user">
    After selecting the **"testing"** project in the Conductor dashboard, click the **"Create end user"** button.

    <Tip>
      An end-user represents the user or organization within *your* application for whom we are connecting to their QuickBooks Desktop instance. Each end-user maps to a single QuickBooks Desktop company file because each company file represents an individual legal entity.
    </Tip>

    <Image alt="Create an end-user" />
  </Accordion>

  <Accordion title="2. Complete the authentication flow">
    After creating an end-user in the dashboard, it will automatically create an auth session. Visit this URL in your browser on the same computer or instance as your QuickBooks Desktop installation. This authentication flow will guide you through connecting your QuickBooks Desktop instance to Conductor.

    *Read every step carefully!*

    <Image alt="Conductor authentication flow for QuickBooks Desktop" />
  </Accordion>

  <Accordion title="3. Create an API key">
    In the Conductor dashboard, navigate to the **API Keys** tab and click the **"Create secret key"** button. Be sure to save the secret key in a secure location.

    <Image alt="Create a secret key" />
  </Accordion>

  <Accordion title="4. Get your end-user ID">
    Navigate to the **End Users** tab and find your end-user's **ID**. You'll need this in Step 6 to identify the end-user in your requests.

    <Image alt="End users table" />
  </Accordion>

  <Accordion title="5. Install the Conductor SDK">
    <CodeGroup>
      ```sh Node.js theme={"system"}
      # npm
      npm install conductor-node

      # yarn
      yarn add conductor-node

      # pnpm
      pnpm add conductor-node
      ```

      ```sh Python theme={"system"}
      pip install conductor-py
      ```

      ```sh cURL theme={"system"}
      # Continue to the next step to access our REST API directly via `curl`.
      ```
    </CodeGroup>
  </Accordion>

  <Accordion title="6. Fetch data from QuickBooks Desktop!">
    Try fetching a list of QBD Customers:

    <CodeGroup>
      ```ts Node.js theme={"system"}
      import Conductor from "conductor-node";
      const conductor = new Conductor({ apiKey: "{{YOUR_SECRET_KEY}}" });

      async function main() {
        const invoices = await conductor.qbd.invoices.list({
          conductorEndUserId: "{{YOUR_END_USER_ID}}",
          limit: 10,
        });
        console.log(invoices.data);
      }

      main();
      ```

      ```py Python theme={"system"}
      from conductor import Conductor

      conductor = Conductor(api_key="{{YOUR_SECRET_KEY}}")

      invoices = conductor.qbd.invoices.list(
        conductor_end_user_id="{{YOUR_END_USER_ID}}",
      )
      print(invoices.data)
      ```

      ```sh cURL theme={"system"}
      curl --request GET \
        --url 'https://api.conductor.is/v1/quickbooks-desktop/customers' \
        --header 'Authorization: Bearer {{YOUR_SECRET_KEY}}' \
        --header 'Conductor-End-User-Id: {{YOUR_END_USER_ID}}'
      ```
    </CodeGroup>

    ```json Example QBD response theme={"system"}
    {
      "objectType": "list",
      "url": "/v1/quickbooks-desktop/customers",
      "data": [
        {
          "id": "80000001-1234567890",
          "objectType": "qbd_customer",
          "createdAt": "2024-10-01T17:34:56.000Z",
          "name": "ABC Corporation",
          "isActive": true,
          // ...
        }
        // ...
      ],
      // ...
    }
    ```
  </Accordion>
</AccordionGroup>


# Security and data retention
Source: https://docs.conductor.is/security

Conductor's policies on security, data retention, and data processing.

## Temporary data storage

* **Conductor does not permanently retain your end-user data (such as QuickBooks Desktop data).**
* **For operational purposes, API request logs, which include end-user data, are temporarily stored securely in a SOC 2 compliant log manager for 15 days before permanent deletion.**
* Short-lived integration request queue items and SOAP session metadata are stored in a Redis data store hosted by Upstash (AWS US West – Oregon) so distributed workers can resume or conclude in-flight requests. Entries persist only until the response is delivered or a timeout is published.
* The logs are encrypted at rest using AES-256 and in transit using HTTPS/TLS.
* The logs are stored in certified data centers located in Germany and Finland within the EU.
* Access to these logs is strictly limited to authorized Conductor engineers, who use them solely for debugging, customer support, and product improvement.

## Permanent data storage

* The only data Conductor stores permanently pertains to managing and authenticating your Conductor account, connections, end-users, API keys, and projects. This does not include any end-user data.
* This data is stored in a centralized SOC 2 compliant database hosted by AWS in the US West (Oregon) region. There is no physical or logical separation of customer data within the database.
* The database is encrypted at rest and requires SSL/TLS encryption for all connections.
* Access to the database is strictly limited to authorized Conductor engineers.

## API request security

* All API requests to Conductor are authenticated using an API key and restricted to HTTPS.
* Secret API keys are cryptographically signed (JWT + HS256). The full plaintext value is never stored on Conductor’s servers.
* Data in transit is encrypted, and requests are processed through our SOC 2 compliant backend hosted by AWS in the US West (Oregon) region.

## Security and compliance

<Frame>
  <img alt="SOC 2 Type 2 Certified" />
</Frame>

**Conductor is SOC 2 Type 2 certified.** Our certification covers the Security Trust Service Criteria. The audit was performed by [Insight Assurance](https://www.intasure.com/), the same firm that audits OpenAI and Perplexity.

* To request a copy of our most recent SOC 2 Type 2 report, email [support@conductor.is](mailto:support@conductor.is).
* View our security controls in Conductor's [Trust Center](https://trust.conductor.is/controls).
* Conductor's [Privacy Policy](https://conductor.is/privacy) outlines our data handling practices.

## Data subprocessors

Conductor subprocessors are third-party entities authorized to process data to support Conductor services in accordance with our service agreements. Conductor requires each subprocessor to meet specific contractual obligations to ensure they enforce security controls and comply with data protection regulations.

| **Subprocessor** | **Function**                                                                                                                                                                                              | **Location**                   |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ |
| **Better Stack** | Logging manager for ingesting, parsing, and querying API request logs for debugging, offering customer support, and product improvement purposes. Retains end-user data for 15 days before deletion.      | Germany, Finland               |
| **Neon**         | Postgres database hosting (using AWS underneath) for managing customer data, such as for authentication, connections, and account management. Does not store any end-user data.                           | Oregon - US West (AWS)         |
| **Render**       | Compute instance hosting (using AWS underneath) for running Conductor's core API services. Processes and transmits end-user data as needed to authenticate, process, and fulfill customers' API requests. | Oregon - US West (AWS)         |
| **Upstash**      | Serverless Redis data store that temporarily persists integration queue items and SOAP session metadata so distributed workers can resume requests and deliver responses before deleting the data.        | Oregon - US West (AWS)         |
| **Sentry**       | Application monitoring and error tracking. Captures diagnostic data and metadata around application errors and performance issues. May include limited customer data if present in error contexts.        | Iowa, U.S.; Frankfurt, Germany |
| **Vercel**       | Web app hosting for Conductor's web user interfaces. Does not directly process or store customer and end-user data.                                                                                       | N. California - US West (AWS)  |

## Data processing

### Categories of personal data transferred

The specific categories of personal data processed will depend on what data the customer chooses to request from QuickBooks Desktop company files via Conductor's API. This could include data such as names, contact information, financial account details, transaction records, and accounting data related to the employees, contractors, customers, and vendors of the customer's end-user businesses.

### Sensitive data handling

Based on Conductor's recommended API configuration, the QuickBooks Desktop data accessible via Conductor's API typically would not include highly sensitive personal data, such as Social Security Numbers, credit card details, or bank account numbers. However, if explicitly requested by the customer via the Conductor API, some sensitive data transferred can include:

* Payroll and benefits information for employees and contractors, without direct identifiers such as Social Security Numbers.
* Confidential revenue, expense, and profitability data for end-users' businesses.
* Proprietary vendor and supplier details, contracts, and transaction terms.

Conductor applies the following safeguards to protect this sensitive data:

* **Strict purpose limitation:** Sensitive data is only used for the specific purposes of enabling end-user integrations (e.g., QuickBooks Desktop) via Conductor's API, and never for any other purposes.
* **Encryption:** All sensitive data is encrypted in transit (HTTPS/TLS) and at rest (AES-256) using industry-standard encryption protocols.
* **Onward transfer restrictions:** Conductor does not transfer any sensitive data to third parties or subprocessors without prior consent from the customer, and any approved transfers are governed by contracts ensuring the same level of data protection.
* **Retention limitations:** Conductor does not retain any end-user data on a permanent basis. For operational purposes, API request logs that include end-user data are temporarily stored securely in a log manager for 15 days before permanent deletion.
* **Access restrictions:** Access to sensitive customer and end-user data is restricted to only the necessary Conductor staff who have undergone specialized privacy and security training.

### Data transfer frequency

As the customer's end-users interact with the integration, data will be transferred via Conductor's API on a continuous basis, whenever the customer initiates pulling data from or pushing data to QuickBooks Desktop. The frequency and volume of these transfers will depend on how the customer designs the integration and how actively their users engage with the QuickBooks Desktop connected features.


# Connect your users via the auth flow
Source: https://docs.conductor.is/usage/auth-flow

Enable your users to securely connect their QuickBooks Desktop to your application.

The authentication flow in Conductor is a user interface walkthrough that allows your users to securely connect their QuickBooks Desktop installation to their Conductor account. For an example, check out this [demo of the auth flow](https://connect.conductor.is/qbd/demo).

There are two main approaches to integrating the auth flow with your application:

1. Integrate the auth flow with your backend to manage multiple users and connections.
2. Generate shareable auth links for getting started quickly or one-off connections.

## Integrate the auth flow with your backend

If you are building a multi-user service where each user needs to connect their QuickBooks Desktop account to your application, you'll want to integrate Conductor's QuickBooks Desktop auth flow into your backend.

<Steps>
  <Step title="Create an end-user">
    Consider you have an end-user of your application who needs to connect their QuickBooks Desktop to your application. Begin by creating an end-user for that user and saving their `id` to your database. You will use this `id` to match your users to their corresponding QuickBooks Desktop connection in Conductor.

    <Tip>
      If your database has a `users` table, consider creating a column called `conductor_end_user_id`.
    </Tip>

    <CodeGroup>
      ```ts Node.js theme={"system"}
      import Conductor from "conductor-node";
      const conductor = new Conductor({ apiKey: "{{YOUR_SECRET_KEY}}" });

      // Replace the placeholders with your actual data.
      const endUser = await conductor.endUsers.create({
        companyName: "{{END_USER_COMPANY_NAME}}",
        sourceId: "{{UNIQUE_ID_FROM_YOUR_DB}}",
        email: "{{END_USER_EMAIL}}",
      });

      // Save the end-user ID to your database.
      await db.users.update({
        conductorEndUserId: endUser.id,
      });
      ```

      ```python Python theme={"system"}
      from conductor import Conductor

      conductor = Conductor(api_key="{{YOUR_SECRET_KEY}}")

      # Replace the placeholders with your actual data.
      end_user = conductor.end_users.create(
        company_name="{{END_USER_COMPANY_NAME}}",
        source_id="{{UNIQUE_ID_FROM_YOUR_DB}}",
        email="{{END_USER_EMAIL}}",
      )

      # Save the end-user ID to your database.
      # e.g., update your users table with end_user.id
      ```
    </CodeGroup>
  </Step>

  <Step title="Check if the end-user has an active QuickBooks Desktop connection">
    The next step is to initiate an auth session for your user to connect their QuickBooks Desktop. However, what if they already has an active connection? Or, what if they previously started the auth flow but didn't complete it?

    <Note>
      You must send any request and check the `error.code` to determine the
      appropriate action. The key distinction in error handling is:

      * `INTEGRATION_CONNECTION_NOT_SET_UP`: The user needs to complete the auth
        flow.
      * Other connection errors: The user needs to take a specific action (like
        restarting QuickBooks) but does not need the auth flow.
    </Note>

    Imagine your application has a web app where your users configure the integrations with their application. If you create a section for the QuickBooks Desktop integration, you can use the following approach to track whether an active connection already exists:

    <CodeGroup>
      ```ts Node.js theme={"system"}
      import Conductor, { APIError as ConductorError } from "conductor-node";

      interface IConductorError {
        message: string;
        userFacingMessage: string;
        type: string;
        code: string;
        httpStatusCode: number;
        integrationCode?: string;
        requestId: string;
      }

      const conductor = new Conductor({ apiKey: "{{YOUR_SECRET_KEY}}" });

      try {
        // Check the connection status
        await conductor.qbd.healthCheck({ conductorEndUserId: "{{END_USER_ID}}" });
        updateUI("QuickBooks Desktop is successfully connected!");
      } catch (error) {
        if (error instanceof ConductorError) {
          // Unwrap Conductor error
          const conductorError = error?.error?.error as IConductorError

          if (conductorError.code === "INTEGRATION_CONNECTION_NOT_SET_UP") {
            // This specific error code indicates the user needs to go through the auth
            // flow. Either they never started it, or didn't complete it.
            const authSession = await conductor.authSessions.create({
              publishableKey: "{{YOUR_PUBLISHABLE_KEY}}",
              endUserId: "{{END_USER_ID}}",
            });
            updateUI("Set up your QuickBooks Desktop connection: " + authSession.authFlowUrl);
          } else {
            // Prefer the user-friendly message for end-user UI.
            updateUI("An error occurred: " + conductorError.userFacingMessage);
          }
        } else {
          throw error;
        }
      }
      ```

      ```python Python theme={"system"}
      from conductor import Conductor

      conductor = Conductor(api_key="{{YOUR_SECRET_KEY}}")

      try:
        # Check the connection status
        conductor.qbd.health_check(conductor_end_user_id="{{END_USER_ID}}")
        updateUI("QuickBooks Desktop is successfully connected!")
      except Exception as e:
        # If the connection is not yet set up, start an auth session; otherwise show the user-friendly message.
        code = getattr(e, "code", None)
        if code == "INTEGRATION_CONNECTION_NOT_SET_UP":
          auth_session = conductor.auth_sessions.create(
            publishable_key="{{YOUR_PUBLISHABLE_KEY}}",
            end_user_id="{{END_USER_ID}}",
          )
          updateUI("Set up your QuickBooks Desktop connection: " + auth_session.auth_flow_url)
        else:
          user_message = getattr(e, "user_facing_message", str(e))
          updateUI("An error occurred: " + user_message)
      ```
    </CodeGroup>

    ***Note:** Replace `updateUI()` with your actual code that updates your application's UI based on the status or errors received.*
  </Step>
</Steps>

## Create a shareable auth flow link

For a quick start, particularly useful for pilot deployments or small-scale operations, generate a secure, shareable link for the QuickBooks Desktop auth flow:

<Steps>
  <Step title="Create an end-user">
    If you haven't already done so, create an end-user and save their `id`. You will use this `id` to authenticate future requests.

    <CodeGroup>
      ```ts Node.js theme={"system"}
      import Conductor from "conductor-node";
      const conductor = new Conductor({ apiKey: "{{YOUR_SECRET_KEY}}" });

      // Replace these placeholders with your own values.
      const endUser = await conductor.endUsers.create({
        companyName: "{{END_USER_COMPANY_NAME}}",
        sourceId: "{{UNIQUE_ID_FROM_YOUR_DB}}",
        email: "{{END_USER_EMAIL}}",
      });
      console.log("Save this end-user ID to auth future requests:", endUser.id);
      ```

      ```python Python theme={"system"}
      from conductor import Conductor

      conductor = Conductor(api_key="{{YOUR_SECRET_KEY}}")

      # Replace these placeholders with your own values.
      end_user = conductor.end_users.create(
        company_name="{{END_USER_COMPANY_NAME}}",
        source_id="{{UNIQUE_ID_FROM_YOUR_DB}}",
        email="{{END_USER_EMAIL}}",
      )
      print("Save this end-user ID to auth future requests:", end_user.id)
      ```

      ```sh cURL theme={"system"}
      curl -X POST https://api.conductor.is/v1/end-users \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer {{YOUR_SECRET_KEY}}" \
        -d '{
              "companyName": "{{END_USER_COMPANY_NAME}}",
              "sourceId": "{{UNIQUE_ID_FROM_YOUR_DB}}",
              "email": "{{END_USER_EMAIL}}"
            }'
      ```
    </CodeGroup>
  </Step>

  <Step title="Create an auth session">
    Using the end-user's ID, create an auth session with an extended link expiry time if needed:

    <CodeGroup>
      ```ts Node.js theme={"system"}
      import Conductor from "conductor-node";
      const conductor = new Conductor({ apiKey: "{{YOUR_SECRET_KEY}}" });

      const authSession = await conductor.authSessions.create({
        publishableKey: "{{YOUR_PUBLISHABLE_KEY}}",
        endUserId: "{{END_USER_ID}}",
        linkExpiryMins: 60 * 24, // 24 hours
      });
      console.log("Send this link to your customer to complete the auth flow:", authSession.authFlowUrl);
      ```

      ```python Python theme={"system"}
      from conductor import Conductor

      conductor = Conductor(api_key="{{YOUR_SECRET_KEY}}")

      auth_session = conductor.auth_sessions.create(
        publishable_key="{{YOUR_PUBLISHABLE_KEY}}",
        end_user_id="{{END_USER_ID}}",
        link_expiry_mins=60 * 24,  # 24 hours
      )
      print("Send this link to your customer to complete the auth flow:", auth_session.auth_flow_url)
      ```

      ```sh cURL theme={"system"}
      curl -X POST https://api.conductor.is/v1/auth-sessions \
        -H "Content-Type: application/json" \
        -H "Authorization: Bearer {{YOUR_SECRET_KEY}}" \
        -d '{
              "publishableKey": "{{YOUR_PUBLISHABLE_KEY}}",
              "endUserId": "{{END_USER_ID}}",
              "linkExpiryMins": 1440
            }'
      ```
    </CodeGroup>
  </Step>

  <Step title="Share the auth flow link">
    Share the generated `authFlowUrl` with your end-user to direct them to the auth flow to connect their QuickBooks Desktop instance to your application.

    The link will resemble this mock example:

    ```
    https://connect.conductor.is/qbd/auth_sess_client_secret_1234567abcdefg?key={{YOUR_PUBLISHABLE_KEY}}
    ```
  </Step>
</Steps>

## Embedding the auth flow in an iframe

Conductor supports embedding the auth flow in an iframe to present it as an in-page modal instead of opening it in a new tab or popup. The auth flow pages do not send `X-Frame-Options` or `Content-Security-Policy` headers that block framing.

If the iframe does not load or work correctly, check the following:

1. If your app sets a `Content-Security-Policy` with a `frame-src` (or `child-src`) directive, add `https://connect.conductor.is` to it. Otherwise, the browser refuses to load the iframe with a CSP console error that can make it appear as though the auth flow is blocking the embed.
2. If you use the iframe `sandbox` attribute, include at least `allow-scripts allow-same-origin allow-downloads`; the auth flow includes a step where the user downloads a config file, which fails silently in a sandboxed iframe without `allow-downloads`. Add `allow-popups` if you want the flow's outbound links to open.


# Autocomplete
Source: https://docs.conductor.is/usage/autocomplete

Use Conductor's built-in autocomplete to discover all available APIs, requests parameters, and response fields.

We highly recommend using [Conductor's client library](https://github.com/conductor-is/quickbooks-desktop-api) because it has built-in autocomplete and documentation for every API, request parameter, and response field. This feature is especially helpful for working with the QuickBooks Desktop API.

The following examples show the autocomplete in action in VS Code, though this works in any modern editor.

#### QuickBooks Desktop object types

<Frame>
  <img
    alt="Conductor autocomplete for QuickBooks Desktop object
types"
  />
</Frame>

#### Request parameters

<Frame>
  <img
    alt="Conductor autocomplete for QuickBooks Desktop request
parameters"
  />
</Frame>

#### Response fields

<Frame>
  <img
    alt="Conductor autocomplete for QuickBooks Desktop response
fields"
  />
</Frame>

#### Enum values

<Frame>
  <img
    alt="Conductor autocomplete for QuickBooks Desktop enum
values"
  />
</Frame>

#### Inline documentation for request parameters

<Frame>
  <img
    alt="Conductor inline documentation for QuickBooks Desktop request
parameters"
  />
</Frame>

#### Inline documentation for response fields

<Frame>
  <img
    alt="Conductor inline documentation for QuickBooks Desktop response
fields"
  />
</Frame>


# Check an end-user's connection status
Source: https://docs.conductor.is/usage/connection-status



Sometimes, it is useful to check whether an end-user's connection is working. For example, you might want to display a "connection status" indicator in your app's UI.

To do this, you can use the [health check endpoint](/api-ref/qbd/utilities/health-check) to check whether the specified connection can connect and process requests end-to-end. If an error occurs, we recommend displaying [`error.userFacingMessage`](/usage/error-handling#error-messages) to your end-user because it is the user-friendly message for end-user UI. Use the primary `error.message` for logs, developer/admin surfaces, and test projects.

<CodeGroup>
  ```ts Node.js theme={"system"}
  import Conductor from "conductor-node";

  const conductor = new Conductor({ apiKey: "YOUR_SECRET_KEY" });

  async function main() {
    try {
      await conductor.qbd.healthCheck({
        conductorEndUserId: "end_usr_1234567abcdefg",
      });
    } catch (error) {
      // Prefer `error.userFacingMessage` in end-user UI. Use `error.message` for
      // logs, developer/admin surfaces, and test projects.
    }
  }

  main();
  ```

  ```python Python theme={"system"}
  from conductor import Conductor

  conductor = Conductor(api_key="YOUR_SECRET_KEY")
  try:
    response = conductor.qbd.health_check(conductor_end_user_id="end_usr_1234567abcdefg")
  except Exception as e:
    # Prefer `e.user_facing_message` in end-user UI. Use `str(e)` for logs,
    # developer/admin surfaces, and test projects.
    pass
  ```

  ```sh cURL theme={"system"}
  curl --request GET \
    --url https://api.conductor.is/v1/quickbooks-desktop/health-check \
    --header 'Authorization: Bearer {{YOUR_SECRET_KEY}}' \
    --header 'Conductor-End-User-Id: {{YOUR_END_USER_ID}}'
  ```
</CodeGroup>


# Error handling
Source: https://docs.conductor.is/usage/error-handling

Catch and respond to connection errors, invalid requests, data problems, and more.

One of the most complicated aspects of QuickBooks Desktop is its error handling. QuickBooks errors are often cryptic and unhelpful, and they can arise from several sources (e.g., Web Connector, QB request processor, QuickBooks Desktop itself), each using a different format and mechanism. Sometimes, their errors do not even describe what went wrong when they could! **Conductor unifies and simplifies these errors into a single, consistent error format and augments each with our own user-friendly language that describes how to resolve the issue.**

With Conductor, every [error](/api-ref/errors) includes plenty of useful information.

## Error types

Any error object you receive will be an instance of one of the following error [types](/api-ref/errors#schema-type):

| Error Type                     | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `INTEGRATION_ERROR`            | Raised when the third-party integration encounters an error while processing the end-user's request. This often results from an issue with the request or data handling that requires your attention to resolve.<br /><br />E.g., a `ListID` you provided was not found in QuickBooks Desktop, or an accounting value you supplied did not adhere to the integration's accounting rules.<br /><br />Refer to `error.integrationCode` for the error code returned by the integration, if available.                                                                                                                                                                                       |
| `INTEGRATION_CONNECTION_ERROR` | Raised when a connection error occurs with the third-party integration on the end-user's side. This typically indicates an issue with the end-user's connection or configuration, which they must resolve. In other words, you cannot take action to fix these errors.<br /><br />E.g., the Web Connector failed to connect to QuickBooks Desktop on the end-user's computer.<br /><br />Refer to `error.integrationCode` for the error code returned by the integration connector, if available.<br /><br />❗ We recommend *not* triggering alerts for these errors because only the end-user can fix them. See [Global error handling](#global-error-handling) for an example of this. |
| `INVALID_REQUEST_ERROR`        | Raised when you make an API call with the wrong parameters, in the wrong state, or in an invalid way.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `AUTHENTICATION_ERROR`         | Raised when Conductor cannot authenticate you with the credentials you provided. E.g., an incorrect API key.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `ConductorPermissionError`     | Raised when you attempt to access a resource that is not allowed.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `ConductorConnectionError`     | Raised when there was a network problem between the client (on your server) and Conductor's servers. E.g., a downed network or a bad TLS certificate.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `ConductorInternalError`       | Raised when something went wrong on Conductor's end. (These are rare.)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |

## Common error codes

| Error Code                          | Description                                                                                                                                                                                                                                                                                                      |
| ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `INTEGRATION_CONNECTION_NOT_SET_UP` | Occurs when an API request is made for an end-user who has not completed the authentication flow. This typically happens when a user begins the QuickBooks Desktop setup process (creating an end-user) but doesn't finish configuring their company file connection before your app attempts to make API calls. |
| `INTEGRATION_CONNECTION_NOT_ACTIVE` | Indicates that the Web Connector connection is offline. This error occurs when Conductor hasn't received a heartbeat from Web Connector in over two minutes, suggesting the connector isn't running or is experiencing issues on the end-user's machine.                                                         |
| `QBD_CONNECTION_ERROR`              | Raised when the Web Connector is online but cannot establish a connection with QuickBooks Desktop. Common causes include having the wrong company file open, QuickBooks Desktop not running, or insufficient permissions.                                                                                        |
| `QBD_REQUEST_ERROR`                 | Indicates a QuickBooks Desktop business logic error. These errors occur when a request violates QuickBooks' business rules - for example, attempting to create a bank account with a negative opening balance or using an invalid reference to another entity.                                                   |
| `QBD_REQUEST_TIMEOUT`               | Occurs when QuickBooks Desktop successfully connects but fails to respond within the expected timeframe. This can happen in scenarios where QuickBooks needs to be launched and load a large company file, or when processing requests involving substantial amounts of data.                                    |

<Note>
  These error codes are accessible via the `error.code` property of any
  Conductor error. For integration-specific errors, you can also reference
  `error.integrationCode` for the raw error code from QuickBooks Desktop.
</Note>

## Error messages

Every Conductor [error](/api-ref/errors) includes two message fields:

1. `error.message`: The primary error message. Log it for debugging, and use it in developer/admin surfaces or test projects.
2. `error.userFacingMessage`: The user-friendly message we recommend showing to end-users. It may match `error.message`, or it may mask details that are only useful to developers or administrators, such as invalid API keys, billing issues, or setup problems.

<Note>
  If your app already displays `error.userFacingMessage`, no change is required.
  We still recommend it for end-user UI. Use `error.message` for logs,
  developer/admin surfaces, test projects, and other places where the primary
  error detail is useful.
</Note>

For example, this invalid API key error keeps developer-only detail in `message` while masking `userFacingMessage`:

```json Example Conductor error object wrap theme={"system"}
{
  "error": {
    // Primary message for logs and developer/admin surfaces.
    "message": "Invalid API key provided: 'sk_live_...1234'",
    // User-friendly message for end-user UI.
    "userFacingMessage": "An internal server error occurred. Please try again.",
    "type": "AUTHENTICATION_ERROR",
    "code": "API_KEY_INVALID",
    "httpStatusCode": 401,
    "requestId": "req_1234567890"
  }
}
```

## Error handling in our SDKs

Our errors in our SDKs are a bit janky at the moment. We're working on it. For now, we recommend the approach shown below for typing and unwrapping Conductor errors from our SDK. The example below is for our Node.js SDK, but the approach would be similar for our Python SDK.

```ts Check the connection status theme={"system"}
import Conductor, { APIError as ConductorError } from "conductor-node";

// Yes, manually define this inline.
interface IConductorError {
  message: string;
  userFacingMessage: string;
  type: string;
  code: string;
  httpStatusCode: number;
  integrationCode?: string;
  requestId: string;
}

const conductor = new Conductor({ apiKey: "{{YOUR_SECRET_KEY}}" });

try {
  // Check the connection status
  await conductor.qbd.healthCheck({ conductorEndUserId: "{{END_USER_ID}}" });
  updateUI("QuickBooks Desktop is successfully connected!");
} catch (error) {
  if (error instanceof ConductorError) {
    // Unwrap Conductor error
    const conductorError = error?.error?.error as IConductorError;

    if (conductorError.code === "INTEGRATION_CONNECTION_NOT_SET_UP") {
      // This specific error code indicates the user needs to go through the auth
      // flow. Either they never started it, or didn't complete it.
      const authSession = await conductor.authSessions.create({
        publishableKey: "{{YOUR_PUBLISHABLE_KEY}}",
        endUserId: "{{END_USER_ID}}",
      });
      updateUI(
        "Set up your QuickBooks Desktop connection: " + authSession.authFlowUrl,
      );
    } else {
      // Prefer the user-friendly message for end-user UI.
      updateUI("An error occurred: " + conductorError.userFacingMessage);
    }
  } else {
    throw error;
  }
}
```

## Specific error handling

If you need special handling for specific errors, you can wrap individual API calls, as shown below.

Using `async`/`await`:

```ts theme={"system"}
import Conductor, { APIError as ConductorError } from "conductor-node";

const conductor = new Conductor({ apiKey: "{{YOUR_SECRET_KEY}}" });

try {
  const newAccount = await conductor.qbd.accounts.create({
    conductorEndUserId: "end_usr_1234567abcdefg",
    accountType: "bank",
    name: "Accounts-Payable",
  });
} catch (error) {
  if (error instanceof ConductorError) {
    // Unwrap Conductor error
    const conductorError = error?.error?.error;
    // Check `conductorError.code`, `conductorError.integrationCode`, etc., for special handling.
  } else {
    // ...
  }
}
```

Or in the form of a rejected promise:

```ts theme={"system"}
import Conductor, { APIError as ConductorError } from "conductor-node";

const conductor = new Conductor({ apiKey: "{{YOUR_SECRET_KEY}}" });

conductor.qbd.accounts
  .create({
    conductorEndUserId: "end_usr_1234567abcdefg",
    accountType: "bank",
    name: "Accounts-Payable",
  })
  .then((newAccount) => {
    // ...
  })
  .catch((error) => {
    if (error instanceof ConductorError) {
      // Check `error.code`, `error.integrationCode`, etc., for special handling.
    } else {
      // ...
    }
  });
```

## Global error handling

It is unnecessary to wrap each API call individually, as demonstrated in the examples above. Instead, we suggest implementing a global error handler for your server, such as [`app.use((error, ...) => { ... })` in Express](https://expressjs.com/en/guide/error-handling.html#writing-error-handlers). Within this handler, perform the following actions:

1. For any `ConductorError` instance, display the `error.userFacingMessage` property to the end-user in your app's UI while logging the complete error object. The primary `error.message` is also useful for logs, developer/admin surfaces, and test projects.
2. For all `ConductorError` instances, transmit the full error object to your error-tracking service (e.g., Sentry):
   * Send a **warning** for instances of `INTEGRATION_CONNECTION_ERROR`, which are not actionable by you and can only be resolved by the end-user; for example, failure to connect to QuickBooks Desktop on the end-user's computer.
   * Send an **error** for all other `ConductorError` instances, such as an invalid API key.

For example, using an [Express error handler](https://expressjs.com/en/guide/error-handling.html#writing-error-handlers):

```ts theme={"system"}
import * as Sentry from "@sentry/node";
import Conductor, { APIError as ConductorError } from "conductor-node";

const conductor = new Conductor({ apiKey: "{{YOUR_SECRET_KEY}}" });

app.use((error, req, res, next) => {
  if (error instanceof ConductorError) {
    // Unwrap Conductor error
    const conductorError = error?.error?.error as IConductorError;

    Sentry.captureException(error, {
      level:
        conductorError.type === "INTEGRATION_CONNECTION_ERROR"
          ? "warning"
          : "error",
    });
    // Return the user-friendly message for your end-user UI.
    res
      .status(500)
      .send({ error: { message: conductorError.userFacingMessage } });
  } else {
    // ...
  }
});
```


# API keys
Source: https://docs.conductor.is/usage/keys

Authenticate every Conductor API request with secret or publishable keys.

Conductor authenticates every request with an **API key**. Keys are created and managed **per project** in the Dashboard.

If a request is sent without a valid key Conductor responds with `401 Unauthorized`.

## Key types

Each project owns two kinds of keys:

1. **Secret keys** – full-access credentials for server-to-server communication. Store them in environment variables or a secrets-manager and rotate them immediately if they are ever exposed.
2. **Publishable key** – a public identifier used when you [create an auth session](/api-ref/auth-sessions/create) to redirect an end-user into Conductor’s auth flow. It is safe to embed in client-side code or commit to your repository.

<Note>
  **How Conductor secures your keys**: Secret keys are generated as
  cryptographically signed JWTs (HS256). When you send a request Conductor
  validates the signature and looks up the embedded identifier in the database.
  The full plaintext token is <em>never</em> stored on our servers: we keep only
  a masked representation (for display) or an irreversible SHA-256 hash (for
  legacy keys). Even in the unlikely event of a database breach attackers would
  not obtain usable secret keys.
</Note>

### Key format

```text theme={"system"}
sk_conductor_...   # secret key
pk_conductor_...   # publishable key
```

The prefix clearly indicates the key type and prevents accidentally mixing them up.

## Managing keys in the Dashboard

### Secret keys

* A project can have **multiple secret keys**. Use separate keys for staging, production, CI, etc.

* Click **Create secret key**, give it a memorable name, then copy the token. The **full value is shown only once** – after you close the dialog you will only see a masked version.

* Delete a secret key at any time. Requests signed with that key will start failing immediately.

### Publishable key

Every project automatically receives **one publishable key** when the project is created. It cannot be deleted but can be copied from the Dashboard whenever you need it.

## Authenticating API requests

Add the key to the `Authorization` header using the `Bearer` scheme:

```http theme={"system"}
POST https://api.conductor.is/v1/auth-sessions
Authorization: Bearer sk_conductor_...
Content-Type: application/json

{ "endUser": { … } }
```

Always send **secret keys** from a trusted environment – never ship them in browser or mobile apps.

## Rotating secret keys

1. Create a **new** secret key and deploy it everywhere your application uses Conductor.
2. Verify that requests succeed with the new key.
3. Delete the **old** key.

Keeping both keys active during the transition avoids downtime.

***

### Troubleshooting

**`API_KEY_INVALID`** – Conductor could not validate the supplied key. Check that:

* You are sending the key exactly as it appears in the Dashboard (no extra whitespace).
* You are using a **secret key** for server-side requests and the **publishable key** only when the API reference explicitly calls for it.

If the error persists, generate a fresh secret key and try again.


# MCP
Source: https://docs.conductor.is/usage/mcp

Connect AI tools directly to Conductor's hosted MCP server.

Conductor provides a hosted MCP server at `https://conductor.stlmcp.com/`, so you can connect supported AI tools directly to Conductor without running your own local MCP server.

All setups below require a Conductor [secret key](/usage/keys).

## Client setup

### Claude Code

If you want to use Conductor from Claude Code, run:

```sh theme={"system"}
claude mcp add conductor \
  --env CONDUCTOR_SECRET_KEY="sk_conductor_..." \
  -- npx -y mcp-remote@latest https://conductor.stlmcp.com/ \
  --transport http-only \
  --header 'x-conductor-secret-key:${CONDUCTOR_SECRET_KEY}'
```

This uses Conductor's hosted MCP server. `mcp-remote` just makes it look like a local stdio server to Claude Code.

### Cursor

Cursor uses `.cursor/mcp.json` for project config and `~/.cursor/mcp.json` for global config.

Use this config:

```json .cursor/mcp.json theme={"system"}
{
  "mcpServers": {
    "conductor": {
      "url": "https://conductor.stlmcp.com/",
      "headers": {
        "Authorization": "Bearer sk_conductor_..."
      }
    }
  }
}
```

Replace the placeholder `sk_conductor_...` value with your real Conductor secret key.

### VS Code

Open the Command Palette and run `MCP: Open User Configuration`, then add:

```json theme={"system"}
{
  "mcpServers": {
    "conductor": {
      "url": "https://conductor.stlmcp.com/",
      "headers": {
        "Authorization": "Bearer sk_conductor_..."
      }
    }
  }
}
```

Replace the placeholder `sk_conductor_...` value with your real Conductor secret key.

### Claude Desktop

Claude Desktop can use the hosted server directly with:

```json claude_desktop_config.json theme={"system"}
{
  "mcpServers": {
    "conductor": {
      "url": "https://conductor.stlmcp.com/",
      "headers": {
        "Authorization": "Bearer sk_conductor_..."
      }
    }
  }
}
```

Config file locations:

* macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
* Windows: `%APPDATA%\\Claude\\claude_desktop_config.json`

<Warning>
  Your MCP client can read and write data using whatever Conductor secret key
  you provide. Treat that key like any other production credential.
</Warning>

## Notes

* The hosted MCP server uses the same auth model as the Conductor API. Standard header: `Authorization: Bearer <your Conductor secret key>`. Also supported: `x-conductor-secret-key: <your Conductor secret key>`.
* Some web-based MCP clients still do not let you attach custom headers. If your client cannot send an `Authorization` or `x-conductor-secret-key` header, prefer one of the desktop setups above.

## Self-hosting

If you intentionally want to run or customize the MCP server yourself, use the open-source `conductor-node-mcp` package and its README in the SDK repo:

[quickbooks-desktop-node/packages/mcp-server](https://github.com/conductor-is/quickbooks-desktop-node/tree/main/packages/mcp-server)

That keeps local installation, tool filtering, and self-hosting instructions in the package repo, while this guide stays focused on the recommended hosted setup.


# Terminology
Source: https://docs.conductor.is/usage/terminology

The key concepts you should know to use Conductor.

Familiarize yourself with the terms below that we use throughout the documentation and APIs.

| Term                                          | Definition                                                                                                                                                                                                    |
| --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [end-user](/api-ref/end-users/object)         | A user of *your* application for whom you will connect integrations through Conductor. Each end-user can represent an individual or an entire company/organization of multiple users within your application. |
| Integration                                   | A third-party service you want to connect to your application. For example, QuickBooks Desktop.                                                                                                               |
| [Auth session](/api-ref/auth-sessions/object) | An authentication session with a secure link to share with your end-user to connect their QuickBooks Desktop instance to your Conductor account.                                                              |
| [Authentication flow](/usage/auth-flow)       | The UI walkthrough that guides your users through securely connecting their QuickBooks Desktop to your Conductor account.                                                                                     |