WooCommerce Connector Guide

The WooCommerce connector lets Tealfabric workflows create and retrieve commerce data from WooCommerce stores through the REST API. It is well suited for catalog synchronization, order processing automation, and back-office integrations that need reliable inventory and order state updates.

Document information
FieldValue
Canonical URL/docs/04_connecting-systems/connectors/w/woocommerce
Version (published date)2026-05-08
Tagsconnectors, reference, woocommerce
Connector IDwoocommerce-1.0.0

WooCommerce connector workflow showing authenticated store access, product creation, order retrieval, and fulfillment decisions powered by real-time commerce data.

When to use this connector

Use this connector when workflows must push product changes, read current orders, or coordinate fulfillment based on WooCommerce status updates. It is a good fit for operations teams that need consistent data movement between storefront systems and internal platforms. Production reliability improves when you design each flow with explicit retries and pagination controls.

Prerequisites

Before configuring the connector, create WooCommerce REST API credentials and confirm that the key has the permissions your workflow requires. Verify the store_url is reachable from the environment running Tealfabric and that WordPress REST endpoints are enabled. Define an ownership model for key rotation and operational monitoring before enabling high-throughput jobs.

Configuration

Store these values in the integration profile so they can be reused by each execution.

  • store_url (required): Base store URL, for example https://yourstore.com.
  • consumer_key (required): WooCommerce API consumer key.
  • consumer_secret (required): WooCommerce API consumer secret.
  • timeout_seconds (optional): Request timeout in seconds; default is 30.

Create a product with send

The send operation is commonly used for product upserts from ERP or catalog sources. Use a minimal payload and stable category mapping to keep sync behavior predictable.

const baseUrl = "https://api.example.com/api/v1";
const tenantId = "<TENANT_ID>";
const apiKey = "<API_KEY>";

type ProductResult = {
  id?: number;
  name?: string;
  price?: string;
};

async function createProduct(integrationId: string): Promise<ProductResult> {
  const response = await fetch(
    `${baseUrl}/integrations/${encodeURIComponent(integrationId)}/execute`,
    {
      method: "POST",
      headers: {
        "X-API-Key": apiKey,
        "X-Tenant-ID": tenantId,
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        operation: "send",
        endpoint: "products",
        method: "POST",
        data: {
          name: "Tealfabric Bottle",
          type: "simple",
          regular_price: "24.99",
          description: "Insulated stainless-steel bottle.",
          categories: [{ id: 12 }],
        },
      }),
    }
  );

  if (!response.ok) throw new Error(`Request failed: ${response.status}`);
  const payload = (await response.json()) as { data?: ProductResult };
  if (!payload.data) throw new Error("Missing product payload");
  return payload.data;
}
curl -X POST "https://api.example.com/api/v1/integrations/<ENTITY_ID>/execute" \
  -H "X-API-Key: <API_KEY>" \
  -H "X-Tenant-ID: <TENANT_ID>" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "send",
    "endpoint": "products",
    "method": "POST",
    "data": {
      "name": "Tealfabric Bottle",
      "type": "simple",
      "regular_price": "24.99",
      "description": "Insulated stainless-steel bottle.",
      "categories": [{ "id": 12 }]
    }
  }'
{
  "success": true,
  "data": {
    "id": 5721,
    "name": "Tealfabric Bottle",
    "price": "24.99"
  }
}

Retrieve processing orders with receive

Use receive to pull orders that require action, such as fulfillment or fraud review. Combining status filters with page controls keeps jobs efficient and easier to rerun safely.

const baseUrl = "https://api.example.com/api/v1";
const tenantId = "<TENANT_ID>";
const apiKey = "<API_KEY>";

type WooOrder = {
  id?: number;
  status?: string;
  total?: string;
};

async function listProcessingOrders(integrationId: string): Promise<WooOrder[]> {
  const response = await fetch(
    `${baseUrl}/integrations/${encodeURIComponent(integrationId)}/execute`,
    {
      method: "POST",
      headers: {
        "X-API-Key": apiKey,
        "X-Tenant-ID": tenantId,
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        operation: "receive",
        endpoint: "orders",
        query: {
          per_page: 20,
          page: 1,
          status: "processing",
        },
      }),
    }
  );

  if (!response.ok) throw new Error(`Request failed: ${response.status}`);
  const payload = (await response.json()) as { data?: WooOrder[] };
  if (!payload.data) throw new Error("Missing order payload");
  return payload.data;
}
curl -X POST "https://api.example.com/api/v1/integrations/<ENTITY_ID>/execute" \
  -H "X-API-Key: <API_KEY>" \
  -H "X-Tenant-ID: <TENANT_ID>" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "receive",
    "endpoint": "orders",
    "query": {
      "per_page": 20,
      "page": 1,
      "status": "processing"
    }
  }'
{
  "success": true,
  "data": [
    {
      "id": 100245,
      "status": "processing",
      "total": "49.98"
    }
  ],
  "total_size": 1
}

Reliability guidance

WooCommerce performance and rate behavior can vary by hosting and plugin stack, so monitor response time and transient errors in production. Use pagination and bounded retry logic to keep long-running jobs predictable and resumable. Validate API key permissions before deployment so operational failures do not block checkout, fulfillment, or customer service workflows.

Related references