Update inventory in bulk
Call the Feeds endpoint to update the inventory of multiple SKUs in a single API call.
Note: These POST endpoints are throttled. If you submit too many feeds too quickly, you might receive
HTTP 429responses. Use theRetry-Afterheader value before retrying.
See Marketplace rate limiting documentation.
There are two types of feeds available:
- Bulk item inventory update
Single ship node per file. Spec 1.4. JSON or XML. Ship node is optional. If omitted, Walmart uses your default virtual node. - MultiNode bulk inventory update
Multiple ship nodes per SKU. Spec 1.5. JSON only. Ship nodes are required for each SKU.
Once you submit a feed, you receive a feed ID in the response. You can then use the Feed Status API or the All Feed Statuses API to monitor the progress of your submission, including line-item level statuses.
Note: This page shows examples using only the required parameters and inputs for bulk inventory updates. For schema validation and additional options, see the Inventory API overview and the Marketplace Inventory API reference.
Validate your file
Validate your feed against the official schemas before you upload.
- JSON: spec 1.5 (MultiNode) and 1.4 (single node)
- XML: spec 1.4 (single node)
Download links are on the Inventory API overview.
Examples:
# JSON validation with ajv (install: npm i -g ajv-cli)
ajv validate -s InventoryFeed.json -d ./BulkInventoryFeed.json # XML validation (xmllint)
xmllint --noout --schema InventoryFeed.xsd ./BulkInventoryFeed.xml
Bulk item inventory update
Endpoint
POST https://marketplace.walmartapis.com/v3/feeds?feedType=inventory
Sample feed file
This file defines two SKUs with the corresponding inventory quantities and an available date. Replace placeholders with your actual data.
{ "InventoryHeader": { "version": "1.4" }, "Inventory": [ { "sku": "SKU_012345", "quantity": { "unit": "EACH", "amount": 10 }, "inventoryAvailableDate": "YYYY-MM-DD" }, { "sku": "SKU_678901", "quantity": { "unit": "EACH", "amount": 20 }, "inventoryAvailableDate": "YYYY-MM-DD" } ]
}
Sample request
This sample updates inventory for multiple SKUs at a single fulfillment center. If no ship node is provided, the update applies to the seller's default virtual node.
curl -X POST "https://marketplace.walmartapis.com/v3/feeds?feedType=inventory" -H "Authorization: Basic <Base64EncodedConsumerKey:ConsumerSecret>" -H "WM_SVC.NAME: Walmart Marketplace" -H "WM_QOS.CORRELATION_ID: 1234567890" -H "Accept: application/json" -F "file=@/path/to/BulkInventoryFeed.json"
import requests url = "https://marketplace.walmartapis.com/v3/feeds"
params = {"feedType": "inventory"} headers = { "Authorization": "Basic <Base64EncodedConsumerKey:ConsumerSecret>", "WM_SVC.NAME": "Walmart Marketplace", "WM_QOS.CORRELATION_ID": "1234567890", "Accept": "application/json",
} files = { "file": ("BulkInventoryFeed.json", open("/path/to/BulkInventoryFeed.json", "rb"), "application/json")
} response = requests.post(url, headers=headers, params=params, files=files)
print("Status code:", response.status_code)
print("Response JSON:", response.json())
Modify your code
- Replace
/path/to/BulkInventoryFeed.jsonwith the path to your JSON feed. - Insert your Base64-encoded credentials in the
Authorizationheader. - Set a unique
WM_QOS.CORRELATION_IDfor your request logs.
Sample response
{ "feedId": "0123456789abcdef"
}
MultiNode bulk inventory update
This feed updates the inventory of multiple items across multiple fulfillment centers. Specify the ship node for each item. If you do not include ship nodes, the feed fails.
Endpoint
POST https://marketplace.walmartapis.com/v3/feeds?feedType=MP_INVENTORY
Sample feed file
This file updates inventory for multiple SKUs across multiple fulfillment centers.
{ "inventoryHeader": { "version": "1.5" }, "inventory": [ { "sku": "SKU_012345", "shipNodes": [ { "shipNode": "SHIP_NODE_012345", "quantity": { "unit": "EACH", "amount": 100 } } ] }, { "sku": "SKU_678901", "shipNodes": [ { "shipNode": "SHIP_NODE_012345", "quantity": { "unit": "EACH", "amount": 21 } } ] }, { "sku": "SKU_234567", "shipNodes": [ { "shipNode": "SHIP_NODE_012345", "quantity": { "unit": "EACH", "amount": 13 } }, { "shipNode": "SHIP_NODE_345678", "quantity": { "unit": "EACH", "amount": 12 } } ] } ]
}
Sample request
curl -X POST "https://marketplace.walmartapis.com/v3/feeds?feedType=MP_INVENTORY" -H "Authorization: Basic <Base64EncodedConsumerKey:ConsumerSecret>" -H "WM_SVC.NAME: Walmart Marketplace" -H "WM_QOS.CORRELATION_ID: 1234567890" -H "Accept: application/json" -F "file=@/path/to/MultiNodeBulkInventoryFeed.json"
import requests url = "https://marketplace.walmartapis.com/v3/feeds"
params = {"feedType": "MP_INVENTORY"} headers = { "Authorization": "Basic <Base64EncodedConsumerKey:ConsumerSecret>", "WM_SVC.NAME": "Walmart Marketplace", "WM_QOS.CORRELATION_ID": "1234567890", "Accept": "application/json",
} files = { "file": ("MultiNodeBulkInventoryFeed.json", open("/path/to/MultiNodeBulkInventoryFeed.json", "rb"), "application/json")
} response = requests.post(url, headers=headers, params=params, files=files)
print("Status code:", response.status_code)
print("Response JSON:", response.json())
Modify your code
Replace /path/to/MultiNodeBulkInventoryFeed.json with the path to your JSON feed.
Sample response
{ "feedId": "0123456789abcdef"
}
Troubleshooting
- Invalid SKU (
422): The SKU is not in your catalog. Fix the SKU and upload again. - Unsupported media type (
415): ForMP_INVENTORY, send JSON only. Forinventory, send JSON or XML. - Missing file (
400): The multipart body must include afilefield. - Rate limited (
429): Wait the number of seconds inRetry-After, then retry.
Check the Feed Status API for line-item errors.
Result
After you submit a feed using either feed type, you receive a response that contains a feed ID.
Use the Feed Status API or the All Feed Statuses API to monitor your submission and see the line-item status for each inventory update.
Updated 2 days ago
