Claude-code-plugins-plus-skills shopify-install-auth
install
source · Clone the upstream repo
git clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/jeremylongshore/claude-code-plugins-plus-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/saas-packs/shopify-pack/skills/shopify-install-auth" ~/.claude/skills/jeremylongshore-claude-code-plugins-plus-skills-shopify-install-auth && rm -rf "$T"
manifest:
plugins/saas-packs/shopify-pack/skills/shopify-install-auth/SKILL.mdsource content
Shopify Install & Auth
Overview
Set up Shopify app authentication using the official
@shopify/shopify-api library. Covers OAuth flow, session token exchange, custom app tokens, and Storefront API access.
Prerequisites
- Node.js 18+ (the
v9+ requires it)@shopify/shopify-api - A Shopify Partner account at https://partners.shopify.com
- An app created in the Partner Dashboard with API credentials
- A development store for testing
Instructions
Step 1: Install the Shopify API Library
# Core library + Node.js runtime adapter npm install @shopify/shopify-api @shopify/shopify-app-remix # Or for standalone Node apps: npm install @shopify/shopify-api @shopify/shopify-app-express # For Remix (recommended by Shopify): npm install @shopify/shopify-app-remix @shopify/app-bridge-react
Step 2: Configure Environment Variables
Create a
.env file (add to .gitignore immediately):
# .env — NEVER commit this file SHOPIFY_API_KEY=your_app_api_key SHOPIFY_API_SECRET=your_app_api_secret SHOPIFY_SCOPES=read_products,write_products,read_orders,write_orders SHOPIFY_APP_URL=https://your-app.example.com SHOPIFY_HOST_NAME=your-app.example.com # For custom/private apps only: SHOPIFY_ACCESS_TOKEN=shpat_xxxxxxxxxxxxxxxxxxxxx # API version — use a stable quarterly release # Update quarterly — see shopify.dev/docs/api/usage/versioning SHOPIFY_API_VERSION=2025-04
# .gitignore — add these immediately .env .env.local .env.*.local
Step 3: Initialize the Shopify API Library
// src/shopify.ts import "@shopify/shopify-api/adapters/node"; import { shopifyApi, LATEST_API_VERSION, Session } from "@shopify/shopify-api"; const shopify = shopifyApi({ apiKey: process.env.SHOPIFY_API_KEY!, apiSecretKey: process.env.SHOPIFY_API_SECRET!, scopes: process.env.SHOPIFY_SCOPES!.split(","), hostName: process.env.SHOPIFY_HOST_NAME!, apiVersion: LATEST_API_VERSION, isEmbeddedApp: true, }); export default shopify;
Step 4: Implement OAuth Flow (Public Apps)
Express-based OAuth flow that redirects to Shopify and handles the callback token exchange.
See OAuth Flow for the complete Express route implementation.
Step 5: Token Exchange (Embedded Apps)
For embedded apps, use session token exchange instead of traditional OAuth:
// Token exchange — converts session token (JWT) to API access token import shopify from "../shopify"; async function exchangeToken( shop: string, sessionToken: string ): Promise<Session> { const { session } = await shopify.auth.tokenExchange({ sessionToken, shop, requestedTokenType: RequestedTokenType.OfflineAccessToken, }); return session; }
Step 6: Custom App / Private App Auth
For custom apps installed on a single store, use a permanent access token with no OAuth needed.
See Custom App Auth for the complete setup.
Step 7: Verify Auth is Working
// Quick connectivity test async function verifyShopifyAuth(session: Session): Promise<void> { const client = new shopify.clients.Graphql({ session }); const response = await client.request(`{ shop { name email plan { displayName } primaryDomain { url } } }`); console.log("Connected to:", response.data.shop.name); console.log("Plan:", response.data.shop.plan.displayName); console.log("Domain:", response.data.shop.primaryDomain.url); }
Output
installed and configured@shopify/shopify-api- OAuth flow or custom app auth operational
- Session with valid access token persisted
- Verified connection to the Shopify Admin API
Error Handling
| Error | Cause | Solution |
|---|---|---|
| Wrong | Verify in Partner Dashboard > App > API credentials |
during callback | Secret mismatch or URL tampering | Check matches Partner Dashboard |
| Session not persisted | Implement (DB, Redis, or file) |
| Token expired or revoked | Merchant uninstalled app — trigger re-auth |
| Requested scope not approved | Only use scopes from the approved list in your app config |
| Malformed shop domain | Must be — use |
Examples
Shopify API Access Scopes Reference
| Scope | Grants Access To |
|---|---|
/ | Products, variants, collections, images |
/ | Orders, transactions, fulfillments |
/ | Customer data, addresses, metafields |
/ | Inventory levels across locations |
/ | Pages, blogs, articles |
/ | Theme files and assets |
/ | Shipping zones, carrier services |
/ | Fulfillment orders and services |
Storefront API Access
The Storefront API uses a separate token with its own higher rate limits.
See Storefront API Access for the complete client setup.