# Catalog items created via API never appear in the Dashboard item library list (visible in POS app and Dashboard search)

**URL:** <https://developer.squareup.com/forums/t/catalog-items-created-via-api-never-appear-in-the-dashboard-item-library-list-visible-in-pos-app-and-dashboard-search/27516>\
**Category:** Questions\
**Tags:** catalog-api\
**Created:** [September 8, 2026, 10:12am UTC](https://developer.squareup.com/forums/t/catalog-items-created-via-api-never-appear-in-the-dashboard-item-library-list-visible-in-pos-app-and-dashboard-search/27516 "2026-09-08T10:12:45Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![MND](https://avatars.discourse-cdn.com/v4/letter/m/d2c977/32.png) [@MND](https://developer.squareup.com/forums/u/MND)\
**Post date:** [September 8, 2026, 10:12am UTC](https://developer.squareup.com/forums/t/catalog-items-created-via-api-never-appear-in-the-dashboard-item-library-list-visible-in-pos-app-and-dashboard-search/27516/1 "2026-09-08T10:12:45Z")

</div>

Hi,

I’m running a self-hosted inventory system (FastAPI + SQLite) that syncs products to Square via the Catalog API. I’m seeing two issues I can’t explain, and I’d appreciate any insight.

**Environment**

- Square API version: `2025-01-23`
- Production environment
- Items created via `POST /v2/catalog/object` (upsert)
- Single location, `present_at_all_locations: true`

* * *

**Issue 1 — Items never appear in the Dashboard item library list**

After creating an item via the API, it does **not** appear in the Dashboard item library list. The exact behavior:

1. Create item A via the API
2. The Dashboard item library list shows it **immediately after the create action**
3. **Reload the browser → the item disappears from the list**
4. The item is still findable via the Dashboard **search box**
5. The item is visible in the **POS app (iPhone)**
6. `ListCatalog` and `SearchCatalogObjects` return it correctly

This is not eventual consistency. I have waited hours and the items never appear in the list view.

| How I check | Result |
| --- | --- |
| POS app (iPhone) | Visible |
| Dashboard search box | Visible |
| Dashboard item library list (after reload) | **Not visible** |
| `ListCatalog` / `SearchCatalogObjects` | Returned correctly |

Item and variation both have `present_at_all_locations: true`. `present_at_location_ids` and `absent_at_location_ids` are both `null`.

I’ve tried a different browser, an incognito window, logging out and back in, and a hard reload. No change.

It looks like the list view is built from an index these items never enter, while the post-create render and the search box use a different path. Has anyone run into this? Is there something in the item payload that determines whether an item is included in the list view?

* * *

**Issue 2 — Duplicate items accumulate, and deletions leave orphans**

When I query with `include_deleted_objects: true`, I find **13+ soft-deleted items sharing the same name** , each with a different catalog object ID. Something is repeatedly deleting and recreating the same item.

I also saw the catalog object ID change for what should be the same item:

```auto
Earlier: 4OPIUGK724FMOOG344G3ZKHB
Later: QL6ACNIWQY7PUMJGIHIWLOVW

```

Because of this, when my system deletes a product it sends a delete for the ID it has on record, but Square holds a different ID — so the item is left behind. My system currently has **0 products** , yet Square still has 2 live items.

I previously found and fixed a race on my side (an `inventory.count.updated` webhook echo triggered a second catalog create while the first was still in flight). I verified the fix with 29 consecutive create/delete cycles and zero duplicates. So either that regressed or there’s another path I haven’t found. I’m investigating locally, but I’d like to ask:

- **Can an upsert result in a new object ID rather than updating the existing object?** I send an `idempotency_key` on create.
- **Does a large number of soft-deleted objects (search returns 1000+) affect anything?** Can they be purged, or do they age out on their own?

* * *

I’m happy to provide catalog object IDs, the exact request payloads, and a full reproduction sequence.

Thanks.

---

<div class="post-metadata">

**Author:** ![heliodorof44](https://sea1.discourse-cdn.com/square/forums/user_avatar/developer.squareup.com/heliodorof44/32/12244_2.png) [@heliodorof44](https://developer.squareup.com/forums/u/heliodorof44)\
**Post date:** [September 8, 2026, 3:43pm UTC](https://developer.squareup.com/forums/t/catalog-items-created-via-api-never-appear-in-the-dashboard-item-library-list-visible-in-pos-app-and-dashboard-search/27516/3 "2026-09-08T15:43:40Z")

</div>

**Database Integration Next Steps**

To feed orphaned IDs automatically from your SQLite database into this endpoint, you can query records where your local sync state shows a mismatch or where items are flagged as locally deleted but still present in Square.

```auto
import sqlite3

def get_local_orphaned_ids() -> list[str]:
    conn = sqlite3.connect("inventory.db")
    cursor = conn.cursor()
    # Example query retrieving IDs marked as deleted locally
    cursor.execute("SELECT square_catalog_id FROM products WHERE status = 'orphaned'")
    rows = cursor.fetchall()
    conn.close()
    return [row[0] for row in rows]

```

Let me know if you want to wire this up directly into a periodic FastAPI background worker (`apscheduler` or `celery`) so it runs automatically.

---

<div class="post-metadata">

**Author:** ![MND](https://avatars.discourse-cdn.com/v4/letter/m/d2c977/32.png) [@MND](https://developer.squareup.com/forums/u/MND)\
**Post date:** [September 9, 2026, 12:06am UTC](https://developer.squareup.com/forums/t/catalog-items-created-via-api-never-appear-in-the-dashboard-item-library-list-visible-in-pos-app-and-dashboard-search/27516/4 "2026-09-09T00:06:26Z")

</div>

Thank you for your response. However, this does not address the issues I’m actually asking about.

I am **not looking for a workaround to automatically process orphaned IDs**. Before implementing any cleanup or background process, I need to understand **why these orphaned IDs are being created in the first place**.

Specifically:

1. **Why is Square generating a new Catalog Object ID for what should be the same item?**  
Can an `upsert` operation create a new object ID instead of updating the existing object under any circumstances? If so, what conditions cause this?

2. **Why do items created through the Catalog API disappear from the Dashboard item library list after a page reload, while they remain searchable, visible in POS, and retrievable through `ListCatalog` and `SearchCatalogObjects`?**  
What determines whether a Catalog Object is included in the Dashboard’s item library list?

These are not simply orphan-cleanup issues. They appear to indicate a problem with how the Catalog API and Dashboard are handling or indexing these objects.

I need to identify the **root cause** , not simply build a mechanism to clean up the symptoms afterward.

Could you please address these two questions directly?

---

<div class="post-metadata">

**Author:** ![MND](https://avatars.discourse-cdn.com/v4/letter/m/d2c977/32.png) [@MND](https://developer.squareup.com/forums/u/MND)\
**Post date:** [September 10, 2026, 7:45am UTC](https://developer.squareup.com/forums/t/catalog-items-created-via-api-never-appear-in-the-dashboard-item-library-list-visible-in-pos-app-and-dashboard-search/27516/5 "2026-09-10T07:45:22Z")

</div>

**Additional information — the same discrepancy can be reproduced directly via the Square API**

I have now confirmed that this is not limited to the Dashboard UI. The discrepancy can also be reproduced directly through the Square API using the same merchant account and access token.

At approximately 22:03 JST on September 7, 2026, I received the following results:

```auto
GET /v2/catalog/list?types=ITEM
→ HTTP 200 / 7 items

POST /v2/catalog/search
{"object_types":["ITEM"]}
→ HTTP 200 / 7 items

POST /v2/catalog/search-catalog-items
{"limit":100}
→ HTTP 200 / 0 items

POST /v2/catalog/search-catalog-items
{"limit":100, "text_filter":"tune"}
→ HTTP 200 / 5 items

POST /v2/catalog/search-catalog-items
{"limit":100, "enabled_location_ids":["LMRCDYCPZ5P8G"]}
→ HTTP 200 / 0 items

POST /v2/catalog/search-catalog-items
{"limit":100,
 "text_filter":"tune",
 "enabled_location_ids":["LMRCDYCPZ5P8G"]}
→ HTTP 200 / 5 items

```

This is particularly significant because the catalog contains 7 active ITEM objects according to both `ListCatalog` and `SearchCatalogObjects`, while `SearchCatalogItems` returns **zero items when no text filter is specified**.

Adding a `text_filter` causes 5 of the 7 items to be returned. Adding `enabled_location_ids` alone still returns zero, while combining it with the text filter again returns 5 items.

All of these requests were made against the same merchant account, using the same access token, at approximately the same time.

There is no API error; `SearchCatalogItems` returns HTTP 200 with an empty `items` array.

This appears to be consistent with the Dashboard Item Library behavior I described above: the catalog objects clearly exist and are retrievable through the Catalog API, but they are not returned by the unfiltered item search/listing path.

Could you please investigate whether there is an issue with the backend index or query used by `SearchCatalogItems` for this merchant account?

If possible, I would also appreciate it if Square could run the same unfiltered `SearchCatalogItems` request on its side and confirm whether it also returns zero items.

---

<div class="post-metadata">

**Author:** ![MND](https://avatars.discourse-cdn.com/v4/letter/m/d2c977/32.png) [@MND](https://developer.squareup.com/forums/u/MND)\
**Post date:** [September 11, 2026, 7:21am UTC](https://developer.squareup.com/forums/t/catalog-items-created-via-api-never-appear-in-the-dashboard-item-library-list-visible-in-pos-app-and-dashboard-search/27516/6 "2026-09-11T07:21:36Z")

</div>

Thank you for your investigation and support.

I have confirmed that the issue has now been resolved. Items created through the Catalog API are now appearing in the Dashboard Item Library immediately and remain visible after refreshing the page.

I also confirmed that the previously missing items are now visible again.

Thank you to the Square engineering team for looking into this and resolving the issue.

---

<div class="post-metadata">

**Author:** ![heliodorof44](https://sea1.discourse-cdn.com/square/forums/user_avatar/developer.squareup.com/heliodorof44/32/12244_2.png) [@heliodorof44](https://developer.squareup.com/forums/u/heliodorof44)\
**Post date:** [September 19, 2026, 7:23pm UTC](https://developer.squareup.com/forums/t/catalog-items-created-via-api-never-appear-in-the-dashboard-item-library-list-visible-in-pos-app-and-dashboard-search/27516/7 "2026-09-19T19:23:35Z")

</div>

This post was flagged by the community and is temporarily hidden.

---

<div class="post-metadata">

**Author:** ![heliodorof44](https://sea1.discourse-cdn.com/square/forums/user_avatar/developer.squareup.com/heliodorof44/32/12244_2.png) [@heliodorof44](https://developer.squareup.com/forums/u/heliodorof44)\
**Post date:** [September 19, 2026, 7:25pm UTC](https://developer.squareup.com/forums/t/catalog-items-created-via-api-never-appear-in-the-dashboard-item-library-list-visible-in-pos-app-and-dashboard-search/27516/8 "2026-09-19T19:25:47Z")

</div>

This post was flagged by the community and is temporarily hidden.
