Ship order lines

Use this endpoint to ship an order by updating its shipping details. You must include the shipDateTime 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

Function

Use this API to provide shipment details such as:

  • Order line number
  • Shipment status
  • Shipped quantity
  • Carrier name
  • Shipping method
  • Tracking number
  • Tracking URL
  • Ship date and time
  • Return center address, when applicable

Sample request

This request marks an order line as shipped and includes required tracking information.

The carrierName field in trackingInfo must exactly match one of the supported carrier names. Refer to the Supported carrier names page for a full list of carrier names and ensure your value is accepted

url -X 'POST' 'https://sandbox.walmartapis.com/v3/orders/3213/shipping' -H 'accept: application/json' -H 'WM_SEC.ACCESS_TOKEN: eyJraWQiOiIzZjVhYTFmNS1hYWE5LTQzM.....' -H 'WM_QOS.CORRELATION_ID: b3261d2d-028a-4ef7-8602-633c23200af6' -H 'WM_SVC.NAME: Walmart Service Name' -H 'Content-Type: application/xml' -d '<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <orderShipment xmlns="http://walmart.com/mp/v3/orders"> <orderLines> <orderLine> <lineNumber>1</lineNumber> <intentToCancelOverride>false</intentToCancelOverride> <orderLineStatuses> <orderLineStatus> 
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

Use the request sample as the starting point for your integration. Before submitting the request, update the following values in your code:

  • Replace the purchase order ID in the endpoint path with the order you want to ship. In the sample, the purchase order ID is 3213.
  • Replace the access token in the WM_SEC.ACCESS_TOKEN header with a valid access token for your Walmart Marketplace account.
  • Generate a unique WM_QOS.CORRELATION_ID value for each request so the transaction can be traced.
  • Confirm that WM_SVC.NAME uses the service name required for your integration.
  • Keep Content-Type: application/xml because the request body is submitted as XML.
  • In the XML body, update the order line and shipment details to match the order line you are shipping. The request should include the correct line number, shipped quantity, carrier, method code, tracking number, tracking URL, and ship date where required.

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 valueDescriptionRequired
PARTIAL_UPDATEAllows tracking updates after initial shipmentOptional

Note: If you do not include processMode, the request is treated as a regular shipment update.

Sample response

application/json

200

{ "order": { "purchaseOrderId": "1234567891234", "customerOrderId": "9876543212345", "sellerOrderId": "13233454564657", "customerEmailId": "[email protected]", "orderType": "PREORDER", "orderDate": 1478284060000, "shippingInfo": { "phone": "6501234567", "estimatedDeliveryDate": 1479798000000, "estimatedShipDate": 1478674800000, "methodCode": "Value", "postalAddress": { "name": "Jane Doe", "address1": "123 Main street", "city": "Sunnyvale", "state": "CA", "postalCode": "94086", "country": "USA", "addressType": "OFFICE" } }, "orderLines": { "orderLine": [ { "lineNumber": "1", "item": { "productName": "Kenmore CF-1 or 20-86883 Canister Secondary Filter Generic 2 Pack", "sku": "wei-ASSET-675gku675" }, "charges": { "charge": [ { "chargeType": "PRODUCT", "chargeName": "ItemPrice", "chargeAmount": { "currency": "USD", "amount": 555 }, "tax": { "taxName": "Tax1", "taxAmount": { "currency": "USD", "amount": 48.56 } }, "taxAndOtherFees": { "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": "FedEx" }, "methodCode": "Value", "trackingNumber": "911001572321619861", "trackingURL": "http://www.fedex.com/Tracking?action=track=english=us=x=911001572321619861" }, "returnCenterAddress": { "name": "ABC", "address1": "123 Bridge street", "city": "Huntsville", "state": "AL", "postalCode": "35805", "country": "USA", "dayPhone": "6501234567", "emailId": "[email protected]" } } ] } } ] } }
}

400

