Sonic Pixel Multi-Carrier Live Rates for WooCommerce
Docs written for version 0.4.1
Multi-Carrier Live Rates shows live shipping rates at checkout from every carrier on your ShipStation account, through the ShipStation API v2. It always returns at least one rate: when the API cannot answer, checkout falls back to a flat rate you set.
Setup
You need WordPress 6.0 or higher, WooCommerce 7.0 or higher and PHP 7.4 or higher, plus a ShipStation account with at least one carrier connected. The plugin reads the carriers already on your account. If none are connected, the carrier list is empty and every quote falls back. It only requests rates and carriers, and it never buys labels or creates shipments.
- Install. Upload the
sonicpixel-multi-carrier-live-ratesfolder to/wp-content/plugins/and activate it. WooCommerce must be active. - Get an API key. In ShipStation, open Settings → Account → API Settings and generate an API v2 key if you do not have one.
- Enter it. Go to WooCommerce → Settings → Shipping → Multi-Carrier Live Rates, enter the key and the ship-from origin, then save. A valid key loads the carrier list.
- Add the method to a zone. Under WooCommerce → Settings → Shipping, open a shipping zone, choose Add shipping method → Multi-Carrier Live Rates, then open the method's settings.
Account-wide settings
These are set once and shared by every shipping zone.
- Ship-from origin. Carriers rate from this address, so an inaccurate one gives inaccurate rates. Use two-letter codes for the state and country. Canada Post requires a company name to rate at all (up to 44 characters); if it is empty, the contact name is used. The address fields are prefilled from your WooCommerce store address.
- Customs defaults. Used only when the destination country differs from your origin country: a default HS code, a default customs description (falling back to
Merchandisewhen empty) and a default country of origin. Per-product overrides on the product edit screen always win. - Package defaults. Used when a product has no shipping weight or dimensions of its own. They default to 5 lbs and a 12 × 10 × 8 in box, so set them to something typical for your catalogue.
- Destination type. Residential, Commercial or Unknown. Residential is the default and adds carrier surcharges to quotes; most consumer stores should leave it there.
- Debug logging. Off by default. See Common errors below.
Per-zone settings
- Carriers / services. Which services to quote in this zone, populated from your ShipStation account. Select at least one: an empty selection means every quote falls back.
- Label style. Generic shows neutral names; the alternative shows carrier service names.
- Max options shown. 1–5, default 2.
- Currency conversion rate. Leave empty unless your store currency differs from your carriers' currency. See Common errors below.
- Markup (%) and Handling fee (flat). The percentage is added to every rate, then the flat amount.
- Fallback amount and label. The rate shown when live rates are unavailable. The amount cannot be saved empty or negative (the default is 25).
- Rate cache TTL (minutes). How long a quote is reused for an identical package and destination. Default 30; 0 disables fresh caching.
- API timeout (seconds). How long to wait before serving stale or fallback rates. Default 4; range 2–10.
Test it
Put a real product in the cart and check out to an address inside the zone. Then test the failure path on purpose: temporarily set an invalid API key and check out again. You should still see one shipping option, the fallback. If checkout ever shows zero shipping options, something is wrong.
Common errors
Only the fallback rate shows
The live request failed or returned nothing usable. The method uses the fallback when there is no API key or destination country, or when a request returns zero usable rates, times out or errors with no stale cache to serve. Turn on Debug logging and read WooCommerce → Status → Logs (log source sonicpixel-mclr); the log gives the reason for every fallback. Turn debug logging off again afterwards, because it is verbose on a busy store. Every fallback and stale-serve is logged at warning level whatever the debug setting.
Rates are discarded because of a currency mismatch
Carriers quote in the currency of the carrier account and cannot be asked for another. If your ShipStation carriers quote in CAD and your store sells in USD, those rates do not match your store currency and are skipped by default, which looks exactly like a broken API key. The log shows currency-mismatch. To use the rates, set Currency conversion rate on the zone; it multiplies each rate before markup. It is a number you set rather than a live exchange rate, so order totals stay predictable and reconcilable.
The carrier list is empty
The API key is wrong, or no carriers are connected in ShipStation. Check the key under ShipStation's Settings → Account → API Settings, then save again here.
Canada Post never returns rates
Canada Post requires a company name on the ship-from address. Fill in Company name and keep it under 44 characters.
International rates only appear once a street address is entered
Carriers will not quote an international shipment without one. Until the customer enters a street address there is nothing to rate against, and the fallback is shown. Set your fallback amount to something defensible, because customers see it before they have typed an address.
Rates are wrong for some products
Those products are most likely missing weight or dimensions and are being quoted with the package defaults. Fill in real shipping data on the products, or set the package defaults closer to your typical item. Each cart line is quoted against those dimensions; there is no box packing.
Rates look stale after changing settings
Quotes are cached for the TTL. Run Clear ShipStation rate cache under WooCommerce → Status → Tools.
International rates are missing customs data
Set the customs defaults, or add a per-product HS code, description and country of origin on the product edit screen. Cross-border requests include a customs block automatically, and without one cross-border returns zero rates.
The rate shows but the selected option looks unselected
This is theme CSS, not the plugin. See Known conflicts below.
Nothing appears at all, not even the fallback
The shipping zone does not match your test address, or the method is not enabled on that zone. That is a zone configuration problem, not a rating one.
Checkout is slow
Lower the API timeout or raise the cache TTL. A multi-carrier rate call genuinely takes several seconds; the cache keeps that off the critical path for repeat quotes.
Known conflicts
Themes that restyle radio buttons
Some themes style radio inputs with appearance: none and draw their own indicator. When WooCommerce replaces the cart totals over AJAX that styling is not always re-applied, so the chosen option renders blank while still being checked. This was confirmed on Blocksy 2.1. The easiest fix is the Fix unselected-looking shipping options setting under WooCommerce → Settings → Shipping → Multi-Carrier Live Rates. It is off by default because enabling it replaces your theme's radio styling on those fields, which would be a regression on themes that render correctly.
WooCommerce shipping debug mode
With WooCommerce's own shipping debug mode on, shipping-rate caching is disabled and every checkout hits ShipStation live. Turn it off under WooCommerce → Settings → Shipping → Shipping options before relying on this plugin's caching. The plugin shows a warning on the shipping settings screen while it is on.
Canada Post and international shipping
Canada Post exposes no international services through ShipStation. Use UPS or DHL for international zones.
The old multi-carrier-live-rates-for-woocommerce folder
Before version 0.4.0 the plugin lived in a folder named multi-carrier-live-rates-for-woocommerce. Both copies read the same settings, so see Uninstall below before removing the old one.
Uninstall
Deactivating changes nothing. Deleting the plugin removes its settings, the per-zone method settings, the stored carrier list and the cached rates. Product customs fields (HS code, customs description and country of origin) are deliberately left in place, so reinstalling does not lose classification work you did per product.
If a copy under the old multi-carrier-live-rates-for-woocommerce folder is still installed, deleting this copy removes nothing.
Moving from the old folder
- Deactivate the old plugin.
- Remove its folder over FTP or a file manager. Do not use Plugins → Delete, which runs the old copy's cleanup and erases the shared settings.
- Install and activate the renamed plugin. Settings, zone methods and product customs fields carry over, since the stored keys are unchanged.
FAQ
What happens if the ShipStation API is down?
The method serves stale cached rates if it has them (up to 24 hours old); otherwise it shows the configured flat-rate fallback. Checkout never shows zero shipping options. A carrier erroring never suppresses the others: if one carrier fails and another answers, the customer sees the one that answered.
Does it handle US and international customs?
Yes. Cross-border requests automatically include a customs block, which ShipStation requires. Defaults are set globally and each product can override the HS code, description and country of origin.
Which carriers are supported?
Any carrier connected in your ShipStation account.
What does the plugin send to ShipStation?
When shipping is calculated, it requests rates and sends the package weight and dimensions; the ship-from address, name, company and phone from the plugin settings; and the destination address the customer entered. No customer name, email or phone number is sent. On cross-border shipments it also sends customs details for each item. Saving the settings requests your connected carriers, with no store or customer data. Nothing is sent until you enter your own API key, and the key is never logged.
What does it not do?
- No box packing or multi-package splitting.
- No address validation.
- No label purchase or shipment creation.
- No order sync to ShipStation. ShipStation's own integration does that, and this plugin sits alongside it.
- No per-zone ship-from origin; the origin is global.
Is it affiliated with ShipStation?
No. It is an independent plugin by Sonic Pixel, not affiliated with, endorsed by or sponsored by ShipStation, Auctane or WooCommerce.
Still stuck?
Ask on the plugin's support forum on WordPress.org . Replies come within one business day, Japan time. For private or business enquiries, use the contact page.