FleetConnector Routific Documentation
Complete guide to installing, configuring, and using the WooCommerce to Routific integration plugin
Ready to automate your WooCommerce deliveries with Routific?
€199/year per integration · unlimited orders · 14-day money-back guarantee. Requires an active Routific account.
Installation
1.1 System requirements
Before installing the WooCommerce to Routific plugin, ensure your system meets these requirements:
- WordPress 6.0 or higher: Tested up to WordPress 6.9
- WooCommerce 7.0 or higher: Must be installed and activated. Tested up to WooCommerce 11.1
- PHP 7.4 or higher: Required for modern PHP features
- An active Routific account: You need a Routific API token (created under Company Settings → Integrations) and at least one workspace
- A FleetConnector license: Orders are only sent to Routific while a valid license is active
- A publicly reachable site with HTTPS (recommended): Needed to receive Routific webhooks for delivery status updates
1.2 Installation steps
Purchase and Download
Purchase the WooCommerce to Routific plugin from our website for €199/year. You'll receive a download link and license key via email.
Upload to WordPress
Navigate to Plugins → Add New → Upload Plugin in your WordPress admin.
Activate Plugin
After the upload completes, click "Activate Plugin". On activation the plugin creates its activity log table and schedules a daily clean-up of old log entries. The plugins list now shows "Settings" and "Documentation" links for FleetConnector Routific.
Activate License
Go to WooCommerce → FleetConnector Routific and enter your license key in the License card at the top of the page.
Connect Routific
Paste your Routific API token, load and select your workspace, and save. Optionally set up the Routific webhook to receive delivery status updates (see Chapter 4).
1.3 Where to find the plugin
After activation, FleetConnector Routific adds two pages to the WooCommerce menu. Both require the manage_woocommerce capability (shop managers and administrators).
WooCommerce → FleetConnector Routific
The settings page: license, Routific connection, automatic sending, synchronization, order details, delivery date, webhooks and the danger zone.
WooCommerce → FCR Dashboard
The activity dashboard with statistics, filters, the activity log, retry buttons and CSV export.
Configuration
Configure the WooCommerce to Routific connection and customize which orders are sent and which details Routific receives. All settings live on WooCommerce → FleetConnector Routific and are stored with the "Save All Settings" button at the bottom of the page.
2.1 License
The License card at the top of the settings page activates your FleetConnector license. Licenses are managed through Lemon Squeezy; activating a key registers this site (by its domain name) as an activation of your license.
- Paste the license key from your purchase email into the "License Key" field
- Click "Activate License"
- The page reloads and shows "License Active"
License States
Active
All features are enabled. The key is shown masked, with a "Deactivate" button.
Invalid
The key is invalid or expired. Orders are not sent to Routific until a valid license is active.
License Required
No key has been entered yet.
Good to know
- • The license is re-validated automatically once a week (WP-Cron). If the license server can't be reached, the integration keeps working; only an explicit "invalid" response disables it.
- • "Deactivate" releases the activation slot, so you can use the key on another site (for example when moving from staging to production).
- • A key that belongs to another FleetConnector product is refused with "This license key belongs to another FleetConnector product."
2.2 Routific connection
FleetConnector Routific uses the Routific Platform API (v2) at https://api.plan.routific.com/v2. It authenticates with an API token and creates orders in one Routific workspace.
Step 1: Create a Routific API Token
- Log in to Routific
- Go to Company Settings → Integrations
- Click "Create API Token"
- Copy the generated token
Step 2: Configure in WooCommerce
- In WordPress admin, go to WooCommerce → FleetConnector Routific
- Find the "Routific Connection" card
- Paste your token in the "Routific API Token" field
- Click "Load workspaces" and choose your workspace in the "Workspace" dropdown (selected automatically when your token has access to only one workspace)
- Click "Test Connection" to verify the token and workspace
- Click "Save All Settings" at the bottom of the page
2.3 Automatic order sending
Automatically send orders to Routific
When enabled, orders are sent to Routific as soon as they reach one of the selected statuses.
Default: Enabled
When disabled, you send orders manually with the order actions or bulk actions (see Chapter 3).
Send orders when the status changes to:
Choose one or more WooCommerce order statuses (custom statuses are listed too). An order is sent the first time it changes to one of these statuses and is not yet linked to a Routific order.
✓ Processing (Default)
The order is paid and ready to be delivered. Recommended for most shops.
Other statuses
For example "Completed" if you only want to plan orders after they have been picked and packed.
Only send orders that need a delivery
Skips orders without shippable products and orders with local pickup. Pickup shipping methods are local_pickup, pickup_location and local_pickup_plus (customizable with the fcr_excluded_shipping_methods filter).
Send orders in the background (recommended)
Uses the WooCommerce Action Scheduler so checkout is never slowed down by the Routific API. Temporary errors are retried automatically (see section 3.6).
2.4 Synchronization settings
Automatically sync order changes to Routific
When enabled (default), changes to an order that was already sent to Routific are pushed to the Routific order.
How it works:
- • Address, items, notes and delivery date changes are sent to Routific
- • The update only happens when something relevant changed: the plugin compares a fingerprint (hash) of the data with the last sync and skips unchanged orders
- • Orders that are already delivered or missed in Routific are not changed
- • Cancelled, refunded, failed and trashed orders are not synced
- • If no customer delivery date is found, the delivery date that was sent earlier is kept, so the fallback date doesn't move every time the order is saved
Remove the Routific order when the WooCommerce order is cancelled
When enabled, cancelling a WooCommerce order deletes the linked order in Routific. Default: Disabled.
2.5 Order details sent to Routific
The "Order Details Sent to Routific" card controls which information Routific and your drivers receive.
Service time per stop (minutes)
Time the driver spends at the address, including parking. Used by Routific to plan realistic routes. Sent as duration in seconds; 0 sends no duration.
Load (vehicle capacity)
Routific compares the load with the capacity of your vehicles. Use the same unit as the capacity in Routific.
Number of items
Total weight of the products
Checkboxes
- Send the customer phone number (default: on): Lets drivers call the customer and enables Routific SMS notifications (if enabled in your Routific account).
- Send the customer email address (default: on): Enables Routific email notifications (if enabled in your Routific account).
- Add the ordered products to the driver instructions (default: on): Lists every item as "2x Product name", including item options such as size or color.
- Add payment information to the driver instructions (default: on): Shows the amount to collect for cash on delivery orders ("Collect payment on delivery: …"); for other orders the payment method is shown ("Payment: …").
Tags (optional)
Comma separated. Tagged orders can only be planned on routes with matching tags in Routific. Leave empty if you don't use tags.
Order number prefix (optional)
Added in front of the WooCommerce order number in Routific. Useful when several shops use the same Routific account.
2.6 Delivery date & time window
The delivery date chosen by the customer is sent as the Routific delivery date. Time slots (e.g. "09:00 - 12:00") are sent as the time window.
Delivery date plugin
Auto-detect (Default)
Checks the fields of all supported plugins below, in this order
Order Delivery Date for WooCommerce (Tyche)
_orddd_lite_timestamp, _orddd_timestamp, orddd_timestamp
Iconic WooCommerce Delivery Slots
jckwds_date_ymd, jckwds_timestamp, jckwds_date, _jckwds_date
Other plugin using a "delivery_date" field
_delivery_date, delivery_date, _iconic_delivery_date, _wc_delivery_date, ywcdd_order_delivery_date, _ywcdd_order_delivery_date
Custom field
Enter the order meta key that holds the delivery date in "Custom field name" (for example _delivery_date)
Supported date formats
- • Unix timestamps (seconds or milliseconds)
- • YYYY-MM-DD and compact YYYYMMDD
- • European notation DD-MM-YYYY, DD/MM/YYYY or DD.MM.YYYY
- • Other date strings that PHP can parse
A detected date in the past is ignored and the fallback below is used instead.
When no delivery date is found
- Use the next business day (Mon-Fri): Default. Skips Saturday and Sunday.
- Use tomorrow
- Use today
- Don't send a date (plan it manually in Routific)
Time windows
The plugin looks for a time slot in these order fields: jckwds_timeslot, _jckwds_timeslot, _orddd_time_slot, _orddd_lite_time_slot, orddd_time_slot, _delivery_time, delivery_time, ywcdd_order_slot_from. Slots like "09:00 - 12:00", "9am - 12pm" or "09.00 to 12.00" are converted to a 24-hour time window. The start time must be before the end time.
Use a default time window
"Use a default time window when the customer didn't choose a time slot". Default: Disabled (no time window is sent).
From / Until
The default window used when the checkbox is enabled.
Format: HH:MM (24-hour)
2.7 Delivery status updates (webhooks)
Webhook URL
Use "Copy URL" to copy the URL for your Routific webhook:
You'll configure this in Chapter 4 (Webhooks).
Signing secret
Required. Every webhook is verified with this secret (HMAC-SHA256), so nobody else can change your orders. Without a signing secret, all incoming webhooks are rejected.
Order status mappings
Each option defaults to "Do not change status". Choose a WooCommerce status to change orders automatically:
Order status when delivered
For example "Completed", so the customer receives the WooCommerce "order completed" email.
Order status when the delivery is missed
For example "On hold" or a custom status, so you can follow up with the customer.
Order status when the route is published
Triggered when the dispatcher publishes the route with this order to a driver.
Save the driver name on the order
Default: Enabled. Controls whether the driver's name from the published route is stored on the order. The stop number and ETA are stored whenever a route is published.
Email the Routific tracking link to the customer
Default: Disabled. Adds the tracking link as a customer note (WooCommerce sends it by email) as soon as the route is published.
2.8 Display & advanced
Show a Routific status column in the orders list
Default: Enabled
Adds a "Routific" column after the status column in WooCommerce → Orders (see section 3.5).
Enable debug logging
Writes detailed information to WooCommerce → Status → Logs (source: fleetconnector-routific). Errors are always logged. Default: Disabled.
2.9 Danger zone
Remove all Routific links
Use this when you switch to another Routific account or workspace. It removes the link between your WooCommerce orders and Routific (the Routific order ID, status, driver, ETA, tracking link and related order data), so orders can be sent to the new account or workspace. Nothing is deleted in Routific.
Large shops are processed in batches. If the result says "orders cleaned up so far", click the button again to continue.
Clear Activity Logs
Clears all FleetConnector Routific activity logs from the dashboard.
Features
FleetConnector Routific provides multiple ways to send WooCommerce orders to Routific and keep track of them.
3.1 Automatic order sending
With automatic sending enabled, every order that reaches a trigger status is sent to Routific in the background. When the order is created in Routific, FleetConnector:
- Stores the Routific order ID and Routific order number on the WooCommerce order
- Adds an order note, for example "Order sent to Routific (<Routific order number>) for delivery on <date>."
- Logs the action in the FCR Dashboard, including the data that was sent
The new Routific order starts with the status "Not scheduled" and is ready to be planned on a route in Routific.
3.2 Manual order actions
Even with automatic sending enabled, you can send, update or remove individual orders from the order edit screen.
From the Order Actions Dropdown
- Open any WooCommerce order
- In the "Order actions" box, open the dropdown
- Choose one of the Routific actions below and click the update button
Send to Routific
Shown when the order hasn't been sent yet. Creates the order in Routific.
Update order in Routific
Shown for orders that are already linked. Pushes the current order data to Routific, even when nothing changed since the last sync.
Remove from Routific
Shown for linked orders. Deletes the order in Routific and removes the link, so the order can be sent again later.
3.3 Bulk actions
Send or update multiple orders at once using WooCommerce bulk actions. Works on both the HPOS orders screen and the legacy orders screen.
How to Use Bulk Actions
- Go to WooCommerce → Orders
- Check the boxes next to the orders you want to process
- Select "Send to Routific" or "Update in Routific" from the Bulk Actions dropdown
- Click "Apply"
What happens during bulk processing:
- • Send to Routific skips orders that were already sent and orders that don't need a delivery
- • Update in Routific skips orders that haven't been sent yet, and only calls Routific for orders whose data changed
- • With background processing enabled, orders are queued and processed in the background: "3 orders are being sent to Routific in the background."
- • The notice also reports how many orders were skipped (already sent, not sent yet or no delivery needed)
- • All results are logged in the FCR Dashboard
3.4 Routific Delivery meta box
When editing any WooCommerce order, you'll see a "Routific Delivery" meta box in the sidebar with the current state of the Routific order.
Information Displayed
- Routific order: The Routific order number (or ID)
- Status: Not scheduled, Scheduled, Delivered or Missed
- Delivery date: The delivery date sent to Routific (updated with the route date when a route is published)
- Driver, Stop, ETA: Filled when the route is published
- Delivered at, Missed reason, Driver notes: Filled by delivery status webhooks
- Sent / Last update: When the order was created and last updated in Routific
- Open delivery tracking → Link to the Routific tracking page, once available
- Last error: Shown in red when the last Routific request failed
Orders that haven't been sent show "Not sent to Routific yet." and, when applicable, "This order does not require a delivery."
3.5 Routific status column
FleetConnector Routific adds a "Routific" column to your WooCommerce orders list. Hover over an icon to see the status as a tooltip.
Status Indicators
Delivered
Sent to Routific (tooltip shows Not scheduled or Scheduled)
Delivery missed
Not sent because of an error (tooltip shows the error message)
Not sent, or no delivery required
3.6 Background processing and automatic retries
API calls are queued in the WooCommerce Action Scheduler, so your checkout and admin screens are never slowed down by the Routific API.
- Hook: fcr_process_order (arguments: order ID and action)
- Group: fleetconnector-routific
- Actions: create, update, delete and refresh (fetch tracking link and proof of delivery)
- No duplicates: only one pending action per order and action type is queued
Automatic Retries
Temporary errors are retried automatically up to three times: after 1 minute, after 5 minutes and after 15 minutes. Temporary errors are:
- Connection errors and timeouts
- Rate limits (HTTP 429)
- Routific server errors (HTTP 5xx)
Other errors, such as validation errors, are not retried. They are shown in the meta box, the status column and the dashboard, where you can retry after fixing the order.
3.7 Duplicate prevention
FleetConnector Routific makes sure an order is only created once in Routific:
- An order that already has a Routific order ID is never created again ("This order was already sent to Routific.")
- Queued create actions check again right before sending, in case the order was sent manually in the meantime
- Retries from the dashboard and the "Send to Routific" order action update an existing Routific order instead of creating a new one
- Webhook processing never triggers a sync back to Routific
Webhooks
Webhooks send delivery status updates from Routific back to WooCommerce. When a dispatcher publishes a route or a driver completes a delivery, your WooCommerce orders are updated automatically.
4.1 Webhook setup
Step 1: Get Your Webhook URL
- In WordPress admin, go to WooCommerce → FleetConnector Routific
- Scroll to the "Delivery Status Updates (Webhooks)" card
- Click "Copy URL" (it will look like https://yoursite.com/wp-json/fleetconnector-routific/v1/webhook)
Step 2: Create the Webhook in Routific
- Log in to Routific with an admin user (only admins can manage webhooks)
- Go to Company Settings → Routific webhook
- Create a webhook with the URL you copied and activate it
- Subscribe to the events order.status_updated, route.published, route.unpublished and route.eta_updated
Step 3: Add the Signing Secret
- Copy the signing secret of the webhook from Routific
- Paste it in the "Signing secret" field in the plugin settings
- Click "Save All Settings"
- Use "Test connection" in Routific to check that everything works
4.2 Webhook security
Every incoming request is verified before anything is changed:
- Signature: The x-routific-signature header (format v0=<hex>) must match an HMAC-SHA256 of the raw request body, calculated with your signing secret. During a secret rotation, Routific may send two comma separated signatures; either one is accepted.
- Replay protection: Requests with an x-routific-timestamp more than 5 minutes away from your server time are rejected.
- Deduplication: Each x-routific-event-id is processed only once (remembered for 24 hours). Retried deliveries of the same event are acknowledged with "Already processed".
Rejected requests receive HTTP 401 and a warning is written to WooCommerce → Status → Logs (source fleetconnector-routific), for example "Webhook rejected: invalid signature".
4.3 Supported webhook events
Routific orders are matched to WooCommerce orders by the Routific order ID. If that fails, the customer order number (without your prefix) is used as a fallback.
1 order.status_updated (delivered)
When triggered: The driver marks the order as delivered in Routific.
What happens:
- The Routific status and delivery time are saved on the order
- Driver notes from Routific are saved and included in the order note "Routific: order delivered."
- The order status changes to your "Order status when delivered" setting (if set)
- The tracking link and proof of delivery info are fetched in the background
- The event is logged in the FCR Dashboard
2 order.status_updated (missed)
When triggered: The driver marks the delivery as missed in Routific.
What happens:
- The missed reason is saved ("No reason given" when Routific sends none)
- An order note is added: "Routific: delivery missed. Reason: …"
- The order status changes to your "Order status when the delivery is missed" setting (if set)
- The event is logged in the FCR Dashboard as failed, so missed deliveries are easy to filter
Other order statuses reported by Routific are added as an order note ("Routific: order status changed to …").
3 route.published
When triggered: The dispatcher publishes a route to a driver.
What happens for every order on the route:
- The Routific status becomes "Scheduled" and the delivery date is set to the route date
- The stop number and estimated arrival time (ETA, in your site's timezone) are saved
- The driver's name is saved (if "Save the driver name on the order" is enabled)
- An order note is added: "Routific: route published for <date>. Driver: <name>. Estimated arrival: <time>."
- The order status changes to your "Order status when the route is published" setting (if set)
- The customer tracking link is fetched in the background
4 route.unpublished
When triggered: The dispatcher unpublishes a route.
What happens:
- For orders on that route that are not yet delivered or missed, the ETA and stop number are removed
- An order note is added: "Routific: the route for this order was unpublished by the dispatcher."
5 route.eta_updated
When triggered: Routific recalculates the arrival times on a route.
What happens:
- The ETA on each open order is updated silently (no order note, to keep the order history clean)
4.4 Tracking link and proof of delivery
After a route is published or a delivery status changes, the plugin fetches the latest order details from Routific in the background:
- Tracking link: the Routific delivery tracking URL, shown as "Open delivery tracking →" in the meta box
- Status: the current Routific order status
- Proof of delivery: whether a signature was captured and how many photos were taken
4.5 Keeping webhooks healthy
Routific can automatically disable a webhook after repeated failed deliveries, for example when your site was down or the signing secret didn't match. If order updates suddenly stop arriving, check in Company Settings → Routific webhook that the webhook is still active, and reactivate it after fixing the cause.
Dashboard
The FleetConnector Routific Dashboard provides complete visibility into all WooCommerce to Routific activity.
5.1 Accessing the dashboard
Access the dashboard by navigating to:
There is also a "Dashboard" link in the header of the settings page. The unfiltered first page refreshes automatically every 60 seconds.
5.2 Statistics overview
At the top of the dashboard, you'll see key statistics cards based on the activity log:
Total Actions
All logged actions (create, update, delete and webhook)
Successful
Actions that completed successfully
Failed
Failed requests and missed deliveries
Pending
Actions with a pending status
Today
Actions logged today
This Week
Actions logged since Monday
5.3 Activity log
The activity log shows a detailed record of all actions between WooCommerce and Routific, 50 entries per page, newest first.
Filters
- Status: All Statuses, Success, Failed, Pending
- Action: All Actions, Create, Update, Delete, Webhook
- Date range: From date and to date
- Filter / Reset: Apply or clear the filters
Log Columns
- ID: Log entry number
- Order: WooCommerce order number (clickable link to the order)
- Routific ID: The Routific order ID (shortened; hover to see the full ID)
- Action: Create, Update, Delete or Webhook
- Status: Success, Failed or Pending
- Message: What happened, plus the error message for failures
- Date: When the action took place
- Actions: "Details" and, for failed create or update actions, "Retry"
Details
Click "Details" to open the Log Details window with the Request Data (the order data sent to Routific) and the Response Data (Routific's answer or the webhook payload) as formatted JSON.
5.4 Export to CSV
Export your activity log to CSV format for analysis, reporting, or record-keeping.
How to Export
- Set any filters you want (status, action, date range)
- Click the "Export CSV" button
- The filtered results download as fleetconnector-routific-logs-YYYY-MM-DD.csv
The CSV contains the columns ID, Order ID, Routific ID, Action, Status, Message, Error and Created At. Values are protected against spreadsheet formula injection.
5.5 Retry failed orders
After fixing the cause of an error (for example an incomplete address), you can send the order again directly from the dashboard.
How to Retry
- Filter the log on status "Failed"
- Find the failed create or update action
- Click "Retry" and confirm
Retry runs immediately. It creates the order in Routific, or updates it when the order was already sent, so a retry never creates a duplicate.
5.6 Log retention and WooCommerce logs
Activity log entries are kept for 90 days. A daily task (fcr_cleanup_logs) removes older entries. Developers can change the retention period with the fcr_log_retention_days filter (return 0 to keep logs forever). You can also clear all logs at once in the Danger Zone of the settings page.
Technical messages (API requests, errors, rejected webhooks, retries) are written to WooCommerce → Status → Logs with the source fleetconnector-routific. Errors, warnings and info messages are always logged; debug messages only when "Enable debug logging" is on.
Technical Details
Understanding how FleetConnector Routific works behind the scenes.
6.1 How the integration works
FleetConnector Routific bridges WooCommerce and the Routific Platform API (v2) using WordPress hooks, the WooCommerce Action Scheduler and direct HTTP API calls.
WooCommerce → Routific Flow
Order reaches a trigger status (e.g., Processing), detected via woocommerce_order_status_changed
A create action is queued in the Action Scheduler (hook fcr_process_order)
License and configuration are checked; the delivery date, time window, address and instructions are built from the order
The order is sent to POST /v2/orders?workspaceUuid=…
The Routific order ID, order number, status and a fingerprint of the sent data are saved to order meta
Later order changes (woocommerce_update_order) queue an update, which is only sent when the fingerprint changed
6.2 Routific API endpoints
All requests go to https://api.plan.routific.com with the header Authorization: Bearer <API token> and a 30-second timeout.
| Request | Used for |
|---|---|
| GET /v2/workspaces | "Load workspaces" and "Test Connection" |
| POST /v2/orders?workspaceUuid=… | Create the order in the selected workspace (the body is an array with one order) |
| PUT /v2/orders/{uuid} | Update the order. This is a full replacement, sent only when the data changed. A 404 unlinks the order so it can be sent again |
| DELETE /v2/orders/{uuid} | Remove the order (on cancellation or "Remove from Routific") |
| GET /v2/orders/{uuid} | Fetch tracking link, status and proof of delivery after webhooks |
6.3 Data sent to Routific
When creating or updating an order, FleetConnector Routific maps the WooCommerce order as follows. Optional fields are left out when they are empty or disabled in the settings.
| Routific field | WooCommerce source |
|---|---|
| name | Shipping first + last name (billing name as fallback), prefixed with the company as "Company - Name". Falls back to "Order 1234" |
| locations[0].address | Shipping address as a single line: street + address line 2, postcode + city, state, country name. The billing address is used when the order has no shipping address |
| customerOrderNumber | Order number prefix + WooCommerce order number |
| instructions | "Order #1234", the customer note, the ordered products and payment information (max. 2000 characters) |
| duration | "Service time per stop" setting, converted from minutes to seconds |
| phone | Shipping phone (billing phone as fallback) in international E.164 format. National numbers get the calling code of the address country and lose their leading 0 |
| Billing email address (only when valid) | |
| deliveryDate | Detected delivery date (YYYY-MM-DD) or the configured fallback date |
| timeWindows | Customer time slot or the default time window, as startTime / endTime (HH:MM) |
| load | Number of items or total product weight, depending on the "Load" setting |
| tags | The comma separated "Tags" setting |
Example Order Payload
{
"name": "Acme Ltd - Jane Smith",
"locations": [
{ "address": "Main Street 12, 1234 AB Amsterdam, Netherlands" }
],
"customerOrderNumber": "WEB-1234",
"instructions": "Order #1234\n\nCustomer note: Please ring twice\n\nItems:\n2x T-shirt (Size: L)\n\nPayment: Credit card",
"duration": 300,
"phone": "+31612345678",
"email": "customer@example.com",
"deliveryDate": "2026-10-01",
"timeWindows": [
{ "startTime": "09:00", "endTime": "12:00" }
],
"load": 2,
"tags": ["webshop"]
}
6.4 Order meta keys
FleetConnector Routific stores the following meta data on WooCommerce orders (HPOS compatible):
| Meta key | Description |
|---|---|
| _routific_order_uuid | Routific order ID (the link between both systems) |
| _routific_order_number | Routific order number |
| _routific_workspace_uuid | Workspace the order was created in |
| _routific_created | Date and time the order was sent |
| _routific_updated | Date and time of the last update |
| _routific_status | Routific status (not_scheduled, scheduled, delivered, missed) |
| _routific_delivery_date | Delivery date sent to Routific, or the route date after publishing |
| _routific_last_error | Last error message (removed after a successful request) |
| _routific_payload_hash | Fingerprint of the last sent data, used to skip unchanged updates |
| _routific_tracking_url | Customer delivery tracking link |
| _routific_route_uuid | Route the order was published on |
| _routific_driver_name | Driver of the published route |
| _routific_stop_number | Stop number on the route |
| _routific_eta | Estimated arrival time (site timezone) |
| _routific_delivered_at | Delivery time reported by Routific |
| _routific_missed_reason | Reason for a missed delivery |
| _routific_delivery_notes | Driver notes |
| _routific_pod | Proof of delivery summary (signature yes/no, number of photos) |
| _routific_retry_{action} | Temporary retry counter per action (create, update, delete, refresh) |
6.5 Developer hooks and filters
Developers can customize FleetConnector Routific behavior using WordPress hooks and filters. Add your code to a small custom plugin or your (child) theme's functions.php.
Available Filters
| Filter | Arguments | Description |
|---|---|---|
| fcr_order_payload | $payload, $order | Change the complete Routific order payload (create and update) |
| fcr_order_update_payload | $payload, $order | Change the payload for updates only (also used for the change fingerprint) |
| fcr_order_needs_delivery | $needs_delivery, $order | Decide whether an order should be sent to Routific |
| fcr_delivery_date | $date, $order | Final delivery date (YYYY-MM-DD, or null for no date) |
| fcr_delivery_date_meta_keys | $keys, $order | Order meta keys searched for the delivery date |
| fcr_time_window | $window, $order | Final time window (array with start and end, or null) |
| fcr_time_slot_meta_keys | $keys, $order | Order meta keys searched for the time slot |
| fcr_recipient_name | $name, $order | Name of the Routific order |
| fcr_address_parts | $parts, $order | Address parts (address_1, address_2, postcode, city, state, country) before they are combined |
| fcr_full_address | $address, $order | The single-line address sent to Routific |
| fcr_phone | $phone, $order | The formatted phone number |
| fcr_phone_country_code | $calling_code, $country | Calling code added to national phone numbers |
| fcr_instruction_lines | $lines, $order | Lines of the driver instructions |
| fcr_load | $load, $order | Load sent to Routific (null for no load) |
| fcr_excluded_shipping_methods | $methods | Shipping method IDs treated as pickup |
| fcr_order_id_from_number | $order_id, $number | Map a customer order number to an order ID in webhooks (for custom order number plugins) |
| fcr_log_retention_days | $days | Days to keep activity logs (default 90, 0 = keep forever) |
| fcr_lemonsqueezy_product_id | $product_id | Product ID that license keys must belong to |
Available Actions
| Action | Arguments | Runs when |
|---|---|---|
| fcr_order_created | $uuid, $order, $created | The order was created in Routific |
| fcr_order_updated | $uuid, $order, $response | The order was updated in Routific |
| fcr_order_deleted | $uuid, $order | The order was deleted from Routific |
| fcr_order_create_failed fcr_order_update_failed fcr_order_delete_failed |
$order, $error | A Routific request failed ($error is a WP_Error) |
| fcr_webhook_received | $topic, $data | Any verified webhook was processed |
| fcr_webhook_order_delivered | $order, $data | An order was delivered |
| fcr_webhook_order_missed | $order, $data | A delivery was missed |
| fcr_webhook_order_status_updated | $order, $status, $data | Any other order status update |
| fcr_webhook_route_published | $route, $timeline, $data | A route was published (once per route) |
| fcr_webhook_route_published_order | $order, $stop, $route | A route was published (once per order on the route) |
| fcr_webhook_route_unpublished | $route, $data | A route was unpublished |
| fcr_webhook_route_eta_updated | $data | Arrival times on a route were updated |
Examples
fcr_order_payload
Add an extra tag and a gate code to the Routific order. You can also add Routific customFields here; custom fields must already exist in your Routific account, and must use the structure described in the Routific API reference.
add_filter('fcr_order_payload', function ($payload, $order) {
// Only plan refrigerated orders on routes with the "refrigerated" tag
if ($order->get_meta('_needs_cooling') === 'yes') {
$payload['tags'] = isset($payload['tags']) ? $payload['tags'] : array();
$payload['tags'][] = 'refrigerated';
}
// Show a gate code to the driver
$gate_code = $order->get_meta('_gate_code');
if ($gate_code) {
$payload['instructions'] .= "\n\nGate code: " . $gate_code;
}
return $payload;
}, 10, 2);
fcr_phone_country_code
Use a default calling code for national phone numbers when the order has no country. Numbers that already start with + or 00 are not changed.
add_filter('fcr_phone_country_code', function ($calling_code, $country) {
if ($calling_code === '') {
return '+31'; // Netherlands
}
return $calling_code;
}, 10, 2);
fcr_delivery_date_meta_keys
Read the delivery date from an additional order field first.
add_filter('fcr_delivery_date_meta_keys', function ($keys, $order) {
array_unshift($keys, '_my_checkout_delivery_date');
return $keys;
}, 10, 2);
fcr_webhook_order_delivered
Run your own code when Routific reports a delivery.
add_action('fcr_webhook_order_delivered', function ($order, $data) {
error_log('Order #' . $order->get_id() . ' delivered via Routific');
}, 10, 2);
6.6 Database structure
FleetConnector Routific creates one custom database table for the activity log. The table is created on activation and upgraded automatically after plugin updates.
Table: wp_fcr_logs
The wp_ prefix matches your WordPress table prefix.
| Column | Type | Description |
|---|---|---|
| id | BIGINT(20) UNSIGNED | Primary key |
| order_id | BIGINT(20) UNSIGNED | WooCommerce order ID |
| remote_id | VARCHAR(255) | Routific order ID |
| action | VARCHAR(50) | create, update, delete or webhook |
| status | VARCHAR(50) | success, failed or pending |
| message | TEXT | Human-readable message |
| request_data | LONGTEXT | JSON-encoded data sent to Routific |
| response_data | LONGTEXT | JSON-encoded Routific response or webhook payload |
| error_message | TEXT | Error message for failed actions |
| created_at | DATETIME | Timestamp (site timezone) |
| updated_at | DATETIME | Reserved for updates |
Settings and Scheduled Tasks
- • All settings are stored as WordPress options prefixed with
fcr_(for examplefcr_api_token,fcr_workspace_uuid,fcr_trigger_statuses) - • WP-Cron events:
fcr_cleanup_logs(daily) andfcr_weekly_license_check(weekly) - • Action Scheduler actions: hook
fcr_process_order, groupfleetconnector-routific
6.7 Deactivation and uninstall
Deactivation
Deactivating the plugin stops the scheduled tasks and removes pending background actions. Settings, logs and order data are kept.
Uninstall (Delete)
- Releases the license activation slot, so the key can be used on another site
- Deletes all plugin settings and temporary data
- Removes scheduled tasks and pending background actions
- Drops the wp_fcr_logs activity log table
Troubleshooting
Common issues and their solutions when using the WooCommerce to Routific integration.
7.1 Common issues
"API token has expired" or "The Routific API token is invalid"
Solutions:
- Create a new token in Routific under Company Settings → Integrations → Create API Token
- Paste it in "Routific API Token" (click "Update token" in the admin notice to get there) and click "Save All Settings"
- Click "Test Connection" to confirm; the expired notice disappears after the next successful API call
- Resend orders that failed in the meantime with the "Retry" button in the FCR Dashboard
No workspace, or "Routific API token or workspace not configured"
Solutions:
- Click "Load workspaces", select a workspace and save; both the token and a workspace are required
- "No workspaces found for this API token." - check that the token belongs to the right Routific company and that it has at least one workspace
- "Connected to Routific, but the selected workspace is not available for this token." - you probably changed the token; select the workspace again and save
- Switching to another account or workspace? Use "Remove all Routific links" in the Danger Zone so existing orders can be sent to the new workspace
Orders Not Sent Automatically
Solutions:
- Check that your license is active; without it you'll see "Invalid or expired FleetConnector license." in the dashboard
- Verify "Automatically send orders to Routific" is checked
- Check that the order status matches one of the selected trigger statuses; orders are sent when they change to that status
- With "Only send orders that need a delivery" enabled, orders with only virtual products or local pickup are skipped (the meta box shows "This order does not require a delivery.")
- Check the "Routific Delivery" meta box and the FCR Dashboard for error messages
- Look for pending actions under WooCommerce → Status → Scheduled Actions (search for fcr_process_order, group fleetconnector-routific). The Action Scheduler runs on WP-Cron; if WP-Cron is disabled or your site has little traffic, set up a real server cron job
Validation Errors or Missing Address
Solutions:
- "The order has no shipping or billing address." - add an address to the order and retry
- Routific validation errors (HTTP 400, type VALIDATION_ERROR) are shown with the fields that failed. Check the address, phone number, delivery date and time window of the order
- Make sure the address is complete (street, postcode, city and country)
- Tags must be valid in your Routific account; remove the "Tags" setting to test
- Validation errors are not retried automatically. Fix the order, then use "Retry" in the dashboard or the "Send to Routific" order action
Order Can't Be Removed from Routific
Solutions:
- Routific refuses to delete orders on a published route or orders that are already completed (HTTP 409)
- The order note reads "The order is on a published route (or already completed) and cannot be deleted from Routific. Please remove it manually in Routific."
- Unpublish the route or remove the order manually in Routific
Order Changes Don't Reach Routific
Solutions:
- Verify "Automatically sync order changes to Routific" is checked
- Delivered and missed orders are final: "The Routific order is already completed and can no longer be changed."
- Updates are skipped when no relevant data changed. Use the "Update order in Routific" order action to force an update
- If the order was deleted in Routific, the plugin removes the link and adds the note "The order no longer exists in Routific. The link was removed; you can send it again."
Webhooks Rejected or Not Updating Orders
Solutions:
- Check WooCommerce → Status → Logs (source fleetconnector-routific) for "Webhook rejected" warnings
- "no signing secret configured" - paste the signing secret from Routific in the plugin settings and save
- "invalid signature" - the secret in the plugin doesn't match the webhook in Routific (for example after rotating the secret). Also check that no proxy or security plugin changes the request body
- "timestamp too old" - your server clock is more than 5 minutes off; ask your host to synchronize the server time
- Make sure the WordPress REST API (/wp-json/) is reachable and not blocked by a security plugin or firewall; re-save Settings → Permalinks if the URL returns a 404
- Check that the webhook is still active in Routific; Routific can disable a webhook after repeated failures
- Webhooks only update orders that were sent by the plugin (matched by Routific order ID or customer order number). Orders created manually in Routific are ignored
Duplicate Orders in Routific
Solutions:
- The plugin never creates an order twice while it is linked to a Routific order (see section 3.7)
- After "Remove all Routific links" or after removing plugin data, orders are no longer linked and can be sent again; remove old orders in Routific first if you resend them to the same workspace
- Don't run two shops or two plugin installations against the same workspace without an order number prefix
7.2 Getting support
If you can't resolve an issue using this documentation, we're here to help.
Before Contacting Support
Please gather the following information:
- WordPress version and WooCommerce version
- PHP version (visible in WooCommerce → Status)
- FleetConnector Routific plugin version
- Screenshot of the error message or unexpected behavior
- Relevant entries from the FCR Dashboard (use "Details" for the request and response data)
- The fleetconnector-routific log from WooCommerce → Status → Logs, ideally with debug logging enabled
- Order ID of the affected order (if applicable)
How to Contact Us
Email Support
Send an email to support@fleetconnector.app or use our contact form
Response time: Within 24 hours on business days
Premium Support Included
Your FleetConnector Routific license includes priority email support and updates for one year.
7.3 Additional resources
Routific API Documentation
api-docs.routific.com: Official Routific API and webhook reference
WooCommerce Documentation
woocommerce.com/documentation: WooCommerce guides and tutorials
WooCommerce to Routific Integration
Integration overview: Features, use cases and pricing
Launch Announcement
Read the launch post: What the WooCommerce to Routific integration does and why we built it
Ready to automate your WooCommerce deliveries?
Get the WooCommerce → Routific plugin for €199/year, backed by a 14-day money-back guarantee. Send orders to Routific automatically and get delivery updates back in WooCommerce.