Run everything you never had time to implement. Define your process once, and keep it running with Qore.

All reports
Amazon Seller Central
Fulfillment & Shipments

Amazon AWD Inbound Shipments Report (listInboundShipments)

Amazon's AWD inbound shipments report is the supplier-to-warehouse leg of Amazon Warehousing and Distribution: one row per inbound shipment, carrying the shipment's id, the AWD order it belongs to, its status, an external reference and the timestamps for when the record was created and last updated. It is the report that turns the in-transit number on the AWD inventory report into named shipments you can chase, and the only one that can tell "not enrolled in AWD" apart from "enrolled with nothing stored yet". It is summaries only, so carrier, tracking and received quantities are not on it.

Known upstream as
listInboundShipments
One row is
One row per shipment
Refreshed
Point-in-time snapshot
Columns
6
Marketplaces
United States
History
The report carries no data date range at all: it lists shipments, not days. The list operation is filtered with `updatedAfter` and `updatedBefore`, so a file pulled over a rolling window holds the shipments touched inside that window rather than every shipment that exists. The window is whatever those two parameters are set to; how far back the AWD endpoint itself will answer is not published.
Latency
Live at the moment of the call. listInboundShipments is a synchronous endpoint, so there is no report to request and poll for and no publication lag to wait out. How quickly Amazon moves a shipment's status after the event it describes is not established here.
Requires

What this report contains

One row is one inbound shipment on the supplier → AWD leg: stock travelling from wherever it was made or held into an Amazon Warehousing and Distribution facility, before any of it moves on to FBA. Six columns, in three pairs. shipment_id and order_id say which shipment this is and which AWD order it belongs to. shipment_status says where Amazon thinks it has got to. created_at and updated_at say when the record appeared and when it last changed, and external_reference_id is the hook back to your own paperwork.

The report exists because of what the AWD inventory report leaves open at the top. That report says how much stock is on hand and how much is in transit to AWD — but not which shipments that transit is, whether any of them have stalled, or which order they belong to. This is the report that names them.

Only three of the six columns are guaranteed: order_id, shipment_id and shipment_status. The other three come from the same summary and may simply not be there, so treat them as optional rather than as the shape of every row.

What is deliberately not here is the detail underneath a shipment: carrier, tracking number and expected-versus-received quantities are not on the summary, and getting them means calling Amazon's per-shipment detail operation once for every row. That is a different report, and it does not exist yet.

The record carries no data date range — it is a list of shipments as they stand at the moment of the call, not a day's data — and the list operation is filtered on updatedAt over a rolling window. Each file is a snapshot rather than a period: it says where the shipments it names had got to when it was pulled, and the same call an hour later can answer differently. Consumers therefore dedupe on (shipment_id, updated_at) rather than on shipment_id alone.

How to get it

There is no report type to request and nothing to poll. The data comes from the Selling Partner API's Amazon Warehousing and Distribution (AWD) API, through the synchronous listInboundShipments operation, which answers pages of shipment summaries directly rather than going through the usual createReport/getReport flow.

Pagination is the trap. AWD hands back an opaque cursor and you follow it until it comes back null — which means a caller has to guard against a cursor that repeats, or the loop never ends and the same page is appended forever. It is the one part of the loop worth getting right before trusting a row count.

The second trap is the rolling updatedAt filter. Ask for shipments updated in the last N days and you get exactly that: a shipment nobody has touched inside the window is absent from the file, even though it is still open. The file is a list of what moved, not an inventory of what exists.

The third is the detail call. Carrier, tracking and expected-versus-received quantities need the per-shipment detail operation, which is one call per row against a 2 requests-per-second limit — a thousand open shipments is over eight minutes of nothing but detail calls.

There is an AWD page inside Seller Central — Amazon points sellers at it to create and track shipments and to move AWD inventory — and the API and the console see each other only partly: a shipment created through the API shows up in Seller Central once it is confirmed, and one created in Seller Central can be read back through listInboundShipments. Amazon also says there are no AWD reports in the API at all and points sellers at Seller Central to download an Inbound Shipment report by hand — but where that page sits in the menu, and what columns that download carries, is not published outside the logged-in help centre.

Sample rows

Illustrative values, not data from a real account. Shown to give the shape of the file.

