WooCommerce

Lightweight, dependency-free, in-memory fake of the WooCommerce REST API v3 (/wp-json/wc/v3/...).

Default port: 4759

Quick start

import { WoocommerceServer } from "./services/woocommerce/src/server.js";

const server = new WoocommerceServer(4759);
await server.start();
// ... run your app/tests ...
await server.stop();

Point the official @woocommerce/woocommerce-rest-api client at the fake:

import WooCommerceRestApi from "@woocommerce/woocommerce-rest-api";

const api = new WooCommerceRestApi({
  url: "http://127.0.0.1:4759",
  consumerKey: "ck_parlel",
  consumerSecret: "cs_parlel",
  version: "wc/v3",
});

const { data } = await api.post("products", { name: "Beanie", regular_price: "9.99" });
// data.id => generated numeric id

Implemented operations

All /wp-json/wc/v3/* routes require auth: Basic (consumer key/secret), Authorization: Bearer, or query params consumer_key + consumer_secret (any non-empty credential is accepted). JSON request/response. State is in-memory and ephemeral.

Products / Orders / Customers — /wp-json/wc/v3/{resource}

Each resource supports the full CRUD surface:

Orders default to status: "pending" and products to status: "publish" when unspecified.

Service & inspection operations (parlel extensions)

Access via MCP / preview URL

Inside a parlel sandbox the service is reachable at its preview URL (WOOCOMMERCE_BASE_URL, e.g. http://127.0.0.1:4759). Point the WooCommerce REST client url at that host and pass any consumer key/secret. MCP agents can call any documented endpoint; /__parlel/reset clears state between scenarios.

Surface coverage

This emulator faithfully replicates the API surface most application code and agents exercise. Anything below the supported lines is either an intentional design choice for a fast, zero-cost local emulator (✓ By design) or a candidate for a future release (⟳ Roadmap) — never a silent inaccuracy.

Legend: ✅ fully supported · ◐ accepted (stored, not strictly enforced) · ✓ by design · ⟳ on the roadmap.

FeatureStatus
products CRUD✅ Supported
orders CRUD✅ Supported
customers CRUD✅ Supported
Basic / Bearer / query-param auth✅ Supported
Numeric ids, date_created / date_modified✅ Supported
Batch endpoints (/batch)⟳ Roadmap
Coupons / refunds / reports / settings⟳ Roadmap
OAuth 1.0a signature verification✓ By design — Structurally faithful tokens; cryptographic verification is skipped for local use
Line-item totals / tax computation◐ Stored as-is, not computed
Pagination headers (X-WP-Total)✓ By design — Not emitted
Credential validity / scopes✓ By design — Any non-empty credential is accepted — no real secrets needed

Error codes & shapes

{ "code": "woocommerce_rest_product_invalid_id", "message": "Invalid ID.", "data": { "status": 404 } }
StatusWhen
400malformed JSON body
401missing credentials
404unknown id or route (rest_no_route)
405method not allowed

Manifest

See services/woocommerce/manifest.json:

<!-- parlel:testenv:start -->

Configuration — test.env

Copy these into your test.env (used by the bridge sidecar flow). Tokens are Parlel's seeded test credentials — any non-empty value is accepted by the emulator, so you rarely need to change them. Swap in real credentials only when pointing at the live service in prod.env.

WOOCOMMERCE_CONSUMER_KEY=ck_parlel
WOOCOMMERCE_CONSUMER_SECRET=cs_parlel
WOOCOMMERCE_BASE_URL=http://parlel-bridge:4759
<!-- parlel:testenv:end -->