{ "errors": [ { "code": "INVALID_REQUEST_CONTENT.GMP_ORDER_API", "description": "Invalid request content.", "info": "Request content is not valid.", "severity": "ERROR", "category": "DATA" } ]
}

401

{ "errors": [ { "code": "UNAUTHORIZED.GMP_ORDER_API", "description": "Unauthorized request.", "info": "Authentication failed. Verify your credentials.", "severity": "ERROR", "category": "APPLICATION" } ]
}

403

{ "errors": [ { "code": "FORBIDDEN.GMP_ORDER_API", "description": "Access denied.", "info": "You do not have permission to perform this action.", "severity": "ERROR", "category": "APPLICATION" } ]
}

404

{ "errors": [ { "code": "NOT_FOUND.GMP_ORDER_API", "description": "Resource not found.", "info": "The requested purchase order was not found.", "severity": "ERROR", "category": "DATA" } ]
}

429

{ "errors": [ { "code": "RATE_LIMIT_EXCEEDED.GMP_ORDER_API", "description": "Too many requests.", "info": "Rate limit exceeded. Retry after the specified time.", "severity": "ERROR", "category": "APPLICATION" } ]
}

500

{ "errors": [ { "code": "INTERNAL_SERVER_ERROR.GMP_ORDER_API", "description": "An internal server error occurred.", "info": "Retry the request. If the issue persists, contact support.", "severity": "ERROR", "category": "SYSTEM" } ]
}

application/xml

200

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<order xmlns:ns2="http://walmart.com/mp/orders" xmlns:ns3="http://walmart.com/mp/v3/orders" xmlns:ns4="http://walmart.com/"> <purchaseOrderId> 2575193093772 </purchaseOrderId> <customerOrderId> 4021603841173 </customerOrderId> <customerEmailId> [email protected] </customerEmailId> <orderType> PREORDER </orderType> <orderDate> 2016-05-11T22:55:28.000Z </orderDate> <shippingInfo> <phone> 6502248603 </phone> <estimatedDeliveryDate> 2016-05-20T17:00:00.000Z </estimatedDeliveryDate> <estimatedShipDate> 2016-05-16T17:00:00.000Z </estimatedShipDate> <methodCode> Standard </methodCode> <postalAddress> <name> Joe Doe PGOMS </name> <address1> 860 W Cal Ave </address1> <address2> Seat # 860C.2.176 </address2> <city> Sunnyvale </city> <state> CA </state> <postalCode> 94086 </postalCode> <country> USA </country> <addressType> RESIDENTIAL </addressType> </postalAddress> </shippingInfo> <orderLines> <orderLine> <lineNumber> 2 </lineNumber> <item> <productName> Garmin Refurbished nuvi 2595LMT 5 GPS w Lifetime Maps and Traffic </productName> <sku> GRMN100201 </sku> </item> <charges> <charge> <chargeType> PRODUCT </chargeType> <chargeName> ItemPrice </chargeName> <chargeAmount> <currency> USD </currency> <amount> 124.98 </amount> </chargeAmount> <tax> <taxName> Tax1 </taxName> <taxAmount> <currency> USD </currency> <amount> 10.93 </amount> </taxAmount> </tax> </charge> </charges> <orderLineQuantity> <unitOfMeasurement> EACH </unitOfMeasurement> <amount> 1 </amount> </orderLineQuantity> <statusDate> 2016-06-03T23:44:41.000Z </statusDate> <orderLineStatuses> <orderLineStatus> <status> Shipped </status> <statusQuantity> <unitOfMeasurement> EACH </unitOfMeasurement> <amount> 1 </amount> </statusQuantity> <trackingInfo> <shipDateTime> 2016-06-27T05:30:15.000Z </shipDateTime> <carrierName> <carrier> FedEx </carrier> </carrierName> <methodCode> Standard </methodCode> <trackingNumber> 12333634122 </trackingNumber> <trackingURL> http://www.fedex.com </trackingURL> </trackingInfo> </orderLineStatus> </orderLineStatuses> </orderLine> </orderLines>
</order>

