cartTransformCreate Failing for extension only apps

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:

  1. 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"
}
  1. Create the cart transform using handle - FAILS :cross_mark: (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."
        }
      ]
    }
  1. So I try using the function id instead (Tried both API version 2026-01 and 2025-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?

1 Like