Extensions › ShipStation
ShipStation Extension
Paid orders go to ShipStation on their own, and every shipment comes back to the order with its tracking number. Add an API key to buy labels from the order screen, show ShipStation rates at checkout and keep stock in step. 17 parts.
Quick links
Where to find it:WP Admin › EasyCart › Extensions › ShipStation
Quick start
Set up in four steps
The short version. Each step is covered in detail below.
Install
On EasyCart › Extensions, install ShipStation. It comes with your Premium license and installs WP EasyCart Premium with it.
Add the Custom Store
Make a password on the ShipStation page, then add your store to ShipStation as a Custom Store with the URL, username, password and five status words.
Add the API v2 key
Recommended, for labels from the order screen, rates at checkout, stock and delivery updates. ShipStation › Settings › Account › API Settings.
Check it works
The store feed turns Connected after ShipStation’s first import, and Activity lists it. Place a test order and watch it arrive.
Three ways to connect, one needed
The store feed
Required. ShipStation reads paid orders from your store and posts every shipment back. No API key, nothing expires.
API v2 key
Recommended. Labels from the order screen, live rates at checkout, stock from ShipStation Inventory and delivery updates. Does not expire.
API v1 key
Optional. ShipStation imports each paid order straight away instead of every couple of hours. Expires after 3, 6 or 12 months.
Getting started
Connect ShipStation
What you need, the store feed ShipStation reads, and which orders it gets.
Before you start
What the extension needs, your ShipStation plan, and where to find it
no stored settingsWhat you need
A WP EasyCart Premium license. ShipStation is a Premium extension. Install it from EasyCart › Extensions › ShipStation; that also installs WP EasyCart Premium, which keeps your API keys and delivers the extension’s updates.
WP EasyCart 6.0.2 or newer and WP EasyCart Premium 1.1.0 or newer. Rates at checkout also need WP EasyCart PRO 6.0.2 or newer.
A ShipStation account on a plan that can connect a Custom Store. The API keys ( optional ) need a plan that includes ShipStation’s API: the Standard plan or higher on ShipStation’s current plans, or Accelerate or higher on older ones. If yours does not, the key’s status says Plan without API.
Where to find it
WP Admin › EasyCart › Extensions › ShipStation. The top of the page is a checklist: each part of the setup is marked done, or says what to do next. The same reminders show on other EasyCart screens until the setup is finished.
Which parts you need
The store feed is all most stores need: paid orders go to ShipStation and every shipment comes back with its tracking number. It needs no API key and nothing expires. The API v2 key ( recommended ) adds labels from the order screen, rates at checkout, stock and delivery updates. The API v1 key ( optional ) only makes ShipStation import each order straight away instead of on its own schedule.
💡 Note: Your API keys are kept, encrypted, by WP EasyCart Premium. If Premium is deactivated, everything that needs a key pauses until it is active again. The store feed keeps working without any key.
Connect ShipStation
ShipStation reads your orders from this store as a Custom Store and posts each shipment back. No API key, and nothing that expires.
4 settingsAdd your store to ShipStation. Open Custom Store details ( URL, username, password ) and help at the top of the ShipStation page, then:
- Press Make a new password. The password shows once, in the details. It is the store feed’s own password, not your ShipStation or WordPress password.
- In ShipStation, open Settings › Selling Channels › Store Setup, press Connect a Store or Marketplace and choose Custom Store.
- Fill in ShipStation’s URL to Custom XML Page, Username and Password with the Copy buttons. Paste the URL whole, including everything after the “?”. Leave ShipStation’s other boxes as they are.
- Type the five status words into ShipStation’s matching boxes, exactly as shown below.
- Press Test Connection, then Connect. Turn on automatic import for the store if ShipStation asks.
- Back on the ShipStation page, the store feed turns Connected once ShipStation has read it, and Activity lists the import.
The status words. ShipStation matches them exactly, so type them as shown.
| ShipStation box | Type |
|---|---|
| Unpaid Status | unpaid |
| Paid Status | paid |
| Shipped Status | shipped |
| Cancelled Status | cancelled |
| On-Hold Status | on_hold |
Status
The checklist shows Orders: the store feed as Not set up, Waiting for ShipStation ( saved, not read yet ), Connected ( with when ShipStation last read the feed and the last shipment back ) or Quiet ( ShipStation has not read the feed for six hours ). Below it, Labels, rates and stock: the API v2 key shows Recommended until a key is added, then Working.
Only answer over HTTPS
The feed sends customer names and addresses, so it refuses plain http:// requests. Turn it off only on a site without HTTPS.
Check the connection
Check now logs in to the feed the way ShipStation does and reads the answer ShipStation would get, so it finds a page cache, a security plugin, a redirect or another plugin that spoils the answer. It runs from your own site, so a firewall that blocks only ShipStation does not show here: look in Activity right after a Test Connection instead.
New password
Make a new password makes the password ShipStation logs in with and shows it once. Only a scrambled copy is kept, so a lost password means making a new one. The old password stops working at once, so paste the new one into ShipStation straight away. It also ends the 15-minute wait after too many wrong passwords.
Switch to the store feed now
Only on a store upgraded from version 1. Switch now stops sending orders the classic way; see Moving from the classic connection below.
💡 Note: Test Connection failed? See Troubleshooting at the end of this guide: each ShipStation error, what causes it and the fix.
Moving from the classic connection
For stores that used version 1 of the extension
no stored settingsWhat happens after the update
Version 1 sent each paid order to ShipStation with your API v1 key. After the update that classic connection keeps running, so no order is missed while you add the Custom Store, and the checklist shows a third line, Classic connection ( API v1 key, from 1.x ), with what to do next.
When it switches
Add the Custom Store as described above. The switch happens on its own once ShipStation has read the store feed twice, at least ten minutes apart, or when you press Switch now. If your API v1 key has already stopped working ( ShipStation’s v1 keys expire ), the switch happens as soon as ShipStation first reads the feed.
No order lost, none twice
Orders the classic connection already sent stay in the ShipStation store they went to. Orders it never got into ShipStation are sent through the store feed at the switch, so none are left behind, and no order arrives twice.
After the switch
The API v1 key becomes optional: it only makes ShipStation import right away. Keep it, or remove it with Remove the key in Import right away. Your other settings carry over.
Orders
Which orders ShipStation sees, and what it gets. Orders with nothing to ship ( downloads, gift cards ) never go, and items a print-on-demand partner makes and ships itself are left out.
14 settingsStatuses that count as paid
Orders in these statuses wait in ShipStation’s Awaiting Shipment. Pick none to use every paid status except the shipped ones and Ready for pickup.
Statuses held in ShipStation
Orders in these statuses wait in ShipStation’s On Hold, so nobody ships them yet. By default: Order on Hold and Pending Approval.
Statuses cancelled in ShipStation
An order moved to one of these is cancelled in ShipStation, so nobody ships it. An order deleted in EasyCart is cancelled there too. By default: Card Denied, Third Party Error, Refunded Order and Order Cancelled.
Send unpaid orders
Unpaid orders ( bank transfer, pending payments ) show in ShipStation’s Awaiting Payment. Off: an order appears once it is paid.
Leave out local pickup orders
Orders the customer collects from the store stay out of ShipStation.
Order number prefix
Shown before the order number in ShipStation. WEB- shows order 1042 as WEB-1042.
Order key prefix ( unique per store )
Keeps this store’s orders apart from other stores on the same ShipStation account. One is made for you. Changing it makes ShipStation see every order as new.
ShipStation custom field 1
What goes into ShipStation’s custom field 1: Nothing, Coupon code, PO number, Payment method, Payment terms, EasyCart order ID, Customer notes ( first 100 characters ), Gift recipient email, or Subscription and shipment number. Custom fields show in ShipStation’s order grid, and its automation rules can use them.
ShipStation custom field 2
The same choices, for custom field 2.
ShipStation custom field 3
The same choices, for custom field 3. By default it shows how the order was paid, such as visa or paypal.
Send product images
Pickers see each item’s picture in ShipStation and on packing slips.
Send discounts as a line
The order’s discount shows as its own line, so ShipStation’s totals match the order.
Send the order’s private notes
Your team’s private notes on the order go to ShipStation’s internal notes. The customer’s notes always go.
Send the last 30 days again
Send again marks every order from the last 30 days as changed. ShipStation reads them again on its next import and updates what it has. Use it after changing the settings above.
What ShipStation gets
For each order: the order number and date, its status, the shipping method the customer chose, the payment method, the order total with tax and shipping, the customer’s email and phone, the billing and shipping addresses, the customer’s notes, a gift message, the three custom fields, and each item with its SKU, name, chosen options, quantity, price, weight and picture. Weights go in the store’s own weight unit. Edits, cancellations and refunds reach ShipStation on its next import.
⚠️ Careful: Leave the order key prefix alone once ShipStation has your orders. A new prefix makes every order look new to ShipStation, and they arrive a second time.
Everyday shipping
Shipments come back
What happens when ShipStation ships, how to follow an order, monthly boxes and customs.
When ShipStation ships
Each shipment comes back to the order with its items, carrier and tracking number.
2 settingsWho emails the customer
EasyCart sends your shipped email with the tracking link as each shipment comes back. Choose ShipStation to use ShipStation’s own shipping email instead. The extension never sends both.
Mark the order shipped
Moves the order to Shipped once everything in it has shipped. When only part of an order ships, the order screen and the email show what went, and the status waits for the rest.
How shipments come back
A label bought in ShipStation posts the shipment back to the order: carrier, service, tracking number and the items in the box. If you mark an order shipped by hand in ShipStation, keep Notify Marketplace ticked so the shipment comes back too. ShipStation packs its own way, so the items it shipped become one package on the order, and whatever is left keeps waiting.
💡 Note: If you keep EasyCart as the sender, leave ShipStation’s own customer emails off for this store, so customers get one email, not two.
Following an order
The ShipStation card, the orders list and Send to ShipStation again
no stored settingsThe ShipStation card
Every order screen has a ShipStation card. It says whether the order is In ShipStation and when ShipStation last read it, Waiting for the next import, or Not sent and why: local pickup, nothing to ship, a print-on-demand partner ships it, not paid yet, a draft, or placed before the store feed took over. A monthly subscription order lists each box with its date.
Send to ShipStation again
Send to ShipStation again, on the card and in the order’s More menu, marks the order changed so ShipStation reads it again on its next import, or straight away with an API v1 key. Edits, cancellations and refunds reach ShipStation on their own; use it when an order looks out of date there. Open ShipStation opens your ShipStation orders.
The orders list
The Orders list has a ShipStation column and a filter for In ShipStation, Not in ShipStation yet and Not sent. Tick orders and choose Send to ShipStation again from the bulk actions to resend several at once.
Subscriptions
A subscription paid every 3 months or every year can ship a box every month. Each month becomes its own ShipStation order, held until its date.
4 settingsShip subscriptions monthly
Off: each payment is one shipment. Every subscription: a plan paid every 3 months ships 3 monthly boxes, a yearly plan 12. Chosen products: only the products you pick below. Weekly and daily plans always ship with each payment.
Products that ship monthly
Shown when Ship subscriptions monthly is Chosen products. Search for the subscription products whose payments cover several months.
Ship each month on
The same day of the month as the order, or a fixed day from 1 to 28. The first box always ships right away; later boxes wait in ShipStation’s On Hold until their date.
Cancel the boxes still to come when the subscription ends
When the customer cancels the subscription, the months not yet due are cancelled in ShipStation. Boxes already shipped are not touched.
International orders and customs
Where HS codes come from, for labels bought in EasyCart and in ShipStation
no stored settingsSet them on each product
In the product editor, open Shipping, then Customs, and fill in the HS code, country of origin and customs description.
Labels bought from the order screen
A label bought from EasyCart’s order screen ( API v2 key ) for a package leaving the country carries a customs declaration built from each product’s HS code, country of origin and value. Nothing more to do.
Labels made in ShipStation
ShipStation’s Custom Store connection has no place for customs details, for every store platform that connects this way, so orders arrive in ShipStation without HS codes. ShipStation fills a declaration from its own product list instead: open the product in ShipStation’s Products and add its HS code ( harmonized code ) and country of origin once, under the same SKU as in EasyCart. Every later order with that SKU gets them.
With an API key
Labels, rates and stock
Labels from the order screen, rates at checkout, stock, and importing right away.
Labels, rates and stock ( API v2 key )
Recommended. Buy ShipStation labels from the order screen, show ShipStation rates at checkout, keep stock in step and get delivery updates. There is no test mode: every label is real.
7 settingsStatus
Working once ShipStation accepts the key, with when it was last used. Not accepted shows ShipStation’s own reason; Plan without API means your ShipStation plan does not include the API. While delivery updates are not set up, tracking is read back twice a day instead.
API v2 key
In ShipStation: Settings › Account › API Settings, choose API v2, press Generate, then copy the key. ShipStation shows it only once, and v2 keys do not expire. Saving checks it with ShipStation and keeps it encrypted; the box then shows dots. To replace the key, clear the box before pasting the new one.
Ship from
The ShipStation ship-from location labels and rates at checkout start from. Leave it on ShipStation’s default unless you ship from several. Locations are made in ShipStation under Settings › Shipping › Ship From Locations.
Label file
The file your labels come as: PDF, PNG image, or ZPL for thermal printers.
Label size
4×6 suits label printers. Letter prints on office paper.
Delivery updates
ShipStation tells the order when a package is in transit, out for delivery, delivered or has a problem, and a delivered order can move to Delivered. The updates arrive through WP EasyCart Premium, and tracking is also read back twice a day in case one goes missing.
Check the key
Check now reads your carriers and ship-from locations, and lists them.
Set up delivery updates again
Set up tells ShipStation where to send delivery updates again. You need it after the site’s address changes.
⚠️ Careful: ShipStation has no test mode. Every label bought from the order screen is real and charged to your ShipStation account, so void a test label straight away.
Buying a label from an order
Compare your ShipStation carriers, buy and print on the order screen
no stored settingsOpen the label window
With an API v2 key, ShipStation can buy the order’s label. When it is your only label service, Buy label is the main button where you ship the order. With more than one connected, Buy a label opens the Fulfill order window, which lists each. Each package waiting to ship also has a ShipStation label button.
Choose a rate and buy
The window shows where the package ships from and to, and what is in it. Check the weight and size, pick a delivery confirmation if you want one, and press Get rates: every carrier on your ShipStation account answers, ShipStation’s own discounted ones included, with the cheapest and fastest marked. Leave Mark the order shipped when every package has a label and Email the customer the tracking link ticked or not, then press Buy label. A package leaving the country gets a customs declaration from each product’s HS code and country of origin.
After buying
The package carries the tracking number and new buttons:
- Print label: opens the label file again.
- Customs form: when the carrier made one.
- Void: cancels a label you will not use. ShipStation asks the carrier for a refund; USPS refunds can take a few weeks.
- Return label: makes a prepaid return label. The carrier charges it when it is used, or however it bills returns.
Without an API v2 key
ShipStation’s row in the Fulfill order window opens your ShipStation orders instead. Labels bought in ShipStation still come back to the order through the feed; void those in ShipStation. Packages a print-on-demand partner ships are left to the partner.
Rates at checkout
Live rates from your ShipStation carriers, including ShipStation’s own discounted ones, as shipping choices at checkout.
4 settingsShow ShipStation rates at checkout
Each service you choose becomes a live rate, next to the store’s other live rates. Needs the API v2 key, WP EasyCart PRO, and Live shipping rates as the store’s rate method under Settings › Shipping. If ShipStation does not answer within 8 seconds, checkout shows your other rates without it. Until the key is added, this section says what it needs instead.
Services to offer
The services from your ShipStation carriers to offer. Each one becomes its own live rate, and the status line counts how many are on.
Markup
Added to each rate, as a percent of it. Up to 500%.
Handling fee
A fixed amount added to each rate, once per order.
Stock from ShipStation
Every hour, ShipStation Inventory’s stock is written to the products and option combinations with the same SKU. Only from ShipStation to EasyCart.
4 settingsKeep stock in step with ShipStation
Needs the API v2 key and ShipStation Inventory on your ShipStation plan. A product must track stock and have a SKU; option combinations match by their own SKU. Nothing is written back to ShipStation, and products a print-on-demand partner makes, or whose stock another service keeps ( such as Square ), are left alone.
Stock to use
Available is on hand minus what ShipStation already set aside for orders. On hand is everything on the shelf.
Only this inventory warehouse
A ShipStation inventory warehouse ID, to read only that warehouse. Leave it empty to add up every warehouse.
Read stock now
Read now reads stock straight away instead of waiting for the hourly read. The status line then says how many SKUs ShipStation has, how many changed here, and how many match no product.
Import right away ( API v1 key )
Optional. ShipStation imports the store feed on its own every couple of hours. An API v1 key makes it import each paid order straight away.
6 settingsStatus
No key ( optional; everything else works without it ), Working, or Paused when ShipStation stops accepting the key: v1 keys expire after 3, 6 or 12 months, and orders then still arrive on ShipStation’s own schedule. On a store upgraded from version 1, this section is called Classic connection ( API v1 key ) until the store feed takes over.
API v1 key
From ShipStation › Settings › Account › API Settings › API v1 › Generate. Only the account owner can make keys. Kept encrypted; after saving the box shows dots.
API v1 secret
The secret made with the key. Saving checks both with ShipStation and says if ShipStation turns them down.
Key expires on
The date ShipStation shows next to the key. Enter it and EasyCart screens remind you two weeks before.
Import right after each paid order
After each paid or changed order, asks ShipStation to import the store feed straight away, at most every few minutes.
ShipStation store
The Custom Store you added for this site. Found for you when the account has only one.
Check the key, Remove the key
Once a key is saved, Check now asks ShipStation for your stores with it, and Remove the key stops importing right away; ShipStation keeps importing the store feed on its own schedule.
When something is off
Activity and troubleshooting
See every request ShipStation makes, and fix what stops it.
Activity
Every request ShipStation makes to the store feed, the shipments that came back, and anything that went wrong
no stored settingsWhat it lists
The last section of the ShipStation page lists each request to the store feed: imports ( with how many orders and pages ), shipments that came back ( with the order number ), and refused requests with the reason, such as a wrong username or password, too many tries, or http instead of https. Each line says which program sent it and how its login came. Filter with All, Needs attention and From ShipStation; below, a table lists what changed on your orders and products.
A browser visit is expected
Opening the feed link in a web browser asks for a username and password and is refused. That is expected: ShipStation sends the login itself. Activity shows it as sent by a web browser, not as a problem.
After a Test Connection
Reload the ShipStation page right after pressing Test Connection in ShipStation. A new line shows what happened. No new line means ShipStation’s request never reached WordPress: a firewall or your host stopped it ( see Troubleshooting ).
When ShipStation goes quiet
If ShipStation has not read the feed for six hours, the store feed turns Quiet, and EasyCart screens show a notice when orders changed in that time. Check that automatic import is on for this store in ShipStation, then press Check now. The same notices warn you when an API v1 key is about to expire or ShipStation stops accepting a key.
Troubleshooting: connecting
What ShipStation’s Test Connection errors mean, and the fix for each
no stored settings“(401) Unauthorized”
The username or password does not match. Press Make a new password, then paste the username and the new password into ShipStation again. It is the store feed’s own password, not your ShipStation or WordPress password.
“Invalid data returned from API” or “Invalid XML”
ShipStation got something other than the feed. Check that the URL was pasted whole, including everything after the “?”. Then press Check now: it names what got in the way, such as a page cache, a security plugin’s block page, a redirect ( http to https, or to www ) or another plugin printing into the answer. If Check now finds nothing wrong, the request is being stopped before it reaches WordPress: reload the page after a Test Connection and look in Activity.
“(403) Forbidden”, “(503)” or a time-out
A firewall, a security plugin or your host blocked ShipStation. Security plugins such as All-In-One Security, Wordfence or Sucuri, and host firewalls such as Imunify360 or ModSecurity, can block requests that come from a server instead of a browser. Allow requests to the feed URL in your security plugin, or ask your host to. ShipStation’s server addresses change, so allowing the URL works better than allowing addresses. If it worked before and stopped, check whether the firewall or a blocking rule was switched back on.
“(429)”
Too many wrong passwords. ShipStation waits 15 minutes; making a new password ends the wait at once.
The feed link asks for a username and password in my browser
That is expected. The feed only answers ShipStation, which sends the login itself.
The store feed says Quiet
ShipStation has not read the feed for six hours. In ShipStation, check that automatic import is on for this store, or press Update All Stores on the orders screen; then press Check now on the ShipStation page.
Troubleshooting: orders, keys and labels
When an order, a shipment, a key, a rate or stock does not do what you expect
no stored settingsAn order is not in ShipStation
Open the order: its ShipStation card says why, such as not paid yet, local pickup, nothing to ship, a partner ships it, or a draft. If it says Waiting for the next import, ShipStation has not imported since: press Update All Stores in ShipStation, or add an API v1 key to import right away.
A shipment did not come back to the order
Look in Activity for “Shipment for order”. A failed one says why, such as an order this store does not know ( check the order key prefix was not changed ). For an order marked shipped by hand in ShipStation, keep Notify Marketplace ticked.
Customers get two shipped emails
Pick one sender in Who emails the customer, and turn ShipStation’s own customer emails off for this store if EasyCart sends them.
International orders have no HS codes in ShipStation
Buy those labels from EasyCart’s order screen, or add the HS codes to ShipStation’s product list; see International orders and customs above.
Weights look wrong in ShipStation
Weights go in your store’s weight unit. Check it, and each product’s weight, in WP EasyCart.
The API v2 key is Not accepted
Copy it again from ShipStation: it shows the key only once, so generate a new one if needed. If ShipStation’s Copy button does not copy, select the key and copy it with Ctrl+C ( Cmd+C on a Mac ). Clear the box before pasting.
The key says Plan without API
Your ShipStation plan does not include the API. Labels, rates and stock need a plan with it; the store feed works without it.
No ShipStation rates at checkout
Check that the key is Working, that WP EasyCart PRO is active, that Live shipping rates is the store’s rate method, and that services are chosen in Rates at checkout. ShipStation must answer within 8 seconds.
Stock did not change
The product must track stock and have the same SKU as in ShipStation ( option combinations match by their own SKU ), and your ShipStation plan must include Inventory. The status line counts the SKUs that match no product.
Good to know
Several stores, updates, and what happens to orders already in ShipStation
no stored settingsSeveral stores on one ShipStation account
Add each store as its own Custom Store. Each store has its own order key prefix, so their orders never mix.
Updates
ShipStation updates come through WP EasyCart Premium, on the Plugins screen and on EasyCart › Extensions.
Edits, refunds and deleted orders
Changes to an order reach ShipStation on its next import. A refunded or cancelled order is cancelled in ShipStation, and so is an order deleted in EasyCart.
Stopping
Orders already in ShipStation stay there. To stop new ones, remove the Custom Store in ShipStation, then deactivate the extension.
Keep going
Related guides
Where each order’s packages, labels and tracking live.
Packages, the rate method and live rates.
The rates your checkout offers.
Stock tracking, SKUs, weights and customs details.
How Premium extensions install and update.
ShipStation comes with WP EasyCart Premium
Premium includes every WP EasyCart extension: ShipStation, Stamps.com, Shippo, QuickBooks, AvaTax and more, with updates and priority support.












