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.

📄️Void WFS Inbound Carrier Rate Quote

Void the carrier rate quote / booking for an inbound shipment. No request body. Accepts an optional `mode` query parameter (PARCEL or LTL, defaults to PARCEL) identifying the transport mode the quote was created under — Walmart requires it on the void call. Scoped to the integration instance (404 if the shipment belongs to another instance). An unknown mode returns a 422 validation error; a Walmart-side rejection returns a 422 carrying Walmart’s own reason. 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 Walmart Fulfillments

Get a paginated list of completed fulfillments for sales orders that originated from this Walmart integration instance — both those already submitted to Walmart and those still pending. Each entry includes tracking details, carrier and shipping method, the linked sales order and Walmart order identifiers, the fulfilling warehouse, and a `sync_status` of submitted or pending. `shipping_method_display` is the shipping method's full name, carrier first (for example `UPS Ground`); when a fulfillment records no shipping method it falls back to the free-text carrier saved on the fulfillment, then to the method the order originally requested, and is `null` if none of those exist.

📄️List Pending Walmart Fulfillments

Get a paginated list of completed fulfillments that have not yet been submitted to Walmart. Pickup fulfillments and fulfillments on cancelled orders are excluded. Results are ordered newest first. These are the fulfillments that the automatic sync (every 10 minutes) or a manual submit call will send to Walmart. `shipping_method_display` is the shipping method's full name, carrier first (for example `UPS Ground`); when a fulfillment records no shipping method it falls back to the free-text carrier saved on the fulfillment, then to the method the order originally requested, and is `null` if none of those exist.

📄️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.

📄️Send WFS Inbound Shipping Details Email (stage 2)

Stage 2 of the two-stage handoff: send the carrier / pickup details the stage-1 invite promised. The WFS carrier label only exists once a Preferred Carrier is booked against the shipment, so it cannot ride along with the initial email. Uses its own tenant-editable template (wfs_inbound_shipping_details) and attaches the late-stage documents. Does NOT restamp sent_at — that timestamp is the 3PL turnaround clock and belongs to stage 1. Requires the stage-1 email to have been sent (packet.sent_at set) AND late-stage paperwork to exist (packet.can_send_shipping_details true). Same body fields as the stage-1 send.

📄️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.