skills/sales-woocommerce/SKILL.md
WooCommerce platform help — the open-source WordPress commerce plugin (woocommerce.com): products, orders, customers, coupons, and the REST API v3 (/wp-json/wc/v3, HTTP Basic consumer key/secret over HTTPS or OAuth 1.0a), signed webhooks (X-WC-Webhook-Signature, HMAC-SHA256 base64), the headless Store API, and batch endpoints. Use when setting up or debugging WooCommerce REST API access, fixing 401 Unauthorized or a stripped Authorization header, wiring orders or customers into a CRM or warehouse, catching an order.created webhook that is not firing, building a headless storefront on the Store API, paginating a large product catalog, or budgeting a store cost beyond the free plugin. Do NOT use for checkout-conversion strategy across cart platforms (use /sales-checkout) or picking a hosted Merchant of Record for global tax (use /sales-merchant-of-record).
npx skillsauth add sales-skills/sales sales-woocommerceInstall 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.
WooCommerce (woocommerce.com) is the open-source, self-hosted commerce plugin for WordPress —
the most-installed cart on the web. You own the code and the database; there's no platform
transaction fee. It sells physical, digital, variable, and subscription products through Products,
Orders, Customers, and Coupons, and exposes almost everything through a REST API v3
(/wp-json/wc/v3), signed webhooks, and a separate headless Store API. Because it runs on
your WordPress host, most integration pain is server/auth config, not a vendor limit.
If references/learnings.md exists, read it first for accumulated platform knowledge.
Ask only what you can't infer from the user's prompt:
Authorization header.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/checkout platform to pick, or checkout-conversion strategy (bump/upsell design, cart-abandonment recovery, reducing checkout fields) | /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 (WooCommerce is NOT one) | /sales-merchant-of-record {question} |
| Comparing WooCommerce against Shopify / BigCommerce / a headless stack for a build decision | /sales-checkout {question} |
| Migrating an existing store's data into or out of WooCommerce | /sales-store-migration {question} |
When routing, give the exact command: "This is a {domain} question — run: /sales-checkout {original question}"
Otherwise, answer WooCommerce-specific questions directly using Step 3.
Read references/platform-guide.md for the full reference — capabilities & automation surface
(what's REST-, Store-API-, webhook-accessible vs wp-admin-only), real cost breakdown and plan gates,
data model (string money, integer IDs, meta_data arrays), and quick-start recipes (authenticated
REST call, order webhook listener with signature verification, cursor-safe catalog export).
For raw endpoint detail, auth flows, pagination, batch limits, and verbatim webhook headers, read
references/woocommerce-api-reference.md.
Answer using only the relevant section — don't dump the full reference.
order.created (and order.updated) webhook to a tokenized HTTPS
endpoint as the low-latency trigger, and always add a periodic polling backup — a nightly
per_page=100 paginated GET /wc/v3/orders?after=<iso8601> reconciliation pull — because a
single delivery can be blocked or dropped. Dedupe on the resource id. Never rely on the webhook alone.Authorization header (common on Apache/CGI and some
managed hosts). Tell the user to (a) confirm HTTPS + a valid SSL cert, (b) test with credentials
as query-string params (?consumer_key=...&consumer_secret=...) or set queryStringAuth, and
(c) if query-string works but the header doesn't, add the RewriteRule that passes
Authorization through (or use OAuth 1.0a for plain HTTP). Confirm the key's permission is
read/write for the operation.active, not
paused, and that the endpoint returns a fast 2xx.base64(HMAC-SHA256(raw_request_body, webhook_secret)) and compare to the
X-WC-Webhook-Signature header before trusting a payload; the secret defaults to the API
user's consumer secret if you didn't set one. Then re-fetch the object via GET /wc/v3/orders/{id}
before provisioning access or moving money, and dedupe on the order/resource ID.total, price) come back as
decimal strings ("29.99") — don't divide by 100. Resource IDs are integers; dates are ISO8601.
Custom fields live in the meta_data array ([{ "key": "_pod", "value": "..." }]), not top-level.per_page is 10, max 100; loop with page= and
read X-WP-Total / X-WP-TotalPages (or the Link header) to know when to stop. For bulk writes
use the /batch endpoint (create/update/delete arrays, ~100 items per call) instead of
one request per row. There's no vendor rate limit — but your host and DB are the ceiling, so throttle./wp-json/wc/store/v1 and needs no consumer key — it uses a Nonce and
Cart-Token header per shopper. Use v3 for admin/back-office data, Store API for the buyer-facing flow.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 plan pricing and the auth/host behaviors, which vary by server and may have changed.
Authorization
header. Try query-string auth; add the Authorization rewrite rule; use OAuth 1.0a for HTTP."29.99"), IDs are integers, dates ISO8601. Custom fields are in meta_data.per_page max is 100 and total counts are in headers, not the body — large catalogs must paginate./wp-json/ 404s when WordPress is on "plain" permalinks.wc/v3 and re-verify field names against the live System Status before a big migration./sales-checkout — Checkout-conversion strategy and cart-platform selection (WooCommerce vs Shopify vs BigCommerce; bumps, upsells, cart-abandonment recovery)/sales-digital-products — Digital-product strategy: pricing, validation, launch/sales-merchant-of-record — Choosing a Merchant of Record for global tax (WooCommerce is not one)/sales-store-migration — Migrating a store's catalog, customers, and orders between platforms/sales-shopify — Shopify platform help (the hosted SaaS alternative)/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 new WooCommerce order into my CRM automatically without missing any?"
Skill does: Sets up an order.created (and order.updated) webhook to a tokenized HTTPS
endpoint, verifies each delivery by recomputing base64(HMAC-SHA256(body, secret)) against
X-WC-Webhook-Signature, then re-fetches GET /wp-json/wc/v3/orders/{id} (Basic auth, consumer
key/secret) before writing — parsing total as a string and deduping on order id. Adds a nightly
per_page=100 paginated GET /orders?after=... reconciliation pull as a backstop in case a
delivery was blocked, and flags that a security plugin can auto-disable the webhook after 5 failures.
Result: CRM stays in sync with verified data even if a webhook delivery is dropped or spoofed.
User says: "I generated a key but every WooCommerce API call comes back 401 Unauthorized."
Skill does: Walks the config checklist — HTTPS with a valid cert, key permission is read/write,
then tests credentials as query-string params (?consumer_key=...&consumer_secret=...); if that
works but the header doesn't, identifies the host stripping the Authorization header and gives the
.htaccess rewrite (or switches to OAuth 1.0a for HTTP). Confirms pretty permalinks are on so
/wp-json/ resolves.
Result: Root cause is the server/host config, not the credentials — fixed without regenerating keys.
User says: "I need to load 8,000 products into WooCommerce from a CSV — one-by-one is too slow and timing out."
Skill does: Points to the POST /wp-json/wc/v3/products/batch endpoint with a create array of
~100 products per call (not one request each), notes money must be sent as strings and custom fields
go in meta_data, and to read X-WP-Total/X-WP-TotalPages when verifying — throttling because the
ceiling is the user's own host/DB, not a vendor rate limit.
Result: Import runs in ~80 batched calls instead of 8,000, without hammering the server.
Symptom: All /wp-json/wc/v3 requests fail with 401 even with a freshly generated key.
Cause: Site not on HTTPS, or the web host strips the Authorization header before WordPress
sees it (common on Apache/CGI, some managed hosts), or the key lacks write permission.
Solution: Confirm HTTPS + valid SSL and read/write key permission. Test with query-string auth
(?consumer_key=...&consumer_secret=...); if that succeeds, add the rewrite rule that passes
Authorization through, or use OAuth 1.0a for plain HTTP. Never send keys as query params over plain HTTP.
Symptom: An order.created/product.updated webhook worked, then silently stopped.
Cause: A security plugin (or "restrict REST API to authenticated users") is returning 401 to the
unauthenticated delivery, or the endpoint returned a non-2xx/slow response — WooCommerce
auto-disables a webhook after 5 consecutive failed deliveries.
Solution: Re-enable the webhook (set status active), allowlist the delivery to the REST route,
make the endpoint return a fast 2xx, and inspect the per-webhook delivery log +
WooCommerce → Status → Logs. Add a polling reconciliation as a safety net.
/wp-json/ returns 404Symptom: The REST base itself 404s before auth is even attempted.
Cause: WordPress is on "plain" permalinks, so the REST rewrite rules aren't registered (or a
caching/security layer is blocking /wp-json/).
Solution: Set Settings → Permalinks to a "pretty" structure (e.g. Post name) and re-save to
flush rewrite rules; confirm no server rule or plugin blocks /wp-json/.
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).