How to Set Up Shippo Shipping on WooCommerce

Setting up Shippo shipping on WooCommerce for live carrier rates at checkout

Getting live Shippo rates at WooCommerce checkout really comes down to one connection: your Shippo API token. After that, you give the plugin a few real details about how you ship: your ship-from address, the boxes you actually pack, and the shipping services you offer. Then you quote a single rate to confirm it reached Shippo. Do every step from the WordPress command line, or install one skill and let an AI agent run the same commands and pause to ask for your token.

Here is the part that catches almost everyone. The official Shippo extension imports orders so you can buy labels in Shippo’s dashboard. In its standard setup it does not return live carrier rates to your cart and checkout. So you connect Shippo, wait for rates at checkout, and they never appear. The customer sees a flat rate that has nothing to do with where they live, or “no shipping methods available,” and a chunk of them close the tab.

This is not cosmetic. Before a shopper commits, checkout has one task: surface a precise shipping price pulled live from the carriers in your Shippo account. Baymard’s checkout research pegs average cart abandonment near 70%, with surprise shipping cost high on the list of reasons a shopper backs out. When the number is a flat rate, it is wrong in both directions: the nearby order pays too much and bails, and the heavy cross-country order underpays while you eat the difference.

The plugin we’ll use here, the 1TeamSoftware Shippo Shipping PRO plugin, runs on 2,000+ stores at a 4.92 out of 5 rating, and we build and support it ourselves. So you are not the first store to wire this up.

Try Shippo Shipping Free on WordPress.org | See Shippo Shipping PRO Features

Why a flat rate costs you sales

A flat rate is a guess, and shoppers tend to sense one. No amount of configuration on the official extension changes that, because returning live rates to the cart was never what it was designed to do.

The 1TeamSoftware Shippo Shipping PRO plugin adds the one piece the official extension leaves out: it quotes live Shippo rates at cart and checkout. It also prints labels inside WooCommerce, tracks shipments, and works with multivendor marketplaces. This guide configures that plugin.


TL;DR

  • What you need: a Shippo account, your test and live API tokens, your ship-from address, and weights and dimensions on shippable products.
  • Connect the test token, turn on the sandbox, set the origin, enable shipping services, then quote a real rate. A successful rates quote is the only connectivity proof; there is no separate test-connection button.
  • Use the Shippo plugin for live rates and quoting. Shippo Shipping PRO adds shipping labels, tracking, returns, dimensional packing, and multivendor origin.
  • The Shippo command namespace is wc-shippo-shipping. Discover exact setting keys with settings list before writing anything.
  • Go live by setting the live token, then turning sandbox off, then re-quoting. Set the live key before flipping the sandbox, or no token is active.
  • Install the agent skill and an assistant like Claude Code runs the whole sequence for you.
Terminal
$ npx skills add https://github.com/1TeamSoftware/skills --skill 1teamsoftware-wc-shipping

What the official Shippo extension does, and what it skips

Shippo’s own WooCommerce integration handles the label half of fulfillment. An order is placed, it shows up in Shippo, and you buy and print the label in Shippo’s dashboard. If your team already lives in that dashboard and you do not need a rate at checkout, it is a fair fit.

What it never does is quote a rate to your customer. In the standard setup the official extension does not return live carrier rates to the cart and checkout, so the buyer never sees a real carrier service with its live cost and delivery estimate while they decide. They get your old static rate, or nothing, and some of them leave. A flat rate set too high scares people off; one set too low quietly eats your margin.

The 1TeamSoftware Shippo Shipping PRO plugin calls the Shippo API during cart and checkout and shows live rates from the carriers connected in your Shippo account, including USPS, UPS, FedEx, and DHL. You keep Shippo’s discounted rates, and you can still buy labels. The difference is that the rate now appears where the customer needs it.

CapabilityOfficial Shippo extension1TeamSoftware Shippo Shipping PRO plugin
Live carrier rates at cart and checkoutNo (order import, dashboard labels)Yes, in real time
Buy and print shipping labels inside WooCommerceNo (Shippo dashboard)Yes, from the order screen (PRO)
Bulk labels merged into one PDFNoYes (PRO)
Tracking and shipment notificationsNoYes (PRO)
WP-CLI setup and verificationNoYes
AI agent setup via a published skillNoYes
Multivendor origin (Dokan, WCFM, MVX, YITH)NoYes

For the full breakdown against ELEX and PluginHive too, see the Shippo plugin comparison on the product page.


Before you start

