VibeFox Canada Post for WooCommerce — Help
Requirements
WordPress: 5.8 or later.
WooCommerce: 5.0 or later, installed and active. The plugin refuses to activate without it.
PHP: 8.0 or later.
Canada Post Developer Program (for live rates only): live rates use the Canada Post Rating API. Join the Canada Post Developer Program on the Canada Post website and copy your API key and your customer number. The API key has the form username:password, and Canada Post gives separate keys for the development (sandbox) and production environments. You also need the Canadian postal code you ship from. If you only use fixed prices, you do not need API keys.
VibeFox license key: bought on vibefox.net. One key works on one domain.
Installation
1. In WordPress go to Plugins > Add New > Upload Plugin, choose the plugin ZIP file and click Install Now. You can also upload the vfd_canada_post folder to /wp-content/plugins/ by FTP.
2. Click Activate.
3. Open the settings: WooCommerce > Settings > Shipping > VibeFox Canada Post, or click Settings under the plugin name on the Plugins page.
4. Enter your VibeFox license key in the license block at the top of the page and click Activate.
5. For live rates, enter the API username and password, your customer number and the ship-from postal code. If your store currency is not CAD, enter the CAD rate. Fill in Country prices if you want fixed prices or a fallback (see Configuration).
6. Add VibeFox Canada Post to your shipping zones in WooCommerce > Settings > Shipping > Shipping zones, or turn on Ignore shipping zones and choose countries.
Configuration
All settings are on one page: WooCommerce > Settings > Shipping > VibeFox Canada Post. They apply to every shipping zone. When you add the method to a zone, the zone window has only one field:
Title (zone): the name shown to the customer for this zone. Leave it empty to use the global Method title.
Every time you save the settings, the cached Canada Post rates are cleared. The page also shows an error when the settings cannot work: only one of the API username and password is filled in, the ship-from postal code is not a Canadian postal code, the CAD rate is missing for a store in another currency, or there are neither API keys nor fixed prices.
General
Enable/Disable: turns the method on or off in all zones at once.
Method title: the shipping method name shown in the cart and at checkout. Default: Canada Post. A zone can override it with its own title.
Tax status: Taxable adds WooCommerce tax on top of the shipping cost, None does not.
Canada Post API (live rates)
With the API username and password filled in, the price comes from the Canada Post Rating API. If the API gives no rate (API down, wrong postal code, service not available), the fixed price from Country prices is used, or the method is hidden when there is none.
API username: the part of the API key before the colon. Use the development key with Sandbox and the production key on a live store.
API password: the part of the API key after the colon. It is never written to the log.
Customer number: with a customer number Canada Post returns the commercial (discounted) rates of your account. Leave it empty for retail (counter) rates.
Contract number: optional, for contract customers. It is used only together with the customer number.
Sandbox: uses the Canada Post development environment, for testing with the development API key. The prices are test data. Turn it off on a live store.
Ship-from postal code: the Canadian postal code the parcels are sent from, for example K1A 0B1. Live rates need it.
Service in Canada: the service for Canadian addresses: Cheapest available, Regular Parcel (default), Expedited Parcel, Xpresspost or Priority.
Service to the USA: Cheapest available (default), Expedited Parcel USA, Tracked Packet USA, Small Packet USA Air, Xpresspost USA or Priority Worldwide parcel USA.
International service: Cheapest available (default), International Parcel Surface, International Parcel Air, Tracked Packet International, Small Packet International Surface, Small Packet International Air, Xpresspost International or Priority Worldwide parcel International.
If the chosen service is not offered for the address or parcel, the cheapest available service is used.
Canadian sales taxes: uses Canada Post prices without GST/HST/PST. For Canadian addresses the Canada Post price includes these taxes. Turn this on when WooCommerce adds tax on shipping itself (Tax status = Taxable), so the tax is not charged twice.
CAD → store currency rate: the field name shows your store currency. Canada Post prices are in CAD. If your store currency is not CAD, enter how many units of your currency one CAD is worth, for example 0.68. Without it live rates are not used. If your store currency is CAD, leave it empty. Both a point and a comma are accepted as the decimal separator.
Default product weight (kg): sent to Canada Post for each product that has no weight. Default: 0.5. Product weights and dimensions are converted from your store units, and the cart is rated as one parcel.
Fixed prices (used without API credentials, and as the fallback when the API gives no rate)
Country prices: a table of countries with a Base price and prices by cart weight in your store currency: XS up to 1 kg, S 1–2 kg, M 2–3 kg, L 3–5 kg, XL over 5 kg. An empty or zero size price uses the Base price. Click Add country to add a row and the cross to remove one. The row * Default (all other countries) sets prices for all countries without their own row. A country without a row (and without *) gets no fixed price. A base price of 0 means free shipping for that country.
Fixed price per: Order charges the price once. Item (price × quantity) multiplies it by the number of items in the cart. This applies to fixed prices only. Live rates are always calculated for the whole parcel.
Conditions
Min cart weight (kg): hide the method below this cart weight. 0 means no limit.
Max cart weight (kg): hide the method above this cart weight. Default: 25. 0 means no limit. Canada Post parcels can weigh up to 30 kg.
Minimum order amount: show the method only when the cart subtotal reaches this amount. Leave empty to always show it.
Excluded shipping classes: hide the method if any cart item has one of these WooCommerce shipping classes.
Free shipping: turn on free delivery from the amount below.
Free shipping from: the cart subtotal from which shipping is free. No API request is made in that case.
Availability without shipping zones
Ignore shipping zones: offer the method for the countries below, whatever zone matches.
Countries: the destination countries for that mode. Leave empty to use all countries the store ships to. This field is used only when Ignore shipping zones is on.
Advanced
Debug log: logs rate calculations in WooCommerce > Status > Logs, source vfd-canada-post. API errors are always logged, even when this option is off. API keys, customer numbers and customer postal codes are not logged.
Remove data on uninstall: when on, deleting the plugin removes its settings, zone methods and cached rates. Deactivating the plugin never deletes anything.
How it works at checkout
When the customer enters a delivery address, WooCommerce asks the plugin for a rate. The plugin first checks the conditions: cart weight, minimum order amount and excluded shipping classes. If free shipping applies, the customer gets a free rate and no request goes to Canada Post.
With API keys, the plugin sends Canada Post the ship-from postal code, the destination, the parcel weight and, when every product has dimensions, the estimated parcel size. For Canada the destination is the postal code, for the USA the ZIP code, for all other countries only the country. A live rate is requested only when a Canadian or US address has a valid postal or ZIP code. Canada Post returns all services for the parcel; the plugin picks the chosen service of the destination group or the cheapest one, removes Canadian sales taxes if Canadian sales taxes is on, and converts the CAD price with your rate. The service name is saved with the order and shown on the admin order screen as Canada Post service.
Each answer is cached for 1 hour, so the same cart and address do not trigger a new request. A failed request is cached for 10 minutes, so a Canada Post outage does not slow down every checkout refresh. The API timeout is 10 seconds. Parcels over 30 kg are not sent to the API.
If the API gives no rate, the fixed price is used, or the method is hidden when there is no fixed price. The customer never sees API error details; they go to the WooCommerce log.
The method works on the classic checkout and on the Cart and Checkout blocks. It is compatible with WooCommerce High-Performance Order Storage (HPOS).
The plugin calculates rates only. It does not create shipments, print labels, create manifests or returns, or track parcels. Customers cannot choose a post office or pickup point. It shows one Canada Post rate, without delivery dates, insurance or signature options. The cart is always rated as one parcel, and currency rates are not updated automatically.
License key
The plugin works with a VibeFox license key from vibefox.net. The license block is at the top of WooCommerce > Settings > Shipping > VibeFox Canada Post. Paste the key into License key and click Activate. The block shows the status, for example the date the license is active until and your domain. Use Check now to check the status again, Change key to enter another key and Remove key to remove it from this site. The link Manage licenses and domains in your account opens your vibefox.net account.
One key works on one domain. Removing the key from a site does not free its domain slot. Free the slot in your vibefox.net account.
Without an active key, Canada Post is not shown to customers at checkout. Logged-in store managers still see it, marked (unlicensed — visible to admins only), so you can set up and test the plugin before you buy a key. A reminder appears on the Plugins page and on WooCommerce pages. Existing orders are not affected.
When a license expires, the plugin keeps working, but updates and support need a renewal. The status is checked again automatically in the background.
Troubleshooting
Canada Post does not appear at checkout: check that the license is active, Enable/Disable is on, and the method is added to the zone of the customer's country (or Ignore shipping zones is on and the country is allowed). Check the weight limits, Minimum order amount and Excluded shipping classes. There must be a rate: with API keys the address needs a valid postal code (Canada) or ZIP code (USA); otherwise a fixed price for the country or * must exist.
Live rates do not appear: turn on Debug log, reload the checkout and open WooCommerce > Status > Logs, source vfd-canada-post. It shows the reason: missing API username or password, an invalid ship-from or destination postal code, a missing CAD rate, a parcel over 30 kg, or the Canada Post error message. Meanwhile customers get the fixed price if there is one.
The rate is different from the Canada Post website: with a customer number you get the commercial (discounted) rates of your account; without it, retail (counter) rates. For Canadian addresses the Canada Post price includes GST/HST/PST. Prices are converted with your CAD rate.
Tax is charged twice on shipping: turn on Canadian sales taxes, or set Tax status to None.
Test prices on a live store: turn off Sandbox and use the production API key.
Rates look outdated after a change: save the settings page. This clears the cached Canada Post rates.
The license block shows an error: follow the message in the block. For example, if the key is already used on another domain, free a slot in your vibefox.net account and click Check now. If the site address changed, click Check now to activate the key for the new domain. If the license server cannot be reached, the plugin keeps working on the last known status.
Uninstall
Deactivating the plugin keeps all data. To remove it, deactivate and delete it on the Plugins page. The license key and license status of this plugin are always removed. Settings, zone methods and cached rates are removed only if Remove data on uninstall was on. Otherwise they stay for a later re-install. Orders are never touched.
Canada Post is a trademark of its respective owner. This plugin is not affiliated with or endorsed by Canada Post.
