You sell from Canada, most of your buyers are in the US, and Stallion Express keeps cross-border postage from eating the order. The rates are good. The fight is everything around them inside WooCommerce. Stallion’s portal and apps are built for Shopify first, and most Canada-shipping Woo plugins skip live checkout rates, so a buyer in Buffalo sees a Canada Post retail price while your real Stallion rate sits in another browser tab. They flinch and leave. Baymard’s checkout research puts abandonment near 70% on average, with higher-than-expected shipping cost among the top reasons buyers give. When your store quotes a non-Stallion fallback, that inflated number is what every cross-border shopper sees.
This guide takes a different route: from the command line, or by handing the whole sequence to an AI agent that runs the same commands and stops to ask when it needs your API token. Either way:
- you set the token, your origin, your cross-border services, boxes, and live rates, then buy a test label and pull tracking, in a visible order you can rerun on the next store;
- the 1TeamSoftware Stallion Express plugin quotes live Stallion rates at cart and checkout, packs boxes, buys labels in one click, and exposes the whole thing through WP-CLI.
It carries a 5/5 verified-owner review and has shipped against the Stallion Express API since 2018.
One honest note before you start. If your current setup can’t return a Stallion price to the cart, no command fixes that, because the price was never being requested in the first place. This plugin requests it. Here is how that compares to the alternatives you’ve probably tried.
Try Stallion Express Shipping Free on WordPress.org | See Stallion Express Shipping PRO Features
| Capability | Stallion’s portal / apps | Most Canada-shipping Woo plugins | 1TeamSoftware Stallion Express |
|---|---|---|---|
| Live Stallion rates at cart and checkout | Shopify-first | Usually no | Yes |
| Buy and print labels inside WooCommerce | Shopify-first | Add-on or no | Yes (PRO) |
| Run setup and fulfillment from WP-CLI | No | No | Yes |
| Drive it with an AI agent | No | No | Yes |
| Multivendor origin (Dokan, WCFM, WCMP) | No | No | Yes |
What the official Stallion integration does and doesn’t do
Stallion gives you a strong account: negotiated cross-border rates routed through its Buffalo, NY hub, its own depots and pickup, and a tracking feed that actually tells you where a parcel is. What it doesn’t give you is a native WooCommerce plugin. The portal targets Shopify, and the third-party Woo options around it tend to import orders or print labels without ever quoting a live rate in the cart. Most Stallion-on-Woo setups end up stitched together: the buyer sees a placeholder rate, you reconcile the real one later, and multivendor stores can’t push the right vendor origin into the rate request.
The 1TeamSoftware plugin closes that gap. It calls the same Stallion API you already use, returns every enabled service live at checkout with currency conversion and your handling margin applied, and prints the label from the order screen. The free edition covers live rates and configuration. The PRO edition adds labels, tracking, and box presets. Everything below uses the CLI namespace wc-stallionexpress-shipping (note: no hyphen inside “stallionexpress”).
Prerequisites for Stallion Express
- An active Stallion Express account with a funded balance and an API token. You’ll find it under Profile, Settings, API Token in your Stallion dashboard. The sandbox token lives in the separate sandbox account.
- WooCommerce with at least one shipping zone covering the US (and Canada, if you ship domestically too).
- Physical products with weight and dimensions, since cross-border rates and customs both depend on them.
- For cross-border shipments, Stallion needs customs data. The plugin supports per-item country, SKU, and tariff fields, which matters for DDP and CUSMA handling.
TL;DR
- Set the Stallion token from WP-CLI, audit your catalog, size boxes, confirm live cross-border rates, then buy a test label and pull tracking.
- The namespace is
wc-stallionexpress-shipping. Confirm it withwp help | grep shipping. - Stallion’s credential keys are
apiKey(live API Token) andsandboxApiKey. Don’t assume key names. Runwp wc-stallionexpress-shipping settings listto see the real ones. - A real
rates quoteto a US ZIP is the only proof the Stallion API is actually reachable. There is no connectivity field instatus. - Install the free agent skill and an assistant like Claude Code runs the whole sequence for you and pauses to ask for the token.
$ npx skills add https://github.com/1TeamSoftware/skills --skill 1teamsoftware-wc-shippingWhat you can do from the command line
Every command follows one shape: wp wc-stallionexpress-shipping <command> [<subcommand>] [--flags]. The namespace is the plugin slug with -pro removed, so it stays wc-stallionexpress-shipping for both the free and PRO editions. Run wp help | grep shipping once to confirm it on your install.
The command list won’t tell you the exact setting keys, and those matter most for credentials. Stallion uses apiKey and sandboxApiKey, but other carriers in the line name theirs differently, so the habit worth keeping is to discover keys instead of guessing them. settings list shows the real keys with secrets redacted, services shows valid Stallion service IDs, and boxes presets shows carrier box dimensions.
The commands below are a curated working set, not the whole surface. For every command, flag, and output shape, see the full WP-CLI command reference.
Status, validation, and capabilities
Start here to see what the plugin sees and whether the config holds together.
$ wp wc-stallionexpress-shipping status --format=json $ wp wc-stallionexpress-shipping validate License Status PASS License is activated Ship From PASS From Address configured Product Dimensions WARN Only 27% of products have valid dimensions Cart Rates PASS Rates working: 4/4 routes, 15 rate(s) total Shipping Services PASS 7 service(s) available Shipping Zones PASS Using global shipping rates Sandbox Mode INFO Sandbox mode is active $ wp wc-stallionexpress-shipping features $ wp wc-stallionexpress-shipping services --format=json $ wp wc-stallionexpress-shipping zones
statusprints the version, carrier, the sandbox and debug flags, live-rate state, origin, and how many method instances are configured. It carries no API-connectivity field, so treat arates quoteas the real reachability test.validatewalks every configuration check and labels each one PASS, FAIL, WARN, INFO, or PENDING. Any FAIL makes it exit non-zero, which is what lets you wire it in as a deploy gate.featureslists Stallion’s capability flags. For Stallion that includes rates, label purchase and refund, tracking, insurance, signature, customs and tariff handling. It does not include carrier manifests or return-address labels, so don’t script those for this carrier.serviceslists the real Stallion service IDs and their enabled status. This is the list you set, notfeatures.zonesshows which WooCommerce shipping zones the plugin is attached to, withplugin_active,instance_id, andmethod_idper zone.
Settings
Use these to read and write any stored setting, including the Stallion token and your origin.
$ wp wc-stallionexpress-shipping settings list $ wp wc-stallionexpress-shipping settings get apiKey $ wp wc-stallionexpress-shipping settings set origin '{"name":"Co","address":"100 King St W","city":"Toronto","state":"ON","postcode":"M5X 1A9","country":"CA"}'
settings list is your map. It prints every setting with sensitive values shown as [REDACTED], and it’s the right way to confirm Stallion’s credential keys before you write them. Associative settings flatten with bracket notation (origin[city], services[stallion_economy_usa][enabled]); list settings like boxes print as a raw JSON blob. Read one value with settings get <key> (add --raw to reveal a secret), write one with settings set <key> <value>, and target a single zone with --instance=<id>.
Product readiness
Run these to find out whether your catalog has the weight and dimension data that cross-border rates and customs both depend on.
$ wp wc-stallionexpress-shipping products audit --detailed --format=json --limit=0 $ wp wc-stallionexpress-shipping products stats --format=json $ wp wc-stallionexpress-shipping products orders --since=2025-12-01 --format=json $ wp wc-stallionexpress-shipping products fit-box --length=12 --width=8 --height=6
products auditgives a completeness percentage and flags missing weight, missing dimensions, and suspicious values. The per-product lists appear only with--format=json; in table mode--detailedshows the same summary as plainaudit. Pass--limit=0so big catalogs aren’t capped at 500.products statsreturns weight and dimension stats, a size distribution from tiny to oversized, and the top items by volume.products ordersanalyzes completed and processing orders: items per order, top destination states, domestic versus international, and the largest multi-item orders by item count. For a Canadian store this is where you see how much of your volume is actually crossing into the US.products fit-boxtakes box dimensions (all three required) and reports what percentage of your catalog fits, with a sample of products that don’t. Rotation is handled automatically.
Rates
These are the commands that confirm Stallion returns live cross-border prices, which is the whole reason for the setup.
$ wp wc-stallionexpress-shipping rates quote --products="9405:2" --destination="500 5th Ave, New York, NY 10001, US" $ wp wc-stallionexpress-shipping rates get --order=12345
rates quoteasks Stallion for a live quote on an ad-hoc product and destination. It needs at minimum a ZIP or postcode plus a country; a full street address improves accuracy. This is the connectivity proof. It prints a human log line before the JSON, so when you script it, extract the JSON array from the first[to the matching]rather than relying on2>/dev/null.rates getquotes an existing order by ID.
Fulfillment commands (PRO)
These cover fulfillment once a license is active: packing, buying labels, and tracking.
$ wp wc-stallionexpress-shipping boxes presets --carrier=USPS $ wp wc-stallionexpress-shipping shipments create --orders=1240,1241 $ wp wc-stallionexpress-shipping labels purchase --orders=1240,1241 $ wp wc-stallionexpress-shipping labels pdf --orders=1240,1241 --output=/var/labels/today.pdf $ wp wc-stallionexpress-shipping track abc123 --order=1240 --format=json $ wp wc-stallionexpress-shipping license activate YOUR-KEY
boxesis PRO only.boxes presetsreturns carrier box dimensions already converted to your store units;boxes typesreads the carrier’s package-type catalog and needs configured credentials.shipments create/list/get/fetchgive you manual control over a shipment before you spend on postage, which is useful when you want to sanity-check the customs payload first.labels purchasebuys labels in a batch and auto-creates shipments if missing.labels pdfmerges many orders into one print-ready PDF for the thermal printer;labels downloadandlabels refundhandle single labels. Note thatlabels purchaselogs label counts, not tracking numbers.trackreturns Stallion’s status plus the event timeline. It needs both the positional shipment ID and--order. Tracking is where Stallion is strong, and this is how you read it without leaving the terminal.license activatetakes the key as a positional argument, not--key=. On the PRO plugin,license,boxes, andstatusare always available; the operational commands appear once the license is active.
These commands ship with the PRO edition. If you fulfill from WooCommerce and want one-click labels, batch PDFs, and tracking on the same CLI, see Stallion Express Shipping PRO for WooCommerce.
One caveat on --format: the full table|json|csv|yaml|count set works for status, validate, features, services, zones, and rates. The products subcommands, boxes, track, and settings list take only table|json, and anything outside that fails loudly.
Hand it to an AI agent
Install the skill once and an assistant like Claude Code runs every command above from plain language. The skill is a small library of playbooks, so when you ask it to fix cross-border rates it reaches for the right routine instead of guessing at flags. It runs the same CLI a human would, and it pauses to ask for your Stallion token instead of inventing one.
$ npx skills add https://github.com/1TeamSoftware/skills --skill 1teamsoftware-wc-shippingThe free plugin ships 6 skills, and PRO adds 4. Once it’s installed, talk to the agent the way you’d brief a fulfillment hire, with the real constraints of your cross-border setup. These are the kinds of prompts it’s built to handle:
- “Set up Stallion Express from scratch. Sandbox token is the one I’ll paste next, we ship from our Toronto warehouse. Before live rates, audit my catalog for missing weight or dimensions, recommend a starter box set from what I actually sell, and prove a cross-border rate comes back with a real quote to a US ZIP. Ask one question at a time and don’t touch my live token yet.”
- “Show me which credential field Stallion actually uses, set my live API token there, confirm the old one is gone, then verify with a live quote to a New York address before we trust it.”
- “I only want to offer my cross-border US services and Canada Post domestic. List the real Stallion service IDs first, enable exactly those, disable the rest, and show me the enabled list.”
- “Our US buyers are seeing a Canada Post placeholder, not a Stallion rate. Figure out which zone those addresses fall into, check whether the plugin is attached, and add it where it’s missing.”
- “We’re going live this week. Confirm the license is active, set the live token and origin, audit and fix product data, build a box set, then in sandbox buy a test label and pull its tracking so I can see the whole pipeline before we open up.”
- “My cross-border rates look high. Survey live Stallion quotes for my three best sellers to a near, mid, and far US ZIP, compare flat-rate boxes against parcels for the heavy ones, and recommend a box set, but remind me to re-check flat-rate in live since sandbox won’t show it.”
Real use cases
Cross-border products missing weight or dimensions
Missing product data hurts a Canadian cross-border store twice. The rate silently drops, so the buyer sees no Stallion option and leaves. And when a rate does come back, customs needs the same weight and dimensions to clear the parcel. Imported catalogs are the usual culprit: a SKU with no weight, and nothing in the logs to explain the empty checkout.
You’d ask: “Audit every physical product for missing weight and dimensions, give me the completeness percentage and the full list of what’s incomplete (don’t cap it, I have a big catalog), then research real specs from manufacturer sources, apply only high-confidence values to the parent and every variation in my store’s units, and list the rest for me to confirm by hand. Never make up a number.”
What runs:
$ wp wc-stallionexpress-shipping products audit --detailed --format=json --limit=0The agent reads the missing_weight_products, missing_dimensions_products, and suspicious_data_products arrays from that output, looks up the real specs, normalizes them to your woocommerce_weight_unit and dimension_unit, and saves them through wp wc product update on both the parent and each variation. A few things it handles on its own: virtual and downloadable items get skipped, variations take their weight and dimensions from the parent, and the audit flags a value as suspicious once a weight climbs past roughly 70 lb (32 kg) or any one dimension runs over roughly 72 in (183 cm). What comes back is a higher completeness percentage, cross-border quotes that stop disappearing, and a short list of the genuine unknowns left to fill in by hand.
Which boxes for cross-border parcels
Stallion’s cross-border savings leak when your parcels are quoted in oversized boxes nobody matched to what you actually ship. Heavy items are where dimensional weight bites hardest, and a flat-rate option sometimes wins outright.
You’d ask: “Analyze my last 6 months of orders and my catalog, recommend a box set that covers most of what I ship to the US, prefer flat-rate boxes where they’d be cheaper for heavy SKUs, show me the coverage table before applying anything, and keep my existing custom boxes.”
What runs:
$ wp wc-stallionexpress-shipping products stats --format=json $ wp wc-stallionexpress-shipping products orders --since=2025-12-01 --format=json $ wp wc-stallionexpress-shipping boxes presets --carrier=USPS --format=json $ wp wc-stallionexpress-shipping products fit-box --length=12 --width=8 --height=6 $ wp wc-stallionexpress-shipping settings set boxes '[{"enabled":"yes","boxName":"Small","type":"parcel","length":"8","width":"6","height":"4","weight":"0.5","maxweight":"20"}]'
products stats and products orders show your real parcel shapes and order patterns. The boxes presets output can’t be pasted straight in, so the agent reshapes each preset into the boxes schema first: name becomes boxName, an enabled flag gets added, and carrier and maxweight come out. It checks candidate boxes against products fit-box, lays out a coverage table, then writes the merged set. Sandbox won’t reveal flat-rate price gaps, so the heavy-SKU comparison gets repeated once you’re live. (boxes presets is PRO; on a free install you write the boxes setting directly.)
US buyers see a placeholder, not a Stallion rate: shipping zones
This is the classic Stallion-on-Woo failure, and the number-one cause of “no rates at checkout.” CLI quotes return rates fine, but US buyers at checkout get a static Canada Post price or nothing at all, because the plugin isn’t attached to the zone their address falls into. The plugin only returns rates on zones where it’s a configured shipping method, so a missing US zone is a silent dead end.
You’d ask: “rates quote works from the CLI but US checkout shows a Canada Post placeholder. Figure out which zone those addresses land in, check whether the plugin is attached, and add it where it’s missing.”
What runs:
$ wp wc-stallionexpress-shipping zones $ wp wc shipping_zone_method create --zone_id=2 --method_id=wc-stallionexpress-shipping --user=1
zones lists each zone’s plugin_active, instance_id, and method_id. Anywhere your US zone reads plugin_active: no, the method gets added. Run zone-based and any US zone you skip stays dark, so cross-border Stallion rates never surface for those buyers; run global and the zone wiring stops mattering entirely. Once the method is attached, --instance opens up per-zone overrides. That’s how you’d serve cross-border US services in one zone and Canada Post domestic services in another while leaving your global defaults alone. US checkout then returns live Stallion rates.
Tune the rate so checkout reads clean
The same complaint shows up in a few shapes on cross-border stores: the rate undercharges after currency conversion, the checkout buries the buyer under overlapping US service tiers, or a stray cheap option slips through. Every adjustment field lives in the free plugin and is writable with the free settings command.
You’d ask: “Survey live Stallion rates for my best sellers to a few US ZIPs, add a 15% markup plus a $2 handling fee, hide anything under $5, keep only the cheapest 3, and show me before and after first.”
What runs:
$ wp wc-stallionexpress-shipping settings set priceAdjustmentPercent 1.15 $ wp wc-stallionexpress-shipping settings set priceAdjustment 2.00 $ wp wc-stallionexpress-shipping settings set minRateCost 5.00 $ wp wc-stallionexpress-shipping settings set maxShippingRates 3 $ wp wc-stallionexpress-shipping services --format=json $ wp wc-stallionexpress-shipping settings set services '{"stallion_economy_usa":{"enabled":true,"name":"Standard US Shipping (5-7 days)"}}'
Read priceAdjustmentPercent as a multiplier: 1.15 adds 15%, while 15 would balloon every rate to fifteen times its value. The adjustments stack in a fixed order after currency conversion: carrier rate first, then the percent, the fixed fee, the floor and ceiling, and last the max-count cap. To decide which services even quote, pull the real IDs from services and set them with settings set services. Stallion publishes its own IDs, such as stallion_economy_usa and stallion_economy_air for cross-border plus the canada_post_* family for domestic, and you can relabel them in plain language for buyers. Run one more quote to confirm the numbers before sign-off.
Buy a test label and pull tracking before going live
Tracking is one of Stallion’s strengths, so the pre-launch check worth doing is watching one shipment go from label to tracking event, safely, in sandbox.
You’d ask: “In sandbox, buy a test label for order 1240, then pull its tracking so I can see the whole pipeline before we go live.”
What runs:
$ wp wc-stallionexpress-shipping settings set sandbox yes $ wp wc-stallionexpress-shipping labels purchase --orders=1240 $ wp wc-stallionexpress-shipping track <shipment-id> --order=1240 --format=json $ wp wc-stallionexpress-shipping labels pdf --orders=1240 --output=/tmp/test-label.pdf
If the order has no Stallion shipment yet, labels purchase opens one first, then records the label count it pulled. The tracking number itself stays out of that output. Pull the tracking from track (or shipments get), which returns Stallion’s status plus the event timeline, and export the printable PDF with labels pdf. The events list is empty until Stallion has scan history, which is normal right after purchase. You walk away with a confirmed label, retrievable tracking, and a printable PDF, all without spending live postage. Labels and tracking are PRO features.
Print labels: by hand, with AI, or automated
The label commands behave the same whether you type them yourself, pass them to an agent, or let an overnight cron job fire them. For a Canadian shop pushing daily cross-border volume through Stallion, a day’s fulfillment is one batch:
$ wp wc-stallionexpress-shipping labels purchase --orders=1240,1241,1242 $ wp wc-stallionexpress-shipping labels pdf --orders=1240,1241,1242 --output=/var/labels/2026-06-11.pdf
Feed labels purchase the whole day’s IDs and it quietly passes over any order that’s been deleted, reporting back order by order on what it bought from Stallion. Because labels pdf insists on --output and refuses to clobber a PDF that’s already on disk, stamping each batch with its depot-drop date keeps every run writing to a fresh file. That batch turns a half-day fulfillment task into a ten-minute print run.
Two automation patterns are worth setting up once. First, a deploy gate. validate exits non-zero on any FAIL, so it blocks a release when Stallion shipping is broken:
$ wp wc-stallionexpress-shipping validate --format=json 2>/dev/null \
| jq -e 'all(.[]; .status != "FAIL")' >/dev/null \
|| { echo "Shipping config has failures"; wp wc-stallionexpress-shipping validate; exit 1; }A WARN on a Stallion check lets the deploy through; only a FAIL halts it. Second, a nightly label run: collect the day’s processing order IDs, buy their labels in one batch, and merge them into a dated PDF for the morning print station. For hands-off tracking sync, the PRO plugin has built-in automation cron settings (see the wp-config automation reference), which is how Stallion scan updates flow back into the order without anyone babysitting it.
Works the same across every carrier
All 8 plugins in the line share one engine, one settings model, and one set of commands. What changes is the namespace and a few setting keys. Confirm the namespace with wp help | grep shipping, then discover keys with settings list.
| Plugin | Carrier | CLI namespace |
|---|---|---|
| Shippo | Shippo (100+ carriers) | wc-shippo-shipping |
| EasyPost | EasyPost (100+ carriers) | wc-easypost-shipping |
| FedEx | FedEx | wc-fedex-shipping |
| ShipStation | ShipStation | wc-shipstation-shipping-v2 |
| ShipEngine | ShipEngine | wc-shipengine-shipping |
| Shipmondo | Shipmondo | wc-shipmondo-shipping |
| ChitChats | Chit Chats | wc-chitchats-shipping |
| Stallion Express | Stallion Express | wc-stallionexpress-shipping |
The Stallion namespace has no hyphen inside “stallionexpress”, which trips people up. Credential keys also differ by carrier: Stallion uses apiKey and sandboxApiKey, while Shippo uses testApiToken and liveApiToken, so always read settings list before writing.
Stallion pricing is never hard-coded anywhere in the plugin, which is why a live rates quote is always the source of truth. For real cross-border numbers, run a quote against your own catalog or check Stallion’s pricing in your account instead of trusting any cached estimate.
The other Canadian option: Stallion vs Chit Chats
Stallion and Chit Chats solve slightly different problems for a Canadian cross-border store, and we make a plugin for each. Stallion fits higher-volume sellers: its own depots and pickup, a tracking feed with real scan detail, and cross-border routing through its Buffalo, NY hub that’s typically cheaper for US-bound parcels. Chit Chats leans casual-friendly, with a broader Canadian drop-off network and an injection model that often wins for lighter, lower-volume sends. If your volume is climbing and tracking matters, Stallion usually wins. For the full breakdown, see Chit Chats vs Stallion Express for WooCommerce, or the setup guide for the Chit Chats plugin.
Security
None of this is exotic. A few habits keep your Stallion token from leaking:
- Begin in sandbox with
sandboxApiKey, and move to the liveapiKeyonly once a sandbox quote comes back clean. Always set the live token before flippingsandbox no, otherwise nothing is authenticated and rates fail. - Hand an agent the sandbox token during setup, then set the live token yourself. The agent never needs to see the real one.
- Store the token in
wp-config.phpconstants instead of the database. Those constants override the DB, never get written back to it, and can hide the credential field from the admin UI. This is how agencies lock down managed-hosting fleets and promote staging to production without leaking a key. - Output redacts secrets by default.
settings listprints them as[REDACTED], andsettings get apiKeystays hidden unless you pass--raw.
Frequently asked questions
Install the 1TeamSoftware Stallion Express plugin, then use WP-CLI under the wc-stallionexpress-shipping namespace: set apiKey (or sandboxApiKey for testing), set your origin, enable your Stallion services, attach the plugin to your US shipping zone, and confirm with validate and a rates quote to a US ZIP. Labels and tracking are available in PRO.
The namespace is wc-stallionexpress-shipping (no hyphen inside “stallionexpress”). Stallion’s credential keys are apiKey for the live API token and sandboxApiKey for the sandbox token. Confirm both with wp wc-stallionexpress-shipping settings list, which shows the real keys with secrets redacted.
Yes. Install the 1teamsoftware-wc-shipping skill, connect an assistant like Claude Code to your site, and tell it your goal in plain language, such as getting live cross-border rates to return at US checkout. It works through the documented WP-CLI commands and stops to ask for anything sensitive, like your Stallion API token, instead of guessing or fabricating it. Everything it does maps to a command you could run by hand.
Usually the plugin isn’t attached to the WooCommerce zone the US address falls into, so checkout falls back to another method. Run zones to confirm plugin_active, then wp wc shipping_zone_method create to add the Stallion method to your US zone. Missing product weights and a wrong token are the other two common causes.
Yes. Stallion’s adapter supports customs and tariff data, including per-item country, SKU, and manufacturer fields, which is what cross-border DDP and CUSMA handling need. Make sure your products carry accurate weight, dimensions, and customs values first, since the audit commands flag what’s missing.
The free plugin covers configuration and live rates: status, settings, products, zones, services, rate adjustments, rate quotes, and validate. Labels, shipments, tracking, box presets, and license commands are PRO, with matching CLI commands. For cross-border sellers, tracking and one-click labels are usually the reason to upgrade.
Both are Canadian cross-border carriers and we make a plugin for each. Stallion routes US-bound parcels through its Buffalo hub with its own depots and a strong tracking feed, which suits higher-volume sellers. Chit Chats has a broader Canadian drop-off network that often suits lighter, casual sends. See the comparison linked above to pick.
Use the sandbox token during setup and switch to the live token yourself after verifying. Secrets are redacted in CLI output, and you can store the token in wp-config.php constants instead of the database. The agent never invents tokens; it asks.
Get started
The free Stallion Express plugin covers live cross-border rates and configuration. The PRO version adds one-click labels, tracking, and box presets, all on the same CLI. The plugin carries a 5/5 verified-owner review and has run against the Stallion Express API since 2018, so this is a worn path. Install the free skill, point your assistant at a staging store, paste your sandbox token, and run a validate plus a rates quote to a US ZIP to watch the whole loop work.
$ npx skills add https://github.com/1TeamSoftware/skills --skill 1teamsoftware-wc-shipping- Get the plugin: Stallion Express Shipping PRO for WooCommerce
- Setting up shipping in general, across all 8 carriers: configure WooCommerce shipping with AI and WP-CLI
- Choosing your Canadian carrier: Chit Chats vs Stallion Express for WooCommerce
- Comparing the big aggregators instead: ShipStation vs Shippo vs EasyPost
About the author: 1TeamSoftware builds and maintains the eight WooCommerce shipping plugins covered here, including the Stallion Express integration, used by thousands of stores.

