ShipEngine Rates, Labels & Tracking
Validate an address, compare rates across your connected carriers, buy the label from the rate you pick, and track the parcel until it lands. Built on ShipEngine's rate_id flow, with label voids for the shipments that never leave the warehouse.
Connect this API to an AI agent Browse all specs
What you can do with ShipEngine Rates, 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 |
|---|---|---|---|
| GET | /v1/carriers |
listCarriers | List connected carrier accounts and their carrier_id |
| GET | /v1/carriers/{carrier_id}/services |
listCarrierServices | List a carrier's shipping services (service codes) |
| GET | /v1/carriers/{carrier_id}/packages |
listCarrierPackageTypes | List a carrier's package types |
| POST | /v1/addresses/validate |
validateAddresses | Validate and normalise one or more addresses |
| POST | /v1/rates |
getRates | Get rate quotes for a shipment from selected carriers |
| POST | /v1/rates/estimate |
estimateRates | Quick price estimate from postal codes and weight |
| GET | /v1/rates/{rate_id} |
getRate | Get one rate quote by id |
| POST | /v1/labels/rates/{rate_id} |
purchaseLabelFromRate | Buy a shipping label for a chosen rate |
| GET | /v1/labels |
listLabels | List labels by status, carrier, date or tracking number |
| GET | /v1/labels/{label_id} |
getLabel | Get a label with its tracking number, cost and download links |
| GET | /v1/labels/{label_id}/track |
trackLabel | Track the package of a label bought in ShipEngine |
| GET | /v1/tracking |
trackPackage | Track any package by carrier code and tracking number |
| PUT | /v1/labels/{label_id}/void |
voidLabel | Void an unused label to request a refund |
Authentication
api_key
API key — sent as the API-Key header
ShipEngine API key, sent in the API-Key header.
How to get a credential
- Sign up or sign in at the ShipEngine dashboard (dashboard.shipengine.com).
- Open API Management.
- Copy a key:
TEST_...keys work in the sandbox and buy free test labels; production keys buy real labels billed to your carrier accounts. - Connect carriers (or use the included ShipEngine carrier accounts) under Carriers so rates come back.
Permissions used
| Access | Operations |
|---|---|
| Read carriers | listCarriers, listCarrierServices, listCarrierPackageTypes |
| Validate addresses | validateAddresses |
| Quote rates | getRates, estimateRates, getRate |
| Buy and void labels | purchaseLabelFromRate, voidLabel |
| Read labels and tracking | listLabels, getLabel, trackLabel, trackPackage |
ShipEngine keys are not scoped; any key can buy labels, so start with a TEST_ key.
Common errors
| Status | Meaning | Fix |
|---|---|---|
| 401 | Key missing, revoked or mistyped | Copy the key again from API Management |
| 403 | The account or carrier does not allow the action (e.g. insufficient carrier balance) | Add funds or connect the carrier in the dashboard |
| 400 | Invalid request, e.g. missing weight, bad postal code or an expired rate_id | Validate the address and request fresh rates |
| 404 | Unknown carrier_id, rate_id or label_id | Take ids from listCarriers, getRates or listLabels |
| 429 | Too many requests for your account's rate limit | Wait and retry with backoff |
Store the key as a VX Agents credential (API key in header) so it is never pasted into chats or prompts.
Usage guide
Setup
- Credential: a ShipEngine API key (dashboard > API Management), stored as a VX Agents API-key credential. Start with a
TEST_key: sandbox labels are free. - Worth pinning: your default
carrier_ids (fromlistCarriers) and your ship-from address.
Quote, buy and track a label
listCarriersfor the connected carrier accounts (carrier_id,carrier_code);listCarrierServices/listCarrierPackageTypesfor validservice_codeandpackage_codevalues.validateAddresseswith an array of addresses (address_line1,city_locality,state_province,postal_code,country_code). Use thematched_addressit returns.- Price it:
- rough number:
estimateRateswith from/to country and postal code, city, state andweight; - real quote:
getRateswithrate_options.carrier_idsand ashipmentholdingship_from,ship_toandpackages(each withweight{value, unit}and optionaldimensions).
- rough number:
- Show the user the carrier, service, delivery days and total (
shipping_amount+other_amount) and get an explicit yes, thenpurchaseLabelFromRatewith therate_id(optionallabel_formatpdf/png/zpl,label_layout4x6 or letter). getLabelfor the tracking number andlabel_downloadlinks;listLabelsto find earlier labels by status, date or tracking number.- Track:
trackLabelwith thelabel_id, ortrackPackagewithcarrier_code+tracking_numberfor any parcel. - Not shipping after all? Confirm, then
voidLabelto request the refund.
Good to know
- Rates expire: buy soon after quoting, or quote again if
purchaseLabelFromRatereturns 400 or 404 for therate_id. - Weights are
{value, unit}withpound,ounce,gramorkilogram; dimensions useinchorcentimeter. Country codes are ISO 3166-1 alpha-2 (US,CA). getRateshere covers domestic parcels: customs, advanced options and return addresses were left out to keep the tool small, so quote international shipments in the ShipEngine dashboard.- Ids are prefixed strings:
se-123456for carriers, rates and labels. - Buying a label spends money on your carrier account and voiding changes it: always confirm with the user first.
getRates,estimateRatesandvalidateAddressesare POST requests but do not buy anything.
Source: ShipEngine API reference (https://www.shipengine.com/docs/reference/), checked 2026-10-16.
How to use this spec
- Create a free VX Agents account (sandbox tools included).
- Open the marketplace and connect “ShipEngine Rates, Labels & Tracking” to an agent.
- Expose it as an MCP server for Claude/ChatGPT, or chat with it directly.