Works25 Integration Guide

How-To: WooCommerce Integration

Connect your WordPress WooCommerce online store directly to Works25 with zero plugins required. Automatically sync online orders, appointment session times, customer profiles, SKU items, catalog prices, promotional discounts, inventory stock counts, product images, HTML descriptions, and payments.

  • Updated: 9 November 2026
  • For store owners & administrators
  • 4 parts
A

Step-by-Step Setup: Connecting WooCommerce to Works25

No custom WordPress plugin is required. Works25 connects natively using WooCommerce REST API v3 and signed Webhooks.

A1. Generate REST API Keys in WooCommerce

First, create a Consumer Key and Consumer Secret inside your WordPress admin dashboard so Works25 can communicate with your store.

  1. Log in to your WordPress Admin Dashboard (wp-admin).
  2. Navigate to WooCommerce → Settings → Advanced → REST API.
  3. Click Add key (or Create an API key).
  4. Enter a Description (for example, Works25 Integration), select an Administrator user, and set Permissions to Read/Write.
  5. Click Generate API key. Copy both the Consumer key (ck_...) and Consumer secret (cs_...) immediately—WooCommerce hides the secret once you leave the page.
Why Read/Write Permission?

Read/Write allows Works25 to automatically register the order.created, order.updated, product.created, and product.updated webhooks on your WooCommerce store, as well as push price list items, promotional discounts, inventory stock counts, HTML descriptions, and order fulfillment updates.

Back to contents

A2. Add the Integration in Works25

