skills/sales-shopware/SKILL.md
Shopware platform help — the open-source PHP/Symfony commerce platform (shopware.com, Shopware 6): products, orders, customers, and two APIs — the Admin API (/api/*, OAuth 2.0 client-credentials via an Integration, 300 req/min) and the headless Store API (/store-api/*, sw-access-key), plus app webhooks (shopware-shop-signature HMAC-SHA256) and Flow Builder automation. Use when generating an Admin API OAuth token or debugging a 401 from extension-generated keys, searching entities via POST /api/search/{entity} with Criteria, wiring orders or customers into a CRM or warehouse, registering an app webhook for checkout.order.placed, building a headless storefront on the Store API, hitting the 300-req/min rate limit or random admin logouts, or choosing between the free Community Edition and the paid Rise/Evolve/Beyond plans under the GMV fair-usage policy. Do NOT use for checkout-conversion strategy across carts (use /sales-checkout) or picking a Merchant of Record for global tax (use /sales-merchant-of-record).
npx skillsauth add sales-skills/sales sales-shopwareInstall 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.
Shopware (shopware.com) is an open-source PHP/Symfony commerce platform (Shopware 6) aimed at
mid-market and B2B merchants, strong in Europe, and built for dev/agency-owned stores rather
than click-together SaaS. The Community Edition is free (MIT) and self-hosted; paid Rise /
Evolve / Beyond tiers and Shopware Cloud add automation, B2B, and support. It exposes two
distinct HTTP APIs — the Admin API (/api/*, back-office) and the Store API
(/store-api/*, headless storefront) — plus a webhook-capable App system and Flow Builder
automation. It is heavier than EverShop/Medusa: expect to run PHP/Symfony infra.
If references/learnings.md exists, read it first for accumulated platform knowledge.
Ask only what you can't infer from the user's prompt:
Skip-ahead rule: if the user's prompt already has enough context, go straight to Step 2.
| If the user's question is about… | Route to |
|---|---|
| Which cart/commerce platform to pick, or checkout-conversion strategy (Shopware vs Shopify/Magento/Medusa; bumps, upsells, cart abandonment) | /sales-checkout {question} |
| The headless-vs-monolith / composable architecture decision itself | /sales-checkout {question} |
| Digital-product pricing, validation, launch strategy | /sales-digital-products {question} |
| Choosing a hosted Merchant of Record so someone else owns global VAT/GST (Shopware is NOT one) | /sales-merchant-of-record {question} |
| Migrating an existing store's catalog/customers/orders into or out of Shopware | /sales-store-migration {question} |
When routing, give the exact command: "This is a {domain} question — run: /sales-checkout {original question}"
Otherwise, answer Shopware-specific questions directly using Step 3.
Read references/platform-guide.md for the full reference — capabilities & automation surface
(what's Admin-API-, Store-API-, webhook-accessible vs Administration-only), editions/pricing and the
GMV fair-usage gate, data model (UUID-hex IDs, the search-Criteria query model, translatable
fields), and quick-start recipes (OAuth token + entity search, Sync API bulk upsert, app webhook
with signature verification).
For raw endpoint detail, the OAuth flows, Criteria/pagination, Sync API, and verbatim webhook
events/signature, read references/shopware-api-reference.md.
Answer using only the relevant section — don't dump the full reference.
POST /api/oauth/token with
grant_type=client_credentials, client_id=Access Key ID, client_secret=Secret Access Key from
Settings → System → Integrations. If a 401/"token invalid" appears, the usual cause is using
keys returned by a plugin/extension install (which often can't mint tokens) or a stale token —
create a dedicated Integration instead, and refresh the Bearer token before it expires (expires_in
is ~3600s). For the Store API, authenticate with the sw-access-key sales-channel key, not OAuth.POST /api/search/{entity} with a JSON Criteria body (filter, sort, limit, page,
associations, aggregations) — plain GET /api/{entity} exists but real queries go through
/search. Paginate with limit + page (not offset) and set total-count-mode when you need a
count. IDs are 32-char hex UUIDs, and translatable fields resolve by the request's language context.POST /api/_action/sync (batched operations in one call) rather than one request per row. The
Admin API is capped at 300 requests/minute — on 429 back off and resume; keep syncs
incremental and batched. Store API limits vary by server config.<webhooks> with name/url/event), e.g. checkout.order.placed,
state_enter.order_transaction.state.paid, product.written, order.written. Every delivery
carries a shopware-shop-signature header = HMAC-SHA256 of the raw request body keyed by
the app secret assigned at registration — recompute and compare (constant-time) before trusting it,
then re-fetch the entity via the Admin API. Add onlyLiveVersion: true so order drafts don't
fire, and keep a polling backup. Flow Builder can also POST to an HTTP endpoint as an action.If you discover a gotcha or tip not in references/learnings.md, append it there with today's date.
Best-effort from research (2026-07) — review these, especially edition pricing, the GMV fair-usage threshold, and the auth behaviors, which change across versions.
sw-access-key. Don't mix them; a 401 is
usually keys from a plugin-install response (can't mint tokens) — use a manual Integration.POST /api/search/{entity} with a Criteria body — filters/sort/pagination
go in JSON, not URL query params. Pagination is limit+page, not offset./api/_action/sync) and back off on 429.shopware-shop-signature (HMAC-SHA256 of the raw
body). Use onlyLiveVersion to skip order drafts; verify before trusting./sales-checkout — Checkout-conversion strategy and cart/commerce-platform selection (Shopware vs Shopify/BigCommerce/Magento/Medusa; the headless-vs-monolith decision)/sales-merchant-of-record — Choosing a Merchant of Record for global tax (Shopware is not one)/sales-store-migration — Migrating a store's catalog, customers, and orders between platforms/sales-woocommerce — WooCommerce platform help (the self-hosted WordPress-plugin alternative)/sales-prestashop — PrestaShop platform help (the other self-hosted PHP commerce platform)/sales-medusa — Medusa platform help (the Node/TS headless alternative for lighter self-hosted stacks)/sales-do — Not sure which skill to use? The router matches any sales objective to the right skill. Install: npx skills add sales-skills/sales --skill sales-do -a claude-codeUser says: "How do I push every placed Shopware order into my CRM automatically and reliably?"
Skill does: Registers an App-system webhook on checkout.order.placed (with
onlyLiveVersion: true so drafts don't fire) to a tokenized HTTPS endpoint, verifies each delivery
by recomputing HMAC-SHA256 of the raw body against the shopware-shop-signature header, then
re-fetches the order with POST /api/search/order (OAuth Bearer from an Integration) before writing —
deduping on the order id. Adds a batched Sync API / paginated /search reconciliation pull as a
backstop and notes the 300 req/min Admin-API cap.
Result: CRM stays in sync with verified data even if a delivery is missed, within the rate limit.
User says: "I got an access key and secret from a Shopware plugin but I can't generate an OAuth token — 401 every time."
Skill does: Explains that plugin/extension-returned keys often can't mint tokens; walks the
user to create a dedicated Integration under Settings → System → Integrations, then
POST /api/oauth/token with grant_type=client_credentials + that Integration's Access Key ID
/ Secret Access Key, and to send the resulting Bearer token (refreshing before expires_in).
Notes the Store API uses sw-access-key instead, not OAuth.
Result: Token generation works with a proper Integration; the 401 was the wrong key source.
User says: "We're on free Shopware Community Edition doing about €1.5M/year — do we have to pay now?" Skill does: Flags the Fair Usage Policy (from March 2026) — CE is free only under ~€1M GMV, so at €1.5M they fall into a paid tier (Rise/Evolve/Beyond), where the choice is driven by B2B/support needs and GMV, not core features; notes CE is still self-hosted (they cover hosting/dev). Presents all figures as best-effort to verify at shopware.com/pricing. Result: The team plans for a paid plan they now legally need, chosen by needs rather than feature FOMO.
Symptom: POST /api/oauth/token or authenticated calls return 401.
Cause: Using Access Key/Secret returned by a plugin install (which frequently can't generate
tokens), an expired Bearer token, or hitting the Store API path with OAuth (or vice-versa).
Solution: Create a dedicated Integration (Settings → System → Integrations) and use its
Access Key ID as client_id and Secret Access Key as client_secret with
grant_type=client_credentials; refresh the Bearer before expires_in (~3600s). Use sw-access-key
for the Store API, OAuth only for /api/*.
Symptom: The admin session drops unexpectedly, especially with multiple tabs open. Cause: A long-standing refresh-token race condition — not a misconfiguration. Solution: Work in a single admin tab, clear the session/cookies, and update to the latest patch release; if scripting the Admin API, manage one token per client and refresh serially rather than racing.
Symptom: Bulk reads/writes slow down or start returning 429.
Cause: The Admin API caps at 300 requests/minute; unbatched per-row writes and uncached
queries compound it.
Solution: Batch writes through the Sync API (POST /api/_action/sync), paginate reads with
Criteria limit+page, enable HTTP cache/Redis/OpenSearch, and back off on 429 before resuming.
tools
Wizlogo (wizlogo.com) platform help — a budget online logo maker (template/style-variation, marketed as "AI") plus a hub of FREE branding tools (business-name, blog-name and slogan generators, business-card maker, invoice generator, color converter, domain search). The pricing traps: the FREE logo is PERSONAL-USE-ONLY; the two cheap paid tiers are RASTER PNG/JPG only — Single (~€39.99 one-time) and Unlimited (~€3.99 per WEEK, recurring) — and VECTOR (SVG/PDF/EPS) is gated to the ~€299.99 Enterprise tier, which also bundles human designer edits and a social kit. Transparent PNG is on all paid plans. Use when making a Wizlogo logo, understanding free-vs-paid or personal-vs-commercial use, which tier unlocks vector/SVG for print, the weekly-subscription billing trap, its free name/slogan generators, or whether it has an API (UI-only — no public API, webhooks, Zapier or MCP). Do NOT use to just generate the business name (use /sales-namelix) or to compare/validate branding tools (use /sales-idea-validation).
tools
VistaPrint platform help (vistaprint.com, a Cimpress company) — the small-business design + print + digital-marketing platform: a free AI Logomaker (4 generations, 60 more after free sign-up) exporting SVG/PNG/PDF at 4000x4000 with no watermark, a free Brand Kit, business cards/flyers/signage/apparel/promo print, and a website builder. THE RIGHTS TRAP: VistaPrint states NO intellectual-property rights transfer on an AI-generated logo — you get usage rights but CANNOT register it for trademark or copyright; only its human designer service transfers full IP. Use when making a VistaPrint logo, asking if you own or can trademark it, running out of AI logo credits, printed colors not matching the screen, bleed/DPI/font file-prep rejections, or asking whether VistaPrint has an API (the consumer site does not — automation runs through the parent Cimpress Open partner-fulfilment API). Do NOT use for Vista Social scheduling (use /sales-vistasocial) or comparing logo tools market-wide (use /sales-idea-validation).
tools
Turbologo (turbologo.com) platform help — a budget AI/DIY logo maker: enter a business name + industry, pick icons and colors, and it proposes logo concepts you refine in an in-browser editor, then pay a one-time fee to download (designing is free, previews are watermarked, downloading is the paywall). Vector SVG/PDF is gated to the mid tier and up; the top tier adds a brand kit (business cards, letterheads, email signatures, social assets). Use when generating a logo in Turbologo, choosing which download tier to buy, vector SVG vs raster PNG, removing the free watermark, the time-limited edit-after-purchase window, pay-to-download pricing questions, whether an AI logo is yours to trademark, or whether Turbologo has an API to bulk-generate logos (it is UI-only — no public API, webhooks, Zapier, or MCP). Do NOT use to generate the business name (use /sales-namelix), compare or validate branding tools across the market (use /sales-idea-validation), or build wider marketing creative (use /sales-canva).
tools
Online Logo Maker (onlinelogomaker.com) platform help — a long-standing free/freemium DIY logo maker: build the mark yourself from icons, shapes, text, and fonts — MANUAL/template-based, NOT enter-a-name-get-AI-concepts. The free pack downloads a LOW-RES 300px PNG with a background; vector SVG, transparent PNG, and 2000px high-res are gated to a one-time lifetime Premium pack (not a subscription). The free tier's commercial-use rights are disputed by reviewers — clean ownership effectively needs Premium, and a shared-icon mark can be non-distinctive. Use for building/editing a logo here, free download vs Premium, vector SVG or transparent PNG, one-time pricing, commercial-use/trademark terms, near-namesake confusion (NOT LogoMaker.com / LogoMakr / Logomakerr.ai), or whether it has an API (UI-only — no API, webhooks, Zapier, MCP). Do NOT use to generate the business name (use /sales-namelix), compare branding tools across the market (use /sales-idea-validation), or build wider creative (use /sales-canva).