QuickBooks Online SyncToken conflicts and Duplicate Name Exists errors: the entity model, not the accounting, is what actually breaks integrations
QuickBooks Online's API punishes two very different mistakes the same way: a rejected write. Every entity carries a SyncToken, a version number QBO increments on every change; send an outdated one and the update fails outright with a Stale Object Error, no way to force it through. Separately, QBO enforces one shared name across Customers, Vendors, and Employees, even inactive ones; try to create a customer with a name already used anywhere in that list and you get a Duplicate Name Exists error. Neither is a QBO bug. Both are the entity model working exactly as designed, and both need to be handled in code, not around it.
Optimistic Locking, Not a BugSyncToken versions every entity; an outdated one is rejected outright as a Stale Object Error
One Name, Three ListsCustomer, Vendor, and Employee share a single namespace, inactive records included
InfiPlex Avoids BothSyncTokens are cached and retried on conflict; names are matched by Id, never blindly created into a collision
Why these keep happening
Two mechanics, one outcome: a rejected write
QuickBooks Online's API is built around its accounting data model, and two of that model's core rules cause most of the write failures integrations run into that have nothing to do with accounting logic. One is version control: every entity is locked against being overwritten by a stale copy. The other is a naming rule: three entirely different entity types share one naming space. Both are enforced the same way, a flat rejection of the write, and both are avoidable once an integration is built to expect them.
SyncToken
QuickBooks' optimistic concurrency lock
Every writable QuickBooks Online entity carries a SyncToken, a version number that increments each time the entity is modified. Any update or delete call must include the entity's current SyncToken. If the token sent is older than the one QuickBooks currently has on file, meaning something else, the client's own QBO session, another integration, a second process, modified the record since it was last read, the write is rejected outright as a Stale Object Error. There is no override; the only path forward is to re-fetch the entity, take its current SyncToken, and retry.
This is optimistic locking, not a defect: QuickBooks is explicit that only the latest version of an entity is maintained, and an attempt to modify it with an older SyncToken will fail by design. For any integration syncing on a schedule while the client can also edit records directly in QuickBooks, a stale SyncToken is a routine, expected event, not an edge case, and needs retry logic built in from the start rather than treated as an occasional bug.
Duplicate Name Exists
One namespace for Customer, Vendor, and Employee
QuickBooks Online requires the DisplayName on every Customer, Vendor, and Employee to be unique, not within each list separately, but across all three combined, and that check includes inactive records still sitting in the account. Creating a new Customer named the same as an existing Vendor, even one nobody has touched in years, fails outright with a Duplicate Name Exists error. For a multichannel seller, this shows up in an easy-to-miss way: the same brand name, a marketplace or a channel, ending up needed as both a customer (the source of a sales deposit) and a vendor (the destination of a refund or reimbursement) is enough to trigger it.
Intuit's own developer relations guidance on this error recommends caching the Id and name of every Customer, Vendor, and Employee record, keeping that cache current via Change Data Capture or webhooks, and checking it before ever attempting to create a new one. That is a data-matching problem to solve before the write, not a retry to attempt after it fails.
Errors
What each one actually looks like
Error
HTTP / code
What it means
Stale Object Error
400 · 5010
The SyncToken sent with an update or delete is older than the one QuickBooks currently has; something else modified the entity first
Duplicate Name Exists Error
400 · 6240
The DisplayName being created or set already belongs to a Customer, Vendor, or Employee, active or inactive
Automation
How InfiPlex handles both
For SyncToken conflicts, InfiPlex reads and stores the SyncToken every time it pulls a QuickBooks Online entity, and if an update collides with a newer version, it automatically retries the request rather than surfacing a failure that needs manual attention.
For name collisions, InfiPlex checks its own synced list of QuickBooks customers for an exact DisplayName match before referencing one on a transaction. When a match exists, InfiPlex references that customer by its QuickBooks Id rather than by name, which carries no collision risk at all. When no match exists, InfiPlex does not attempt to create a new customer on the fly, since a blind create is exactly what risks a Duplicate Name Exists error against an existing Vendor or Employee; the transaction still posts in QuickBooks, simply without a customer reference attached, rather than risk breaking the sync over one unmatched name. In practice that trade-off is what keeps sync running instead of stopping on an error a human then has to go clear by hand.
It's a version number QuickBooks Online keeps on every writable entity, incremented on each change. Every update or delete must include the entity's current SyncToken; an outdated one is rejected, so any integration writing to QBO needs to always use a freshly-read token, not a cached one from earlier.
Sending an update or delete with a SyncToken that's older than the one QuickBooks currently has on file. That happens whenever something else, the client's own QBO session, another integration, a second sync process, modified the entity since it was last read.
Re-fetch the entity to get its current SyncToken, then retry the write with that token. There's no way to override or force a write past a stale token; a retry with the current one is the only path forward.
An error returned when the DisplayName being set on a new or updated Customer, Vendor, or Employee already belongs to another record of any of those three types.
Yes. QuickBooks Online's uniqueness check includes inactive records, so a name attached to a Customer or Vendor that hasn't been touched in years can still trigger a collision.
InfiPlex checks its own synced QuickBooks customer list for an exact DisplayName match before referencing one on a transaction, and links by QuickBooks Id when a match is found, which carries no collision risk.
It's not a hard guarantee against every possible edge case. If no exact match exists in InfiPlex's synced list, InfiPlex does not attempt to create a new customer on the fly, since that risks colliding with an existing Vendor or Employee name. The transaction still posts in QuickBooks, just without a customer reference attached, rather than risk breaking the sync.
InfiPlex stores the SyncToken every time it reads a QuickBooks Online entity, and automatically retries the write if a conflict occurs, rather than surfacing a failure that needs manual attention.
Because multichannel sellers are more likely to have the same name doing double duty, a marketplace as both a customer and a vendor, and more likely to have an integration and their own QuickBooks session touching the same records around the same time, both of which are exactly the conditions that trigger these two errors.
Clearing Stale Object or Duplicate Name errors by hand?
We connect QuickBooks Online for multichannel sellers every week, SyncToken handling and name matching included. Tell us what's breaking and we'll help you find the actual cause. Contact us, email info@infiplex.com, or call 888‑770‑0857.
Our website uses cookies to help provide the best user experience. By continuing to use this site, you consent to the use of cookies as described in our Privacy Policy. OK