Line up three things first, and the rest goes quickly:

  • A Shippo account and API tokens. In Shippo, open Settings, then API. Shippo issues a test token that starts with shippo_test_ and a live token that starts with shippo_live_. Grab both. You connect with the test token first and switch to live only after a sandbox quote succeeds.
  • Test mode versus live mode. Shippo’s test environment returns realistic rates without touching a real carrier account or spending money, so use it to confirm the plugin can reach Shippo and that your products quote correctly. Live mode returns purchasable rates and is what customers see. A sandbox toggle decides which token the plugin uses. One caution: sandbox does not reflect flat-rate pricing, so re-verify any USPS flat-rate comparison in live.
  • Weights and dimensions on your shippable products. Carriers price by package size and weight, so a product with no weight gives the carrier nothing to price. Missing product data is the most common reason rates do not appear, and the steps below check for it directly.

One note on Shippo’s plans: Shippo has free and paid plans, and it gives you discounted carrier rates with no code on your side. The plan governs what Shippo handles on its end, not the live rates the plugin shows at checkout. Check the Shippo pricing page for current limits, since Shippo updates its plans from time to time.


Set it up from the command line

Every command follows one shape: wp wc-shippo-shipping <command> [<subcommand>] [--flags]. The namespace is the plugin slug, and both editions share it. If you are unsure it is loaded, run wp help | grep shipping first.

Before you write any setting, discover the real keys. Credential fields, service IDs, and box types differ per plugin, so do not guess. settings list shows every setting key with secrets redacted, services shows valid service IDs, and boxes presets shows carrier box dimensions. For every command, flag, and output field beyond the ones used here, see the full WP-CLI command reference.

Terminal
$ wp wc-shippo-shipping settings list

Step 1: see where you stand

Run these two first. Each one inspects what is already configured, from the Shippo API token to the connected carriers, and flags trouble before you change anything.

Terminal
$ wp wc-shippo-shipping status --format=json
$ wp wc-shippo-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

status prints a snapshot of how the plugin is currently set: version, carrier, the sandbox and debug flags, whether live rates are on, the configured origin, and how many method instances exist. It does not probe Shippo, so there is no connectivity field in its output. validate goes deeper: it runs through each configuration check in turn and stamps the outcome as PASS, FAIL, WARN, INFO, or PENDING. The moment any check lands on FAIL, the command exits with a non-zero status, which is exactly what lets a deploy pipeline treat it as a hard gate.

Step 2: connect with the test token

For Shippo the credential keys really are testApiToken and liveApiToken, with a sandbox toggle. Set the test token first and do not hand a live key to an agent before a sandbox quote has worked.

Terminal
$ wp wc-shippo-shipping settings set testApiToken "shippo_test_xxxxx"
$ wp wc-shippo-shipping settings set sandbox yes
$ wp wc-shippo-shipping settings set enableLiveShippingRates yes
$ wp wc-shippo-shipping settings set origin '{"name":"My Store","address":"215 Clayton St","city":"San Francisco","state":"CA","postcode":"94117","country":"US"}'

Read one value back with settings get origin, and add --raw to reveal a redacted secret. At a bare minimum your origin has to carry address, city, country, and postcode. For shipments out of the US and Canada, include state too so Shippo prices the route more precisely.

Step 3: check your products

Accurate shipping rates need accurate weights and dimensions, so find the gaps before customers do.

Terminal
$ wp wc-shippo-shipping products audit --detailed --format=json --limit=0

products audit returns a completeness percentage and flags missing weight, missing dimensions, and suspicious values. The per-product lists surface only with --format=json; in table mode --detailed shows the same summary as plain audit. Pass --limit=0 so a large catalog is not capped at 500. Fix the flagged products, then re-run the audit to confirm completeness rose.

Step 4: boxes and services

Pull Shippo’s box presets for a carrier and enable the services you ship with.

Terminal
$ wp wc-shippo-shipping boxes presets --carrier=USPS
$ wp wc-shippo-shipping services --format=json
$ wp wc-shippo-shipping settings set services '{"usps_ground_advantage":{"enabled":true,"name":"USPS Ground Advantage"}}'

services prints the actual Shippo service IDs alongside whether each is turned on, which takes the guesswork out of picking the correct ID. International IDs differ from domestic, so enable both usps_priority and usps_priority_international if you ship across borders. boxes presets is a PRO command; without PRO you write the boxes setting directly with settings set boxes (more on the box schema below).

Step 5: prove it works

Re-run validation and ask Shippo for a real quote to confirm the connection works before you switch to live.

Terminal
$ wp wc-shippo-shipping validate
$ wp wc-shippo-shipping rates quote --products="123" --destination="500 5th Ave, New York, NY 10001, US"

