suddenly, from last Tuesday about 20:00 UTC, the Shopify GraphQL API is often not sending complete info in the “exetensions.cost.throttleStatus” object, and there are no errors.
I don’t have concrete examples yet of what the API is sending in “extensions” but I am going to work on getting them, but at least now I can confirm that:
the “exetensions.cost.throttleStatus.currentlyAvailable” field is not present or it does not have a value
Hi @sinuhe, I’ve taken a look into this internally. We haven’t seen other reports of this, so it would help to narrow down what’s happening in your case specifically.
When you get a response where extensions.cost.throttleStatus is missing or incomplete, could you share:
The raw response body, including the full extensions object
The HTTP status code for that request
The x-request-id response header
Those details let us trace the individual request on our side and pin down where the field went missing. A capture from one good request and one bad request around the same time would be ideal. Thanks!
Same issue here on a public app, API version 2026-04.
2026-09-10, 12:23:38 to 12:32:24 UTC: 25 Admin GraphQL calls failed, then it stopped on its own. Nothing since.
In our case the entire throttleStatus object was absent from extensions.cost, not just currentlyAvailable. extensions.cost itself was present.
Affected every query the app makes: shop, currentAppInstallation subscriptions, productVendors, collections, products.
All traffic in that window came from Shopify-provisioned stores, one app-review-*.myshopify.com and one short hex-named store, running automated app testing: install, three plan activations inside a minute, one export, uninstall fifteen minutes later. No merchant traffic was involved.
No raw body, status or x-request-id yet. The failure happens inside our HTTP client’s response middleware, before our error handling sees the response, so nothing logged them. Capture is added now, I will post them on the next occurrence.
On impact: gnikyt/basic-shopify-api, used by kyon147/laravel-shopify, reads cost.throttleStatus unguarded, and its ResponseAccess::offsetGet() reads the container unguarded too. On PHP 8 under Laravel that warning becomes an ErrorException thrown from inside the Guzzle promise, so the whole call fails instead of just the rate limit bookkeeping. On that stack a missing throttleStatus is an outage, not a telemetry gap.
Thanks for the extra detail, @farid. This turned out to be a change on our side. A deploy on September 8 affected calls made against a small subset of stores. Those responses came back without throttleStatus in extensions.cost even though the call itself succeeded.
The change was reverted and the fix deployed on September 11, so things should be back to normal. Could you both re-run the calls that were affected and confirm throttleStatus is showing up again? Thanks for your patience while I looked into this!