Summary
Using a public app’s offline Admin API token, one existing and published collection cannot be read through the Collection object:
collection(id:) returns null
node(id:) returns null
collections(query: "handle:...") returns no results
collections(query: "title:...") does not include it
However, the collection:
- Exists in Shopify admin
- Is published to multiple sales channels
- Appears on the storefront
- Returns the expected products through
products(query: "collection_id:...")
The issue persists across multiple requests and days, so it does not appear to be indexing delay. Other collections are readable with the same token.
Reproduction
Using Admin API 2026-01 and an app offline token:
collection(id: "gid://shopify/Collection/<id>") {
id
title
handle
}
Returns:
{ "data": { "collection": null } }
node(id: "gid://shopify/Collection/<id>") {
__typename
... on Collection {
id
title
}
}
Also returns null.
collections(query: "handle:<handle>", first: 5) {
edges {
node {
id
}
}
}
Returns no results.
By contrast:
products(query: "collection_id:<legacy_id>", first: 250) {
edges {
node {
id
title
}
}
}
Returns the expected products.
Questions
Could this be related to the collection’s type or configuration, such as automated/manual rules or exclusions? Or could it indicate a data-integrity issue?
Is products(query: "collection_id:<legacy_id>") the supported way to retrieve membership in this situation? Is there another supported method for reading the collection object by ID?
Hey @Daniel_Moseley - thanks for flagging this.
These symptoms appear to line up with the changes introduced by Shopify’s new Collection model. The collection might be using one or more new source features.
Collections using new source features are intentionally filtered from API versions before 2026-07 because the legacy ruleSet model can’t represent them. This could explain why the collection is missing from collection(id:), node(id:), and searches in 2026-01, while the supported collection_id product filter can still return its membership.
Could you retry the same collection(id:) query against API 2026-07? Shopify’s Collection model changelog confirms that 2026-07 and later return these collections. If it still returns null, please share the x-request-id from that 2026-07 response and I can investigate this further.
Hope this helps!
Hey @Wes-Dev-Shopify
Thanks for getting back to me so quickly. I can confirm that the collection returns null on 2026-01 via collection(id:), node(id:), and handle/title search, but resolves correctly on 2026-07. The collection_id: product filter returns membership on both.
The filtering itself is fair enough due to the model changes, but really the issue is that a filtered collection comes back as a plain null (and empty search results), byte-for-byte identical to a deleted or nonexistent one. There’s no error, userError, or extensions warning to tell “filtered for this API version”. On a still-supported version that’s easily interpreted as missing data; our app read it as an empty collection and a merchant-facing feature silently failed and did nothing, with no error to catch.
I’ll work around it for now, but just some feedback for the team to ideally return an explicit signal instead of null when a collection is filtered for representability. That’d let apps detect it and prompt an API upgrade rather than fail silently. We’re migrating to 2026-07 regardless since collections are a big part of what our app does, but any app on an older supported version hits this blind.
Thanks again!