Skip to main content

Walmart

📄️Create WFS Inbound Shipment

Create a WFS inbound shipment from SKU.io — send the chosen SKUs/quantities into Walmart Fulfillment Services from a **warehouse OR a supplier** (exactly one). SKU.io enriches each SKU with the GTIN/UPC + description Walmart requires, generates a unique inboundOrderId, builds Walmart's Create-Inbound-Shipment-Order payload (returnAddress from the chosen warehouse's or supplier's address + orderItems), POSTs it to Walmart (POST /v3/fulfillment/inbound-shipments), and persists the shipment(s) Walmart returns — Walmart may split one inbound order across fulfillment centers, so `data` is an array. Typically driven from the inbound builder or the WFS Replenishment grid's cart ('Send to WFS').

📄️Cancel Inbound Shipment

Cancel a WFS inbound shipment. This cancels the WHOLE inbound order on Walmart and marks every local shipment sharing that inbound order as CANCELLED (Walmart splits one inbound order across FCs, and cancel is order-level). Any materialized source document (Warehouse Transfer / Purchase Order) is unwound first, and source-stock reservations are released so the stock is sellable again. Walmart rejects the cancel once the shipment is receiving, closed, or already cancelled.

📄️Set Source

Set (or confirm) the definitive source of an inbound shipment — a warehouse OR a supplier (exactly one). Used to resolve an imported inbound, confirm an auto-matched one, or re-point an existing one. Unwinds any document already materialized against the old source (throws/blocks if it has already shipped), drops the prior source reservation, marks the link confirmed, and re-reserves against the new warehouse (a no-op when supplier-sourced or when there are no SKU intent lines).

📄️Get Existing WFS Inbound Carrier Rate Quote

Fetch the carrier rate quote that already exists on Walmart for this inbound shipment. The detail page calls this on mount so a previously generated quote is shown (with Confirm / Void / Print) instead of a blank panel — Walmart's create endpoint is one-shot per shipment, so re-creating would 400. No request body. Scoped to the integration instance (404 if the shipment belongs to another instance). When no quote exists yet (the normal starting state — Walmart returns 404), this endpoint stays silent and returns an empty `data` list with a 200. Requires a Bearer token.

📄️Preview Fulfillment Email

Render the operator's edited subject/body with the live tokens substituted, without sending anything — powers the compose dialog's preview pane. Tokens {{reference}} (the WFS shipment id), {{portal_link}} (a clickable anchor to the secure fulfilment portal), and {{instructions}} (the rendered prep instructions) are resolved server-side; the subject is treated as plain text, the body as HTML. Returns 422 if no fulfilment packet has been built for this shipment yet.

📄️Send Fulfillment Email

Send the operator-composed portal invite to the resolved 3PL/supplier recipient (a 3PL warehouse's address email, or the supplier's PO email), substituting the {{reference}}/{{portal_link}}/{{instructions}} tokens server-side, then flip the packet status to Sent (sets sent_at). The recipient is resolved server-side — it is not accepted from the request. Returns 422 if no packet has been built, or if no recipient email is configured for the source (add one to the 3PL warehouse address / supplier before emailing).

📄️List WFS Replenishment Suggestions

Replenishment grid as a full-featured, server-side list view: one row per WFS SKU with its WFS position (available/inbound summed across ship nodes), demand velocity (units/day from matched-product sales over the velocity window), and the suggested quantity to send (velocity x coverage horizon - net WFS position, case-pack rounded). Supports search, advanced filter_groups, sorting, and pagination — all applied server-side over the computed columns. Returns a Laravel LengthAwarePaginator. Requires a Bearer token.

📄️List WFS Replenishment Candidates

WFS candidate intelligence as a full-featured, server-side list view: seller-fulfilled Walmart listings NOT yet in WFS that sell enough on the Walmart channel (>= candidate_min_units in the velocity window) to warrant sending into WFS. Ranked by Walmart-channel volume by default, with a suggested initial ship quantity (velocity x coverage, nothing on hand yet). Supports search, advanced filter_groups, sorting, and pagination — all applied server-side over the computed columns. Returns a Laravel LengthAwarePaginator. Empty when the instance has no linked sales channel. Requires a Bearer token.

📄️Portal — Download WFS Unit-Mix Spreadsheet (CSV, public)

PUBLIC. Downloads the unit-mix spreadsheet (CSV) for the WFS inbound shipment so the 3PL / supplier can reconcile what to pack. Columns: SKU, Product, GTIN/UPC, Qty, Packing, Units per case, Unit weight, Unit dimensions, Prep services — plus a Kitting Work Order section when the shipment contains kits. Streamed as text/csv with filename wfs-unit-mix-<shipmentId>.csv. Returns 404 if the portal token is invalid or has been revoked.

📄️List MCF Orders

Paginated WFS MCF orders for an integration instance. Supports free-text search (filter[search] spans customer_order_no + customer_order_id), advanced filters via filter_groups (columns: customer_order_no, customer_order_id, status, created_at), and sorting (allowed: id, customer_order_no, customer_order_id, status, created_at, updated_at; default -created_at). `can_cancel` is true while the order still has items and is not yet CANCELLED/SHIPPED/DELIVERED. Returns a Laravel LengthAwarePaginator. Requires a Bearer token.

📄️Receive Walmart Webhook

Receive a Walmart WFS webhook delivery. No Bearer auth — the secret path token is the credential. The body shape is whatever Walmart sends; the receiver classifies the delivery into a coarse bucket (inbound / inventory / return / order / unknown) by keyword-matching the `eventType` (or `topic`/`type`) field, persists it, and dispatches a resync. An unrecognised event type triggers a full WFS resync so nothing is missed. Always acks 2xx on success so Walmart does not retry; unknown tokens return 404.