Difference between /catalog and /library/items

Attempting to assist my wife and not understanding Square.

I have a folder locally that has 4000 photos - trying to upload them through the API.

When I create a catalog item, it succeeds but it never shows up in the web (when I go to Dashboard -> Items ( url: https://squareup.com/dashboard/items/library ).
REF: https://developer.squareup.com/reference/square/catalog-api/upsert-catalog-object

When I go to Dashboard -> Items and click New Item & attach a photo - it shows up instantly.

Am I misunderstanding the difference between the catalog and the library?

Hey there – Are you creating an Item and a Variation? See our quick walkthrough here for an explanation. Variations are the actual “thing” being sold, and is considered a sub-set of Items.

When you create an item through our dashboard or mobile app, we automatically create a variation called “Regular” for you.

I think just an item (with an image) ?

request = {
“idempotency_key”: repr(guid.bytes),
“image”: {
“type”: “IMAGE”,
“id”: “#df5443”,
“is_deleted”: False,
“version”: 23,
“present_at_all_locations”: True,
“image_data”: {
“name”: “pic”,
“caption”: “pic”
“item_data”: {
“name”: “TESTING!”,
“description”: “this is a test upload”,
“available_online”: True,
“available_for_pickup”: True,
“available_electronically”: True
image_file = f_stream

the reply goes through and gives me the expected response - but I never see the item turn up on https://squareup.com/dashboard/items/library

An item needs a variation before it will show up in the dashboard, so you will need to include (or add later) a variation to see it show up. An item itself can’t be sold as mentioned by @wiggins above; a variation is required.

I think I understand now - was able to set an item successfully and have it show up.

Only missing 1 piece now - how do you set the visibility when creating the item? All my items are initially Unavailable.

I actually don’t think there is a way to do that unfortunately. I think this is tied to the ecom_available field, which is read-only at this time and can’t be set by the API.