GETTING STARTED

  1. Download software using link provided when purchasing your Quist software
  2. Run the installer
  3. Reboot the host computer
  1. Open the Quist Configuration Portal from the Windows notification area.
  2. Configure a host name and port number.
  1. (Recommended) Configure an SSL Certificate.
  1. (Optional) Enable and configure swagger documentation.
  1. (Recommended) Configure Access Control
    1. Basic Authentication:
      1. Enable Basic Authentication
      2. Generate or enter a Key and Secret
      3. Update the Basic Authentication settings.
    1. Enable an IP Address Whitelist.
      (note: Once enabled, requests will only be accepted from IP addresses as seen from the perspective of the host computer)
      1. Enable IP Address Whitelist
      2. Add to (or Remove form) the IP address safelist.
      3. Update the IP Address Whitelist settings
  1. Open QuickBooks and open your company file.  Login with an admin account.
  2. (Recommended) Create a user account that will specifically be used for Quist to access QuickBooks.  This will allow you to control data access levels specifically for Quist.
  3. On the Quist configuration portal go to the QuickBooks tab and the Connection Information section.
    1. Click the Browse button and navigate to and select the company file you have open in QuickBooks.
    2. Set the Connection type to Local with UI or Remote depending on the file location.
  1. Click the Test QuickBooks Connection button on the bottom of the configuration portal.
  1. When the connection test comes back as successful click the Save QuickBooks Connection button.

The Quist data caching engine can greatly improve read performance for faster results when querying the Quist API.  It can also allow updates to happen asynchronously as a background job rather than having your application process hold for the QuickBooks update to complete.

  1. Enable Data Caching
  2. Click the Set Cache Manager Settings button and open the Cache Manager window
cache-manager-full
  1. To individually manage each model type you want to cache start by clicking on the row for that model
    1. Check the Enable Cache box.
    2. If desired, to have the cache populated automatically, check the Load on Startup box.
    3. Set the Cache Back to field to the desired period of data you’d like cached.  Some thoughts to consider:
      1. The further back the cache is set the larger the cache will be, and the longer it will take to populate.  If you have a large company file, consider a shorter cache window.
      2. For list types such as customers or items, you won’t necessarily know which particular items will be needed by your application.  In this case, it may be beneficial to cache back to the beginning of time of your company file.
    4. Set the Run Interval where Quist will check QuickBooks for any updated data.  For objects that are rearely updated this interval can be set to longer periods.  For more frequent updates such as Sales Orders a shorter interval should be used.
    5. (Optional) Enabled persistence of the cached data to Disk.  This is particularly beneficial when autoloading the data cache on startup as it will make the load time of Quist significantly faster.
    6. After all settings have been initially setup, when enabling a data cache click the Initialize Cache From QuickBooks.
    7. If the cache needs an immediate update click the Update Cache From QuickBooks to sync any recently updated data.
    8. If the cache is no longer needed or has become corrupt, click the Destroy Cache button.
  1. It is highly recommended to use the security features available in Quist.  It is also recommended that only known applications have access to Quist and that the API not be left open.  For advanced users, locking the API down behind a 3rd party API gateway such as ExpressGateway is also recommended.
  2.  Quist is designed to be as always available as possible so it’s data can be accessible by other highly available applications.  It is recommended to install Quist on a computer or server that will be highly available (i.e. not shutdown at the end of the day).  Ideally, this would not be a computer used daily by a user, but would instead be one that plays more of a server role.
  3. Depending on the size of the company file, Quist can use a considerable amount of system resources, primarily memory.  The larger the company file, the more resources may be consumed.  Make sure there are enough resources available on the host computer to handle your usage.  If memory usage get’s to be too high, consider disabling the data cache for some objects types.
  4. Setting up the host computer to auto-login on bootup, and start Quist on login is also recommended.  This will ensure the availability of Quist after system updates or other necessary reboots.

Start Integrating!

Links to usage documentation and swagger page

Examples of basic HTTP calls in Quist

Below is an example of an HTTP call for retrieving a full list of Customers using either the basic API nomenclature or standardized ODATA nomenclature.

GET
https://{your-configured-url}/api/customers
GET
File icon
https://{your-configured-url}/odata/customers

You can get the a specific customer by specifying the QuickBooks ID using the HTTP calls shown below in both API and standardized ODATA nomenclatures.

GET
https://{your-configured-url}/api/customers/DF49C2-1729254460
Show more Show less
GET
File icon
https://{your-configured-url}/odata/customers('DF49C2-1729254460')
Show more Show less

Below is a simple example of an HTTP call for creating a new customer using either basic API or standardized ODATA nomenclature

