WooCommerce integration
How the Maxmove WooCommerce plugin connects a store, quotes delivery at checkout, syncs orders to Maxmove, and receives signed status webhooks.
The Maxmove Delivery for WooCommerce plugin adds Maxmove as a shipping method, quotes delivery at checkout, creates a Maxmove delivery from each qualifying order, and writes delivery status and the tracking link back to the order.
For click-by-click setup, see Set up the Maxmove WooCommerce plugin.
Plugin facts#
| Property | Value |
|---|---|
| Plugin | Maxmove Delivery for WooCommerce, slug maxmove-for-woocommerce, GPLv2 or later |
| Requires | WordPress 6.7, PHP 7.4, WooCommerce 8.9 or later |
| Compatible with | High-Performance Order Storage, block checkout, classic checkout |
| Shipping method id | maxmove_woocommerce, enabled per shipping zone |
| Distribution | ZIP package provided by Maxmove |
How it connects#
The plugin does not use the public /v1 API or /v1 API keys. It talks to a dedicated WooCommerce API at https://api.maxmove.com (the address is fixed), and its orders send no /v1 webhook events.
Link token
An admin of a Maxmove business workspace creates a single-use link token in the dashboard under Integrations → WooCommerce. It is valid for 15 minutes and approved for the store address saved there.
Connect
The merchant pastes the token in WooCommerce → Maxmove. The plugin sends it to Maxmove with the store URL and its callback URL,
/wp-json/maxmove/v1/webhooks. Store and callback must be on the approved host, and the callback must be publicly reachable.Plugin credentials
Maxmove returns credentials that the plugin sends as a bearer token from then on. They are renewed while in use, and the plugin checks the connection daily. If Maxmove rejects them, the plugin deletes its local credentials and the store must reconnect.
One store connects to one business workspace, and each workspace has one active WooCommerce connection.
Checkout#
When the shopper's address matches a zone with the Maxmove method enabled, the plugin requests a quote with:
- the store's pickup address and the delivery address,
- the cart currency and merchandise subtotal,
- up to 4 pickup times: the earliest possible and 2-hour slots within the store's opening hours,
- the language (English or German; other WordPress languages fall back to English).
The plugin doesn't send line items, weights, or dimensions. Maxmove geocodes the addresses.
The shopper sees the price from the store's pricing policy (live price with an adjustment, fixed price, free delivery above a subtotal, and a cap on the carrier cost), not necessarily the carrier price. Each rate is signed, so the order can later be checked against what the shopper accepted.
Maxmove hides the method, with a generic notice, when it can't quote: for example when the cart has more than one shipping package, the currency doesn't have exactly two decimals, no pickup time is available, the API doesn't answer in time, or the workspace's billing isn't ready.
Data flow#
Order status changes
When an order with a Maxmove shipping line reaches one of the ready statuses (by default
processingandcompleted), and, if required, is paid, the plugin queues it in Action Scheduler.Order sent to Maxmove
The plugin sends the order in the background and retries network errors,
429, and5xxanswers with backoff, honouringRetry-After. A reconciler runs every 5 minutes for orders that are still missing, and the merchant can retry from the order with Retry Maxmove delivery.Delivery created
Maxmove re-prices the route and rejects the order if the price exceeds what the shopper accepted. One WooCommerce order becomes at most one Maxmove delivery, and each signed rate can only be used for one order. Orders with more than one Maxmove package are blocked.
Status sync#
Maxmove pushes status to the plugin's callback URL; the plugin doesn't poll. The webhook request carries these headers:
| Header | Content |
|---|---|
x-maxmove-event-id | Event id. The plugin deduplicates on it. |
x-maxmove-delivery-id | Delivery id. |
x-maxmove-event-type | Event type. |
x-maxmove-event-timestamp | Send time. Requests more than 300 seconds off are rejected. |
x-maxmove-signature | HMAC-SHA256 signature. |
These are not the /v1 webhook events and use their own event names and signature. The plugin stores the delivery stage and tracking URL on the order and shows the status and tracking link in My Account and in customer emails. It does not change the WooCommerce order status by default; a theme or plugin can map events to order statuses with the maxmove_woocommerce_order_status_for_event filter.
Payment#
The shopper pays the store. Maxmove charges the business workspace's company card per delivery: it authorizes the amount when it imports the order and captures it after completion. If billing isn't ready, the order waits in Maxmove until the merchant completes billing setup.
Cancellations#
- An order set to
cancelledorrefundedin WooCommerce cancels the Maxmove delivery. If the courier already picked up the goods, the cancellation is rejected and the plugin marks the order for manual action. - A delivery cancelled by Maxmove doesn't cancel or refund the WooCommerce order.
- Partial refunds are not synced.
Settings#
In WordPress, the merchant sets the link token, the pickup address, the ready order statuses, and per zone whether the method is enabled and its title. Pricing, automatic import, paid-order requirement, vehicle type, extra services, and scheduling are managed in the Maxmove dashboard and shown read-only in the plugin.
Data stored by the plugin#
The plugin keeps its settings and credentials in the maxmove_woocommerce_settings option, _maxmove_* order meta, a webhook ledger table (30 days, for deduplication), and a privacy job table. Deactivating the plugin disconnects the store and deletes the credentials. Uninstalling it removes its tables and options; existing _maxmove_* order meta stays.
Did this answer your question?