rates quote asks Shippo for a live quote on an ad-hoc product and destination and returns service, cost, and days. Give it a country together with a ZIP or postcode and it will run; hand it a complete street address and the quote gets sharper, while a missing street, city, or state only triggers warnings rather than failing outright. This is the connectivity test. If the quote returns rates, Shippo is reachable and checkout will show rates for that scenario. When you script it, note that rates quote prints a human log line before the JSON, so extract the array from the first [ to the matching ] rather than relying on 2>/dev/null.

Step 6: go live

Run these to swap in your live token, turn sandbox off, re-quote in live, and silence debug output for customers.

Terminal
$ wp wc-shippo-shipping settings set liveApiToken "shippo_live_xxxxx"
$ wp wc-shippo-shipping settings set sandbox no
$ wp wc-shippo-shipping rates quote --products="123" --destination="500 5th Ave, New York, NY 10001, US"
$ wp wc-shippo-shipping settings set debug no

Set the live token before flipping sandbox no, or no token is active and rates fail. Re-quote in live, because sandbox prices are not trustworthy for flat-rate services. Turn debug off before customers hit checkout. That is the whole setup, repeatable and visible: run it on staging, run it again on production, and the two match. For the reasoning behind running shipping setup this way, see Configuring WooCommerce Shipping with AI Agents and WP-CLI.


Hand it to an AI agent

Install the skill once and an assistant like Claude Code drives every command above from plain English. It ships with playbooks for the jobs that actually come up, from first-time setup to tracking down why checkout went quiet, and it picks the right one for what you asked. There is no hidden layer here. It runs the same CLI you would, and it stops to ask for secrets instead of making them up.

Terminal
$ npx skills add https://github.com/1TeamSoftware/skills --skill 1teamsoftware-wc-shipping

The base plugin ships six skills; PRO adds four. Once it’s installed, just describe what you want with real constraints. These are the kinds of multi-step requests it’s built for:

  • “Set up Shippo from scratch. Sandbox key is shippo_test_abc123, we ship from 215 Clayton St, San Francisco 94117. Before live rates, audit my catalog for missing weight or dimensions, recommend a starter box set from what I actually sell, and prove rates come back with a real quote. Ask me one question at a time and don’t touch my live key yet.”
  • “We’re going live on Shippo this week. Confirm the license is active, set our live key and origin, audit and fix product data, build a box set, confirm Shippo supports label purchase and tracking via features, then buy a test label and pull tracking on one real order so I can see the whole pipeline before we open up.”
  • “Rotate our Shippo credentials to this new live key. First show me which credential field Shippo actually uses, set it, confirm the old secret is gone, and verify with a live quote before we trust it.”

Show live Shippo rates at the WooCommerce checkout

This is the switch that actually turns rates on. With the plugin connected, live rates on, and the method attached to the customer’s zone, the plugin calls Shippo during cart and checkout, packs the cart into your boxes, and returns a rate per enabled service. The customer sees each shipping service by name with its live cost and delivery estimate and picks one. Two settings control whether it appears:

  • Live rates must be enabled (enableLiveShippingRates yes), or the plugin falls back to static rates.
  • The plugin must be on the customer’s shipping zone. Confirm with wp wc-shippo-shipping zones.

The plugin renders rates in both the classic checkout and the newer WooCommerce block-based cart and checkout, so you do not have to choose a checkout style to get them.


The one check the CLI can’t do for you

Steps 5 and 6 already prove the connection from the command line: validate confirms the token, origin, boxes, and services are in place, and rates quote confirms Shippo answers in both sandbox and live. There is one thing those commands can’t tell you, so do it last: place one real test order through the live checkout. A passing CLI quote tells you the connection is good. A real checkout tells you the customer actually sees the rate.


Common Shippo rate failures on WooCommerce and the WP-CLI commands that fix them

Common situations you’ll hit

Setup rarely lands in one clean pass. Once real orders start hitting your Shippo-connected checkout, a few predictable problems show up, and each has a Shippo command that clears it.

Products missing weight or dimensions

A catalog that grew over years of imports usually has gaps, and Shippo silently returns nothing for a product with no weight. One forgotten weight field on a popular product, and every cart containing it shows no shipping option at all. Rule this out first.

Ask the agent: “Audit every physical product for missing weight and dimensions, give me the completeness percentage and the full list of what’s incomplete, 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. Never make up a number.”

Terminal
$ wp wc-shippo-shipping products audit --detailed --format=json --limit=0

