POST /api/shipments/v1/ship with a 'Shipment' body that includes a 'Package' array with multiple package objects; each package element specifies its own 'PackageWeight', 'Dimensions', and 'PackagingType'.
Set 'NumOfPiecesInShipment' at the shipment level to the total number of packages; this is required for multi-piece shipments and used by UPS for manifest purposes.
The response 'ShipmentResults.PackageResults' will be an array with one entry per package, each containing its own 'TrackingNumber' and 'ShippingLabel.GraphicImage'.
The 'ShipmentResults.ShipmentIdentificationNumber' is the master tracking number for the entire multi-piece shipment; store this along with individual package tracking numbers.
When generating end-of-day manifests or ScanForms, use the master shipment identifier to reference all packages together.
Known gotchas
Each package in a multi-piece shipment gets its own tracking number but they are linked under the master identifier; tracking each package separately is supported.
Weight and dimension limits apply per package, not per shipment; if any individual package exceeds UPS limits, the entire shipment request will be rejected.
The order of packages in the response array may not match the order submitted; match packages to their labels by tracking number, not by array index.
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