Next, save your store credentials in Works25 and link them to your branch and accounting ledgers.

  1. In Works25, go to Settings → Integration (3rd Party Integrations).
  2. Under Add An Integration, select E-Commerce: WooCommerce.
  3. Select the target Branch where online orders should be recorded.
  4. Fill in the fields:
    Field What to Enter
    Store URL Your full WooCommerce site URL (e.g. https://shop.yourbrand.com)
    Consumer Key The ck_... key from Step A1
    Consumer Secret The cs_... secret from Step A1
    Webhook Secret Auto-generated security key used to verify HMAC-SHA256 signatures from WooCommerce
    Payment Account The Works25 Asset/Bank/Gateway account where paid WooCommerce orders should be posted (e.g. Bank or Online Payment)
    Default Income Account The Works25 Income account used for synced catalog items and unmapped order lines (e.g. Sales)
  5. Click Confirm to save the integration card.
Back to contents

A3. Auto-Register Webhooks & Test Connection

Once the integration card appears on your screen:

  1. Click the green Configure button on your new woocommerce card.
  2. Click Test Connection & Auto-Register Webhooks.
  3. Works25 will verify your API credentials and automatically configure four webhooks (order.created, order.updated, product.created, and product.updated) inside your WooCommerce store pointing to your Works25 webhook endpoint.
Back to contents
B

How Items, Session Times, Customers & Payments Map into Works25

Understanding how SKU matching, appointment scheduling, stock reservation, two-way status updates, and double-entry accounting work.

B1. Matching WooCommerce SKUs to the Works25 Price List

When an order arrives from WooCommerce, Works25 matches each line item in three steps:

1. Price List Identifier / SKU

Matches the WooCommerce product SKU (or auto-assigned WC-{Product_ID} identifier) against Identifier in Settings → Price List or linked Inventory Goods SKU.

2. Exact Item Name

If no SKU matches, Works25 checks if the WooCommerce product name matches an active item name (type) in your Price List.

When a Price List item is matched, Works25 automatically triggers all linked workflows—including workstation processes (jobsdone), loyalty points (pointsbought), memberships (subscriptions), and uncommitted stock reservations (goodmove).

Back to contents

B2. Session Times, Staff Assignment & Safe Item Fallbacks

  • Session Time & Booking Calendar (rentalbooking): When a WooCommerce order line contains booking/appointment metadata (such as WooCommerce Bookings, Amelia, Bookly, FooEvents, or custom session_date / session_time fields), Works25 automatically creates a calendar slot in rentalbooking, calculates the end time using the item's mintime (duration in minutes) when no explicit end time is provided, and populates pickupdate, pickuptime, and datesend.
  • Staff / Resource Assignment: Booking metadata specifying a staff member, therapist, or resource (staff, therapist, resource_name) is matched against your Works25 staff list and assigned directly to the job line (orderlist.staff).
  • Never drops an order: If a WooCommerce product has no matching SKU or name in Works25, it is added as an ad-hoc line item under category WooCommerce using the exact price and quantity paid by the customer.
  • Shipping & Customer matching: Shipping fees (shipping_total > 0) are appended as a Shipping line item, and customer phone numbers are normalized (601...) to match or create customer profiles.
  • Back to contents

    B3. Two-Way Order Status, Refunds & Payment Ledger Sync

    Event / Status Works25 Action Accounting & WooCommerce Sync
    WC pending / on-hold Bill created as Received Balance due recorded; stock & session slots reserved
    WC processing Bill active as Received Full payment recorded into Payment Account; pointsbought & subscriptions settled automatically
    WC completed Bill marked Delivered Full payment recorded (if needed) and inventory goodmove committed
    WC cancelled / failed Bill marked Void (if unpaid) Unpaid orders voided; reserved stock & rentalbooking slots released
    WC refunded (Paid Order) Items marked Returned Idempotent refund entry ({bilid}re) posted to Return, inventory returned in goodmove, and settled points reversed
    Works25 → Done / Delivered / Void Staff updates status in Works25 Pushes completed or cancelled back to WooCommerce and posts Runner/Tracking info as a customer Order Note
    Back to contents
    C

    Catalog, Price List, 1-Way Promo Discount & Inventory Stock Sync

    Keep your Works25 Price List and WooCommerce Products aligned with clear directional rules that prevent sync loops.

    C1. Timestamp-Compared Smart Sync

    Works25 compares each WooCommerce product's UTC modification timestamp (date_modified_gmt) against the Works25 Price List item's timestamp (ON UPDATE CURRENT_TIMESTAMP):

    Data Field Sync Direction & Priority Rule
    Base Price (regular_price), Name, Category, Weight, Image Bidirectional (Newer Timestamp Wins): Compares date_modified_gmt vs price.timestamp. Inbound sync always reads WooCommerce regular_price so promotional sale prices never overwrite your Works25 base price.
    HTML Description (price.html) Works25 Always Wins (Unless Empty): A non-empty Works25 HTML description is never overwritten by WooCommerce; WooCommerce only populates price.html when Works25's HTML is empty.
    Promotional Sale Price & Dates (discpercent, discstart, discend) 1-Way Push (Works25 → WooCommerce): Works25 calculates sale_price from discpercent and pushes date_on_sale_from and date_on_sale_to to WooCommerce.
    Linked Inventory Stock (goodprice / goodmove) 1-Way Push on Catalog Sync (Works25 → WooCommerce): Works25 computes net available stock (InStock - Reserved Sales Orders) for items linked in goodprice and pushes manage_stock: true and stock_quantity to WooCommerce. Inbound stock changes happen exclusively via Order Webhooks & Order Sync.
    Back to contents

    C2. Why 1-Way Stock Push + Order Webhooks Prevents Sync Loops

    Works25 Ledger Is Master

    Because Works25 tracks committed stock (goodmove) and multi-SKU recipes (goodprice), product webhooks from WooCommerce never overwrite Works25 inventory quantities.

    Pre-Sync Order Catch-Up

    Before Smart Sync pushes stock counts to WooCommerce, Works25 automatically pulls recent WooCommerce orders first so online purchases are already deducted in goodmove.

    Back to contents

    C3. Syncing from Price List or Integration Settings

    1. Direct from Price List (Settings → Price List): Whenever an active WooCommerce integration exists, a green Sync WooCommerce button appears directly in your Price List toolbar for one-click Smart Sync.
    2. From Integration Settings (Settings → Integration → Configure): Choose between Smart Sync (Timestamp-Compared), Pull from WooCommerce → Works25, or Push from Works25 → WooCommerce, with an optional Category Filter.
    Back to contents
    D

    Manual Order Sync & Troubleshooting

    Catching up on past orders, setting up webhooks manually if needed, and resolving common connection issues.

    D1. Pulling Recent Orders Manually

    If your store had orders placed before you connected Works25, or if your WordPress server temporarily lost internet connectivity:

    1. Go to Settings → Integration in Works25.
    2. Click Configure on your woocommerce card.
    3. Click Sync Recent Orders. Works25 will fetch the latest orders directly from your WooCommerce REST API and import or update them automatically.
    Back to contents

    D2. Manual Webhook Setup in WooCommerce (Optional)

    If your WordPress security firewall blocks automated webhook creation, you can add the webhooks manually in WooCommerce → Settings → Advanced → Webhooks → Add webhook:

    Setting Value
    Status Active
    Topic Create webhooks for Order created, Order updated, Product created, and Product updated
    Delivery URL Copy the Webhook Delivery URL shown inside your Works25 WooCommerce Configure panel
    Secret Copy the Webhook Secret shown inside your Works25 WooCommerce Configure panel
    API Version WP REST API Integration v3
    Back to contents

    D3. Common Issues & Fixes

    Symptom Usual Cause Fix
    Connection test returns 401 Unauthorized Wrong Consumer Key/Secret, or WordPress server strips Basic Auth headers Regenerate keys with Read/Write permission; Works25 automatically falls back to query-parameter auth over HTTPS
    Connection test returns 404 Not Found WordPress Permalinks are set to Plain In WordPress Admin → Settings → Permalinks, select Post name and Save
    Order items appear under category WooCommerce instead of Price List category The WooCommerce SKU does not match any Identifier in Works25 Price List Click Sync WooCommerce in Settings → Price List or copy the WooCommerce SKU into the item's Identifier field
    Order synced, but payment shows as Due WooCommerce order is still in pending or on-hold (e.g. bank transfer awaiting verification) Once marked processing or completed in WooCommerce, payment syncs automatically
    Back to contents
    Works25
    Home Offers