From the JSON the agent pulls the missing_weight_products, missing_dimensions_products, and suspicious_data_products arrays, looks up genuine specs, expresses them in your store’s units, and saves them onto the parent product and every variation. Virtual and downloadable items are skipped, variations take their values from the parent, and the audit flags a figure as suspicious once a weight passes roughly 70 lb (about 32 kg) or one side runs past roughly 72 in (about 183 cm). Where a real spec cannot be confirmed, it leaves the field for you rather than inventing a number.

Picking the right shipping boxes

Shipping rates look high when a small item ships in an oversized carton, because dimensional weight inflates the price. The shopper sees a shipping cost that feels absurd next to the product price and closes the tab, even though the carrier would have charged far less in the right box. Match the box set to what the store actually ships.

Ask the agent: “Analyze my last 6 months of orders and my catalog, recommend a box set that covers about 90% of what I ship, prefer USPS flat-rate boxes where they’d be cheaper for heavy items, show me the coverage table before applying anything, and keep my existing custom boxes.”

Terminal
$ wp wc-shippo-shipping products stats --format=json
$ wp wc-shippo-shipping products orders --since=2025-12-01 --format=json
$ wp wc-shippo-shipping boxes presets --carrier=USPS --format=json
$ wp wc-shippo-shipping products fit-box --length=12 --width=8 --height=6

products stats and products orders describe the real sizes and order patterns you ship. Preset output cannot be pasted into the boxes setting as it comes out, so the agent translates each field first: name is rewritten to boxName, an enabled flag is added, and the carrier and maxweight fields are stripped. It trials candidates with products fit-box, lays out a coverage table, and then writes the combined set with settings set boxes:

Terminal
$ wp wc-shippo-shipping settings set boxes '[{"enabled":"yes","boxName":"Small","type":"parcel","length":"8","width":"6","height":"4","weight":"0.5","maxweight":"20"}]'

A box typed parcel quotes on all carriers using dimensional weight; a carrier preset like USPS_SmallFlatRateBox quotes only that carrier, and flat-rate can save real money on heavy items. boxes presets and fit-box are PRO; without PRO you write the boxes setting directly.

To learn how to configure shipping boxes correctly in the WooCommerce shipping plugin, please refer to the tutorial video below:

No rates in some regions: shipping zones

Rates that work for some customers and not others are almost always a shipping zone problem. Even with a valid Shippo API token and carriers wired up in your Shippo account, a missing shipping zone is by far the most frequent reason “no rates at checkout” shows up. The plugin only returns rates on the shipping zones where it is attached as a shipping method, so any zone it is missing from shows the buyer nothing.

Ask the agent: “rates quote works from the CLI but checkout shows nothing for some customers. Figure out which zone those addresses fall into, check whether the plugin is actually attached, and add it where it’s missing.”

Terminal
$ wp wc-shippo-shipping zones
$ wp wc shipping_zone_method create --zone_id=2 --method_id=wc-shippo-shipping --user=1

For every zone, zones reports its plugin_active, instance_id, and method_id. When a zone shows plugin_active: no while the plugin runs in zone-based mode, that is where you add the method; in global mode a zone can sit without it and rates still come through. After the method is attached you can layer per-zone overrides through --instance (say, USPS flat-rate boxes domestically and plain parcels abroad) while your global defaults stay untouched.

Tuning rates: markup, floors, and which services show

Shipping rate is undercharging, the checkout shows too many shipping service options, or a cheap Media Mail rate is slipping through. The adjustment fields all live in the base plugin, and you write them with the settings command.

Ask the agent: “Survey live rates for my best sellers to a few US zones, add a 15% markup plus $2 handling, hide anything under $5, keep only the cheapest 3, and show me before and after first.”

Terminal
$ wp wc-shippo-shipping settings set priceAdjustmentPercent 1.15
$ wp wc-shippo-shipping settings set priceAdjustment 2.00
$ wp wc-shippo-shipping settings set minRateCost 5.00
$ wp wc-shippo-shipping settings set maxShippingRates 3

Watch the multiplier here: priceAdjustmentPercent is exactly that, a multiplier, so 1.15 marks a rate up by 15%. Put 15 in that field and every rate balloons fifteenfold. The adjustments apply in a fixed order: carrier rate, then the percentage, then the fixed amount, then the floor and ceiling, and last the cap on how many rates show. Re-quote afterward and eyeball the new numbers before you sign off.

Buy a test label before going live (PRO)

You want to watch the full fulfillment pipeline run once, safely, before real customers hit it.

Ask the agent: “In sandbox, buy a test label for order 1240, then pull its tracking so I can see the whole pipeline before we go live.”

