Shippo Shipping Labels & Tracking
An order is paid and needs to ship: check the address, compare USPS, UPS and FedEx rates for the parcel, buy the cheapest label, then track it by carrier and tracking number. Shippo test tokens let you try the whole flow without paying for postage.
Connect this API to an AI agent Browse all specs
What you can do with Shippo Shipping Labels & Tracking via MCP
Every endpoint below becomes a governed tool your AI agent (Claude, ChatGPT, or a customer-facing VX agent) can call — with scoped permissions, sandbox testing, and audit logs.
| Method | Path | Operation | Description |
|---|---|---|---|
| POST | /addresses |
createAddress | Save an address (set validate=true to check it) |
| GET | /addresses/{AddressId}/validate |
validateAddress | Validate a saved address and get suggestions |
| POST | /shipments |
createShipment | Create a shipment and get rate quotes for it |
| GET | /shipments/{ShipmentId} |
getShipment | Get a shipment with its rates |
| GET | /shipments/{ShipmentId}/rates |
listShipmentRates | List the rate quotes for a shipment |
| GET | /rates/{RateId} |
getRate | Get one rate quote |
| POST | /transactions |
buyShippingLabel | Buy a shipping label for a rate |
| GET | /transactions |
listShippingLabels | List shipping labels you bought |
| GET | /transactions/{TransactionId} |
getShippingLabel | Get a label: status, tracking number and label URL |
| GET | /tracks/{Carrier}/{TrackingNumber} |
getTrackingStatus | Track a package by carrier and tracking number |
| GET | /orders |
listOrders | List orders imported from your store |
| GET | /orders/{OrderId} |
getOrder | Get one order with its items and address |
| GET | /carrier_accounts |
listCarrierAccounts | List the carrier accounts you can ship with |
| GET | /user-parcel-templates |
listParcelTemplates | List your saved box sizes (parcel templates) |
| POST | /refunds |
refundShippingLabel | Request a refund for an unused label |
| GET | /refunds/{RefundId} |
getRefund | Check the status of a label refund |
Authentication
APIKeyHeader
API key — sent as the Authorization header
Shippo API token, sent as Authorization: ShippoToken <token>.
How to get a credential
- Sign up or log in at https://apps.goshippo.com.
- Open Settings > Advanced > API.
- Generate a token.
shippo_test_...tokens create test labels for free;shippo_live_...tokens buy real postage charged to your Shippo billing method. - Store the value as
ShippoToken <token>(the word ShippoToken, a space, then the token).
Permissions used
Shippo tokens carry full account access; there are no per-scope tokens.
| Token | Operations |
|---|---|
| Test or live | createAddress, validateAddress, createShipment, getShipment, listShipmentRates, getRate, getTrackingStatus, listOrders, getOrder, listCarrierAccounts, listParcelTemplates, listShippingLabels, getShippingLabel, getRefund |
| Live (charges money) | buyShippingLabel, refundShippingLabel |
Common errors
- 401 Unauthorized: the token is wrong or the
ShippoTokenprefix is missing. - 403 Forbidden: the account cannot use that carrier or feature yet (e.g. billing not set up for live labels).
- 400 Bad Request: missing or invalid address, parcel or rate fields; the response lists the field.
- 429 Too Many Requests: rate limited. Wait a few seconds and retry; test tokens have lower limits.
Save it in VX Agents as an API key credential for this spec.
Usage guide
Setup
- Credential: a Shippo API token stored as
ShippoToken <token>. Start with ashippo_test_token: test labels are free and not real. - Worth pinning: your sender address
object_id(create it once withcreateAddress) and your usual box (fromlistParcelTemplates).
Ship an order
- Optional:
listOrders/getOrderto get the recipient and items of a store order. createAddresswithvalidate: truefor the recipient, orvalidateAddresson a saved one. Look atvalidation_results.is_validand its messages; fix the address with the user before going on.createShipmentwithaddress_from,address_to(objects or object_ids) andparcels(length, width, height, distance_unit, weight, mass_unit). Leaveasyncfalse so theratescome back in the response.- Compare the rates (
provider,servicelevel.name,amount,currency,estimated_days).listShipmentRatesorgetRatere-reads them. - Show the user the chosen rate and price. Only after they confirm,
buyShippingLabelwithrate= the rateobject_id(andlabel_file_type, e.g.PDF_4x6). getShippingLabeluntilstatusisSUCCESS, then give the userlabel_urlandtracking_number. IfstatusisERROR, readmessages.getTrackingStatuswith the carrier token (e.g.usps,ups,fedex) and the tracking number for updates.
Good to know
- Ask before
buyShippingLabelandrefundShippingLabel: with a live token, buying a label charges your Shippo account. - Rates expire after a while. If buying fails because a rate is stale, run
createShipmentagain. refundShippingLabeltakestransaction= the labelobject_idand only works for unused labels. Track progress withgetRefund.- Weights and dimensions are strings ("2.5"). Times are ISO 8601 UTC. List calls page with
pageandresults. - With a test token, tracking only works with Shippo's predefined test tracking numbers (see the Tracking tutorial).
- Source: Shippo API reference (https://docs.goshippo.com/api-reference/overview), checked 2026-10-16.
How to use this spec
- Create a free VX Agents account (sandbox tools included).
- Open the marketplace and connect “Shippo Shipping Labels & Tracking” to an agent.
- Expose it as an MCP server for Claude/ChatGPT, or chat with it directly.