Flxpoint Help Center
All DocsContact support

WooCommerce as a Source

July 2, 2026

Summary

WooCommerce connects to Flxpoint as a source through the WooCommerce REST API using your store's Domain, Consumer Key, and Consumer Secret, generated from your WordPress admin. Get Inventory pulls the full product catalog (products, variants, pricing, stock, images, categories, and dimensions), Send Orders creates orders in the vendor's WooCommerce store matched by External Listing ID, and Get Shipments retrieves tracking using the WooCommerce order ID returned on order creation.

Get Inventory (Primary)
Pulls the full WooCommerce catalog via the REST API – products and variants with SKU, pricing, stock, images, categories, weight and dimensions
Get Inventory (Secondary)
A second, independently scheduled inventory job on the same source – WooCommerce is full-feed (no delta), so use it for a separate refresh cadence
Send Fulfillment Requests
Creates orders in the vendor's WooCommerce store from approved Fulfillment Requests, matching line items by the External Listing ID saved during Get Inventory
Get Shipments
Reads tracking from the store's active tracking source using the stored WooCommerce order ID and writes it back to your Fulfillment Requests

Add a source (Source Type Vendor Warehouse), click Start Creating IntegrationsGet Inventory [Primary], then click + New Connection and enter the values below. Click Test ConnectionSave Connection.

DomainRequired
Your WooCommerce store URL, including https:// (e.g. https://yourstore.com).
This is the live store URL shown in your browser.
Consumer KeyRequired
Generated in WordPress at WooCommerce → Settings → Advanced → REST API → Add Key. Enter a description, pick the user the key runs as, then click Generate API Key.
Shown only once — copy it immediately.
Consumer SecretRequired
The secret paired with your Consumer Key, generated on the same REST API screen. Set Permissions to Read/Write if you also use Send Fulfillment Requests.
Also shown only once — copy it together with the key.
Connection NameSetting
Any label to identify this connection in Flxpoint, e.g. WooCommerce API.
For your reference only.
Can't connect? Confirm the API key was created with Read/Write permissions and that WordPress uses a "pretty permalink" structure (Settings → Permalinks) — the REST API does not work on the default plain permalink. Persistent 403 errors usually mean the vendor's host or a security plugin (Wordfence, Sucuri) is blocking Flxpoint's outbound IPs; send the vendor's host these Flxpoint IP addresses to allowlist: 52.44.101.151 and 52.1.186.211.

API keys must be Read/Write and "pretty permalinks" must be enabled

Generate the Consumer Key and Consumer Secret at WooCommerce → Settings → Advanced → REST API and set the permission level to Read/Write (not Read only) if you also run Send Fulfillment Requests. In Settings → Permalinks, make sure a "pretty permalink" structure is selected — the REST API does not function on the default plain permalink.

Get Shipments needs a supported tracking source on the vendor's store

Flxpoint reads tracking from one of three sources: the paid WooCommerce Shipment Tracking plugin (default), the free Advanced Shipment Tracking plugin by Zorem (recommended alternative), or manually entered order notes in the exact format TRACKING: [Carrier] - [Tracking Number]. Running a different plugin (e.g. Shipmate) alongside the paid plugin causes conflicts — pick one tracking source per store.

Send Fulfillment Requests uses the External Listing ID from Get Inventory — import items first

When submitting orders, Flxpoint sends the External Listing ID saved during Get Inventory to look up the product on the vendor's store. If that ID is blank or stale (e.g. the product was deleted and recreated), order submission fails or lands on the wrong product. Always run Get Inventory [Primary] successfully before routing orders.

Blocked IPs return 403 on every operation

Some hosts and WordPress security plugins block requests from non-browser IPs by default. If you get persistent 403 errors despite correct credentials, the vendor's hosting provider must whitelist Flxpoint's outbound IP addresses: 52.44.101.151 and 52.1.186.211. Send these directly to the vendor's host — no need to contact Flxpoint Support for them.