Terminal
$ wp wc-shippo-shipping labels purchase --orders=1240
$ wp wc-shippo-shipping track <shipment-id> --order=1240 --format=json
$ wp wc-shippo-shipping labels pdf --orders=1240 --output=/tmp/test-label.pdf

labels purchase creates the shipment if needed and logs how many labels it bought; it does not print the tracking number. Read the tracking number from track or shipments get, and export the printable PDF with labels pdf. Labels, tracking, and box presets are PRO features.

If buying labels, batching them into one PDF, sending tracking, and dimensional packing are part of your workflow, Shippo Shipping PRO adds them on top of the live rates you already quote.


Troubleshooting

No rates at checkout. Run validate first, then shipping zones to confirm the plugin is active on the customer’s zone, then products audit to catch missing weights, then rates quote to test Shippo directly and read any carrier error.

Rates appear in admin but not at checkout. Almost always a shipping zone gap. zones shows exactly which zones the plugin is on; add the method where plugin_active reads no.

A quote fails with no useful message. Turn on debug, re-run the same rates quote so Shippo’s raw response is captured, read the log under wp-content/uploads/wc-logs/, then turn debug back off.

Terminal
$ wp wc-shippo-shipping settings set debug yes
$ wp wc-shippo-shipping rates quote --products="123" --destination="500 5th Ave, New York, NY 10001, US"
$ wp wc-shippo-shipping settings set debug no

Shipping rates look wrong or too high. Check your shipping box settings. If the only box is large, a small item ships in a big carton and dimensional weight inflates the price. Add smaller shipping boxes so the plugin packs tightly, and re-quote.

Changes do not take effect. Caching can mask edits. Check settings get cache and the TTL, then wp cache flush; a persistent object cache can desync from the database.

Label buying stopped working. That is usually Shippo’s own plan limit on labels, not the plugin. Rates keep working; check your allowance on the Shippo pricing page.


Frequently asked questions

Does Shippo’s official WooCommerce extension show live rates at checkout?+

No. The official extension imports orders so you can buy labels in Shippo’s dashboard. In its standard setup it does not put live carrier rates on the WooCommerce cart and checkout. To show live rates, use the 1TeamSoftware Shippo plugin.

How do I set up Shippo shipping on WooCommerce?+

Install the Shippo Shipping plugin, set your Shippo API token, enable live rates, set your origin address, enable services, add the method to your shipping zone, then quote a test rate. You can do this through the settings screens or with WP-CLI commands under the wc-shippo-shipping namespace.

Where do I find my Shippo API token?+

In your Shippo account under Settings, then API. You get a test token that starts with shippo_test_ and a live token that starts with shippo_live_. Connect with the test token first, then switch to live after a test quote succeeds.

Do I need a paid Shippo account?+

Showing live rates at checkout is handled by the plugin’s connection to Shippo, separate from Shippo’s own plan limits. Shippo has free and paid plans and gives discounted carrier rates; check the Shippo pricing page for what each plan includes.

How do I test that Shippo is connected?+

Run wp wc-shippo-shipping rates quote against a real product and destination. There is no separate connection test. If the quote returns rates, Shippo is reachable and checkout will show rates for that scenario.

Why do no rates show at checkout?+

Most often the plugin is not attached to the customer’s shipping zone, or the product has no weight. Run validate, then zones to confirm the method is active on the right zone, then products audit to catch missing weights, then rates quote to test Shippo directly.

Can an AI agent set up Shippo for me?+

Yes. Install the 1teamsoftware-wc-shipping skill, point an assistant like Claude Code at your site, and describe what you want. It runs the documented WP-CLI commands and pauses to ask for your token and origin address; it never invents keys.

Should I use Shippo, ShipStation, or EasyPost?+

It depends on your carrier mix and pricing. We compare all three in ShipStation vs Shippo vs EasyPost.


Get live Shippo rates on your WooCommerce store

The official extension leaves your WooCommerce checkout static. This plugin quotes Shippo right where the buyer needs a real price before they commit. The version on WordPress.org already runs 2,000+ stores at a 4.92 out of 5 rating, so start there: quote live rates against your real catalog, then upgrade when you need more.

Get Shippo Shipping PRO for WooCommerce, which adds one-click labels, bulk label PDFs, tracking, returns, dimensional packing, and multivendor origin for Dokan, WCFM, MVX, and YITH. Connect your Shippo token, quote a test rate, and turn it on.


Written by 1TeamSoftware, the team behind the Shippo, EasyPost, and multi-carrier shipping plugins for WooCommerce, used across thousands of stores to put live carrier rates at checkout.

Leave a Reply

1TeamSoftware
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.