In this article, we’ll explore how leveraging two Intuit API entities to retrieve QuickBooks Online company settings can result in smoother transaction processing for your app. We will also share a few best practices around integrating these entities into your app. The two entities are:
Preferences: represents a set of company preferences that control application behavior in QuickBooks Online.
CompanyInfo: contains basic QuickBooks company information.
API usage pattern
To illustrate the practical benefits of these entities, let’s start with a specific example of how to use the Preferences entity to prevent the common validation fault “Account Period Closed(#6200)”:
Step 1. Call the Preferences API endpoint
POST https://{{baseurl}}/v3/company/{{companyid}}/query?minorversion={{minorversion}}
Step 2. Check the AccountingInfoPrefs.BookCloseDate attribute
{ "QueryResponse": {
"Preferences": [ { "AccountingInfoPrefs": {
"BookCloseDate": "2025-01-02", }....
Step 3. If the attribute is available, use the account period close date to determine if the target transaction posting date in the request is within the accounting period (book close date). If the transaction must be posted despite the accounting period being closed, inform the QuickBooks Online admin that they may need to review their company settings.
Try this out using our Postman Collection or our API explorer.

Using the approach described above, here are other issues that can be addressed by retrieving specific company settings:
Issue description | Attributes/Settings | Value | Recommended approach |
Check if classes/locations are enabled on a QuickBooks Online company | AccountingInfoPrefs.ClassTrackingPerTxn, AccountingInfoPrefs.ClassTrackingPerTxnLine, AccountingInfoPrefs.TrackDepartments | True | Query Class and Department entities to return all relevant list items. |
Received error: “Duplicate document number fault (#6140)” | Preferences.SalesFormsPrefs.CustomTxnNumbers and the QuickBooks user has enabled the “Warn if duplicate check/bill number is used” setting | True | Create a DocNumber with a custom pattern, e.g., your-identifier-<docNumber>. If false, leave DocNumber out and let QuickBooks Online assign it automatically. |
Check if Automated Sales Tax (AST) calculation is enabled on a QuickBooks Online company | Preferences.TaxPrefs.UsingSalesTax | True | Ensure AST is turned on within the QuickBooks Online company. Refer to documentation on managing Sales Tax. |
Check if Projects are enabled on a QuickBooks Online company | OtherPrefs.NameValue.ProjectsEnabled | True | Project feature is available for your QuickBooks Online plan. |
Received business validation error: “You can only use one foreign currency per transaction.” | CurrencyPrefs.MultiCurrencyEnabled OR CurrencyPrefs.HomeCurrency | True | Ensure only one currency per transaction, account, customer, vendor/supplier. If needed, create another vendor/supplier to assign that foreign currency. Also, check if CurrencyPrefs.Homecurrency value is different from currency on transactions, which might be causing the error. |
Inconsistent results in reporting queries based on fiscal month | AccountingInfoPrefs.FiscalYearStartMonth | Value | Check if the correct value is set for the ‘Start month’ of the fiscal year. |
Unable to post Purchase Orders | OtherPrefs.NameValue.Name=VendorAndPurchasesPrefs.PurchaseOrderEnabled | True | Create the Purchase order(s). If false, the admin must enable this setting in the UI. |
Received business validation error: “This feature is not supported for the QuickBooks Online subscription…” | CompanyInfo.NameValue.Name=OfferingSku | Value | Check if the QuickBooks Online plan/SKU supports the product feature. |
Need to retrieve CompanyName and CompanyAddress for a QuickBooks Online company | CompanyInfo.CompanyName and CompanyInfo.CompanyAddr | Value | Query CompanyInfo entity and read values from the indicated attributes. |
Integration architecture
Now, let’s extend this to explore how you can build resilient and context-aware integrations by aligning transaction processing with the latest attributes/settings retrieved through the Preferences API.
The diagram below outlines a recommended approach with steps that show how your app can process transactions based on the current QuickBooks Company settings. This improves integration reliability and reduces issues like those highlighted in the previous section.

1. Fetch Preferences once during the initial data sync when an admin connects the app to their QuickBooks Online company. Also, subscribe to “Update” events in the Preferences webhook so your app is notified of any changes to the QuickBooks Online company settings. Check out our webhooks documentation for tips on configuring webhook endpoints for your app.
2. Be sure you cache these settings with Time-To-Live (TTL) value based on a fixed time period or based on your app sync settings.
3. Validate your transactions against these settings. Remember: Transactions might be impacted by more than one setting, so build appropriate logic to capture Preferences endpoint responses.
4. Dynamically adjust your transaction processing based on Preferences and avoid validation errors. For example, avoid posting transactions with a transaction date before the book close date.
By querying the Preferences and CompanyInfo entities and using QuickBooks Online company settings, you can retrieve essential company information and prevent significant business validation faults when posting transactions. Implementing our recommended strategies for integrating these entities into your application architecture will help ensure more accurate and reliable transaction processing.
If you have questions about best practices for using the Preferences and CompanyInfo entities with your QuickBooks Online integration, post a question on our forums or reach out to our developer support team by submitting a ticket.