POST
https://{your-configured-url}/api/customers
{
    "BillAddress": {
        "Addr1": "2758 Senger Falls",
        "Addr2": null,
        "Addr3": null,
        "Addr4": null,
        "Addr5": null,
        "City": "Turnerstead",
        "Country": null,
        "Note": null,
        "PostalCode": "55760",
        "State": "MN"
    },
    "CompanyName": "Senger Farms",
    "Email": "joyce.mitchell@test.com",
    "FirstName": "Joyce",
    "FullName": "Mitchell, Joyce",
    "IsActive": true,
    "LastName": "Mitchell",
    "Name": "Mitchell, Joyce",
    "Notes": "Our first customer inserted with Quist",
    "Phone": "218-461-4795",
    "ShipAddress": {
        "Addr1": "2758 Senger Falls",
        "Addr2": null,
        "Addr3": null,
        "Addr4": null,
        "Addr5": null,
        "City": "Turnerstead",
        "Country": null,
        "Note": null,
        "PostalCode": "55760",
        "State": "MN"
    }
}
Show more Show less
POST
File icon
https://{your-configured-url}/odata/customers
{
    "BillAddress": {
        "Addr1": "2758 Senger Falls",
        "Addr2": null,
        "Addr3": null,
        "Addr4": null,
        "Addr5": null,
        "City": "Turnerstead",
        "Country": null,
        "Note": null,
        "PostalCode": "55760",
        "State": "MN"
    },
    "CompanyName": "Senger Farms",
    "Email": "joyce.mitchell@test.com",
    "FirstName": "Joyce",
    "FullName": "Mitchell, Joyce",
    "IsActive": true,
    "LastName": "Mitchell",
    "Name": "Mitchell, Joyce",
    "Notes": "Our first customer inserted with Quist",
    "Phone": "218-461-4795",
    "ShipAddress": {
        "Addr1": "2758 Senger Falls",
        "Addr2": null,
        "Addr3": null,
        "Addr4": null,
        "Addr5": null,
        "City": "Turnerstead",
        "Country": null,
        "Note": null,
        "PostalCode": "55760",
        "State": "MN"
    }
}
Show more Show less

Below is a simple example of an HTTP call for updating an existing customer using either basic API or standardized ODATA nomenclature

PATCH
https://{your-configured-url}/api/customers/80000137-1702662018
{
    "ID": "80000137-1702662018",
    "EditSequence": "1702662018",
    "Phone": "218-461-3768",
    "ShipAddress": {
        "Addr1": "410 Hand Fall",
        "Addr2": null,
        "Addr3": null,
        "Addr4": null,
        "Addr5": null,
        "City": "Turnerstead",
        "Country": null,
        "Note": null,
        "PostalCode": "55760",
        "State": "MN"
    }
}
Show more Show less
PATCH
File icon
https://{your-configured-url}/odata/customers('80000137-1702662018')
{
    "ID": "80000137-1702662018",
    "EditSequence": "1702662018",
    "Phone": "218-461-3768",
    "ShipAddress": {
        "Addr1": "410 Hand Fall",
        "Addr2": null,
        "Addr3": null,
        "Addr4": null,
        "Addr5": null,
        "City": "Turnerstead",
        "Country": null,
        "Note": null,
        "PostalCode": "55760",
        "State": "MN"
    }
}
Show more Show less

Get a list of customers filtered by customer name:

GET
File icon
https://{your-configured-url}/odata/customers?$filter=contains(tolower(name),'danielle')

Get an invoice by its PO Number:

GET
File icon
https://{your-configured-url}/odata/invoices?$filter=PONumber eq '37947'

Get invoices fully expanded and with all invoice lines and items:

GET
File icon
https://{your-configured-url}/odata/invoices?$expand=*,ORInvoiceLineList($expand=InvoiceLine($expand=ORItem($expand=*)))

Get sales orders by transaction date range:

GET
File icon
https://{your-configured-url}/odata/salesorders?$filter=TxnDate ge 2024-10-13 and TxnDate le 2024-11-05

Search for sales orders by customer full name:

GET
File icon
https://{your-configured-url}/odata/salesorders?$filter=contains(tolower(CustomerID/FullName),'family farm')

Search for invoices by shipping zip code:

GET
File icon
https://{your-configured-url}/odata/invoices?$filter=ShipAddress/PostalCode eq '49307'

Get all non-inventory items:

GET
File icon
https://{your-configured-url}/odata/oritems?$filter=ItemType eq 'itemNonInventory'&$expand=ItemNonInventory($expand=*)
Show more Show less

Select a subset of fields for sales orders:

GET
File icon
https://{your-configured-url}/odata/salesorders?$select=ID,RefNumber,EditSequence,PONumber,TxnDate,ShipDate,TxnType,CustomerID,DataExtList