Possible race condition between Square-to-Square Online sync when using UpsertCatalogObject API calls

Because of the way our business operates, each of our items in our Square online store has its own “Select Your Pickup Date” modifier list that contains the dates the respective item is available for pickup. We have a separate web application that I developed which uses the Square API to modify the pickup dates in those modifier lists as needed (with UpsertCatalogObjectRequest calls - C# SDK), which can happen frequently (sometimes multiple times per day). This has all worked fine for the last 3 years up until about a few weeks ago when something changed on the Square side. In these last few weeks, we’ve see multiple issues where the “Select Your Pickup Date” modifier is correct in Square “proper” (POS and Dashboard), but intermittently isn’t correct in our Square Online store on some items. Specifically we’ve seen the following:
– The “Select Your Pickup Date” modifier list on several random items in the Square Online store will intermittently not show all the entries that are actually present in the modifier list as seen in the backend Square Dashboard. We can temporarily rectify it in the moment by making an arbitrary manual change (re-ordering modifiers, changing description, etc) to the associated item in the backend Square dashboard to force it to sync the item and all of its objects to Square Online, but we never know if/when Square Online will get in that bad state again after the next UpsertCatalogObjectRequest call for that modifier list.
– Sometimes the “Select Your Pickup Date” modifier list for an item will randomly disappear entirely from our Square Online store, even though the modifier list is still associated with the item in the backend Square Dashboard. This I can also rectify in the moment by making a manual change to the item in the backend Square dashboard (re-ordering modifiers, changing description, etc) that forces a sync of the item back to Square Online and then the “Select Your Pickup Date” modifier shows up again in the Square Online store. That’s not actually a fix though, because we never know when they’re going to disappear from that item or others again the next time UpsertCatalogObjectRequest is called to change the contents of the modifier list.

The above issues happen intermittently but frequently when the “Select Your Pickup Date” modifier list gets updated by my web app via the API. Obviously I don’t know anything about the inner workings of Square’s API handling or syncing between Square and Square Online, but based on the behavior I’m seeing, it looks like there might be a race condition between the API handler and the sync process, where the API handler might be indicating to Square Online that updates need to be synced for an object before it’s actually done committing the changes to the data source that Square Online pulls from. Then, depending on the timing of Square Online trying to pull the updated object data, it’s sometimes incomplete or missing because the API handler hasn’t finished committing the changes. That’s just a theory - of course, it could also be something buggy strictly on the Square Online side with their sync processing. Either way, it just started happening the last month or so and it’s very disruptive to us since the affected modifier lists are fundamental to the ordering processing for our customers.

Is this something the Square API devs/gurus could look into to see if it’s something on the API handling side?

:waving_hand: I’m Square Dev AI, here to help answer your question!
Based on the information you’ve provided, the following documentation will help answer your question:

Additional Documentation

Verify your Pickup Order
Take a Pickup Order and Pay for It
Add Custom Attributes

If this documentation helped you find a solution, please check the box indicating that this reply solves the problem.
Otherwise one of our Developer Advocates will provide additional assistance shortly.

Do you have any screenshots of this and the catalog_object_ids of the items? :slight_smile:

Here’s one example I was able to induce on a test item this evening, though in this particular case, the modifier list eventually showed up correctly after I got the screenshots. For this example, the item ID is IDQ4RHKEP36XFMYNTNTTX3YD and the modifier list ID is C65DIDAEAHQAMUFV2XSHLDHX. As you can see from the following two screenshots, Square Online was missing the final two entries in the modifier list.


As I said, in this case it eventually showed up correctly in Square Online, but that doesn’t always happen without manual intervention. It’s also not easy for me to induce examples now, because I added processing in my web app to programmatically do what we’ve been having to do manually to get the modifier list showing correctly in Square Online (arbitrarily update something about the associated item some time after updating the modifier list - in the case of the web app I’m changing the value of an otherwise unused custom attribute on the items now).

Here’s another example on a different item from today. Item ID is TVCLIFE4YEO6PB6WH2JMAQ3J and Modifier List ID is NRJAVIV3P6CGFQSY7J6YJ7ZN. As you can see from the following screenshots, Square Online is missing all the entries that come after 4/19/2025 (Square Online is showing less than half of the entries that are actually in the modifier list):


Also, I backed out the change I mentioned that was programmatically attempting to force a subsequent sync to Square Online, so I could continue characterizing the problem. For the most recent example I posted, the API call to change the modifier list would have occurred around 2PM Central. It’s now 20 minutes later and Square Online still only shows what’s in the screenshot. Based on what I’ve seen over the last few weeks, it will remain that way indefinitely unless I manually make another change to the associated item to force another sync to Square Online.

Thanks for providing the examples. Sharing with the team. :slight_smile:

Thank you very much for looking into this.

Here’s another example from today, if it’s helpful. Item ID is FLWD2XPVR7AGM66DRKG6T5BX and Modifier List ID is TXJJIMWFZVYZ2DQD33KWGYFT. The API call to update the modifier list was made around 4:45PM Central. Here are the screenshots where you can see the last 6 elements are missing in the modifier list on Square Online:


Hi @Bryan-Square. Just wanted to check in and see if there has been any progress investigating this. Although it’s intermittent, it happens more often than not on our account at least. If it’s not some oddity specific to our account, it should be fairly easy to reproduce on a test account that has Square Online by using the API to update the elements in a modifier list that is associated with an item and then see what shows in Square Online for that item after Square Online syncs the change. It should only take a few tries of calling the API to see it happen, if the manifestations on our account are any indication. The tricky thing is, Square Online syncing sometimes takes several minutes and doesn’t seem to have consistent timing, so you have to wait 15 minutes or so between attempts to see if the problem has manifested.