Shopify connector
Custom-distribution OAuth install + webhook ingest. See shopify/README.md for the full runbook.
Health
OAuth
Shopify-initiated only — never point a health check or an uptime probe at these.
GET /api/shopify/install?shop=<store>.myshopify.comGET /api/shopify/callback
Merchant pages
GET /shopify/connected?shop=...GET /shopify/error?reason=...GET /shopify/status?shop=...— Shopify-signed link only
Webhook receiver
POST /api/shopify/webhooks— Shopify only
Internal ops
Staff-only — HTTP Basic via SHOPIFY_OPS_TOKEN, never linked from Shopify or a merchant page. Two onboarding methods, fully separate data and routes.
Method 1 — OAuth install link
Custom Distribution app per client. Writes to tenants/shopify_products.
GET,POST /internal/shopify/register-shopGET /internal/shopify/fetch-previewGET,POST /internal/shopify/sync-productsPOST /internal/shopify/bulk-sync-productsGET /internal/shopify/bulk-sync-products/status
Method 2 — Admin API access token
A manually-generated token (e.g. from a merchant's Custom App), no OAuth. Writes to admin_api_access_tenants/admin_api_access_products.
GET,POST /internal/shopify/register-admin-api-accessGET /internal/shopify/admin-api-access-connected— this method's staff-only equivalent of the merchant-facing /shopify/connected pageGET /internal/shopify/admin-api-access-fetch-previewGET,POST /internal/shopify/admin-api-access-sync-productsGET,POST /internal/shopify/admin-api-access-register-webhooks
Push to Catalogix
Works for a shop onboarded via either method above. Requires CATALOGIX_EXTERNAL_API_URL to be configured; store ID/API key/workspace ID/user ID are per-shop, entered on the form.
Products browser
Read-only — every row comes from fetch-preview itself (Database or Shopify live, picked on the page). Works for a shop onboarded via either method above.