# 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.
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();
```
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()
```
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}}"
```
# 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
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).
# Missing QBD types
Source: https://docs.conductor.is/api-ref/missing-qbd-types
Conductor has painstakingly designed 200+ endpoints and **20,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. [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)
* [ItemSalesTaxGroup](https://developer.intuit.com/app/developer/qbdesktop/docs/api-reference/qbdesktop/itemsalestaxgroupadd)
* [ItemPayment](https://developer.intuit.com/app/developer/qbdesktop/docs/api-reference/qbdesktop/itempaymentadd)
* [ItemDiscount](https://developer.intuit.com/app/developer/qbdesktop/docs/api-reference/qbdesktop/itemdiscountadd)
3. All [reports](https://developer.intuit.com/app/developer/qbdesktop/docs/api-reference/qbdesktop/generalsummaryreportquery)
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 desperately 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).
The specification uses OpenAPI v3.1, is in YAML format, and is approximately
80,000 lines long.
## 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.
**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.
* 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 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.
# 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 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.
# 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 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 or item receipts.
# 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.
# 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 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 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.
# 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 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.
# 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 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.
# 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 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.
# 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 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.
# 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.
# 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.
# 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.
# 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 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 a 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.
# 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 a 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.
# 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 a 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.
# 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 a 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.
# 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 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.
# 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.
# 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 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.
# 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 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 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.
# Reports
Source: https://docs.conductor.is/api-ref/qbd/reports
How to fetch QuickBooks Desktop reports via Conductor's passthrough endpoint.
QuickBooks Desktop "reports" are a unique data type that is less commonly used than other QuickBooks Desktop features. For this reason, Conductor’s fully typed API does not yet support the Reports API directly, but **reports are fully accessible via the Conductor passthrough endpoint**.
1. To use the [passthrough endpoint](/api-ref/qbd/utilities/passthrough), see the examples to the right. You'll provide a JSON object using QuickBooks Desktop's native field names and structure, and receive a JSON object as a response. The response shapes the data as a table with `rows` and `columns`.
2. To determine the correct names and structure to use for your request input, reference the official QuickBooks Desktop SDK documentation as follows:
1. Visit [Intuit's official QuickBooks Desktop SDK docs site](https://developer.intuit.com/app/developer/qbdesktop/docs/api-reference/qbdesktop).
2. Search the page for "report" to find the various report types in the sidebar. For example, see the documentation for the [`GeneralSummaryReportQuery`](https://developer.intuit.com/app/developer/qbdesktop/docs/api-reference/qbdesktop/generalsummaryreportquery) report type used in the example to the right.
3. Once on the page for the report type you want to use, click the `XMLOps` tab to more easily see the correct names and structure to use for your request input and the expected response fields.
The example to the right shows how to use the Conductor passthrough endpoint to request QuickBooks Desktop's `GeneralSummaryReportQuery` report type.
You can swap `GeneralSummaryReportType` with any supported value listed on the XMLOps
tab (e.g., `BalanceSheetStandard`, `ProfitAndLossStandard`, etc.).
While the passthrough route requires more manual configuration than our native endpoints, once configured, it provides a reliable way to access all QuickBooks Desktop reports via Conductor.
```ts Node.js theme={"system"}
import Conductor from "conductor-node";
const conductor = new Conductor({ apiKey: "sk_conductor_..." });
const CONDUCTOR_END_USER_ID = "end_usr_...";
async function main() {
const report = await conductor.endUsers.passthrough(
CONDUCTOR_END_USER_ID,
"quickbooks_desktop",
{
GeneralSummaryReportQueryRq: {
GeneralSummaryReportType: "TrialBalance",
},
},
);
console.log(JSON.stringify(report, null, 2));
}
main();
```
```py Python theme={"system"}
from conductor import Conductor
conductor = Conductor(api_key="sk_conductor_...")
CONDUCTOR_END_USER_ID = "end_usr_..."
report = conductor.end_users.passthrough(
conductor_end_user_id=CONDUCTOR_END_USER_ID,
integration_slug="quickbooks_desktop",
body={
"GeneralSummaryReportQueryRq": {
"GeneralSummaryReportType": "TrialBalance"
}
},
)
print(report)
```
```bash cURL theme={"system"}
curl --request POST \
--url "https://api.conductor.is/v1/end-users/${CONDUCTOR_END_USER_ID}/passthrough/quickbooks_desktop" \
--header "Authorization: Bearer sk_conductor_..." \
--header "Content-Type: application/json" \
--data '{
"GeneralSummaryReportQueryRq": {
"GeneralSummaryReportType": "TrialBalance"
}
}'
```
```json Response theme={"system"}
{
"GeneralSummaryReportQueryRs": {
"ReportRet": {
"ReportTitle": "Trial Balance",
"ReportSubtitle": "As of June 19, 2025",
"ReportBasis": "Accrual",
"NumRows": 7,
"NumColumns": 3,
"ColDesc": {
"ColTitle": [
{ "TitleRow": 1, "Value": "" },
{ "TitleRow": 2, "Value": "" }
],
"ColTitle2": [
{ "ColType": "Label", "ColID": 1, "DataType": "STRTYPE" },
{ "ColType": "Amount", "ColID": 2, "DataType": "AMTTYPE" },
{ "ColType": "Amount", "ColID": 3, "DataType": "AMTTYPE" }
]
},
"ReportData": {
"DataRow": [
{
"RowData": { "RowType": "account", "Value": "?" },
"ColData": [
{ "ColID": 1, "Value": "?" },
{ "ColID": 2, "Value": "-100.00" }
],
"RowNumber": 1
},
{
"RowData": { "RowType": "account", "Value": "?" },
"ColData": [
{ "ColID": 1, "Value": "?" },
{ "ColID": 2, "Value": "100.00" },
{ "ColID": 3, "Value": "" }
],
"RowNumber": 2
}
// ...additional rows...
]
}
}
}
}
```
# 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 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.
# 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 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.
# 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 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 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 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.
# 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).
# 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}
Sends a request directly to the specified integration connection (e.g., QuickBooks Desktop) on behalf of the end-user.
# 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 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.setCredit` to reduce payment amounts. 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.
# 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.
```bash npm theme={"system"}
npm install conductor-node
```
```bash yarn theme={"system"}
yarn add conductor-node
```
```bash pnpm theme={"system"}
pnpm add conductor-node
```
If you're migrating from the old `conductor-node` package (v11 or earlier),
please see the [upgrade guide](/api-ref/upgrade-node).
```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.
If you prefer a different timeout period, you can customize it by setting the
`Conductor-Timeout-Seconds` request header to your desired value.
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, Conductor will automatically launch the program when a request is made. Given that QuickBooks Desktop can take at least 30 seconds to start, adding considerably to the response time.
If QuickBooks Desktop is already offline when you send the request, Conductor
will immediately return an error **without** initiating the timeout period.
# 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.
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.
## 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
```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
```
## Breaking changes
**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.
### ⚠️ Functional Changes
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.
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.
### ⚠️ Naming and Structure Changes
**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
});
```
**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.*
```
**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!
```
**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
});
```
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.
**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",
},
],
});
```
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.
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: "..."
// }
// }
```
**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,
});
```
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: "...",
// ...
// }
// ]
// }
```
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
```
## New features
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;
}
```
Intelligently retries requests, but only those requests that can potentially succeed when retried (such as network errors).
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: "..." });
```
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.
## 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.
# What's new in API v2
Source: https://docs.conductor.is/api-ref/whats-new
Conductor's new QuickBooks Desktop API is a massive leap forward and sets the foundation for future integrations.
Welcome to Conductor's new QuickBooks Desktop API v2.
**API v2 brings the following improvements over v1.0:**
1. Proper HTTP methods: `GET` for reading, `POST` for creating or updating. No more `POST` for everything.
2. Cleaner URL endpoints: `/quickbooks_desktop/invoices` instead of `/end-users/{id}/passthrough/quickbooks_desktop` with `InvoiceQueryRq` in the body.
3. An OpenAPI spec for the entire API.
4. Full online documentation of all fields and their types.
5. API playground in the documentation to test requests and see responses.
6. Always returns all response fields. Uses `null` for undefined fields instead of omitting them.
7. Consistently returns arrays for any nested fields that previously returned a single object for one item and an array for multiple items.
* Returns an empty array instead of `null` for empty lists.
8. Clean response bodies: No more unwrapping outer objects; e.g., no more `InvoiceQueryRs.InvoiceRet`.
9. Proper object wrapper for all list responses: Previously, we returned an array of objects. Now, we return an object with a `data` field that contains the array of objects.
10. Pagination for all list endpoints.
11. Better parameter names instead of QuickBooks Desktop's unconventional naming. For example:
* `MaxReturned` → `limit`
* `TimeModified` → `updatedAt`
* `DataExtRet` → `customFields`
12. Uses `camelCase` for input and output field names instead of `PascalCase`.
13. Simplified request structure. For example:
* `refNumberStartsWith: "REF"` instead of `RefNumberFilter: { MatchCriterion: "StartsWith", RefNumber: "REF" }`
* `accountId: "123"` instead of `AccountRef: { ListID: "123" }`
14. Correct types for obscure fields: Previously, we inferred types from XML. Now, we define the type of every field to ensure it is always correct.
15. Better field descriptions: we are using our own descriptions instead of QuickBooks' descriptions.
16. Field-specific coercions: better handling of dates and money amounts.
17. Enforced upper bound on `limit` of 150 records per page to prevent unintentionally overloading QuickBooks Desktop instances.
18. Better defaults. For example:
* `includeLineItems` is `true` by default because who wants an empty invoice?
* `ownerId` is 0 by default to always include your end-users' custom fields.
## Feedback
We value your input! If you have suggestions or requests for improvements, changes, field names, documentation, or anything else, [please let us know](mailto:support@conductor.is?subject=Conductor%20QuickBooks%20Desktop%20API%20Feedback).
# Product updates
Source: https://docs.conductor.is/changelog/overview
New updates and improvements.
* **API:** QuickBooks Desktop endpoints now reject blank or whitespace-padded IDs and blank exact-match `name`/`fullName` filters before sending requests upstream.
* **API:** QBD vendor credits now allow `vendor` to be null to match real-world obscure cases where this field is missing.
* **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.
* **Docs:** Our help AI assistant now gives clearer, simpler step-by-step answers for QuickBooks Desktop setup and connection issues.
* **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.
* **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.
* **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.
* **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.
* **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.
* **Infrastructure:** Handle late QuickBooks Web Connector SOAP callbacks after the active request has already been cleared.
* **Infrastructure:** Prevent stuck QuickBooks Desktop requests from leaking memory when Redis snapshots mark them terminal before the local HTTP promise settles.
* **Infrastructure:** Ensure adopted QuickBooks Desktop timeouts resolve local requests even if the response message is dropped.
## 🛡️ 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, Availability, and Confidentiality 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).
* **Infrastructure:** Improved QuickBooks Desktop response handling to prevent stuck requests when response dispatch is interrupted.
* **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.
* **API:** QBD deleted list-objects now include `fullName` in responses.
* **Dashboard:** Remove organization members from the Members tab with typed confirmation.
* **API:** Added QuickBooks Desktop [shipping methods](/api-ref/qbd/shipping-methods) endpoints for create and list operations.
## 🚀 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.
* **Error handling:** Add proper error handling for when a QuickBooks Desktop request payload exceeds our safety cap of 20 MiB.
* **Dashboard & Auth flow:** Fixed organization and end-user logos not loading.
* **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.
* **Dashboard:** Added search and keyboard navigation to the organization and project switchers in the breadcrumb.
* **API:** QBD Sales Orders now support `customerId` as `null` to match real-world obscure cases where this field is missing.
* **Dashboard:** Email magic links now open a quick confirmation step to prevent inbox scanners from expiring the link before you click it.
* **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`).
## 🚀 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).
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.
### 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.
* **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.
* **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.
* **Error handling:** Improved the error message shown when a QuickBooks Desktop company file contains corrupted data, with clearer repair guidance.
* **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.
* **Dashboard:** Add callout tips for how to reconnect an existing QuickBooks Desktop connection.
* **Docs:** New help guide for [creating a dedicated QuickBooks Desktop user for a Web Connector connection](/help/guides/create-dedicated-qbd-user).
## 🚀 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.
* **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).
* **API:** Support for [customer types](/api-ref/qbd/customer-types) in API v2.
* **Dashboard:** Prevent corporate email scanners from consuming magic-link sign-in tokens before users attempt to sign in via email.
* **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.
* **Dashboard:** Added a hover copy shortcut for Conductor IDs in the End Users table.
* **Error handling:** Add guide link to QBD timeout error message.
* **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).
## 🚀 Dashboard: Add email-based account creation and sign-in.
* **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.
* **Docs:** Added FAQ about [QBD API request latency](/faq#how-long-do-conductor-api-requests-take-with-quickbooks-desktop).
* **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.
* **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.
* **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.
* **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.
* **Auth flow:** Performance improvements for the auth flow UI.
* **Docs:** Updated the [MCP guide](/usage/mcp) with improved client setup instructions.
* **Dashboard:** Dashboard visibility on mobile.
* **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.
* **Docs:** Image widths in docs render correctly.
* **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.
* **Billing:** Refined logic for detecting duplicate connections used for billing.
* **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**.
* **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.
* **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`.
* **Error handling:** Added a custom error message for QuickBooks Desktop error code `3415`, for which QuickBooks returns an empty error message.
* **API:** Support for [unit-of-measure sets](/api-ref/qbd/unit-of-measure-sets) in API v2.
* **API:** Allow `customerId` to be null for sales receipts in API to accomodate obscure real-world data.
* **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).
* **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.
* **Dashboard:** All date and time values throughout the dashboard now show the absolute timestamp with timezone on hover.
* **Docs:** Help guide for [QuickBooks "Insufficient permission level" error](/help/guides/insufficient-permission-level).
* **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.
* **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.
* **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.
* **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.
* **API:** Disable pagination for [employees](/api-ref/qbd/employees) because QuickBooks Desktop does not support it.
* **SDKs:** Corrected MCP server handling of the required Conductor end-user ID parameter.
* **Docs:** Clarified retrieve endpoint docs for transaction types to note linked transactions are always included.
* **API:** Support for [build assemblies](/api-ref/qbd/build-assemblies) in API v2.
* **Dashboard:** Support for transferring projects between organizations from the dashboard.
* **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.
* **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.
* **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`).
* **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).
* **SDKs:** [Conductor MCP server](/usage/mcp) - talk to your QuickBooks Desktop data from an LLM using our Model Context Protocol (MCP) server.
* **Auth flow:** QuickBooks Desktop authentication flow now uses URL-based navigation for each step, enabling proper browser back button functionality.
* **Docs:** Help guide for [error handling](/usage/error-handling).
* **Docs:** Fix broken links in docs.
* **API:** Support for [other names](/api-ref/qbd/other-names) in API v2.
* **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.
* **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.
* **Docs:** Help guide for [changing a QuickBooks Web Connector connection's settings](/help/guides/change-connection-settings).
* **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.
* **Dashboard:** Support for deleting projects from the dashboard.
* **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).
* **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.
* **Auth flow:** Clearer success messaging in the QuickBooks Desktop auth flow after the connection health check passes.
* **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.
* **API:** Support for [item sites](/api-ref/qbd/item-sites) in API v2.
* **API:** ListIDs containing the `E-\d+` pattern are no longer being parsed as 0.
* **API:** Support for [item groups](/api-ref/qbd/item-groups) in API v2.
* **Docs:** Help guide for [changing the QuickBooks Desktop user for a connection](/help/guides/change-qbd-user).
* **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.
* **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.
* **Auth flow:** Refined final steps of the QBD auth flow.
* **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.
* **API:** Support for [account tax lines](/api-ref/qbd/account-tax-lines) in API v2.
* **SDKs:** Fix handling of timeout set in SDKs.
* **Docs:** Published our [OpenAPI schema](/api-ref/openapi) for use in development tools.
* **API:** Fix the `transactionType` query parameter when fetching transactions.
* **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.
* **API:** Support for [price levels](/api-ref/qbd/price-levels) in API v2.
* **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.
* **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.
* **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.
* **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.
* **Dashboard:** "Test connection" button in the dashboard to verify QuickBooks Desktop connections.
* **API:** Support for [searching across all QBD transaction types](/api-ref/qbd/transactions/list) in API v2.
* **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.
* **Dashboard:** Ability to transfer end users between projects in the dashboard.
* **Dashboard:** Added cancel buttons to modals in the dashboard.
* **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.
* **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.
* **SDKs:** Released the new [Node.js SDK](/api-ref/sdks#nodejs-sdk) behind an NPM `@beta` tag.
* **SDKs:** Beautified READMEs for the Node.js and Python SDKs.
* **Docs:** Trigger Mintlify docs refresh when updating OpenAPI spec.
* **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.
* **Docs:** JavaScript and Python code samples for every API v2 endpoint using our new SDKs.
* **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.
* **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.
* **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.
* **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.
* **Infrastructure:** Internal error tracking.
* **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.
* **API:** [`lastSuccessfulRequestAt`](/api-ref/end-users/object#schema-integration-connections-last-successful-request-at) to the `IntegrationConnection` resource.
* **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.
* **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.
* **Docs:** Help guide for [QBD admin required error](/help/connection-errors/qbd-admin-required).
* **Dashboard:** Redesigned end-user table in the dashboard.
* **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.
* **API:** Internal framework for defining OpenAPI schemas.
* **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.
* **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.
* **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.
* **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.
* **Dashboard:** Company logos to the dashboard for organizations and end-users.
* **Dashboard:** Ability to delete end-users from the dashboard.
* **Dashboard:** Ability to edit end-user properties from the dashboard.
* **Docs:** This changelog page.
* **API:** Support for QBD [vendor credits](/api-ref/qbd/vendor-credits) in API v2.
* **API:** Support for QBD [subtotal items](/api-ref/qbd/subtotal-items) in API v2.
* **API:** Support for QBD [credit memos](/api-ref/qbd/credit-memos) in API v2.
# FAQ
Source: https://docs.conductor.is/faq
The fundamentals of Conductor.
## Conductor basics
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.
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).
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. During the monthly billing period, your application makes a Conductor API call to that connection.
Volume discounts are available for enterprises requiring a large number of connections.
**No platform fees, no minimum, no hidden costs**
Billing is per connection in use with no monthly minimum. Your invoice reflects the exact count of QuickBooks Desktop connections in use, so if you pause all production usage you won’t be charged. Charges still scale with connections in use, and you’re never billed for inactive ones.
**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.
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**.
## Data handling and security
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.
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.
## API
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).
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**.
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.
Conductor does not support webhooks because we cannot guarantee that the QuickBooks Desktop connection will be online at all times. Rather than risking developers expecting real-time notifications for every data change, we recommend triggering syncs based on explicit user actions in your UI. For example, Ramp surfaces a list of unsynced transactions and lets users initiate "Sync to QBD" whenever they are ready.
For teams seeking webhook-like behavior, some smaller customers run a scheduled process (such as a cron job) that periodically queries their users' QuickBooks Desktop data through Conductor. If the connection is offline, the process can fetch changes since the last successful sync once connectivity is restored. During offline periods, we suggest showing an error state in your app's UI so users know to bring the connection back online. While polling can emulate a limited webhook, it introduces added complexity around communicating both data changes and error scenarios, and frequent polling can impact the user's workstation if QuickBooks Desktop is running locally.
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.
## QuickBooks Desktop and 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.
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.
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**
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.
## Compatibility and connectivity
**We strongly recommend keeping QuickBooks Desktop open** for the best performance. There is no downside to keeping it open.
You can keep QuickBooks open without being logged in to a company file by leaving it at the "No Company Open" screen.
Scenarios to consider:
* **BEST: QuickBooks kept open with your company file loaded:** This provides the fastest sync experience and is recommended when possible.
If QuickBooks is open with a different company file than the one you're trying to sync, the operation will return an error.
* **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.
Follow our [guide to ensure QuickBooks Desktop launches automatically after every reboot](/help/guides/ensure-quickbooks-desktop-opens-at-startup) for the best performance.
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.
**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`).
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.
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. 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.
Yes, please see this [guide](/help/guides/multiple-connections-one-computer) for more information.
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.
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**.
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.
#### 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)
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.
# How to fix: "Another update is in progress"
Source: https://docs.conductor.is/help/connection-errors/another-update-in-progress
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.
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.
## Solution
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.
Save your work and restart your computer. This simple step often resolves
conflicts with background processes and clears any stuck update processes.
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
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.
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 indicates that there is something misconfigured or wrong about the particular Windows computer where you're setting up the Web Connector connection. Please follow the steps below to resolve the issue.
For the integration to work, **only one version of QuickBooks Desktop can be installed** on your Windows computer. Having multiple versions installed can cause connection errors 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.
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.
After deleting the log file as described in the guide, try syncing with QuickBooks Desktop again.
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, try syncing with QuickBooks Desktop again.
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.
QuickBooks Desktop may skip the permissions prompt this time. That is normal and does not indicate a problem.
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, try syncing with QuickBooks Desktop again.
If you recently renamed or changed the location of your QuickBooks company file on your computer, the Web Connector still points to the old location and will be unable to connect. Follow the steps below to fix this:
1. In QuickBooks Desktop, go to "**File**" → "**App Management**" → "**Update Web Services**" to open the Web Connector.
2. Click "**Remove**" next to the connection, then click "**Yes**" to confirm.
3. Return to your app's QuickBooks Desktop setup flow. (If unsure how, contact your app's support team.)
4. In the setup flow, **download a new configuration file**.
5. In the Web Connector, click "**Add an Application**" (bottom-right) and select the new configuration file from your Downloads folder.
6. Complete the setup flow until you see "**Success!**" in the final step.
* NOTE: This time, QuickBooks Desktop will not prompt for permissions, so you can skip those steps in the setup flow.
After following these steps, your connection is now linked to the new company file location. Please try syncing with QuickBooks Desktop again.
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.
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
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.
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
The Web Connector requires your computer to be powered on and connected to the internet.
1. If your computer is off, turn it on and ensure it has an active internet connection.
2. Attempt to sync your QuickBooks Desktop data.
If the error persists, proceed to the next step.
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.
If the Web Connector doesn't start automatically with your computer, Conductor may face difficulties in reliably syncing your QuickBooks Desktop data. To ensure automatic startup, [follow this guide](/help/guides/ensure-web-connector-opens-at-startup).
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.
**Never disable the Auto-Run setting!** This is required to for a stable connection to your QuickBooks Desktop.
From the Web Connector: Confirm the **Password box is not empty** and looks like "**\*\*\*\*\*\*\*\***".
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:
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.
**This is NOT your QuickBooks password!** This is the unique code provided in the setup guide, explained above.
From the Web Connector: Confirm **Every-Min is blank** for your connection.
*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.
**Never change the Every-Min setting!** This is required to for a stable connection to your QuickBooks Desktop.
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.
This is a common solution for various QuickBooks Desktop sync issues.
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.
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, open QuickBooks Desktop with the company file you want to sync.
3. Attempt to sync your QuickBooks Desktop data again.
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
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.
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.
## Solution
Click on the Windows Start button and type "**UAC**" in the search box. Select "**Change User Account Control settings**" from the search results.
A window will appear with a slider that controls the UAC notification level. Drag the slider all the way down to "**Never notify**".
Click "**OK**" to save the changes. You may be prompted to confirm this action - click "**Yes**" to proceed.
Restart your computer to ensure the changes take effect.
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.
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.
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
1. Open **QuickBooks Desktop** and the connected company file.
2. Log in as **Admin**.
3. Go to **File → Switch to Single-user Mode**.
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.
* **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**.
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**.
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**.
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.
# 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
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.
When setting up the QuickBooks Desktop integration, you might encounter the following error after attempting to open the downloaded config file:
**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
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.
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.
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.
After you complete the setup process, you can return to using your regular QuickBooks Desktop user account.
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
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.
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.
## 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:
Ensure QuickBooks Desktop is completely closed.
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.
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
```
In the log directory, locate the file named `QWCLog.txt`, right-click on it, and select "**Delete**".
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.
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
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.
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:
Ensure QuickBooks Desktop is completely closed.
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**".
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"
```
If the command was successful, you will see a success message resembling the screenshot below.
If the command was successful, restart your computer to ensure the changes take effect. After restarting, try connecting to QuickBooks Desktop again.
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:
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:*
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"*.
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.
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.
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**".
You should receive a confirmation that the Owner ID was removed. Select "**OK**" and close the CP3 tool.
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.
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.
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.
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
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
starts automatically whenever you start your computer. 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.
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.
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.
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.
## Security and 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.
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.
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.
## Sync and performance
Yes, your computer must be powered on to sync your QuickBooks Desktop data.
**We strongly recommend keeping QuickBooks Desktop open** for the best performance. There is no downside to keeping it open.
You can keep QuickBooks open without being logged in to a company file by leaving it at the "No Company Open" screen.
Scenarios to consider:
* **BEST: QuickBooks kept open with your company file loaded:** This provides the fastest sync experience and is recommended when possible.
If QuickBooks is open with a different company file than the one you're trying to sync, the operation will return an error.
* **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.
Follow our [guide to ensure QuickBooks Desktop launches automatically after every reboot](/help/guides/ensure-quickbooks-desktop-opens-at-startup) for the best performance.
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.
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.
No problem at all. This message indicates the Web Connector checked for updates, but no sync is necessary at the moment.
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.
**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.
## Multiple computers and company files
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.
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.
**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`).
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.
## Advanced setup and support
Yes, the integration fully supports QuickBooks Desktop when hosted on
Rightworks. For setup instructions, please see our [Connecting to Rightworks
guide](/help/guides/rightworks).
Please follow [this guide](/help/guides/remove-connection) to remove the
QuickBooks Desktop connection.
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).
# 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.
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.
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.
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.
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.
1. In the list of connections find the row that matches your Web Connector connection.
2. Select it and click **Properties**.
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. (See [Change the QuickBooks Desktop user for a connection](/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.
1. Click **OK** to close the connection Properties window.
2. Click **OK** again to close the Preferences window.
That's it! Your QuickBooks Desktop connection will now use the updated settings going forward.
# Changing the QuickBooks Desktop user for a connection
Source: https://docs.conductor.is/help/guides/change-qbd-user
Learn how to change which QuickBooks Desktop user a specific Web Connector connection uses.
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.
Each QuickBooks Desktop Web Connector connection is associated with a specific QuickBooks Desktop user account. This guide will show you how to change which user account a connection uses.
If the QuickBooks Desktop user ever signs in on another computer, this
connection will not work properly. **Make sure to select a user who primarily
works on the same computer to avoid conflicts.**
If you want a login that only your Web Connector connectionuses 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.
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.
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.
1. In the list of connections find the row that matches your Web Connector connection.
2. Select it and click **Properties**.
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.
This QuickBooks Desktop user **must** have **Full Access** permissions. Limited access roles can block requests and cause sync failures.
1. Click "**OK**" in the "**Application Properties**" dialog to confirm the user change.
2. Click "**OK**" in the Preferences window to save all changes.
You're done! From now on, the QuickBooks Desktop connection will use the selected user account when syncing data with your company file.
# 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.
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.
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.
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.
## Set up the dedicated QuickBooks Desktop user
Launch QuickBooks Desktop on the computer that hosts your Web Connector connection.
Open the company file that syncs through the Web Connector and sign in with the QuickBooks Admin user.
If the title bar shows “Multi-user mode”, go to "**File**" → "**Switch to Single-user Mode**".
**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**".
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**.
This QuickBooks Desktop user ***must*** have **Full Access** permissions. Limited access roles can block requests and cause sync failures.
4. Provide an email address tied to an Intuit account. QuickBooks requires this to authorize automated access; without it, the sync will fail.
QuickBooks requires every QuickBooks Desktop user to have an Intuit account. Otherwise, the sync will fail.
5. Click **OK** to save the user, then click **Close** to exit the user list.
Here is an *example* of the user creation dialog:
Next, follow our [guide for changing the Web Connector user](/help/guides/change-qbd-user) so the connection logs in with this new dedicated user.
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.
Leaving QuickBooks at the “No Company Open” window ensures the Web Connector uses a license seat only while it is syncing. To make sure QuickBooks reopens to this screen after every reboot, follow our [guide for launching QuickBooks Desktop at startup](/help/guides/ensure-quickbooks-desktop-opens-at-startup).
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.
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.
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.
Using Windows search (usually located in the bottom-left corner of your screen), search for "Control Panel", and open it.
In the Control Panel, click on "**Programs and Features**" or "**Uninstall a program**" (exact wording may vary depending on your version of Windows).
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.
Before uninstalling any versions of QuickBooks Desktop, make sure QuickBooks Desktop is completely closed.
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:
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**".
2. If QuickBooks Desktop asks you to reboot after fixing the installation, click "**OK**".
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 at startup
Source: https://docs.conductor.is/help/guides/ensure-quickbooks-desktop-opens-at-startup
Keep QuickBooks Desktop ready the moment Windows boots so Web Connector syncs faster.
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.
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 every reboot returns the computer to the optimal state automatically.
By default, the Web Connector already launches at startup. If it ever fails to do so, follow our [Web Connector startup guide](/help/guides/ensure-web-connector-opens-at-startup) to diagnose and fix that first.
**Important:** You should always leave QuickBooks Desktop running on the computer that hosts your Web Connector connection. There is no downside: 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 license), you can leave QuickBooks open at the "No Company Open" screen, and QuickBooks will sign in and out automatically during each sync.
## Ensure QuickBooks Desktop opens after every reboot
Most Windows PCs will launch QuickBooks Desktop at sign-in as long as a shortcut to `QBW32.exe` lives in the system-wide `Startup` folder. Follow the steps below so QuickBooks Desktop launches automatically each time Windows starts.
Make sure you are logged in to Windows with an account that has local administrator rights. If you are unsure, ask your IT team.
Press `Win + R`, type `shell:startup`, and press **Enter**. File Explorer opens to:
`C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup`
Anything you place here launches automatically whenever this computer starts.
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.
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.
Restart the computer. After Windows finishes loading, QuickBooks Desktop should start automatically. Confirm it by opening **Task Manager → Details** and checking that `QBW32.exe` is running.
With these steps, QuickBooks Desktop will always launch after every reboot, keeping the Web Connector connection fast and reliable.
# Ensuring the QuickBooks Web Connector opens at startup
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 whenever you start your computer.
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.
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 whenever you start your computer. If it does not start automatically, Conductor cannot reliably sync your data.
If you are having trouble syncing your data, please follow the steps below to ensure that the Web Connector starts automatically when you start your computer. If we discover it does not, we will configure the Windows Task Scheduler to start the Web Connector automatically.
## 1. Check if the Web Connector starts automatically when you start your computer
First, let's check whether the Web Connector starts automatically when you start your computer:
Restart your computer so we can check in the next step whether the Web Connector automatically starts when your computer starts.
After your computer finishes booting up, 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.**
## 2. Add a Startup shortcut for the Web Connector to open automatically
Most Windows PCs will launch QuickBooks Web Connector at sign-in as long as a shortcut to `QBWebConnector.exe` lives in the system-wide `Startup` folder. Follow the steps below so QuickBooks Web Connector launches automatically each time Windows starts, and follow our [QuickBooks Desktop guide to ensure it launches automatically after every reboot](/help/guides/ensure-quickbooks-desktop-opens-at-startup).
Make sure you are logged in to Windows with an account that has local administrator rights. If you are unsure, ask your IT team.
Press `Win + R`, type `shell:startup`, and press **Enter**. File Explorer opens to:
`C\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup`
Anything you place here launches automatically whenever this computer starts.
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.
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.
Restart the computer. After Windows finishes loading, QuickBooks Web Connector should start automatically. Confirm it by opening **Task Manager → Details** and checking that `QBWebConnector.exe` is running.
## 2. (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 reliably on every boot.
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).
In the Task Scheduler, go to the "Action" menu and select "**Create Task**".
In the "General" tab of the new task window:
1. Enter any name for your task, such as "Open QuickBooks Web Connector".
2. Check the option "**Run with highest privileges**" near the bottom to ensure the task runs with administrator rights.
Go to the "**Triggers**" tab and click "**New**".
1. Under "Begin the task", select "**At startup**" from the dropdown menu.
2. Set a delay for 1 minute by checking "Delay task for" and choose "1 minute".
Finally, click "**OK**".
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.
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**".
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**".
Click "**OK**" to save your new task. You might be prompted to enter an administrator password at this point.
Finally, test your task by restarting your computer, waiting one minute, and confirming that the QuickBooks Web Connector opened automatically after startup using [the same steps as in the first section of this guide](/help/guides/ensure-web-connector-opens-at-startup#1-check-if-the-web-connector-starts-automatically-when-you-start-your-computer).
By following these steps, the QuickBooks Web Connector will now always start automatically whenever you start your computer.
# 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.
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.
Before setting up the new connection, follow [this guide to disable the existing connection](/help/guides/remove-connection) on your **current** computer.
It is essential that you complete this step first to avoid synchronization conflicts with your new computer's connection.
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.
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.
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.
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.
Follow the remaining steps in the setup guide. When complete, the final step of the guide will confirm that the connection is successful.
You have now successfully moved your connection to a different computer.
# 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.
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.
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.
Start QuickBooks Desktop and **open the company file you would like to
connect first**. Sign in as the **Admin** user.
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.
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.
When you are done the Web Connector will look similar to the screenshot below, one connection per company file:
## 2. ❗ Keep QuickBooks running **without** any company file loaded
**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.
#### How to return QuickBooks to the No Company Open” state
1. Open **QuickBooks Desktop**.
2. Go to the "**File**" menu.
3. Select "**Close Company**".
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.
## 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 automatically on startup.** Add QuickBooks to the computer's startup programs or create a Task Scheduler entry that opens it a minute after boot. This ensures QuickBooks Desktop is always open whenever the computer/server restarts, which eliminates the extra delay of QuickBooks Desktop having to launch every time you sync.
- **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.
## 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.
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.
Follow the steps below to remove a QuickBooks Desktop connection from the QuickBooks Web Connector.
1. Open QuickBooks Desktop.
2. Open the company file associated with the connection you want to remove.
In the top menu bar of QuickBooks Desktop, click "**File**" → "**App Management**" → "**Update Web Services**" to launch the QuickBooks Web Connector.
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.
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.
Finally, click "**Hide**" in the bottom-right corner of the window to close the Web Connector.
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.
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.
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.
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.
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
Use the **Rebuild Data** utility to fix data issues in your company file:
1. Open QuickBooks Desktop.
2. Go to "**File**" → "**Utilities**" → "**Rebuild Data**".
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.
6. When the rebuild is complete, click "**OK**" when you see the message "Rebuild has completed".
Next, use **Verify Data** to confirm the rebuild worked:
1. Go to "**File**" → "**Utilities**" → "**Verify Data**".
2. QuickBooks will scan your company file (this may take a few minutes).
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.
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.
**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.
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.
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.
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.
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.
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.
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**:
**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.
## 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.
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.
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.
## 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.
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.
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).
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***.
**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.
```
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.
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
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.
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.
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.
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.
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**.
This will likely be the same folder as the QuickBooks Desktop shortcut from the previous step.
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**.
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**.
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.
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.
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.
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.
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.
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.3.0.20** 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:
Follow these steps to upgrade the QuickBooks Web Connector to the latest version:
Ensure that QuickBooks Desktop is completely closed before proceeding.
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.
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`.
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 latest version of the QuickBooks Web Connector. Always download the most recent version, even if you're using an older version of QuickBooks Desktop.
Once the download is complete, open the downloaded file and follow the installation wizard's instructions.
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.
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:
If you haven't already, follow our guide for [installing the QuickBooks Desktop free trial](/qbd/test-instance).
[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.
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.
On the next page, specify:
* **Product Year**: 2024 (or the latest available)
* **Product Country**: US
* **Product Version**: QuickBooks Enterprise v24 (or the latest version)
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.
* **Enable Advanced Inventory?** Yes (Allows testing with the full feature set)
After filling out these details, click "Create Support Ticket".
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.
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.
# 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).
**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.
# 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.
**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.
## 1. Set up a virtual Windows environment
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).
Either select the directory in the list or click `Create a new Directory` if there are none:
Add yourself as a user with your email address:
Select the bundle `Standard with Windows 10 (Server 2019 based) (PCoIP)`:
Select `AlwaysOn`:
Skip the Customization step, then review the final page and click the button `Create` in the bottom-right corner:
After 20-30 minutes, look for an email from Amazon WorkSpaces with a link to set a password.
Download Amazon WorkSpaces on your local computer:
```sh theme={"system"}
brew install amazon-workspaces
```
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.
After it loads, you will see your new Windows desktop instance!
## 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.
To prevent this error, follow these steps:
Search for and open Server Manager:
Choose `Local Server` from the left navigation pane:
For `IE Enhanced Security Configuration`, click the button that says `On`:
For Administrators, select `Off`. For Users, select `Off`. Choose `OK`. Then
you are done!
## 3. Install QuickBooks Desktop
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)
Navigate to the "Downloads" directory in the Windows File Explorer, and
launch the application named `QuickBooksEnterprise23Trial.exe`. Then, walk
through the installation.
After that installation finishes, another installer should launch
automatically. Walk through that installer, too. This can take 20-30 minutes
to finish.
Next, the following window will appear. Select the variant `QuickBooks
Desktop Enterprise General Business`:
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.
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).
When you are done, you will see the QuickBooks Desktop interface:
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.
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.
## 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.
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
Sign up for a Conductor account [here](https://dashboard.conductor.is/sign-up) with your work email.
Create an organization in the Conductor dashboard. This should be the name of your company.
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.
## Part 2: Connect to QuickBooks Desktop
**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).
After selecting the **"testing"** project in the Conductor dashboard, click the **"Create end user"** button.
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.
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!*
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.
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.
```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`.
```
Try fetching a list of QBD Customers:
```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}}'
```
```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,
// ...
}
// ...
],
// ...
}
```
# 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
**Conductor is SOC 2 Type 2 certified.** Our certification covers the Security, Availability, and Confidentiality 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.
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.
If your database has a `users` table, consider creating a column called `conductor_end_user_id`.
```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
```
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?
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.
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:
```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 {
// Display connection errors for your user to resolve.
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-facing 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)
```
***Note:** Replace `updateUI()` with your actual code that updates your application's UI based on the status or errors received.*
## 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:
If you haven't already done so, create an end-user and save their `id`. You will use this `id` to authenticate future requests.
```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}}"
}'
```
Using the end-user's ID, create an auth session with an extended link expiry time if needed:
```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
}'
```
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}}
```
# 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
#### Request parameters
#### Response fields
#### Enum values
#### Inline documentation for request parameters
#### Inline documentation for response fields
# 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 strongly recommend displaying the error property [`error.userFacingMessage`](/usage/error-handling#user-facing-error-messages) to your end-user in your app's UI because it contains instructions for how your end-user can resolve the error.
```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) {
// Update your app's UI to display `error.userFacingMessage`, which explains
// that the connection is failing and how to resolve the error.
}
}
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:
# Update your app's UI to display `e.user_facing_message`, which explains
# that the connection is failing and how to resolve the error.
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}}'
```
# 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.
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.
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.
E.g., the Web Connector failed to connect to QuickBooks Desktop on the end-user's computer.
Refer to `error.integrationCode` for the error code returned by the integration connector, if available.
❗ 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. |
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.
## User-facing error messages
Every Conductor [error](/api-ref/errors) includes two error messages, and you should use both:
1. `error.message`: The technical error message that you should log for debugging.
2. `error.userFacingMessage`: The descriptive user-friendly error message explicitly written for the end-user that often contains instructions helping the end-user resolve the issue.
Your app's UI should display `error.userFacingMessage` to your end-users for
every Conductor error while logging the full `error` object for your debugging
purposes.
For example, see the `message` and `userFacingMessage` in the following QBD connection error:
```json Example Conductor error object theme={"system"}
{
"error": {
// The developer-facing error message, which includes the QBD-provided
// error code and the QBD-provided error message.
"message": "QBD Connection Error (0x80040420): The QuickBooks user
has denied access.",
// The user-facing error message with instructions for the end-user to
// resolve the issue.
"userFacingMessage": "We could not connect to QuickBooks Desktop
because we must re-authorize our connection. To fix this, open
QuickBooks Desktop, log in as Admin, navigate to 'Edit >
Preferences → Integrated Applications', click 'Company Preferences',
select our app, click 'Properties...', ensure 'Allow this
application to log in automatically' is checked, then click 'OK'.
Then try again.",
"type": "INTEGRATION_CONNECTION_ERROR",
"code": "QBD_CONNECTION_ERROR",
"httpStatusCode": 502,
"integrationCode": "0x80040420",
"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 {
// Display connection errors for your user to resolve.
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.
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 a different error message for your end-user to see in your
// app's 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.
**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 never 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.
### 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
Talk to your QuickBooks Desktop data using Conductor's MCP server and AI tools such as Claude Desktop, Cursor, or OpenAI Agents.
The **Model Context Protocol (MCP)** is an open specification that lets large-language-model (LLM) clients discover and call *tools* (functions) that run on your computer. Conductor publishes an [open-source MCP server](https://github.com/conductor-is/quickbooks-desktop-node/tree/main/packages/mcp-server#readme) that exposes every Conductor API endpoint as an MCP tool.
This means you can ask an AI assistant such as Claude Desktop, Cursor, or OpenAI Agents to **read or write QuickBooks Desktop data** on your behalf. For example:
* *"How many invoices did we issue last week?"*
* *"Create a new customer called ACME Inc. with address 123 Main St"*
## Getting started
Run the server locally with npx:
```sh theme={"system"}
export CONDUCTOR_SECRET_KEY="sk_conductor_..."
npx -y conductor-node-mcp@latest
```
Then pick your client below to connect. The assistant will automatically chain the MCP tools (`list_api_endpoints` → `get_api_endpoint_schema` → `invoke_api_endpoint`) to fulfil your requests.
## Which client should I use?
* [Cursor](#cursor) – best for developers working inside a repo/IDE with inline tool usage and project/global config files.
* [Claude Desktop](#claude-desktop) – great general‑purpose client on macOS/Windows; easy JSON config and strong tool orchestration.
* [Claude (web)](#claude-web) – use when you want quick remote access via a URL without local config files.
* [ChatGPT (Connectors)](#chatgpt-connectors) – available in certain plans; currently expects `search`/`fetch` tools and may need a wrapper for full compatibility.
## Client setup
### Cursor
Cursor supports MCP via project and global config files and works with stdio or remote HTTP/SSE transports.
Config files
* Project: `.cursor/mcp.json`
* Global: `~/.cursor/mcp.json`
Local (stdio) example
```json .cursor/mcp.json theme={"system"}
{
"mcpServers": {
"conductor_node_api": {
"command": "npx",
"args": [
"-y",
"conductor-node-mcp",
"--client=cursor",
"--tools=dynamic"
],
"env": { "CONDUCTOR_SECRET_KEY": "sk_conductor_..." }
}
}
}
```
Remote (HTTP) example
```json ~/.cursor/mcp.json theme={"system"}
{
"mcpServers": {
"conductor_node_api": {
"url": "http://localhost:3000"
}
}
}
```
Then launch the server with `npx -y conductor-node-mcp --transport=http --port=3000`. If your Cursor build supports auth headers in `mcp.json`, pass an `Authorization` bearer token or use the alternative header `x-conductor-secret-key`. Otherwise, prefer stdio or a trusted local network. See: [Cursor Docs: Model Context Protocol](https://docs.cursor.com/context/model-context-protocol).
### Claude Desktop
Local (stdio) configuration
```json claude_desktop_config.json theme={"system"}
{
"mcpServers": {
"conductor_node_api": {
"command": "npx",
"args": [
"-y",
"conductor-node-mcp",
"--client=claude",
"--tools=dynamic"
],
"env": { "CONDUCTOR_SECRET_KEY": "sk_conductor_..." }
}
}
}
```
Config file locations
* macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
* Windows: `%APPDATA%\\Claude\\claude_desktop_config.json`
Tip: Open it from Claude Desktop → Settings → Developer → Edit Config.
### Claude (web)
Claude on the web supports connecting to remote MCP servers. Run Conductor in Remote mode (HTTP) and add it from Claude’s integrations/settings UI, then approve tool calls as needed. See: [MCP Clients – modelcontextprotocol.io](https://modelcontextprotocol.io/clients)
### ChatGPT (Connectors)
ChatGPT supports “Custom Connectors (MCP)” in Settings → Connectors. See: [OpenAI Help: Connectors in ChatGPT](https://help.openai.com/en/articles/11487775-connectors-in-chatgpt/)
Compatibility note
* ChatGPT may show the error “This MCP server doesn't implement our specification” if required tools are missing. As of September 2025, Connectors expect servers to implement tools named `search` and `fetch`. Our Conductor MCP server exposes explicit tools per endpoint or dynamic tools such as `list_api_endpoints`/`invoke_api_endpoint`, so it won’t directly satisfy that requirement without a thin wrapper server that provides `search`/`fetch` and delegates to Conductor. See the troubleshooting section in the help article for details.
## Advanced options
### Remote mode (HTTP)
Run the MCP server as a remote server using Streamable HTTP transport:
```sh theme={"system"}
npx -y conductor-node-mcp --transport=http --port=3000
```
* Auth via header `Authorization: Bearer ` or `x-conductor-secret-key: `.
* You can also use `--socket` to bind to a Unix socket.
Example MCP client configuration using a URL:
```json theme={"system"}
{
"mcpServers": {
"conductor_node_api": {
"url": "http://localhost:3000",
"headers": { "Authorization": "Bearer " }
}
}
}
```
You can pass the same filtering and client options as URL query parameters, for example:
* `http://localhost:3000?resource=cards&resource=accounts&no_tool=create_cards`
* `http://localhost:3000?client=cursor&capability=tool-name-length%3D40`
### Choosing the tool style
You have two options when starting the server:
1. **Explicit tools** – one MCP tool per Conductor endpoint. Useful when you know exactly which operations you need and want the most accurate parameter suggestions.
2. **Dynamic tools** (`--tools=dynamic`) – three generic tools that let the LLM search, inspect, and invoke any endpoint on demand. Helpful when you want the entire API surface in a compact form.
You can combine both approaches or filter the explicit tools for large APIs:
* `--tool=` – include a specific tool by name
* `--resource=` – include all tools under a resource (supports wildcards, e.g. `qbd.invoices*`)
* `--operation=read|write` – include just read or write operations
* `--tag=` – include tools by tag
* Exclusions available via `--no-tool`, `--no-resource`, etc.
* Use `--list` to preview which tools will be exposed
To browse the evolving endpoint list, see the “Available Tools” section in the [MCP server README](https://github.com/conductor-is/quickbooks-desktop-node/tree/main/packages/mcp-server#available-tools).
### Capabilities & clients
Different LLM clients have different schema limitations. Pass `--client=` so the MCP server tailors its output accordingly. Supported values: `openai-agents`, `claude`, `claude-code`, `cursor`.
Fine-tune capabilities with `--capability` flags (comma-separated or repeated):
* `top-level-unions` – enable top-level unions in tool schemas
* `valid-json` – allow JSON string parsing for arguments
* `refs` – enable `$ref` pointers in schemas
* `unions` – enable `anyOf` union types
* `formats` – enable format validations like `date-time`
* `tool-name-length=N` – set maximum tool name length
Examples:
```sh theme={"system"}
--client=cursor --capability=tool-name-length=40
--capability=top-level-unions --capability=tool-name-length=40
--capability=top-level-unions,tool-name-length=40
```
# 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. |