A Warehouse Receiving Order (WRO) is how ShipBob manages inbound shipments into their fulfillment centers. Some other solutions call this an “ASN” (Advanced Ship Notice).
This guide will walk you through building an integration to send inventory to ShipBob and sync it back to your system.
Here’s the flow of creating and tracking a Warehouse Receiving Order:
Before creating a WRO, every product needs an inventory_id from ShipBob.
Check if a product exists:
If the product doesn’t exist, create it first:
inventory_id when you create products in your system. This way, you won’t need to look them up every time.Once you have your inventory_id values, create the WRO:
Example request (sending packages):
What you’ll get back:
box_labels_uri from the response in the next step if you are fetching box labels.Package types:
If you’re sending lot-tracked items (products with expiration dates or batch numbers), you must include lot_date and lot_number for each item in your WRO.
Example request with lot items:
Key fields for lot items:
Both lot_number and lot_date are required for lot-tracked items. If you omit either field, the WRO creation will fail.
Make sure the product is already created in ShipBob and you have the inventory_id before creating the WRO. You can check if a product is lot-tracked by looking at the product details in the ShipBob dashboard or via the GET Product API.
Multiple lots in one box:
You can include multiple lots of the same product or different products in a single box:
Print box labels to help the warehouse identify your shipment:
This returns a PDF with labels for each box/pallet. Print and attach them to your shipment before sending.
Set up a recurring job (every 15-30 minutes) to check for completed WROs that need to be synced.
Check for completed WROs:
This returns all WROs that are:
Here’s what to do with each completed WRO:
Example code:
After updating your inventory system, mark the WRO as synced to prevent duplicate processing:
This endpoint accepts an array of WRO IDs, allowing you to mark multiple WROs as synced in a single request.
Want to see details for each box? Use this endpoint:
This shows you the status and quantities for each box, which would enable you to do partial receiving.
When you sync a completed WRO, you’ll see three quantity fields:
stowed_quantity when updating your system. This may be less than expected if items were damaged or missing.Example:
package_type - Determines how your shipment is configured. Choose based on your shipping method:
expected_arrival_date - The date your shipment is expected to arrive at the fulfillment center. Must be set to a future date - using today’s date or a past date will result in an error.
purchase_order_number - Your internal PO number or shipment identifier. Use a unique value for each WRO to simplify tracking and reconciliation.
tracking_number - The carrier tracking number for each box or pallet. This enables the warehouse to scan and verify your shipment upon arrival.
is_external_sync - A boolean flag that tracks whether you’ve synced the WRO data back to your system:
false when the WRO is createdExternalSync=false to find WROs that need processingtrue after updating your inventory systemTo mark one or more WROs as synced, use the batch endpoint:
Your WRO goes through these stages:
Awaiting status.For complete status reference including hub-related statuses, see the Status Reference documentation.
Set expected_arrival_date to tomorrow or later. Don’t use today’s date or past dates.
Create the product first, then use the inventory_id it returns.
Contact ShipBob support with your WRO ID. The warehouse might be experiencing delays.
Make a request to the GET Fulfillment Center endpoint at /2026-01/fulfillment-center to get a list of fulfillment centers you have access to.
inventory_id exists - Prevents WRO creation failures