Unpacking the Shopify Custom Packaging API: A Community Deep Dive into Missing GraphQL Queries
Hey everyone! As your friendly Shopify migration expert and community analyst, I spend a lot of time sifting through discussions that truly matter to store owners and developers alike. Recently, a fascinating thread popped up on the Shopify forums that really hit home for anyone building apps or custom integrations, especially around shipping and fulfillment. It was titled “REQUEST: GraphQL call for Custom Packaging” – and boy, did it unpack a lot more than just a simple request!
The original post, kicked off by EdEstes, highlighted a pretty significant challenge: the inability to programmatically read a store’s pre-configured custom packaging dimensions and weights via the Shopify Admin API. Think about it – if you’re building an app that helps merchants manage shipping, calculate rates, or print labels, you’d naturally want to pull the packaging info they’ve already set up in their Shopify Admin, right? You’d want Shopify to be the “source of truth.”
The GraphQL Conundrum: A Missing Piece of the Puzzle
EdEstes initially noted that the AI help system confirmed what many suspected: while there are GraphQL mutations like shippingPackageCreate, shippingPackageUpdate, and shippingPackageDelete (or so the AI thought!), there’s no dedicated query to list or fetch these saved packages. This means if a merchant has already defined their “Small Box” or “Custom Poly Mailer” in their Shopify settings, your app can&rsquot simply ask Shopify, “Hey, what packages does this store have?”
This led to a fantastic discussion where community members like lumine, cuongnm_trooix, and Maximus3 really dug into the nitty-gritty of the Admin GraphQL API. And what they found was even more intriguing – and frankly, a bit more problematic – than just a simple read operation.
It’s Not Just a Missing Query, It’s a Deeper Gap
Lumine, a sharp contributor, pointed out that the gap is actually “wider than a missing read.” They meticulously reviewed the published Admin GraphQL surface and discovered a critical detail: there are indeed shippingPackageUpdate, shippingPackageDelete, and shippingPackageMakeDefault operations. However, all three require a shippingPackageId as a mandatory argument. The kicker? There’s no public shippingPackageCreate mutation. That’s right, the AI’s suggestion was off!
Even more perplexing, there’s no public call anywhere that produces a shippingPackageId. This means the existing update, delete, and make-default mutations are essentially unreachable unless you somehow got an ID from outside the API. As lumine put it, “So there is no public call anywhere that produces a shipping package ID, and the three mutations that require one are unreachable unless something outside the API gave it to you.” This is a much stronger argument for a feature request than just a missing query.
Cuongnm_trooix reinforced this, sharing that Shopify staff had confirmed – as recently as June 2026 (likely a typo for 2023/2024 in the original post, but the point stands!) – that there’s still no public Admin API query for listing a shop’s configured shipping packages, and shippingPackageId remains write-only. They also confirmed the absence of shippingPackageCreate in the public API.
Maximus3 echoed these findings, confirming the legitimate gap and the “odd situation where the API gives you operations requiring a package ID without an apparent documented way to discover the merchant’s existing packages and their IDs.” He further noted that the __type(name: "QueryRoot") { fields { name } } introspection query isn’t definitive proof on its own, but combined with staff confirmation, it’s strong evidence.
Why This Is a Headache for Existing Stores and App Developers
The initial advice often given for such API gaps – even by Shopify’s own AI help system – is to “Sync & Store Locally.” This means when your app creates a package, you save its details and ID in your own database, making your app the source of truth for packages it creates. However, as EdEstes brilliantly highlighted, this strategy completely fails for existing stores.
If a merchant has been running their Shopify store for years and already has a dozen custom packages defined in their Admin, your app needs to be able to read those existing definitions to properly integrate. Asking them to re-enter all that data into your app is not only a terrible user experience but also introduces potential for errors and data drift. It defeats the purpose of Shopify being the central hub for their business.
M.Rahman aptly summarized it: “for onboarding existing stores with pre-configured packaging data, a local sync strategy fails because there is no baseline data to sync from.” This means developers onboarding established merchants hit a roadblock because the Admin UI uses internal GraphQL/REST endpoints that aren’t exposed publicly.
Limited Workarounds and How to Push for Change
So, what are the options if you’re facing this right now?
-
For Label Purchase & Rate Calculation: Lumine and M.Rahman pointed out that if your goal is solely to feed label purchase or calculate rates, you might not be entirely blocked. The
ShippingLabelPurchaseInput.packageInfotakes aPackageInfoInput, which allows you to pass custom package dimensions and empty package weight inline. Shopify’s own label path doesn’t read the stored templates directly; it expects the caller to supply the box details. So, you can pass package info dynamically without needing to fetch saved templates. - The “Nobody Wants” Option: For respecting a merchant’s existing packing logic, the only current recourse is to have them manually re-enter their package data within your app, perhaps storing it in a shop metaobject. This is far from ideal, but it’s the reality if you need those exact dimensions for your app’s logic.
Ultimately, the consensus from the community is clear: a supported read/list endpoint for custom shipping packages is the crucial missing piece. It would allow Shopify to truly be the “source of truth” and enable seamless integration for apps.
If you’re a developer or a partner impacted by this, here’s how the community suggests you can help prioritize this feature:
- Submit via Partner Dashboard: If you’re a registered Shopify Partner, raise an API Feature Request directly through your Partner Dashboard support channel. Be specific about the use case: “Need a public GraphQL shippingPackages query for existing store onboarding.”
-
Engage the Developer Community: Post your specific use case in the official Shopify Developers Discord or the
shopify-api-node/ GraphQL API GitHub feedback repo. These channels often get direct visibility from Shopify Developer Advocates.
This discussion really highlights how vital community feedback is for shaping the Shopify ecosystem. It’s a powerful reminder that even with a robust platform, there are always areas for growth, and our collective voice can help guide those improvements. Here’s hoping Shopify’s engineering team takes note and provides us with that much-needed read query for custom packaging soon!