Channels
List channels
Request
curl -G https://YOUR_DOMAIN/api/channels \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Create an Amazon channel connection invitation
Required attributes
- Name
marketplace- Type
- string
- Description
- The Amazon marketplace identifier to connect ATVPDKIKX0DER
- Name
redirect_url- Type
- string
- Description
- The URL to redirect the merchant to after they successfully connect their Amazon channel https://app.example.com/channels/connected
Optional attributes
- Name
nickname- Type
- string
- Description
- An optional nickname for the channel
Request
curl -X POST https://YOUR_DOMAIN/api/channels/amazon/connection-invitation \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"marketplace": "ATVPDKIKX0DER",
"nickname": "string",
"redirect_url": "https://app.example.com/channels/connected"
}'Show a channel
Get a single channel by its ID. Used to populate the channel edit page.
Required attributes
- Name
channel- Type
- integer
- Description
- The ID of the channel 1
Request
curl -G https://YOUR_DOMAIN/api/channels/{channel} \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Delete a channel
Delete a channel and its associated listings, listing-product links, and Amazon feeds.
Required attributes
- Name
channel- Type
- integer
- Description
- The ID of the channel 1
Request
curl -X DELETE https://YOUR_DOMAIN/api/channels/{channel} \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Activate a channel
Mark a channel as active. Used on the channel edit page.
Required attributes
- Name
channel- Type
- integer
- Description
- The ID of the channel 1
Request
curl -G https://YOUR_DOMAIN/api/channels/{channel}/activate \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Deactivate a channel
Deactivate a channel, setting its connection status to `unauthorized`. Used on the channel edit page.
Required attributes
- Name
channel- Type
- integer
- Description
- The ID of the channel 1
Request
curl -G https://YOUR_DOMAIN/api/channels/{channel}/deactivate \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Create an Amazon channel
Create a new Amazon channel for the current merchant. The channel is created in an unauthorized state; use the authorize-url endpoint to begin the OAuth flow.
Required attributes
- Name
marketplace- Type
- string
- Description
- The Amazon marketplace identifier to connect ATVPDKIKX0DER
Optional attributes
- Name
nickname- Type
- string
- Description
- An optional nickname for the channel Amazon Store
Request
curl -X POST https://YOUR_DOMAIN/api/channels/amazon \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"marketplace": "ATVPDKIKX0DER",
"nickname": "Amazon Store"
}'Update an Amazon channel
Update an Amazon channel's nickname and marketplace. Changing the marketplace disconnects the channel and sets its connection status to `unauthorized`, requiring re-authorization.
Required attributes
- Name
channel- Type
- integer
- Description
- The ID of the Amazon channel 1
- Name
marketplace- Type
- string
- Description
- The Amazon marketplace identifier ATVPDKIKX0DER
Optional attributes
- Name
nickname- Type
- string
- Description
- An optional nickname for the channel Amazon Store
Request
curl -X PUT https://YOUR_DOMAIN/api/channels/amazon/{channel} \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"marketplace": "ATVPDKIKX0DER",
"nickname": "Amazon Store"
}'Get the Amazon channel authorize URL
Return the Amazon OAuth URL to redirect the merchant to in order to authorize the channel. This is the real "authorize" step of connecting an Amazon channel.
Required attributes
- Name
channel- Type
- integer
- Description
- The ID of the Amazon channel 1
Request
curl -G https://YOUR_DOMAIN/api/channels/amazon/{channel}/authorize-url \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"List Amazon marketplaces
Return the list of Amazon marketplaces that a channel can be connected to.
Request
curl -G https://YOUR_DOMAIN/api/channels/amazon/marketplaces \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Show a Amazon catalog item's landed-price analytics
Summarises daily UTC landed-price observations of the Amazon New featured offer for one Amazon catalog item into calendar buckets over [start, end). Catalog prices are global per platform, so no listing, channel or merchant link is needed; the caller needs listings:view on the narrated account. A uuid that is not an existing Amazon catalog item returns 404. Days are UTC calendar days, weeks start on Monday and months on the first. Edge buckets are clipped to the range. Each observed currency is its own series; an item with no observations in the range returns an empty series array. Averages are per observation, not time-weighted, and the current UTC day may still gain observations.
Required attributes
- Name
catalog_item_uuid- Type
- string
- Description
- The Amazon catalog item's uuid 019b2286-9fee-8019-9f64-154824d3aa4d
- Name
start- Type
- string
- Description
- First UTC day to include, as YYYY-MM-DD with a four-digit AD year from 0001 to 9999. 2026-09-28
- Name
end- Type
- string
- Description
- UTC day after the last day to include, as YYYY-MM-DD with a four-digit AD year from 0001 to 9999. Must be after start, at most 731 days later. 2026-10-03
- Name
granularity- Type
- string
- Description
- Bucket size: UTC calendar day, Monday-start week, or calendar month. week
Request
curl -G https://YOUR_DOMAIN/api/channels/amazon/catalog-items/{catalog-item-uuid}/prices \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Index an Amazon channel's listing inventory levels
Returns one entry per stored AFN or MFN level, so one listing can have two entries. Listings without inventory are omitted and `total` counts levels. Values are retained until replaced: `synced_at` is the source-request time and exposes staleness, while nullable `reported_at` is a legacy vendor timestamp and is not freshness. AFN and MFN may have different ages. This read-only request does not fetch Amazon, inactive channels remain readable, and replica reads may lag recent writes slightly.
Required attributes
- Name
channel- Type
- integer
- Description
- The ID of the Amazon channel 1
Optional attributes
- Name
q- Type
- string
- Description
- Search language filter for `listing_id`, `sku`, and `fulfillment_network`. Clauses can be combined with `AND` or `OR`; fragments the search-language parser does not recognize are ignored, while recognized clauses must use a supported field and valid value. Unknown network values simply return no rows. Example: `sku~"WIDGET" AND fulfillment_network:"afn"`
- Name
sorts- Type
- array<Sort>
- Description
- Up to two requested sorts. Defaults to listing_id ascending then fulfillment_network ascending. Requested priorities are normalized and those same tie-breakers are appended, keeping page boundaries stable even for equal SKU or synced_at values. Example: `sorts[0][field]=synced_at&sorts[0][direction]=desc&sorts[0][order]=1`.
- Name
page- Type
- integer
- Description
- 1
- Name
per_page- Type
- integer
- Description
- 25
Request
curl -G https://YOUR_DOMAIN/api/channels/amazon/{channel}/inventory-levels \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Create a custom channel
Create a new custom channel for the current merchant. Custom channels are created in an active state.
Required attributes
- Name
nickname- Type
- string
- Description
- A nickname for the channel My Custom Channel
Request
curl -X POST https://YOUR_DOMAIN/api/channels/custom \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"nickname": "My Custom Channel"
}'Update a custom channel
Update a custom channel's nickname.
Required attributes
- Name
channel- Type
- integer
- Description
- The ID of the custom channel 1
- Name
nickname- Type
- string
- Description
- A nickname for the channel My Custom Channel
Request
curl -X PUT https://YOUR_DOMAIN/api/channels/custom/{channel} \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"nickname": "My Custom Channel"
}'Create a Walmart channel
Create a new Walmart channel for the current merchant. The channel is created in an unauthorized state; use the authorize-url endpoint to begin the OAuth flow.
Required attributes
- Name
marketplace- Type
- string
- Description
- The Walmart marketplace to connect us
Optional attributes
- Name
nickname- Type
- string
- Description
- An optional nickname for the channel Walmart Store
Request
curl -X POST https://YOUR_DOMAIN/api/channels/walmart \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"marketplace": "us",
"nickname": "Walmart Store"
}'Get the Walmart channel authorize URL
Return the Walmart OAuth URL to redirect the merchant to in order to authorize the channel. This is the real "authorize" step of connecting a Walmart channel.
Required attributes
- Name
channel- Type
- integer
- Description
- The ID of the Walmart channel 1
Optional attributes
- Name
walmart_callback_uri- Type
- string
- Description
- The Walmart authorization endpoint to redirect to, as handed to us by the App Store-initiated connect flow. Must be an allow-listed Walmart host. https://login.account.wal-mart.com/authorize
Request
curl -G https://YOUR_DOMAIN/api/channels/walmart/{channel}/authorize-url \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Index a Walmart channel's feeds
The feeds submitted to Walmart for this channel, newest first, with their processing status.
Required attributes
- Name
channel- Type
- integer
- Description
- The ID of the Walmart channel 1
Optional attributes
- Name
feed_type- Type
- string
- Description
- Only feeds of this type
- Name
page- Type
- integer
- Description
- The page number to retrieve (1-indexed) 1
- Name
per_page- Type
- integer
- Description
- The number of items per page 15
Request
curl -G https://YOUR_DOMAIN/api/channels/walmart/{channel}/feeds \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Index a Walmart channel's listing inventory levels
One entry per listing of the channel, with the last WFS and ship-node levels stored for it. Listings with no stored level are included with `wfs: null` and an empty `ship_nodes`; missing levels are not zero. Every quantity Walmart did not report is null, and zero is only returned when Walmart reported zero. WFS and ship-node levels are synced from separate Walmart requests, so each carries its own `synced_at` (the time of that request) and they can be of different ages. Levels are retained until a later sync replaces them, so an old `synced_at` means the level may no longer be current; the levels are not a guarantee of current stock or a complete catalogue. WFS and ship-node quantities may describe the same units and must not be added together. Nothing is fetched from Walmart by this request. Reads may lag recent writes slightly. Inactive channels remain readable.
Required attributes
- Name
channel- Type
- integer
- Description
- The ID of the Walmart channel 1
Optional attributes
- Name
q- Type
- string
- Description
- Search language filter. Supported fields: `listing_id` (integer; `:`, `!:`, `>`, `>=`, `<`, `<=`) and `sku` (string; `:`, `!:`, `~`, `!~`). Substring matches require at least 3 characters. Clauses can be combined with `AND` / `OR`. Any other field or operator is rejected with a 422. Example: `sku~"WIDGET" AND listing_id>"100"`
- Name
sorts- Type
- array<Sort>
- Description
- Sort the results. Defaults to `listing_id` ascending; unless `listing_id` is sorted explicitly, `listing_id` ascending is applied last so listings with the same SKU keep a stable order. Example: `sorts[0][field]=sku&sorts[0][direction]=desc&sorts[0][order]=1`
- Name
page- Type
- integer
- Description
- The page number to retrieve (1-indexed) 1
- Name
per_page- Type
- integer
- Description
- The number of listings per page 25
Request
curl -G https://YOUR_DOMAIN/api/channels/walmart/{channel}/inventory-levels \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Refresh a Walmart listing's stored inventory levels
Requires listings:update. Fetches fresh WFS inventory and inventory across all ship nodes for the listing's Walmart SKU (channel_identifier), then saves the reported levels together and returns the stored values. Both Walmart lookups must succeed before either source is saved. An inactive or disconnected channel is rejected. Quantities Walmart omits remain null; zero is stored only when Walmart reports zero. Previously stored WFS or ship-node levels omitted from a successful response are retained with their original synced_at. Newer stored observations are not overwritten. Each source carries the time its lookup began. WFS and ship-node quantities may describe the same units and must not be added together. The response is read from the primary database.
Required attributes
- Name
channel- Type
- integer
- Description
- The ID of the Walmart channel
- Name
listing- Type
- integer
- Description
- The ID of a listing belonging to this channel
Request
curl -X POST https://YOUR_DOMAIN/api/channels/walmart/{channel}/inventory-levels/{listing}/refresh \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Refresh a Walmart listing's stored seller price
Requires listings:update. Fetches the item for the listing's Walmart SKU (channel_identifier) and saves its reported price and item facts. Returns the stored price from the primary database. The price is the seller's own offer price. An inactive or disconnected channel is rejected. Empty responses and missing or unparseable prices retain the previous observation, including synced_at; without stored details, price and synced_at are null. Zero is stored only when Walmart reports zero. Newer stored details are not overwritten. synced_at is the time the lookup began. Catalogue links and WFS enrolment are preserved.
Required attributes
- Name
channel- Type
- integer
- Description
- The ID of the Walmart channel
- Name
listing- Type
- integer
- Description
- The ID of a listing belonging to this channel
Request
curl -X POST https://YOUR_DOMAIN/api/channels/walmart/{channel}/listings/{listing}/price/refresh \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"List Walmart product types
Walmart's product type taxonomy for a feed type, flattened to one row per product type, for a product type picker. Read from Walmart's `GET /v3/items/taxonomy` (https://developer.walmart.com/us-marketplace/reference/gettaxonomyresponse) and cached for 24 hours per marketplace and feed type. For an existing Walmart item, the product type it is listed under is authoritative; see `walmart.live_item.product_type` on the listing.
Required attributes
- Name
channel- Type
- integer
- Description
- The ID of the Walmart channel 1
- Name
feed_type- Type
- string
- Description
- The item spec feed type whose taxonomy to return
Request
curl -G https://YOUR_DOMAIN/api/channels/walmart/{channel}/taxonomy \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Show a Walmart feed
One feed with Walmart's result for each item in it. Items are empty until the feed is processed.
Required attributes
- Name
walmart_feed- Type
- string
- Description
- The feed's uuid 019b2286-9fee-71de-9f64-154824d3aa4d
Request
curl -G https://YOUR_DOMAIN/api/channels/walmart/feeds/{walmart-feed} \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Show a Walmart catalog item's landed-price analytics
Summarises daily UTC landed-price observations of the Walmart buy box for one Walmart catalog item into calendar buckets over [start, end). Catalog prices are global per platform, so no listing, channel or merchant link is needed; the caller needs listings:view on the narrated account. A uuid that is not an existing Walmart catalog item returns 404. Days are UTC calendar days, weeks start on Monday and months on the first. Edge buckets are clipped to the range. Each observed currency is its own series; an item with no observations in the range returns an empty series array. Averages are per observation, not time-weighted, and the current UTC day may still gain observations.
Required attributes
- Name
catalog_item_uuid- Type
- string
- Description
- The Walmart catalog item's uuid 019b2286-9fee-80ea-9f64-154824d3aa4d
- Name
start- Type
- string
- Description
- First UTC day to include, as YYYY-MM-DD with a four-digit AD year from 0001 to 9999. 2026-09-28
- Name
end- Type
- string
- Description
- UTC day after the last day to include, as YYYY-MM-DD with a four-digit AD year from 0001 to 9999. Must be after start, at most 731 days later. 2026-10-03
- Name
granularity- Type
- string
- Description
- Bucket size: UTC calendar day, Monday-start week, or calendar month. week
Request
curl -G https://YOUR_DOMAIN/api/channels/walmart/catalog-items/{catalog-item-uuid}/prices \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Set up a listing on Walmart
Set up the listing's SKU as an offer on an item already in Walmart's catalogue ("setup by match", the `MP_ITEM_MATCH` feed). Walmart processes the feed asynchronously: the listing is marked submitted, and the returned feed reports the outcome through the Walmart feeds endpoints. When the feed finishes, the listing becomes synced (with its WPID) or unsynced.
Required attributes
- Name
listing- Type
- integer
- Description
- The ID of a listing on a Walmart channel 1
- Name
gtin- Type
- string
- Description
- The GTIN, UPC or EAN of the Walmart catalogue item to match (8, 12, 13 or 14 digits) 012345678905
- Name
price- Type
- number
- Description
- The offer price, in the channel's marketplace currency 19.99
Optional attributes
- Name
shipping_weight_lb- Type
- number
- Description
- The shipping weight in pounds. Defaults to the listing's weight; required when the listing has none. 1.5
- Name
condition- Type
- string
- Description
- The item condition. Defaults to `New`. New
Request
curl -X POST https://YOUR_DOMAIN/api/channels/walmart/listings/{listing} \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"gtin": "012345678905",
"price": 19.99,
"shipping_weight_lb": 1.5,
"condition": "New"
}'Update listing attributes on Walmart
Requests partial product content and offer attribute updates for an existing United States Walmart listing through an MP_MAINTENANCE feed. Include only attributes to update, using Walmart attribute names inside orderable and visible. The listing SKU is supplied automatically; gtin defaults to the linked catalogue item. Walmart validates category-specific attributes asynchronously. The returned feed tracks submission and item-level errors. The local listing status and content are not changed by this request. WFS trade item and supply chain fields require WFS item setup instead. For dedicated SKU-based price and MSRP updates without a GTIN, use PATCH /channels/walmart/listings/{listing}/price, which submits PRICE_AND_PROMOTION.
Required attributes
- Name
listing- Type
- integer
- Description
- The ID of a listing on a Walmart channel 1
Optional attributes
- Name
gtin- Type
- string
- Description
- GTIN, UPC or EAN (8, 12, 13 or 14 digits). Defaults to the linked Walmart catalogue GTIN. Required when the listing has no catalogue GTIN. For restored or GTIN-exempt items, use the identifier Walmart assigned to the existing item. 012345678905
- Name
product_type- Type
- string
- Description
- The Walmart product type that keys visible. Defaults to the product type Walmart lists the item under; when supplied it must equal that product type. Ignored without visible. T-Shirts
- Name
visible- Type
- object
- Description
- Product content attributes for the item's product type, using Walmart names (for example productName, shortDescription, mainImageUrl, productSecondaryImageURL, keyFeatures and category attributes). condition cannot be changed: it may only restate the live item's condition (`walmart.live_item.condition`), otherwise 422, and only for a product type whose spec has a condition attribute (many have none, such as Battle Ropes and Baby Blankets, and then any condition is refused as an attribute the product type does not have). Must meet Walmart's item spec for the product type: carry every attribute in `required` from GET /channels/walmart/listings/{listing}/content-requirements, plus any the spec requires for another attribute's value (for example warrantyText when has_written_warranty is "Yes - Warranty Text"), with each value meeting its spec rules (type, length, allowed values, item counts); no feed is sent otherwise. {"productName":"Updated product title","keyFeatures":["Updated feature"]}
- Name
orderable- Type
- object
- Description
- Offer attributes using Walmart names (for example price, ShippingWeight, startDate, endDate and stateRestrictions). sku, productIdentifiers, specProductType, condition, skuUpdate and productIdUpdate are reserved and must be omitted. Use the dedicated /price endpoint for pricing-only updates. {"price":19.99,"ShippingWeight":1.5}
Request
curl -X PATCH https://YOUR_DOMAIN/api/channels/walmart/listings/{listing} \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"gtin": "012345678905",
"product_type": "T-Shirts",
"visible": {
"productName": "Updated product title",
"keyFeatures": [
"Updated feature"
]
},
"orderable": {
"price": 19.99,
"ShippingWeight": 1.5
}
}'Update a Walmart listing price and MSRP
Queues a PRICE_AND_PROMOTION feed for an existing listing on a connected United States Walmart channel. Requires ListingsUpdate permission and the listing must belong to the current merchant and service provider context. The listing SKU is supplied automatically; no GTIN, catalogue link or product type is required. Supply a price and optionally msrp. Uses Walmart pricing specification 2.0.20240126-12_25_52-api with MPItem[].Promo&Discount. A 202 response means queued, not applied: monitor GET /channels/walmart/feeds/{walmart_feed} for submission and item-level ingestion errors. Filter channel feeds with feed_type=PRICE_AND_PROMOTION. The local listing status and content are unchanged. Promotion creation and deletion are not supported by this endpoint. Walmart reference: https://developer.walmart.com/us-marketplace/docs/update-bulk-prices.
Required attributes
- Name
listing- Type
- integer
- Description
- The ID of a listing on a Walmart channel 1
- Name
price- Type
- number
- Description
- Selling price in USD, greater than zero, with at most two decimal places. Numeric strings are accepted and sent to Walmart as numbers. 19.99
Optional attributes
- Name
msrp- Type
- number
- Description
- Optional MSRP in USD, non-negative, with at most two decimal places. Omit to leave it unchanged; null is not accepted. Numeric strings are accepted and sent to Walmart as numbers. 24.99
Request
curl -X PATCH https://YOUR_DOMAIN/api/channels/walmart/listings/{listing}/price \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"price": "19.99",
"msrp": "24.99"
}'Show the content requirements of a Walmart listing
The content (`Visible`) attributes Walmart's item spec defines for the product type Walmart lists the item under, for building a content form. `required` is every attribute a content change must carry: the spec's unconditional `required` list (`spec_required`) united with Walmart's content standards (`content_standards`: `productName`, `shortDescription`, `mainImageUrl`, `keyFeatures`, kept only where the product type has them). The live `MP_MAINTENANCE` spec marks none of the content standards required (for many product types it has no unconditional `required` list at all), yet Walmart's ingestion refuses a content change without them (`EXT_DATA_ERROR_05045574625354`; https://public.walmart.com/content/ContentStandards/en_us/importance-of-content-standards.html), so they come from that ingestion evidence rather than the spec. `conditional` lists the spec's `allOf` `if`/`then` rules as the attribute that triggers them (`when`) and the attributes they then require (`then`); it is listed as Walmart gives it and not evaluated here, and the value that triggers a rule (e.g. which `has_written_warranty` answer calls for `warrantyText` rather than `warrantyURL`) is not included. A content change on `PATCH /channels/walmart/listings/{listing}` that misses a `required` attribute, misses one a `conditional` rule requires for the value sent, or has a value breaking its spec rules is refused with 422 before any feed is sent. Walmart may still refuse a content change on rules this check leaves to Walmart (such as value formats, or rules outside the spec); those come back as the feed's ingestion errors. Read from Walmart's `POST /v3/items/spec` (https://developer.walmart.com/us-marketplace/reference/getspec) for the `MP_MAINTENANCE` feed type at the version our maintenance feed is sent with, and cached for 24 hours per marketplace, feed type and product type.
Required attributes
- Name
listing- Type
- integer
- Description
- The ID of a listing on a Walmart channel 1
Request
curl -G https://YOUR_DOMAIN/api/channels/walmart/listings/{listing}/content-requirements \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Get current Walmart listing content
Fetches fresh content directly from Walmart for a listing on a connected Walmart channel. Resolves the exact seller SKU with GET /v3/items/{sku}, then searches GET /v3/items/walmart/search using the live item ID, or its normalized GTIN/UPC when Walmart omits the item ID. Returns only an unambiguous matching catalog item, with a matching condition when both responses include one. No local catalog link is required. Requires ListingsView permission and the listing must belong to the current merchant and service provider context. This is a partial read of Walmart's published catalog, not a complete maintenance feed or saved draft. Unpublished items may not appear in catalog search. Missing text fields are null and missing images are an empty array; never use those missing values to overwrite a draft. Key features and category-specific attributes are not exposed by this endpoint, so use GET /channels/walmart/listings/{listing}/content-requirements to determine what else an update needs. For PATCH /channels/walmart/listings/{listing}, map title to visible.productName, description to visible.shortDescription and brand to visible.brand; image URLs can prefill visible.mainImageUrl and visible.productSecondaryImageURL after review. The response is not guaranteed to satisfy Walmart's maintenance requirements. Text and HTML are preserved as Walmart returns them. Walmart API reference: https://developer.walmart.com/us-marketplace/reference/getsearchresult.
Required attributes
- Name
listing- Type
- integer
- Description
- The ID of a listing on a Walmart channel
Request
curl -G https://YOUR_DOMAIN/api/channels/walmart/listings/{listing}/content \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Show WFS conversion requirements
Resolves the listing live by SKU on its connected US Walmart channel and returns the OMNI_WFS conversion JSON schemas at 5.0.20260803-17_50_56-api, also used by conversion validation and feed generation. No local catalog link is needed. Each schema retains Walmart properties, required, additionalProperties, types, bounds, enums and full if/then/else conditions; clients must evaluate value conditions rather than treating every then field as unconditionally required. visible_schema applies inside Visible[product_type], orderable_schema to Orderable and trade_item_schema to TradeItem. feed_schema is the complete envelope restricted to the live product type. See the conversion endpoint for snake_case input mappings. These are conversion requirements, distinct from content-requirements (MP_MAINTENANCE). Requirements are cached for 24 hours by marketplace, OMNI_WFS, exact version and product type.
Required attributes
- Name
listing- Type
- integer
- Description
- The ID of a listing on a Walmart channel 1
Request
curl -G https://YOUR_DOMAIN/api/channels/walmart/listings/{listing}/wfs-conversion-requirements \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Convert a Walmart listing to WFS
Requests conversion of an existing United States Walmart Marketplace listing through an OMNI_WFS feed at specification 5.0.20260803-17_50_56-api. The live SKU lookup supplies the product type and GTIN/UPC; a local catalog link is not required. GET /channels/walmart/listings/{listing}/wfs-conversion-requirements returns the exact conversion schemas, including field placement, types, enums and value-dependent requirements. The content-requirements endpoint describes MP_MAINTENANCE and is not a conversion schema. The generated feed is validated before submission. A 202 means queued for asynchronous processing, not converted; monitor the returned feed for ingestion errors.
Required attributes
- Name
listing- Type
- integer
- Description
- The ID of a listing on a Walmart channel 1
- Name
price- Type
- number
- Description
- The item price in the Walmart channel's marketplace currency 19.99
- Name
country_of_origin_assembly- Type
- array<string>
- Description
- Name
battery_technology_type- Type
- string
- Description
- Does Not Contain a Battery
- Name
electronics_indicator- Type
- boolean
- Description
- false
- Name
each- Type
- object
- Description
- Name
each.width_in- Type
- number
- Description
- Name
each.height_in- Type
- number
- Description
- Name
each.depth_in- Type
- number
- Description
- Name
each.weight_lb- Type
- number
- Description
- Name
visible- Type
- object
- Description
- Attributes placed exactly in SupplierItem[0].Visible[live product type]. Must meet visible_schema from the WFS requirements endpoint. No maintenance content standards are added. Unknown fields are rejected, never stripped. For Battle Ropes this release requires productName, brand, isProp65WarningRequired, mainImageUrl, netContent and condition (New). isProp65WarningRequired=Yes requires prop65WarningText. {"productName":"Tapout 40ft Battle Rope","brand":"Tapout","mainImageUrl":"https://example.com/rope.jpg","condition":"New","isProp65WarningRequired":"No","netContent":{"productNetContentMeasure":1,"productNetContentUnit":"Each"}}
- Name
end_date- Type
- string
- Description
- Future UTC date, mapped to Orderable.endDate at midnight. 2027-01-01
Optional attributes
- Name
product_type- Type
- string
- Description
- The Walmart product type used as the key in the feed's Visible block. Defaults to the product type Walmart lists the item under; when supplied it must equal that product type. Battle Ropes
- Name
chemical_aerosol_pesticide- Type
- boolean
- Description
- Legacy compatibility: false supplies No for any omitted is_chemical/is_aerosol/is_pesticide flags. True is rejected because it cannot identify which hazard applies; supply the three explicit flags.
- Name
state_restrictions_text- Type
- string
- Description
- Walmart's state restriction value. Defaults to `None`. None
- Name
inner_pack- Type
- null
- Description
- Only null or omission is accepted. This conversion version does not support TradeItem.innerPack.
- Name
is_chemical- Type
- boolean
- Description
- Maps to Orderable.isChemical as Yes/No. Yes triggers the conditional compliance requirements in orderable_schema. false
- Name
is_aerosol- Type
- boolean
- Description
- Maps to Orderable.isAerosol as Yes/No. Yes triggers the conditional compliance requirements in orderable_schema. false
- Name
is_pesticide- Type
- boolean
- Description
- Maps to Orderable.isPesticide as Yes/No. Yes triggers the conditional compliance requirements in orderable_schema. false
- Name
orderable- Type
- object
- Description
- Additional attributes placed in SupplierItem[0].Orderable, preserving Walmart field names and JSON types. Must meet orderable_schema, including conditional requirements for hazards and batteries: labelImage, safetyDataSheet, numberOfHazardousComponents, hasBatteries, batterySize, lithiumIonBatteries, lithiumMetalBatteries, required_storage_condition and pesticide_type when applicable. sku, productIdentifiers, price, stateRestrictions, electronicsIndicator, batteryTechnologyType, isChemical, isAerosol, isPesticide and endDate are managed by the listing or top-level request fields and cannot be supplied here. Unsupported attributes are rejected.
Request
curl -X POST https://YOUR_DOMAIN/api/channels/walmart/listings/{listing}/convert-to-wfs \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"product_type": "Battle Ropes",
"price": 19.99,
"country_of_origin_assembly": [
"US"
],
"battery_technology_type": "Does Not Contain a Battery",
"electronics_indicator": false,
"chemical_aerosol_pesticide": true,
"state_restrictions_text": "None",
"each": {
"width_in": 1,
"height_in": 1,
"depth_in": 1,
"weight_lb": 1
},
"visible": {
"productName": "Tapout 40ft Battle Rope",
"brand": "Tapout",
"mainImageUrl": "https://example.com/rope.jpg",
"condition": "New",
"isProp65WarningRequired": "No",
"netContent": {
"productNetContentMeasure": 1,
"productNetContentUnit": "Each"
}
},
"end_date": "2027-01-01",
"is_chemical": false,
"is_aerosol": false,
"is_pesticide": false
}'Index a Walmart channel's WFS inbound orders
The channel's Walmart Fulfillment Services inbound orders, newest first.
Required attributes
- Name
channel- Type
- integer
- Description
- The ID of the Walmart channel 1
Optional attributes
- Name
status- Type
- string
- Description
- Only orders with this status
- Name
search- Type
- string
- Description
- Only orders whose `inbound_order_id` contains this text, case-insensitively
- Name
page- Type
- integer
- Description
- The page number to retrieve (1-indexed) 1
- Name
per_page- Type
- integer
- Description
- The number of items per page. Defaults to 10. 10
Request
curl -G https://YOUR_DOMAIN/api/channels/walmart/{channel}/wfs/inbound-orders \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Draft a WFS inbound order
Create a draft inbound order on a Walmart channel with its return address and items. Nothing is sent to Walmart until the order is submitted.
Required attributes
- Name
channel- Type
- integer
- Description
- The ID of the Walmart channel 1
- Name
inbound_order_id- Type
- string
- Description
- Your id for the order. Must be unique on the channel. PO-2026-0042
- Name
return_address- Type
- object
- Description
- Where Walmart returns inventory it cannot receive
- Name
return_address.address_line_1- Type
- string
- Description
- 100 Main St
- Name
return_address.city- Type
- string
- Description
- Bentonville
- Name
return_address.state_code- Type
- string
- Description
- AR
- Name
return_address.country_code- Type
- string
- Description
- ISO 3166-1 alpha-2 country code, exactly 2 characters US
- Name
return_address.postal_code- Type
- string
- Description
- 72712
- Name
items- Type
- array<Item>
- Description
- The SKUs to send, each at most once
- Name
items.*.sku- Type
- string
- Description
- Must be unique within the order (compared case-sensitively) SKU-1
- Name
items.*.gtin- Type
- string
- Description
- The item's GTIN, UPC or EAN: 8, 12, 13 or 14 digits; the check digit is not validated 00012345678905
- Name
items.*.item_description- Type
- string
- Description
- Widget
- Name
items.*.item_qty- Type
- integer
- Description
- The total units of the SKU. With case packs it must equal `vendor_pack_qty` times `inner_pack_qty`. 120
- Name
items.*.expected_delivery_date- Type
- string
- Description
- When the item is expected at Walmart, as `YYYY-MM-DD` 2026-10-15
Optional attributes
- Name
return_address.address_line_2- Type
- string
- Description
- Name
inventory_transfer_service- Type
- boolean
- Description
- Use Walmart's Inventory Transfer Service, sent as `inboundServices.inventoryTransferService: Y`. Omitted or false is self-distribution, Walmart's default, and nothing is sent. false
- Name
items.*.vendor_pack_qty- Type
- integer
- Description
- The number of cases. Send together with `inner_pack_qty` for case-packed items; omit both for loose units. 12
- Name
items.*.inner_pack_qty- Type
- integer
- Description
- The units per case. Send together with `vendor_pack_qty`. 10
- Name
items.*.item_labeling- Type
- boolean
- Description
- Ask WFS to label the units (the Item Labeling prep service). Defaults to false. false
Request
curl -X POST https://YOUR_DOMAIN/api/channels/walmart/{channel}/wfs/inbound-orders \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"inbound_order_id": "PO-2026-0042",
"return_address": {
"address_line_1": "100 Main St",
"address_line_2": null,
"city": "Bentonville",
"state_code": "AR",
"country_code": "US",
"postal_code": "72712"
},
"inventory_transfer_service": false,
"items": [
{
"sku": "SKU-1",
"gtin": "00012345678905",
"item_description": "Widget",
"item_qty": 120,
"vendor_pack_qty": 12,
"inner_pack_qty": 10,
"expected_delivery_date": "2026-10-15",
"item_labeling": false
}
]
}'Search a GTIN's WFS hazmat compliance holds
Asks Walmart whether an item is on a WFS hazmat compliance hold. `in_review` clears within about 72 business hours; `action_needed` means the item data must be fixed and converted to WFS again; `prohibited` means the item cannot be sold through WFS. An item with several errors is one row per error. Nothing is stored. Walmart: https://developer.walmart.com/us-marketplace/reference/wercsfeedback
Required attributes
- Name
channel- Type
- integer
- Description
- The ID of the Walmart channel 1
- Name
gtin- Type
- string
- Description
- The item's GTIN, UPC or EAN: 8, 12, 13 or 14 digits 00704551260905
Request
curl -G https://YOUR_DOMAIN/api/channels/walmart/{channel}/wfs/holds \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Show a WFS inbound order
One inbound order with its items, its shipments (with their items and carrier bookings) and its timeline.
Required attributes
- Name
wfs_inbound_order- Type
- string
- Description
- The inbound order's uuid 019b2c41-7b1c-80ee-9a51-4d2e8f6b1a90
Request
curl -G https://YOUR_DOMAIN/api/channels/walmart/wfs/inbound-orders/{wfs-inbound-order} \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Replace the items of a WFS inbound order
Replace the item set of a draft or rejected inbound order before it is submitted again. A rejected order keeps its `inbound_order_id`: Walmart expects the corrected order to be resubmitted under the same id. Nothing is sent to Walmart until the order is submitted.
Required attributes
- Name
wfs_inbound_order- Type
- string
- Description
- The inbound order's uuid 019b2c41-7b1c-80ee-9a51-4d2e8f6b1a90
- Name
items- Type
- array<Item>
- Description
- The order's complete item set, each SKU at most once. SKUs on the order but not in the list are removed, new SKUs are added, and a SKU whose fields changed is replaced; an unchanged SKU records nothing.
- Name
items.*.sku- Type
- string
- Description
- Must be unique within the order (compared case-sensitively) SKU-1
- Name
items.*.gtin- Type
- string
- Description
- The item's GTIN, UPC or EAN: 8, 12, 13 or 14 digits; the check digit is not validated 00012345678905
- Name
items.*.item_description- Type
- string
- Description
- Widget
- Name
items.*.item_qty- Type
- integer
- Description
- The total units of the SKU. With case packs it must equal `vendor_pack_qty` times `inner_pack_qty`. 120
- Name
items.*.expected_delivery_date- Type
- string
- Description
- When the item is expected at Walmart, as `YYYY-MM-DD` 2026-10-15
Optional attributes
- Name
items.*.vendor_pack_qty- Type
- integer
- Description
- The number of cases. Send together with `inner_pack_qty` for case-packed items; omit both for loose units. 12
- Name
items.*.inner_pack_qty- Type
- integer
- Description
- The units per case. Send together with `vendor_pack_qty`. 10
- Name
items.*.item_labeling- Type
- boolean
- Description
- Ask WFS to label the units (the Item Labeling prep service). Omit to keep the saved choice of an item already on the order; a new item defaults to false. false
- Name
inventory_transfer_service- Type
- boolean
- Description
- Use Walmart's Inventory Transfer Service, sent as `inboundServices.inventoryTransferService: Y`. Omitted or false is self-distribution, Walmart's default, and nothing is sent. Omitted leaves the order's choice unchanged. false
Request
curl -X PUT https://YOUR_DOMAIN/api/channels/walmart/wfs/inbound-orders/{wfs-inbound-order}/items \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"items": [
{
"sku": "SKU-1",
"gtin": "00012345678905",
"item_description": "Widget",
"item_qty": 120,
"vendor_pack_qty": 12,
"inner_pack_qty": 10,
"expected_delivery_date": "2026-10-15",
"item_labeling": false
}
],
"inventory_transfer_service": false
}'Preview the destinations and ITS fees of a WFS inbound order
Asks Walmart where the order's units would go, both with Inventory Transfer Service (ITS) and with self-distribution, and what ITS would cost. Walmart's figures are estimates: routing and fees are fixed when the order is submitted. Only Draft and Rejected orders can be previewed. Nothing is stored except a `preview_fetched` timeline entry. Walmart: https://developer.walmart.com/us-marketplace/reference/inboundpreview
Required attributes
- Name
wfs_inbound_order- Type
- string
- Description
- The inbound order's uuid 019b2c41-7b1c-80ee-9a51-4d2e8f6b1a90
Optional attributes
- Name
item_labeling_skus- Type
- array<string>
- Description
- The SKUs to preview with the Item Labeling prep service, replacing the items' own choice for this preview only. Omit to use the items' own choice.
Request
curl -X POST https://YOUR_DOMAIN/api/channels/walmart/wfs/inbound-orders/{wfs-inbound-order}/preview \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"item_labeling_skus": [
"SKU-1"
]
}'Submit a WFS inbound order to Walmart
Queue a draft or rejected inbound order for submission to Walmart. Submission happens in the background, so the returned order is still in its previous status (`draft` or `rejected`); poll the order to see it become `submitted` (with its shipments) or `rejected` (with `errors`). Submitting again while a submission is queued queues nothing more.
Required attributes
- Name
wfs_inbound_order- Type
- string
- Description
- The inbound order's uuid 019b2c41-7b1c-80ee-9a51-4d2e8f6b1a90
Request
curl -X POST https://YOUR_DOMAIN/api/channels/walmart/wfs/inbound-orders/{wfs-inbound-order}/submit \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Request cancellation of a WFS inbound order
Ask Walmart to cancel a submitted inbound order. Walmart's answer is recorded on the order rather than returned as an error: `timeline[0].event_type` is `cancellation_requested` when Walmart accepted (and `cancellation_requested_at` is set), `cancellation_rejected` when it refused, or `api_error_occurred` when the call failed (see `errors`). The order becomes `cancelled` once Walmart reports it cancelled.
Required attributes
- Name
wfs_inbound_order- Type
- string
- Description
- The inbound order's uuid 019b2c41-7b1c-80ee-9a51-4d2e8f6b1a90
Request
curl -X POST https://YOUR_DOMAIN/api/channels/walmart/wfs/inbound-orders/{wfs-inbound-order}/cancellation-request \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Update a WFS shipment's quantities
Change how many units of each SKU a shipment will carry. Walmart allows an increase of at most six units per SKU after submission, and a SKU is removed by setting it to 0, but not every SKU on the shipment (that would cancel the whole inbound order); a request outside those rules is refused with 422 before Walmart is called (Walmart remains the authority and may still refuse). The outcome is recorded on the order: `timeline[0].event_type` is `shipment_quantities_updated` when Walmart accepted, `shipment_quantities_rejected` when it refused (also answered 422), or `shipment_quantities_update_unconfirmed` when the call failed (answered 200; the outcome will be learned when the shipment is next refreshed).
Required attributes
- Name
wfs_inbound_order- Type
- string
- Description
- The inbound order's uuid 019b2c41-7b1c-80ee-9a51-4d2e8f6b1a90
- Name
shipment- Type
- string
- Description
- Walmart's id for a shipment on the order SHP-8812
- Name
quantities- Type
- object
- Description
- The new unit quantity for each SKU to change, keyed by SKU. Every SKU must already be on the shipment. Each quantity is 0 (removes the SKU) or between 1 and the SKU's current `requested_qty` plus 6. At least one SKU on the shipment must stay above 0. {"SKU-1":96}
Request
curl -X PUT https://YOUR_DOMAIN/api/channels/walmart/wfs/inbound-orders/{wfs-inbound-order}/shipments/{shipment}/quantities \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"quantities": {
"SKU-1": 96
}
}'Submit tracking for a WFS shipment
Tell Walmart which carrier and tracking numbers a shipment is travelling with. The outcome is recorded on the order: `timeline[0].event_type` is `tracking_submitted` when Walmart accepted (and the shipment shows the carrier and tracking numbers), `tracking_rejected` when it refused, or `api_error_occurred` when the call failed. A Walmart refusal answers 422 and a call Walmart did not answer answers 502.
Required attributes
- Name
wfs_inbound_order- Type
- string
- Description
- The inbound order's uuid 019b2c41-7b1c-80ee-9a51-4d2e8f6b1a90
- Name
shipment- Type
- string
- Description
- Walmart's id for a shipment on the order SHP-8812
- Name
carrier_name- Type
- string
- Description
- UPS
- Name
tracking_numbers- Type
- array<string>
- Description
- Each number at most once ["1Z999AA10123456784","1Z999AA10123456785"]
Request
curl -X POST https://YOUR_DOMAIN/api/channels/walmart/wfs/inbound-orders/{wfs-inbound-order}/shipments/{shipment}/tracking \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"carrier_name": "UPS",
"tracking_numbers": [
"1Z999AA10123456784",
"1Z999AA10123456785"
]
}'Create a WFS shipment box label
Have Walmart create the box labels for a shipment and download them. The file is returned as Walmart produced it and is not stored.
Required attributes
- Name
wfs_inbound_order- Type
- string
- Description
- The inbound order's uuid 019b2c41-7b1c-80ee-9a51-4d2e8f6b1a90
- Name
shipment- Type
- string
- Description
- Walmart's id for a shipment on the order SHP-8812
Optional attributes
- Name
label_size- Type
- string
- Description
- The label size. Walmart's default when omitted. X4_6
- Name
label_format- Type
- string
- Description
- The file format. Walmart's default when omitted. PDF
- Name
load_types- Type
- array
- Description
- How many labels to create for each kind of load
Request
curl -X POST https://YOUR_DOMAIN/api/channels/walmart/wfs/inbound-orders/{wfs-inbound-order}/shipments/{shipment}/box-label \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"label_size": "X4_6",
"label_format": "PDF",
"load_types": [
{
"count": 3,
"load_type": "SINGLE SKU"
}
]
}'List the rate quotes of a WFS shipment
The Walmart preferred-carrier quotes requested for a shipment, newest first, at most 200.
Required attributes
- Name
wfs_inbound_order- Type
- string
- Description
- The inbound order's uuid 019b2c41-7b1c-80ee-9a51-4d2e8f6b1a90
- Name
shipment- Type
- string
- Description
- Walmart's id for a shipment on the order SHP-8812
Request
curl -G https://YOUR_DOMAIN/api/channels/walmart/wfs/inbound-orders/{wfs-inbound-order}/shipments/{shipment}/rate-quotes \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Request rate quotes for a WFS shipment
Ask Walmart's preferred-carrier programme for quotes. The fields besides `quote_type` and `ship_from` depend on the quote type. The returned quotes are kept and can be booked with the carrier booking endpoint.
Required attributes
- Name
wfs_inbound_order- Type
- string
- Description
- The inbound order's uuid 019b2c41-7b1c-80ee-9a51-4d2e8f6b1a90
- Name
shipment- Type
- string
- Description
- Walmart's id for a shipment on the order SHP-8812
- Name
quote_type- Type
- string
- Description
- Parcel
- Name
ship_from- Type
- object
- Description
- The address the carrier collects from
- Name
ship_from.address_line_1- Type
- string
- Description
- 1 Warehouse Way
- Name
ship_from.city- Type
- string
- Description
- Sunnyvale
- Name
ship_from.state_code- Type
- string
- Description
- CA
- Name
ship_from.country_code- Type
- string
- Description
- US
- Name
ship_from.postal_code- Type
- string
- Description
- 95126
Optional attributes
- Name
ship_from.address_line_2- Type
- string
- Description
- Name
ship_from.phone- Type
- string
- Description
- 5550100
- Name
ship_from.location_name- Type
- string
- Description
- Main warehouse
- Name
packages- Type
- array
- Description
- The boxes to ship. Required for `Parcel`.
- Name
pickup_from- Type
- string
- Description
- Earliest pickup. Required for `LTL` and `FTL`. An ISO 8601 timestamp in UTC or with an offset, e.g. `2026-10-06T08:00:00Z` 2026-10-06T08:00:00Z
- Name
pickup_to- Type
- string
- Description
- Latest pickup, after `pickup_from`. Required for `LTL` and `FTL`. 2026-10-07T17:00:00Z
- Name
freight- Type
- object
- Description
- Freight details. Required for `LTL` and `FTL`.
- Name
pallets- Type
- array
- Description
- The pallets to ship. Required for `LTL` and `FTL`.
- Name
equipment- Type
- array
- Description
- The truck equipment. Required for `FTL`.
- Name
mode- Type
- string
- Description
- Required for `FTL` FTL
- Name
service_level- Type
- string
- Description
- Required for `FTL` WFS
Request
curl -X POST https://YOUR_DOMAIN/api/channels/walmart/wfs/inbound-orders/{wfs-inbound-order}/shipments/{shipment}/rate-quotes \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"quote_type": "Parcel",
"ship_from": {
"address_line_1": "1 Warehouse Way",
"address_line_2": "string",
"city": "Sunnyvale",
"state_code": "CA",
"country_code": "US",
"postal_code": "95126",
"phone": "5550100",
"location_name": "Main warehouse"
},
"packages": [
{
"sequence_number": 1,
"weight_lb": 12.5,
"length_in": 16,
"width_in": 12,
"height_in": 10,
"package_type": "MIXED SKUS",
"is_stackable": true,
"package_count": 1
}
],
"pickup_from": "2026-10-06T08:00:00Z",
"pickup_to": "2026-10-07T17:00:00Z",
"freight": {
"freight_class": 70,
"declared_value": 1,
"single_sku_boxes": 0,
"mixed_sku_boxes": 12,
"total_pallet_count": 1
},
"pallets": [
{
"sequence_number": 1,
"weight_lb": 12.5,
"length_in": 16,
"width_in": 12,
"height_in": 10,
"package_type": "MIXED SKUS",
"is_stackable": true,
"package_count": 1
}
],
"equipment": [
{
"length_ft": 53,
"protection_level": "Dry",
"type": "VAN53"
}
],
"mode": "FTL",
"service_level": "WFS"
}'Book a carrier for a WFS shipment
Book one of the shipment's rate quotes. The quote's type decides which fields are required. Walmart's answer is recorded on the order: `timeline[0].event_type` is `carrier_booked`, `carrier_booking_rejected`, `carrier_booking_unconfirmed` or `api_error_occurred`. A Walmart refusal answers 422 and a call Walmart did not answer answers 502; an unconfirmed booking answers 200 with `carrier_booking.state` `unconfirmed`.
Required attributes
- Name
wfs_inbound_order- Type
- string
- Description
- The inbound order's uuid 019b2c41-7b1c-80ee-9a51-4d2e8f6b1a90
- Name
shipment- Type
- string
- Description
- Walmart's id for a shipment on the order SHP-8812
- Name
rate_quote_uuid- Type
- string
- Description
- A quote of this shipment 019b2c52-3f10-7c4e-8a1d-2b3c4d5e6f70
- Name
single_sku_boxes- Type
- integer
- Description
- 2
- Name
mixed_sku_boxes- Type
- integer
- Description
- 0
Optional attributes
- Name
business_location_name- Type
- string
- Description
- Required for `LTL` and `FTL` Main warehouse
- Name
pickup_instruction- Type
- string
- Description
- Name
pickup_dates- Type
- array
- Description
- Preferred pickup dates. Required for `LTL`.
- Name
shipper- Type
- object
- Description
- Who the carrier contacts at pickup. Required for `LTL` and `FTL`.
- Name
ship_from- Type
- object
- Description
- The address the carrier collects from. Required for `LTL` and `FTL`.
- Name
operation_hours- Type
- array
- Description
- The pickup location's opening hours by weekday. Walmart requires them for LTL and FTL bookings: at least three days, including every preferred pickup date (`pickup_dates`; for FTL, every day from `schedule.min_pickup_at` to `schedule.max_pickup_at`); a booking without them is refused with 'At least 3 days of operation hours must be provided, including the preferred pickup date.' Times as `HH:MM:SS`.
- Name
declared_value- Type
- number
- Description
- Name
total_pallet_count- Type
- integer
- Description
- Required for `LTL` 1
- Name
pallets- Type
- array
- Description
- The pallets. Required for `LTL` and `FTL`.
- Name
pickup_window- Type
- string
- Description
- Required for `FTL` 08:00-17:00
- Name
schedule- Type
- object
- Description
- The FTL pickup and delivery window. Required for `FTL`.
- Name
equipment_code- Type
- string
- Description
- Required for `FTL` VAN53
- Name
equipment_type- Type
- string
- Description
- Required for `FTL` Dry
- Name
equipment_length_ft- Type
- number
- Description
- Required for `FTL` 53
- Name
protection_level- Type
- string
- Description
- Required for `FTL` Dry
Request
curl -X POST https://YOUR_DOMAIN/api/channels/walmart/wfs/inbound-orders/{wfs-inbound-order}/shipments/{shipment}/carrier-booking \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"rate_quote_uuid": "019b2c52-3f10-7c4e-8a1d-2b3c4d5e6f70",
"single_sku_boxes": 2,
"mixed_sku_boxes": 0,
"business_location_name": "Main warehouse",
"pickup_instruction": "string",
"pickup_dates": [
{
"date": "2026-10-06",
"ready_time": "08:00:00",
"close_time": "17:00:00",
"priority": 1
}
],
"shipper": {
"name": "Ada Lovelace",
"first_name": "Ada",
"last_name": "Lovelace",
"phone": "5550100",
"email": "ada@example.com"
},
"ship_from": {
"address_line_1": "1 Warehouse Way",
"address_line_2": "string",
"city": "Sunnyvale",
"state_code": "CA",
"country_code": "US",
"postal_code": "95126",
"phone": "5550100",
"location_name": "Main warehouse"
},
"operation_hours": [
{
"day_of_week_code": 1,
"open_time": "09:00:00",
"close_time": "17:00:00"
}
],
"declared_value": 1,
"total_pallet_count": 1,
"pallets": [
{
"sequence_number": 1,
"weight_lb": 12.5,
"length_in": 16,
"width_in": 12,
"height_in": 10,
"package_type": "MIXED SKUS",
"is_stackable": true,
"package_count": 1
}
],
"pickup_window": "08:00-17:00",
"schedule": {
"min_pickup_at": "2026-10-06T08:00:00Z",
"max_pickup_at": "2026-10-06T17:00:00Z",
"min_due_at": "2026-10-08T08:00:00Z",
"max_due_at": "2026-10-09T17:00:00Z"
},
"equipment_code": "VAN53",
"equipment_type": "Dry",
"equipment_length_ft": 53,
"protection_level": "Dry"
}'Cancel the carrier booking of a WFS shipment
Cancel the shipment's live booking. Walmart's answer is recorded on the order: `timeline[0].event_type` is `carrier_booking_cancelled`, `carrier_booking_cancellation_rejected` or `api_error_occurred`. A Walmart refusal answers 422 and a call Walmart did not answer answers 502.
Required attributes
- Name
wfs_inbound_order- Type
- string
- Description
- The inbound order's uuid 019b2c41-7b1c-80ee-9a51-4d2e8f6b1a90
- Name
shipment- Type
- string
- Description
- Walmart's id for a shipment on the order SHP-8812
Request
curl -X DELETE https://YOUR_DOMAIN/api/channels/walmart/wfs/inbound-orders/{wfs-inbound-order}/shipments/{shipment}/carrier-booking \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Download the carrier label of a WFS shipment
Download the carrier label of the shipment's live Parcel booking. The file is returned as Walmart produced it and is not stored.
Required attributes
- Name
wfs_inbound_order- Type
- string
- Description
- The inbound order's uuid 019b2c41-7b1c-80ee-9a51-4d2e8f6b1a90
- Name
shipment- Type
- string
- Description
- Walmart's id for a shipment on the order SHP-8812
Optional attributes
- Name
label_size- Type
- string
- Description
- X4_6
Request
curl -G https://YOUR_DOMAIN/api/channels/walmart/wfs/inbound-orders/{wfs-inbound-order}/shipments/{shipment}/carrier-label \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Generate the carrier label of a WFS shipment
Ask Walmart to generate the carrier label for a Parcel booking. Walmart generates it asynchronously; fetch it with `GET` on the same path. The outcome is recorded on the order: `timeline[0].event_type` is `carrier_label_generated`, `carrier_label_rejected` or `api_error_occurred`. A Walmart refusal answers 422 and a call Walmart did not answer answers 502.
Required attributes
- Name
wfs_inbound_order- Type
- string
- Description
- The inbound order's uuid 019b2c41-7b1c-80ee-9a51-4d2e8f6b1a90
- Name
shipment- Type
- string
- Description
- Walmart's id for a shipment on the order SHP-8812
Optional attributes
- Name
ship_date- Type
- string
- Description
- When the parcels ship, as `YYYY-MM-DD` or an ISO 8601 timestamp 2026-10-06
Request
curl -X POST https://YOUR_DOMAIN/api/channels/walmart/wfs/inbound-orders/{wfs-inbound-order}/shipments/{shipment}/carrier-label \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"ship_date": "2026-10-06"
}'Print the bill of lading of a WFS shipment
Download the bill of lading of the shipment's live LTL booking. The file is returned as Walmart produced it and is not stored.
Required attributes
- Name
wfs_inbound_order- Type
- string
- Description
- The inbound order's uuid 019b2c41-7b1c-80ee-9a51-4d2e8f6b1a90
- Name
shipment- Type
- string
- Description
- Walmart's id for a shipment on the order SHP-8812
Request
curl -G https://YOUR_DOMAIN/api/channels/walmart/wfs/inbound-orders/{wfs-inbound-order}/shipments/{shipment}/bill-of-lading \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Read the carrier tracking of a WFS shipment
Walmart's carrier tracking for the shipment's live booking, read in the booking's mode. Nothing is stored.
Required attributes
- Name
wfs_inbound_order- Type
- string
- Description
- The inbound order's uuid 019b2c41-7b1c-80ee-9a51-4d2e8f6b1a90
- Name
shipment- Type
- string
- Description
- Walmart's id for a shipment on the order SHP-8812
Request
curl -G https://YOUR_DOMAIN/api/channels/walmart/wfs/inbound-orders/{wfs-inbound-order}/shipments/{shipment}/carrier-tracking \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Reschedule the pickup of a WFS shipment
Ask Walmart to move the pickup of the shipment's live LTL booking. The booked quote is used. The outcome is recorded on the order: `timeline[0].event_type` is `pickup_rescheduled`, `pickup_reschedule_rejected` or `api_error_occurred`. A Walmart refusal answers 422 and a call Walmart did not answer answers 502.
Required attributes
- Name
wfs_inbound_order- Type
- string
- Description
- The inbound order's uuid 019b2c41-7b1c-80ee-9a51-4d2e8f6b1a90
- Name
shipment- Type
- string
- Description
- Walmart's id for a shipment on the order SHP-8812
- Name
pickup_dates- Type
- array<PickupDate>
- Description
- The requested pickup dates, in order of preference
- Name
pickup_dates.*.date- Type
- string
- Description
- `YYYY-MM-DD` 2026-10-06
- Name
pickup_dates.*.ready_time- Type
- string
- Description
- `HH:MM:SS` 08:00:00
- Name
pickup_dates.*.close_time- Type
- string
- Description
- `HH:MM:SS` 17:00:00
- Name
contact- Type
- object
- Description
- Who the carrier contacts at pickup
- Name
contact.first_name- Type
- string
- Description
- Ada
- Name
contact.last_name- Type
- string
- Description
- Lovelace
- Name
contact.email- Type
- string
- Description
- ada@example.com
- Name
contact.number- Type
- string
- Description
- 0100
Optional attributes
- Name
pickup_dates.*.priority- Type
- integer
- Description
- Defaults to the date's position in the list, starting at 1 1
- Name
contact.secondary_email- Type
- string
- Description
- Name
contact.area_code- Type
- string
- Description
- 555
- Name
contact.extension- Type
- string
- Description
- Name
ship_from- Type
- object
- Description
- A new pickup address, if it changed
- Name
carrier- Type
- string
- Description
- ODFL
Request
curl -X PUT https://YOUR_DOMAIN/api/channels/walmart/wfs/inbound-orders/{wfs-inbound-order}/shipments/{shipment}/pickup \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"pickup_dates": [
{
"date": "2026-10-06",
"ready_time": "08:00:00",
"close_time": "17:00:00",
"priority": 1
}
],
"contact": {
"first_name": "Ada",
"last_name": "Lovelace",
"email": "ada@example.com",
"secondary_email": "string",
"area_code": "555",
"number": "0100",
"extension": "string"
},
"ship_from": {
"address_line_1": "1 Warehouse Way",
"address_line_2": "string",
"city": "Sunnyvale",
"state_code": "CA",
"country_code": "US",
"postal_code": "95126",
"phone": "5550100",
"location_name": "Main warehouse"
},
"carrier": "ODFL"
}'Refresh the pickup of a WFS shipment
Read the pickup Walmart scheduled for the shipment's live LTL booking and record it on the order when it changed.
Required attributes
- Name
wfs_inbound_order- Type
- string
- Description
- The inbound order's uuid 019b2c41-7b1c-80ee-9a51-4d2e8f6b1a90
- Name
shipment- Type
- string
- Description
- Walmart's id for a shipment on the order SHP-8812
Request
curl -X POST https://YOUR_DOMAIN/api/channels/walmart/wfs/inbound-orders/{wfs-inbound-order}/shipments/{shipment}/pickup/refresh \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"