Reference

Troubleshooting

Symptom, cause, fix.

First, reproduce it

Most of what follows is answered by one of these.

npm run build # does the theme even compile?
npm run shopify:check # Shopify's own linter, against dist/
npm run api:build # regenerates operations, services and `api`
cd shopify-app && npx shopify app info # is the app installed anywhere?
# Is the gateway up? A 401 is the healthy answer — see below.
curl -i -X POST 'https://your-site.netlify.app/admin.gql' \
-H 'Content-Type: application/json' -d '{"operation":"GetShop"}'
1// In the storefront console: what does this deployment know about?
2import { apiNames } from '@/framework'
3console.table(apiNames.admin)

The theme

SymptomCauseFix
Every page 404sNo templates — they're on the ignore listnpm run shopify:dev:seed
Header or footer missingNo section groupsnpm run shopify:push:groups
"No colour schemes defined"No settings_data.jsonnpm run shopify:push:settings
Editor changes vanish on devExpected — theme dev overwrites the dev themeConfirm the ignore list on that environment
Push asks which theme to overwriteMisspelled -e, so no ignore list appliedCheck the environment name
Two sections collidedDuplicate filename after flatteningRename — section names are global
Section renders nothing after an editReact state reset by the editor remountEditor checklist
Infinite re-renderA selector returning a new object each callReturn a primitive or a stable reference

API and deployment

SymptomCauseFix
401 Invalid signature from curlExpected. No Shopify signature on a direct requestCall it from the storefront
404 on /apps/<subpath>/…The app isn't installed on the storeshopify app dev --store …; verify with shopify app info
404 after changing subpathPath is fixed at install timeUninstall and reinstall the app
500 Server is not configuredSHOPIFY_API_SECRET unset — it fails closedSet it, then redeploy
Could not obtain an Admin API tokenBad client id/secret, or app and store in different organizationsCheck both; see the deployment logs for Shopify's message
Admin API access-denied errorsMissing scopesAdd to [access_scopes], shopify app deploy, reinstall
404 on the deployment itselfWrong pathRoutes are /admin.gql and /service at the site root
New operation isn't foundNot compiled into the deploy folder yetnpm run api:build, then redeploy
Netlify: remix: command not foundFramework detection guessed a build commandRe-run npm run api:build and redeploy — netlify.toml overrides it
Netlify: 422 Incorrect function namesA dot in a function filenamenpm run api:build regenerates legal names
Netlify: only netlify.toml in the file listExpected. This is an API, not a siteFunctions are under the Functions tab

An operation you added isn't found

The allowlist is compiled at build time, in two places — the deployed bundle and the client registry. Both are regenerated by the same command:

npm run api:build # updates deploy/ and src/javascript/api.generated.js
cd deploy/netlify && npx netlify deploy --prod

If api.YourOperation is undefined in the editor but the file exists, the registry is stale — any npm run build refreshes it.

Reading the healthy answers

Two responses look like failures and are not:

401 Invalid signature from a direct request means the endpoint is up and correctly refusing unsigned traffic. Real calls arrive through the App Proxy with a signature attached, so they never see this.

An almost-empty Netlify file browser is expected. The published folder is deliberately empty because this is an API, not a site. The functions are under the Functions tab.