Online visibility using "channels" attribute doesn't change product visibility

I am currently trying to migrate an inventory system to Square. I have ensured the csv column “Square Online Item Visibility” says “visible”, but this doesn’t make the product appear on the website.

I figured the API should allow this, and it seems to, using the upsert catalogue object POST request under the item_data field with a “channels” array.

The problem is, I retrieve the object using its ID via a GET request and POST it back, adding in the various fields (channels, preferences etc), but the channels field is never actually applied to the object.

I know the endpoint accepts a channel input as it produces an error if you do not input an array, but it just never applies it to an item.

This is incredibly frustrating as the initial import does NOT work for some reason in making items visible online, and the API doesn’t work either, which means I now need to spend a day going through thousands of items and manually applying their online visibility.

Am I doing something wrong, or is this a bug?

I am using the following python script. I have tested with JUST the channels parameter btw and not including all the extra stuff, it makes no difference: the products never get assigned to an online channel.

:wave: 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
Catalog API
Inventory API: How It Works

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.

Currently, the ability to update the channels array isn’t currently available. We’re constantly working to improve our features based on feedback like this, so I’ll be sure to share your request to the API product team. :slightly_smiling_face:

Cheers Bryan, thanks for taking the time.

It might be worth updating the documentation to reflect this. While it does say “BETA” against the field under “item data,” it is not clear at all that this is a read-only parameter. It would’ve saved me a ton of time if this was more obvious. It’s made even worse that in the API Explorer sandbox, the ‘channels’ field IS available to use in the Upsert catalog object endpoint. This should probably be disabled too if it isn’t actually a feature.

I also am wondering why it returns an error of “expected an array” when trying to write a non-array value to channels if indeed it is not an editable parameter? Why would the Square devs decide to not parse this information?!

This is actually a bit of a glaring hole in Square’s potential. I love your ecosystem, and it’s really slick for business owners, it’s just lacking in so many (often basic) ways. I am trying to setup a few businesses with Square, migrating from old systems. Each of these businesses has MULTIPLE websites for their inventory. The import csv template only offers one option of “Online visibility”. This is completely useless if you have two websites. And now since there is no API function to update a product’s online visibility, you’re condemned to manually adjusting thousands of items to ensure they are assigned to the correct website. Possible, yes, but pretty ridiculous given the otherwise pretty robust API.

Is there perhaps some other method in the API for achieving what I need? A crying shame if there isn’t.

We’re constantly working to improve our features based on feedback like this, so I’ll be sure to share your request to the API product team. :slightly_smiling_face: