dist/codex/shopify-commerce/skills/shopify-api-rest/SKILL.md
"MIGRATION SKILL: Shopify REST Admin API — endpoint patterns, authentication, rate limits, and REST-to-GraphQL migration guide. The REST Admin API is deprecated (October 2024). Use this skill only for maintaining legacy integrations or planning migration to GraphQL."
npx skillsauth add orcaqubits/agentic-commerce-claude-plugins shopify-api-restInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
DEPRECATION NOTICE: The Shopify REST Admin API was deprecated in October 2024. All new development MUST use the GraphQL Admin API. This skill exists for maintaining legacy code and planning migration.
Fetch live docs:
site:shopify.dev rest admin api deprecation for deprecation timelinesite:shopify.dev migrate rest to graphql for migration guidehttps://shopify.dev/docs/api/admin-rest for REST reference (if maintaining legacy code)https://{store}.myshopify.com/admin/api/{version}/products.json, orders.json, customers.json, etc.X-Shopify-Access-Token: {token}X-Shopify-Shop-Api-Call-Limit: 32/40Link header (not page numbers)rel="next" and rel="previous" links| REST Endpoint | GraphQL Equivalent |
|---------------|-------------------|
| GET /products.json | query { products(first: 50) { edges { node { ... } } } } |
| POST /products.json | mutation { productCreate(input: {...}) { ... } } |
| PUT /products/{id}.json | mutation { productUpdate(input: {...}) { ... } } |
| DELETE /products/{id}.json | mutation { productDelete(input: {id: "..."}) { ... } } |
| GET /orders.json | query { orders(first: 50) { edges { node { ... } } } } |
| GET /customers.json | query { customers(first: 50) { edges { node { ... } } } } |
| Aspect | REST | GraphQL |
|--------|------|---------|
| Data shape | Fixed response | Client-defined |
| Rate limiting | Request count (40/s) | Cost-based (1000 points) |
| Pagination | Link headers | Cursor arguments |
| Bulk operations | Not available | bulkOperationRunQuery |
| Webhooks | REST endpoint | Same (subscription via GraphQL) |
| ID format | Numeric (12345) | GID (gid://shopify/Product/12345) |
REST uses numeric IDs; GraphQL uses Global IDs (GIDs):
12345gid://shopify/Product/12345gid://shopify/{ResourceType}/userErrors, not HTTP status codesFetch the Shopify REST-to-GraphQL migration guide for exact endpoint mappings and timeline before planning a migration.
development
Build with Spree's headless Next.js storefront — the official `spree/storefront` repo (Next.js 16 App Router with Server Actions and Turbopack, React 19 Server Components, Tailwind CSS 4, TypeScript 5, `@spree/sdk`, Sentry), server-only auth (httpOnly JWT cookies + publishable key), MeiliSearch faceted catalog, one-page checkout with Apple/Google Pay/Klarna/Affirm/SEPA, multi-region market routing, GA4 + JSON-LD SEO, and Vercel/Docker deployment. Use when forking or customizing the storefront, or evaluating headless adoption.
tools
Build Spree extensions as Rails engines — gem scaffolding, `bin/rails g spree:extension`, mounting routes/migrations/assets, the modern `prepend` decorator pattern (`*_decorator.rb` with `self.prepended(base)`), generators (`spree:model_decorator`, `spree:controller_decorator`), the four customization surfaces in preference order (Events > Webhooks > Dependencies > Decorators), Spree::Dependencies for swapping service objects, gem release/versioning, and the deprecated Deface engine. Use when building a reusable Spree extension or adding non-trivial customization to an app.
development
Build with Spree's event bus and Webhooks 2.0 — `Spree::Events` publication, `Spree::Subscriber` DSL with `subscribes_to` and `on`, wildcard matching, lifecycle events (`{model}.created/.updated/.deleted` via `publishes_lifecycle_events`), the canonical event catalog (order.*, payment.*, shipment.*, product.*), Webhooks 2.0 endpoints, HMAC-SHA256 signing (`X-Spree-Webhook-Signature`), exponential-backoff retries, and Sidekiq job orchestration. Use when wiring event-driven business logic, building webhook consumers, or replacing ActiveSupport callback chains.
tools
Cross-cutting Spree development patterns — the customization preference hierarchy (Events > Webhooks > Dependencies > Decorators), `Spree::Dependencies` service-object swapping, the `_decorator.rb` + `prepend` + `self.prepended` idiom, idempotent subscribers and webhook receivers, multi-store scoping discipline, prefixed IDs, calculator polymorphism (shipping/promotion/tax share the base), service-object composition with `dry-monads` or simple results, why to avoid `class_eval` reopening and Deface, and Spree-on-Rails idioms (Hotwire/Turbo Stimulus, ActiveStorage, Action Cable, Sidekiq). Use when designing the architecture of a Spree extension or solving cross-cutting concerns.