I have an extension-only app with a cart transform function. I can install it fine on development stores using GraphiQL. But on production stores the functions must be installed by the same app that owns the extension. So I have no way of installing it without also having a backend?
Here’s what I’ve tried:
- Query the functions installed on the store where I can see the cart transform function I want to install
{
"id": "019d4362-d502-7dec-a410-13477b446a87",
"title": "Laser Engraving Bundle",
"handle": "laser-engraving-bundle",
"apiType": "cart_transform"
}
- Create the cart transform using handle - FAILS
(API version 2026-01)
mutation {
cartTransformCreate(
functionHandle: "laser-engraving-bundle"
blockOnFailure: false
) {
userErrors {
field
message
}
}
}
"cartTransformCreate": {
"userErrors": [
{
"field": [
"functionHandle"
],
"message": "Could not find function with handle: laser-engraving-bundle."
}
]
}
- So I try using the function id instead (Tried both API version
2026-01and2025-07)
mutation {
cartTransformCreate(
functionId: "019d434d-2006-74cc-a547-7c44514a41db"
blockOnFailure: false
) {
userErrors {
field
message
}
}
}
{
"field": [
"functionId"
],
"message": "Function 019d434d-2006-74cc-a547-7c44514a41db not found. Ensure that it is released in the current app (2315872), and that the app is installed."
}
The app is installed on the store. The function is deployed and released, visible in the Partners dashboard.
The problem:
The GraphiQL app authenticates as its own app context, not as my extension-only app, so the function install fails. Since there’s no backend, I can’t listen to install webhooks and get the access tokens for the app.
Has anyone actually solved this for a production store with a pure extension-only app? Is there any way to run the mutation in the correct app context without adding a hosted backend?