shipment_idorder_idshipment_statusexternal_reference_idcreated_atupdated_at
AWDSHIP-EXAMPLE-01AWDORDER-EXAMPLE-01IN_TRANSITPO-EXAMPLE-10012026-09-14T09:00:00Z2026-09-18T11:30:00Z
AWDSHIP-EXAMPLE-02AWDORDER-EXAMPLE-02RECEIVINGPO-EXAMPLE-10022026-09-11T08:05:00Z2026-09-21T08:15:00Z
AWDSHIP-EXAMPLE-03AWDORDER-EXAMPLE-03CLOSEDPO-EXAMPLE-10032026-08-30T16:40:00Z2026-09-12T14:05:00Z
AWDSHIP-EXAMPLE-04AWDORDER-EXAMPLE-04SHIPPED2026-09-20T07:25:00Z2026-09-20T07:25:00Z

Field reference

ColumnTypeDescription
shipment_idstringAmazon's identifier for one inbound shipment into Amazon Warehousing and Distribution. One of the three fields the endpoint guarantees on a summary, and half of the key consumers dedupe on — shipment_id together with updated_at, because a shipment reappears in every pull whose window it falls inside.
order_idstringThe AWD order this shipment belongs to. Guaranteed on the summary, and the reason this report answers a question the inventory report cannot: inventory says how much stock is in transit, this says which order the transit is against. Amazon's AWD guide says createInbound creates a single shipment per order, so for orders raised through the API an order_id and a shipment_id line up one to one; nothing is published about shipments created in Seller Central, so do not assume that holds everywhere.
shipment_statusstringWhere Amazon says the shipment has got to. The third guaranteed field, and the column the stalled-shipment question is asked of — read with updated_at, since a status that has not moved in weeks is the signal, not the status string on its own. Amazon's AWD reference documents seven values — CREATED, SHIPPED, IN_TRANSIT, RECEIVING, DELIVERED, CLOSED and CANCELLED, the last two being final states — though which of them a real file carries is not established here.
external_reference_idstringA reference carried alongside the shipment for matching it to a record outside Amazon — a purchase order or a supplier's own shipment number. Amazon's reference calls it an optional client-provided id for correlating the shipment with your own resources, so it is you who fills it, and only when you chose to. Not one of the guaranteed fields, so expect it to be missing on some rows and never key a join on it alone.
created_attimestamp_msWhen the shipment record came into being, as epoch milliseconds. Not a guaranteed field. It orders shipments by age, which is what makes a long gap between it and updated_at worth looking at.
updated_attimestamp_msWhen the shipment record last changed, as epoch milliseconds. This is the field the endpoint's updatedAfter and updatedBefore filters work on — a rolling window of recently updated shipments — and the other half of the (shipment_id, updated_at) pair consumers dedupe on, so the same shipment carries a different value in each file where something about it moved.

Use cases

Telling "not enrolled in AWD" apart from "enrolled with nothing stored". An empty inventory response means either one, and those are very different conversations to have with a seller. Any inbound shipment at all settles it — which is why this report is worth running even for accounts whose AWD inventory comes back empty.

Naming the stock that inventory only counts. The AWD inventory report gives you a quantity in transit. This gives you the shipments that quantity is made of, so "3,400 units inbound" becomes four shipments with ids, statuses and dates you can act on.

Finding shipments that have stalled. A row whose shipment_status has not advanced while updated_at recedes further into the past is the one worth chasing. Amazon documents CLOSED and CANCELLED as the two final states, so "still open" is everything else — CREATED, SHIPPED, IN_TRANSIT, RECEIVING and DELIVERED. Sorting those by updated_at ascending puts the stalled ones at the top of the list.

Tying Amazon's record to your own. external_reference_id is the column that matches a shipment back to a purchase order or a supplier's shipment number, which is what makes a reconciliation between your supply plan and Amazon's view of it possible at all.

Putting shipments beside the order they belong to. order_id joins these rows to the AWD order behind them, so a shipment can be read in the context of what was ordered rather than as a bare id.

Building the history Amazon does not keep. Because each pull carries updated_at, storing every pull gives you a status timeline per shipment — when it shipped, when it started receiving, when it closed — which no single call to the endpoint can answer.

Limitations and gotchas

Summaries only. Carrier, tracking number and expected-versus-received quantities are not on this report. Anything that needs them needs the per-shipment detail operation, one call per shipment against a 2 requests-per-second limit.

