Fishbowl 2026.10: an interrupted QuickBooks export no longer creates a duplicate invoice
Fishbowl released 2026.10 (26.10) on October 27. The news for anyone running the QuickBooks Online connection is the first fix below: an export that dies part way through no longer leaves you with two invoices for the same order. There are a few more accounting fixes alongside it, a round of REST API additions, and a change to how BI Report settings are saved.
The accounting fixes that matter
This is our corner, so it goes first.
- An interrupted QBO export no longer creates a second invoice. When an export failed part way through, Fishbowl reported the order as an error even though the invoice had already been created in QuickBooks Online. Running the export again then made a second invoice for the same order. 26.10 records that an export was interrupted (a new
exportFailedflag on the order) and, on the next run, checks QBO for the existing invoice instead of creating another. This is the same family of problem as the duplicate charges in 26.9 and the duplicate invoices in 26.7: a run that dies mid-flight leaving the books double-counted. Duplicates created before 26.10 are still sitting in QuickBooks. - Orders with date-shaped part numbers export again. A part or product numbered like a date, for example
6801-08-10, stopped the export in Data Validation claiming the item name already exists. QuickBooks Online was reading the number as a date when it looked the item up. 26.10 gets these orders through. - Bills export for a reconciled PO that is not fully received. When a purchase order was reconciled but not fully received and carried landed costs such as shipping or tariffs, the bill export stopped and asked the user to fill out at least two detail lines, which had nothing to do with the real problem. That export now completes.
- QBO connects without the AI Insights or ShipExpress plugins installed. The integration quietly depended on two libraries that only those plugins supplied. So on a server where those plugins had been removed — often because nobody was using them — connecting to QuickBooks Online suddenly failed, even though QBO itself had nothing to do with them. The integration now carries what it needs on its own, so removing an unused plugin no longer breaks the accounting connection.
If you take cards or run the QBO connection and your clearing or AR accounts have never quite tied out, the first item here is worth a close look.
REST API
The REST API keeps filling in the gaps that forced integrations to fall back to the legacy API or to the client.
- Picks: start or release a single line.
POST /api/picks/:id/items/:itemId/startstarts one line and gives it a source location without touching the rest of the pick.POST /api/picks/:pickId/items/:pickItemId/unholdreleases a line from hold and sources it again; a line that finds no inventory comes back Short, which is a success, not an error. - Receiving search.
GET /api/receivingreturns a paged list of receipts filtered by order number, status, location group, and the rest of the criteria the Receiving module offers. The search covers receiving and reconciling together, the way the module does. - Transfer order access, reported by the API.
GET /api/transfer-orders/:idnow returns areadOnlyflag and anactionsobject with one flag per available action, so a client no longer has to reimplement Fishbowl’s transfer order access rules to decide which buttons to light up.
A few REST fixes are worth noting too:
- Splitting a shipment through the REST API now carries each item’s serial numbers to the new shipment. Before this they were not linked, and voiding the pick could leave the shipment unreadable in both the client and the API, which took a database fix to recover.
- Sales orders created through the REST API now get the same Date Scheduled and expiration defaults the client applies. Without them, picks from those orders never showed up in the Picking module search and the orders never expired.
- The documentation for starting a pick was corrected: a tag is chosen when a pick is finished, not when it starts, and the example response had the items in the wrong shape.
BI Report: each user keeps their own settings
Saved BI Report settings now belong to the person who saved them, in a new bireportparameters table. Two people can run the same report with different settings, and saving no longer rewrites the report for everyone else. A user who never saved settings sees the report’s defaults; deleting their settings returns them to the defaults. On a dashboard, a BI Report widget uses the settings of whoever is viewing.
The access model changed with it. The “Edit Settings” access level is gone; BI Report access is now None or View, and View is enough to change and save your own settings. None still cannot see or run the report. After the upgrade, existing saved settings are copied into the new table for each user who has access.
One related fix: the Stock Adjustment Value by Month widget on the Inventory Dashboard now matches the Adjustment report for the same period. On databases using FIFO or LIFO costing it could report a much higher number.
Smaller items worth knowing
- Xero takes four decimal places on cost. A unit cost such as
0.1334now reaches Xero at that precision instead of being rounded to0.13. - Keep the tax rate when duplicating a sales order. A new SO option, “When duplicating SO set order Tax Rate to None,” is on by default and matches past behavior. Turn it off and the tax rate is copied to the duplicate instead of cleared, for both Duplicate and Duplicate as Credit Return. It only appears for companies on Avatax or QBO Automated Sales Tax.
- User Group Rights is now a standard CSV import and export. It shows up in the Import and Export lists and can run from the client or the REST API. The import treats the file as the source of truth: after it runs, each group in the file has exactly the rights the file lists, and anything not listed is removed. Groups not in the file are left alone. New import and export rights are granted to no group on upgrade, so only the admin can run them until you grant the right.
- Save a default advanced search on Part and Product. The module opens already filtered instead of rebuilding the filter each session. The default is saved on that workstation, the same way other saved searches are, so everyone at that machine gets it.
And the housekeeping
A What’s New screen now appears at the first login after an update. AI Chat is available to customers in the Asia Pacific region, with handoff to a support technician during APAC hours. New and demo databases open the current Inventory Dashboard rather than the Classic one; existing databases are unchanged. There are also fixes to repair work orders, negative quantities on bill of materials imports, zero-quantity transfer order lines blocking receiving, and license keys with an expiration date being reported as permanent.
Upgrade notes
The usual caveats carry over from the Java 21 releases and nothing has changed, but glance at them if any apply. Fishbowl Anywhere users, and anyone running a plugin built onto Fishbowl itself, should stay on 2025.9; integrations that connect from outside over the REST or legacy API are unaffected, so if we built the connection between Fishbowl and your other systems it is almost certainly fine. Upgrades from 2025.9 or older still need the server updated by hand before the clients. MySQL 5.7 is not supported, and MySQL 8.0, though past end of life, is still supported through the January 2027 release, so the auto-update keeps your current 8.0 installation.
Two things stand out this month. The interrupted-export fix closes a real way QBO ended up with duplicate invoices, and like the duplicate fixes before it, it does nothing about the duplicates already in your books. And the REST API is close to the point where a serious integration no longer has to touch the legacy API.
If your QuickBooks Online or Xero numbers have never tied back to Fishbowl and you want to know whether one of these is why, get in touch.