Ship an order
Use this endpoint to ship an order by updating its shipping details. You must include the shipDateTime
in UTC to record when the shipment occurred. This call updates the order's status to Shipped and triggers the customer charge.
Note: Orders must be acknowledged before shipping. Orders fulfilled by Walmart Fulfillment Services (WFS) cannot be shipped with this endpoint. Use the Create an inbound shipment order endpoint instead.
Endpoint
POST https://marketplace.walmartapis.com/v3/orders/{purchaseOrderId}/shipping
Sample response:
curl -X POST "https://marketplace.walmartapis.com/v3/orders/{purchaseOrderId}/shipping" \ -H "Authorization: Basic <Base64EncodedClientID:ClientSecret>" \ -H "WM_SVC.NAME: Walmart Marketplace" \ -H "WM_QOS.CORRELATION_ID: 0123456" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d '{ "orderLines": [ { "lineNumber": "1", "trackingInfo": { "shipDateTime": "2025-02-19T12:00:00Z", "carrierName": "CarrierX", "methodCode": "VALUE", "trackingNumber": "TRACKNUM12345", "trackingURL": "http://www.example.com/tracking?track_id=TRACKNUM12345" } } ] }'
import requests url = "https://marketplace.walmartapis.com/v3/orders/{purchaseOrderId}/shipping" headers = { "Authorization": "Basic <Base64EncodedClientID:ClientSecret>", "WM_SVC.NAME": "Walmart Marketplace", "WM_QOS.CORRELATION_ID": "0123456", "Accept": "application/json", "Content-Type": "application/json"
} data = { "orderLines": [ { "lineNumber": "1", "trackingInfo": { "shipDateTime": "2025-02-19T12:00:00Z", "carrierName": "CarrierX", "methodCode": "VALUE", "trackingNumber": "TRACKNUM12345", "trackingURL": "http://www.example.com/tracking?track_id=TRACKNUM12345" } } ]
} response = requests.post(url, headers=headers, json=data)
print(response.json())
Modify your code
- Replace
{purchaseOrderId}
in the endpoint URL with the actual order ID. - Substitute
<Base64EncodedClientID:ClientSecret>
with your Base64-encoded credentials. - Update
WM_QOS.CORRELATION_ID
with a unique identifier for tracking your request. - Adjust the
orderLines
payload as needed for your specific order. - Ensure
shipDateTime
is in UTC format.
Update an order after it ships
If you need to update shipping information after the order has already been marked as shipped, use the optional processMode
parameter. This allows post-shipment updates to tracking details as long as:
- The update is made within 24 hours of the original shipment submission, or
- The update is made before the carrier’s first touch scan is registered with Walmart, whichever comes first
This is helpful if tracking numbers or carrier details need to be corrected after the original shipment update.
processMode value | Description | Required |
---|---|---|
PARTIAL_UPDATE | Allows tracking updates after initial shipment | Optional |
Note: If you do not include processMode, the request is treated as a regular shipment update.
Sample response
{ "order": { "purchaseOrderId": "0123456789", "customerOrderId": "ABCDEFGHIJ", "sellerOrderId": "KLMNOPQRST", "customerEmailId": "[email protected]", "orderType": "PREORDER", "orderDate": 1478284060000, "shippingInfo": { "phone": "0123456789", "estimatedDeliveryDate": 1479798000000, "estimatedShipDate": 1478674800000, "methodCode": "VALUE", "postalAddress": { "name": "Jane Doe", "address1": "123 Main St", "city": "CITY", "state": "STATE", "postalCode": "ZIPCODE", "country": "COUNTRY", "addressType": "OFFICE" } }, "orderLines": { "orderLine": [ { "lineNumber": "1", "item": { "productName": "Example Product", "sku": "SKU12345" }, "charges": { "charge": [ { "chargeType": "PRODUCT", "chargeName": "ItemPrice", "chargeAmount": { "currency": "USD", "amount": 555 }, "tax": { "taxName": "Tax1", "taxAmount": { "currency": "USD", "amount": 48.56 } } } ] }, "orderLineQuantity": { "unitOfMeasurement": "EACH", "amount": "1" }, "statusDate": 1478297929000, "orderLineStatuses": { "orderLineStatus": [ { "status": "Shipped", "statusQuantity": { "unitOfMeasurement": "EACH", "amount": "1" }, "trackingInfo": { "shipDateTime": 1438163400000, "carrierName": { "carrier": "CarrierX" }, "methodCode": "VALUE", "trackingNumber": "TRACKNUM12345", "trackingURL": "http://www.example.com/tracking?track_id=TRACKNUM12345" }, "returnCenterAddress": { "name": "RETURNCENTER", "address1": "123 Bridge St", "city": "CITY", "state": "STATE", "postalCode": "ZIPCODE", "country": "COUNTRY", "dayPhone": "0123456789", "emailId": "[email protected]" } } ] } } ] } }
}
Result
If successful, the API returns an HTTP status: 200 OK
along with a JSON object showing the updated order details. The specified order lines will now be in the Shipped
status, confirming that the shipping details have been updated and the charge to the customer has been triggered.
Updated 4 days ago