Three of the six columns are not guaranteed. order_id, shipment_id and shipment_status are the ones the endpoint promises. external_reference_id, created_at and updated_at come from the same summary and may be absent, so code that assumes they are always populated will break on the row where they are not.

The file is not a list of all open shipments. It is filtered on updatedAt over a rolling window, so a shipment that has not changed recently is simply not in it. Treating one file as the complete picture undercounts exactly the shipments that have gone quiet — which are the ones worth looking at.

The same shipment appears in many pulls. There is no data date range on the record, and windows overlap. Dedupe on (shipment_id, updated_at); counting rows across accumulated pulls counts the same shipment once per update it received.

Do not filter on status strings you have not seen. Amazon documents seven statuses — CREATED, SHIPPED, IN_TRANSIT, RECEIVING, DELIVERED, CLOSED and CANCELLED — but a documented value set is not evidence about what one account's file contains. Check a real file before writing a query that hinges on one.

The timestamps are record events. Amazon defines createdAt as when the shipment was created and updatedAt as when it was last updated: both describe the shipment record, and neither is documented as marking a physical milestone such as the day the supplier despatched or the day AWD received. Do not read a despatch or receipt date off either.

This is not the AWD replenishment orders report. That one covers the other leg, AWD out to FBA. A shipment here is stock arriving at AWD; nothing on this page says anything about what leaves it.

It is not an FBA inbound shipment either. The FBA inbound reports cover shipments into Amazon fulfilment centres. AWD is the warehouse in front of them, and the two sets of shipment ids do not overlap.

FAQ

What is the difference between this and the AWD inventory report?

The inventory report says how much of each SKU is on hand at AWD and how much is in transit to it. This report says which shipments that in-transit stock actually is, what state each one is in, and which AWD order it belongs to. One counts units, the other names shipments.

Why is there no carrier or tracking number on this report?

Because the list endpoint returns summaries only. Carrier, tracking and expected-versus-received quantities live on the per-shipment detail call, which has to be made once per shipment against a two-requests-per-second limit, so they are not something a list pull can carry.

Does an empty AWD inventory response mean I am not enrolled in AWD?

Not necessarily — it means either that, or that you are enrolled with nothing stored yet. This report settles it: if any inbound shipment comes back, the account is enrolled and stock is on its way.

Why does the same shipment show up more than once?

Calls are filtered on the updated timestamp over a rolling window, and consecutive windows overlap, so a shipment that changed several times appears once per change. Deduplicate on the shipment id and the updated timestamp together, and take the latest.

Is this the same as the AWD replenishment orders report?

No. This covers the supplier-to-AWD leg, stock arriving at the warehouse. Replenishment orders cover the AWD-to-FBA leg, stock leaving it for fulfilment centres. They share the word shipment and very little else.

How far back does it go?

Further back than one file shows, but Amazon publishes no retention figure and no earliest date the endpoint will answer. Each call only holds shipments updated inside a rolling window, so the history worth relying on is the one you build by storing every pull.

Sources