WooCommerce FieldMaps To – Notes
SKUParent SKU. Primary product identifier.
NameTitle. Product title.
Description / Short DescriptionDescription. Use both fields as needed.
Regular Price / Sale PriceCost. Sale price overrides regular when present.
Stock QuantityQuantity. Current on-hand.
WeightWeight (lbs). Convert if the store uses different units.
Dimensions (Length / Width / Height)Dimensions (in). Convert to inches if needed.
Category 1 / 2 / 3Categories. Two levels are read; a third level is not captured.
ImagesImage URLs. Multiple images for the parent; by design only one image per variant.
Variant SKU / Price / Stock (variable products)Variant SKU / Cost / Quantity. Each variant is fetched via /variations and matched to its parent. Whole feed is re-pulled every run (full feed, no delta).
WooCommerce has no delta/incremental feed — every Get Inventory run re-pulls the full catalog. Get Inventory (Secondary) is simply a second inventory job on the same source (same connection and a Get Source Products mapping template) that you can schedule on a different cadence than Primary. Critical: enable Archive/Un-Archive Inventory on only ONE inventory job — turning it on in both Primary and Secondary makes items archive then immediately un-archive each cycle.
Creates a new order in the vendor's WooCommerce store from an approved Fulfillment Request via the REST API (same Consumer Key/Secret as the connection). Line items are matched using the External Listing ID saved during Get Inventory; in the Send Fulfillment Requests template you map Billing/Shipping Address (billing.* / shipping.*), Order Line Items (line_items[].sku, quantity is required), the Shipping Line (shipping_lines[]), and Totals (total, discount_total, fee_lines[]). Configure Hold for X Hours and optional Only Send During Business Hours. WooCommerce returns its own order ID as the acknowledgement (used later by Get Shipments). Fulfillment Request Number, Customer Association, Custom Fields, and Attachments are not passed to WooCommerce.
Reads tracking using the WooCommerce order ID stored during Send Fulfillment Requests. In the Get Shipments template map Tracking Provider → Carrier, Tracking Number, and Tracking Link → Tracking URL (Shipping Cost and Shipped At map when the plugin provides them). SKU in the shipment is used for item association, and partial/multiple shipments per order are supported. Set the FR Lookback Period (default ~90 days) to control how far back Fulfillment Requests are checked. Tracking must come from a supported source on the store — the paid WooCommerce Shipment Tracking plugin, the free Advanced Shipment Tracking plugin by Zorem, or a private order note formatted TRACKING: [Carrier] - [Tracking Number] (a manual CSV import is the last-resort fallback). Invoice information and custom fields are not returned.

401 Unauthorized or 403 Forbidden on Test Connection or job runs
401 means invalid or expired credentials — regenerate the Consumer Key and Consumer Secret in WooCommerce admin, re-enter them, confirm the key user's WordPress role hasn't been restricted by a security plugin, and confirm a pretty permalink structure is set. 403 means the server accepts the connection but blocks access — a WAF, security plugin (Wordfence, Sucuri), or host firewall is blocking Flxpoint's outbound IPs. The vendor's host must whitelist Flxpoint's IPs; contact Flxpoint Support for the current list.
502 Bad Gateway — Get Inventory failing with 0 products imported
A 502 means the vendor's WooCommerce server returned a server error before completing the request (an nginx signature points to the vendor's web server, not Flxpoint). Common causes: the store is down or under heavy load, a hosting resource limit (memory/timeout) is hit during the catalog fetch, or a plugin conflict crashes the REST API. Ask the vendor to check their hosting error logs for PHP fatal errors or timeouts in the same window. If it persists, pause the schedule to avoid flooding the server and contact Flxpoint Support.
"No object available for Source Shipping Method > Shipping Code" on Send Fulfillment Requests
The Send Fulfillment Requests template references Source Shipping Method → Shipping Code, but no shipping method is configured on the WooCommerce source. Either add a shipping method (Sources → [Source] → Shipping Methods) so a code exists to map, or remove the Shipping Code mapping from the template — WooCommerce will apply its own default. Most WooCommerce vendor setups do not need a specific method passed from Flxpoint.
Get Shipments not returning tracking — vendor marks orders shipped but no tracking appears
The most common cause is that the vendor's tracking plugin or format isn't one Flxpoint supports. Confirm which method they use; supported options are the paid WooCommerce Shipment Tracking plugin, the free Advanced Shipment Tracking plugin by Zorem, or private order notes in the exact TRACKING: [Carrier] - [Tracking Number] format. If they run a different plugin (e.g. Shipmate) alongside the paid one, disable one to resolve the conflict. Also confirm the Woo order ID was stored during Send Fulfillment Requests — if that failed, Get Shipments has nothing to look up.
404 woocommerce_rest_product_variation_invalid_id — sync failing with invalid variation ID
Flxpoint is referencing a variation ID that no longer exists on the vendor's store, usually because a product was deleted and recreated (its variation IDs changed) while Flxpoint's External Listing IDs still point to the old ones. Re-run Get Inventory [Primary] to refresh the External Listing IDs to the current variation IDs, then confirm the listings re-linked. Stale IDs already on channel listings may need those listings re-built or re-linked after the refresh.
Variant data missing or empty after Get Inventory Primary
Check two things on the vendor's store: the product type must be Variable (not Simple) — only variable products expose variants via the /variations endpoint — and each variation must be in Published status (draft variations aren't returned). Also confirm the variant-level fields (Variant SKU, Quantity, Price) are mapped in your Get Inventory template. If variants imported before and then vanished, the vendor may have switched the product from Variable to Simple, which removes all variation data.