application/problem+json

400 - SWW Label Failed -Hazmat Item Ineligible For USPS Priority Mail (Non-Retryable, LS-1010)

{ "type": "https://developer.walmart.com/errors/sww-label-failure", "title": "SWW label creation failed", "status": 400, "detail": "Your shipment contains dangerous goods or hazardous material that cannot be shipped with priority services. Select another service to ship this order, or submit a third-party tracking number.", "instance": "/v3/orders/{purchaseOrderId}/shipping"
}

400 - SWW Label Failed – OOC Enrolled Seller Missing Required Fields (Non-Retryable, LH 4022)

{ "type": "https://developer.walmart.com/errors/sww-label-failure", "title": "SWW label creation failed", "status": 400, "detail": "A Ship With Walmart label cannot be generated for this shipment. The seller is enrolled in Out Of Country (Cross Border Trade) but required fields (Harmonized System code, country of origin, or product URL) are missing or are invalid. Correct the order details or submit a third-party tracking number.", "instance": "/v3/orders/{purchaseOrderId}/shipping"
}

401

{ "type": "string", "title": "string", "status": 0, "detail": "string", "instance": "string"
}

403

{ "type": "string", "title": "string", "status": 0, "detail": "string", "instance": "string"
}

404

{ "type": "string", "title": "string", "status": 0, "detail": "string", "instance": "string"
}

429

{ "type": "string", "title": "string", "status": 0, "detail": "string", "instance": "string"
}

500 - SWW Label Failed -Carrier API Failure For This Cross Border Trade Order (Retryable, LS-3101)

{ "type": "https://developer.walmart.com/errors/sww-label-failure/retryable", "title": "SWW label creation failed — Retryable", "status": 500, "detail": "SWW label cannot be generated for this Cross Border Trade order due to a carrier API failure. This error may be transient so try again. If the error persists, submit a third-party tracking number.", "instance": "/v3/orders/{purchaseOrderId}/shipping"
}

500 - SWW Label Failed – The Shipment Is Ineligible For The Cross Border Trade Carrier Label (Non-Retryable, LS-3101)

{ "type": "https://developer.walmart.com/errors/sww-label-failure/non-retryable", "title": "SWW label creation failed — Non-Retryable", "status": 500, "detail": "SWW label cannot be generated for this Cross Border Trade enrolled order. Eligible reasons: carrier ineligibility, hazmat restrictions, or shipment dimensions exceeding carrier limits. Submit a third-party tracking number.", "instance": "/v3/orders/{purchaseOrderId}/shipping"
}

Result

A successful 200 response confirms that the shipment update was accepted and the order was updated. The response returns the purchase order, customer order, shipping information, order lines, item details, quantity, shipment status, carrier, shipping method, tracking number, and tracking URL.

In the JSON 200 response sample, order line 1 is returned with the status Shipped. The tracking information shows FedEx as the carrier, Value as the shipping method, and includes a tracking number and tracking URL.

In the XML 200 response sample, order line 2 is returned with the status Shipped. The tracking information shows FedEx as the carrier, Standard as the shipping method, and includes a tracking number and tracking URL.

For error responses, use the response status and error body to determine the next action:

  • 400: The request content is invalid, or Ship With Walmart label creation failed because the shipment is not eligible or required fields are missing.

  • 401: Authentication failed. Verify the access token and credentials.

  • 403: Access is denied. Confirm that the account has permission to ship the order.

  • 404: The purchase order was not found. Confirm that the purchase order ID is correct.

  • 425 or 429: The request was rate limited. Retry after the specified time or apply backoff logic.

  • 500: A system error occurred, or Ship With Walmart label creation failed. Retry when the error is retryable. For non-retryable shipment eligibility errors, submit a third-party tracking number.


Did this page help you?