Every researched claim on this page, and the Amazon or Walmart page it came from.

  • marketplaces — developer-docs.amazon.com/amazon-warehousing-and-distribution-api-use-case-guide — the AWD API guide states "This API is available in the Amazon US store", and its availability table gives v2024-05-09 as sellers-only. Amazon publishes no other store for this API.
  • fields (shipment_status) — developer-docs.amazon.com/listinboundshipments — the `InboundShipmentStatus` schema enumerates CREATED, SHIPPED, IN_TRANSIT, RECEIVING, DELIVERED, CLOSED and CANCELLED, and describes CLOSED ("No more actions required") and CANCELLED as final states.
  • fields (external_reference_id) — developer-docs.amazon.com/listinboundshipments — `InboundShipmentSummary.externalReferenceId` is an "Optional client-provided reference ID that can be used to correlate this shipment with client resources", so the seller populates it, not Amazon.
  • fields (created_at, updated_at) — developer-docs.amazon.com/listinboundshipments — `InboundShipmentSummary` defines createdAt as "Timestamp when the shipment was created" and updatedAt as "Timestamp when the shipment was updated"; neither is documented as marking a physical milestone.
  • fields (which three are guaranteed) — developer-docs.amazon.com/listinboundshipments — `InboundShipmentSummary` lists `required: [orderId, shipmentId, shipmentStatus]`, which is where the three guaranteed fields come from and leaves the other three optional in the schema.
  • how-to-get-it (rate limits) — developer-docs.amazon.com/awd_2024-05-09-reference — listInboundShipments has a usage plan of 1 request per second, burst 1; getInboundShipment, the per-shipment detail call, is 2 requests per second, burst 2.
  • how-to-get-it (Seller Central) — sell.amazon.com/warehousing — "Visit the Amazon Warehousing and Distribution page in Seller Central to create and track shipments, view and move your AWD inventory". No menu path and no export is described there.
  • how-to-get-it (Seller Central) — developer-docs.amazon.com/amazon-warehousing-and-distribution-api-use-case-guide — "Interoperability between API and Seller Central is currently limited": API-created shipments appear in Seller Central once confirmed, and shipments created in Seller Central can be read back through `listInboundShipments`.
  • how-to-get-it (Seller Central export) — developer-docs.amazon.com/track-an-inbound-shipment-with-sku-details — "Currently, there are no reports for AWD available in the API. You can use Seller Central to manually download Inbound Shipment report, Inventory Ledger report and Fee Reports." Amazon names the manual download but publishes neither its menu path nor its columns outside the logged-in help centre.
  • cadence — developer-docs.amazon.com/listinboundshipments — the operation "Retrieves a summary of all the inbound AWD shipments associated with a merchant", filtered by `updatedAfter` and `updatedBefore`, and no property on `InboundShipmentSummary` carries a data date range. It answers the state each shipment is in when the call is made, which is what `cadence: snapshot` records.
  • history_window — developer-docs.amazon.com/listinboundshipments — the reference documents `updatedAfter` and `updatedBefore` as inclusive ISO-8601 filters and `maxResults` as 1–200, but publishes no retention figure and no earliest date the endpoint will answer. The nearest published limit is an order rule rather than a retention one: developer-docs.amazon.com/create-an-inbound-order — "Inbound shipments must be confirmed within 90 days after creation. After this period, the inbound order expires." How far back the endpoint answers stays unpublished.
  • latency — developer-docs.amazon.com/listinboundshipments — the reference names the event behind each status (IN_TRANSIT: "The carrier has notified AWD that the shipment is in transit between origin and destination node") but states no lag between that event and the status changing, and sell.amazon.com/warehousing carries no freshness statement either. How stale a status can be is unpublished, which is what the page says.
  • fields (shipment_status, which values a file carries) — developer-docs.amazon.com/listinboundshipments is the only place Amazon publishes the value set, and it documents the contract rather than the contents of any account's file. Amazon publishes nothing about which of the seven actually occur, so the page presents them as documented values and the sample's four as illustration.
  • fields (order_id, shipments per order) — developer-docs.amazon.com/create-an-inbound-order — "Call the `createInbound` operation (Amazon creates a single shipment per order)", and "The inbound `ShipmentId` generates only upon confirmation of the inbound order". That covers orders raised through the API; Amazon states nothing about shipments created in Seller Central, so the page does not claim the one-to-one holds everywhere.
  • fields (updated_at, ever absent) — developer-docs.amazon.com/listinboundshipments — `updatedAt` sits outside `InboundShipmentSummary`'s `required` list, so it is optional by contract even though the list operation is filtered on it. Amazon publishes nothing about whether a real row ever omits it, so the page treats it as optional rather than guaranteed.
  • requires (AWD enrolment) — sell.amazon.com/warehousing — "AWD is available for a variety of FBA products" and "If you're an FBA seller, there are no fees for enrolling in AWD". Neither states an FBA entitlement requirement, and the getting-started steps only "recommend using a Professional selling account", so neither `fba` nor a plan term is claimed. No taxonomy term covers AWD enrolment and `requires` carries seller entitlements only, so the list stays empty.
  • requires (developer role) — developer-docs.amazon.com/retrieve-and-filter-inbound-shipments — the tutorial's prerequisites are the selling partner's authorization plus the "Amazon Warehousing and Distribution role" on the developer profile and in the application registration. That is an application permission rather than a seller entitlement, so it is recorded here and not in `requires`.
  • CONFLICT (doc vs evidence), timestamp type — developer-docs.amazon.com/listinboundshipments types `createdAt` and `updatedAt` as JSON `format: date-time` strings, e.g. "2023-06-07T12:12:09.061Z". Production evidence types both columns `timestamp_ms` (epoch milliseconds). The page follows the production typing — the raw JSON is plausibly ISO-8601 while the typed table stores epoch ms — and nothing was changed either way.