Where do I find my WooCommerce Consumer Key and Consumer Secret?
In WordPress, go to WooCommerce → Settings → Advanced → REST API and click Add Key. Enter a description, select the user the key should run as, and set Permissions to Read/Write, then click Generate API Key. The Consumer Key and Consumer Secret are shown only once — copy them immediately. Your Domain is the store URL shown in your browser, including https://. Enter all three into the Flxpoint connection form and click Test Connection.
Does WooCommerce as a Source support draft or unpublished products?
Unlike the WooCommerce channel integration, the source integration has no separate draft/published filter. Get Inventory pulls whatever the REST API returns for your key's access scope; Draft products are typically not returned unless the key's user has draft-viewing permissions. If draft products do appear in your import, add a Post-Mapping Workflow rule with a Do Not Import action to filter them out by a status field value.
What does Get Inventory (Primary) import from WooCommerce?
The full product catalog in batches: title, SKU, description and short description, regular and sale price, stock quantity, weight and dimensions (convert to lbs/in if the store uses different units), product categories (up to two levels), and images (parent gallery + featured image). For variable products, each variant is fetched with its own SKU, price, stock, dimensions, and a single variant image. The full feed is re-pulled every run — there is no delta or incremental mode.
What tracking plugin options does Get Shipments support?
Three sources. The default is the official WooCommerce Shipment Tracking plugin (paid). If the vendor doesn't have it, the recommended free alternative is the Advanced Shipment Tracking plugin by Zorem — once installed, Flxpoint reads from it automatically. The third needs no plugin: the vendor adds a private order note in the exact format TRACKING: [Carrier] - [Tracking Number] (e.g. TRACKING: UPS - 1Z999AA10123456784), one note per package for split shipments. Running multiple tracking plugins at once (e.g. Shipmate alongside the paid plugin) causes conflicts — choose one source per store.
What is the FR Lookback Period in Get Shipments and what should I set it to?
It controls the maximum age of Fulfillment Requests that Get Shipments checks for tracking updates (default ~90 days). Flxpoint uses the WooCommerce order ID stored during Send Fulfillment Requests to query the store for shipment data. If older FRs never got tracking, temporarily increase the lookback and re-run. For most accounts 90 days is enough — extend it only when actively recovering old untracked orders.
How does Flxpoint send orders to a WooCommerce vendor's store?
Send Fulfillment Requests creates a new order in the vendor's store via the REST API using the same Consumer Key and Consumer Secret from your connection. Flxpoint sends the External Listing ID (saved during Get Inventory) as the item identifier, along with billing/shipping address, line-item quantity, shipping line, and totals from your mapping template. WooCommerce returns a Woo order ID as the acknowledgement, which Flxpoint stores and later uses in Get Shipments to fetch tracking. The Fulfillment Request Number is not passed — WooCommerce assigns its own order ID.
© 2026 Flxpoint. All rights reserved.