Authenticate using HTTP Basic Auth with your ShipStation API key and API secret (found in your account settings) on all requests to `https://ssapi.shipstation.com`.
Create an order by POSTing to `/orders/createorder` with the order payload including `orderNumber`, `orderDate`, `orderStatus`, `billTo`, `shipTo`, and `items` array; an existing order with the same `orderNumber` is updated rather than duplicated.
To purchase a label, POST to `/orders/fulfillorder` with `orderId`, `carrierCode`, `serviceCode`, `packageCode`, `weight`, and optionally `dimensions`; the response includes the label URL and tracking number.
Alternatively, get rate quotes first by POSTing to `/shipments/getrates` with carrier, service, weight, and address details, then use the selected service code in the fulfill call.
Download the label PDF or PNG from the `labelData` (base64) field in the response or from the `labelDownload` URL.
Mark the order as shipped automatically when a label is purchased, or manually via a status update if using external fulfillment.
Known gotchas
The `orderNumber` field is used as a natural key — sending the same `orderNumber` again updates the existing order in place, which is useful for sync but can cause accidental overwrites if order numbers are reused across channels.
Carrier and service codes are account-specific (based on your connected carrier accounts in ShipStation) — codes that work in one account may not exist in another; fetch available carriers via the `/carriers` endpoint.
ShipStation enforces rate limits per API key; applications processing high order volumes should implement a queue and respect the `X-Rate-Limit-Remaining` and `X-Rate-Limit-Reset` response headers.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp