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

All reports
Amazon Seller Central
Inventory

Amazon AWD Inventory Report (listInventory)

Amazon's AWD inventory report is the stock position half of Amazon Warehousing and Distribution: one row per SKU per snapshot, carrying what is physically on hand at AWD, what is still inbound to it, how much of the position can be distributed onward to FBA, how much is reserved, and a replenishment quantity — plus a second, smaller grain of expiration buckets for the SKUs that carry expiry dates. It is a position, not a flow: the endpoint has no date dimension and Amazon keeps no history, so the only time series that exists is the one you build by snapshotting it.

Known upstream as
listInventory
One row is
One row per SKU per snapshot
Refreshed
Point-in-time snapshot
Columns
9
Marketplaces
United States
History
None at Amazon's end. listInventory carries no date dimension and Amazon keeps no history, so a call answers the position as it stands and nothing else. The only history that exists is the stack of snapshots someone stored; the endpoint will not backfill — ask it for last month and there is no such request to make.
Latency
Live at the moment of the call. listInventory 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 unit between the inbound, on-hand and distributable columns after the physical event is not something the evidence behind this page establishes.
Requires

What this report contains

One row in the headline table is one SKU's stock position at Amazon Warehousing and Distribution at the moment the endpoint was called. Six columns say where that SKU's units are: total_onhand_quantity for what is standing in the warehouse, total_inbound_quantity for what is still travelling to it, available_distributable_quantity and reserved_distributable_quantity for how much of the position can be sent onward to FBA and how much is spoken for, and replenishment_quantity alongside them.

One pull answers two row grains, and the field reference below is both tables' columns in one list, which is why sku appears twice:

- The per-SKU position — sku, total_onhand_quantity, total_inbound_quantity, available_distributable_quantity, reserved_distributable_quantity, replenishment_quantity. One row per SKU per snapshot. - The expiration buckets — sku, expiration, onhand_quantity. One row per SKU per expiry date, and only for the minority of SKUs that carry dated stock at all.

sku is the join between them. How the quantity columns relate to each other — whether available and reserved partition the on-hand total, whether the buckets sum to it — is not something this page will assert, because the notes behind it do not.

The thing to hold on to is that this is a position, not a period. There is no date column in the file. The row is true as of the call and carries no claim about any other moment, which is what separates it from every report on this site that has a start_date.

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 listInventory operation, which answers pages of inventory directly rather than going through the usual createReport/getReport flow. A complete pull means following the cursor to the end of the list, and the combined JSON carries both grains nested inside the same document — the per-SKU position and the expiration buckets — rather than as separate responses, so they have to be flattened apart to be read as two tables of rows.

Five of the nine columns are conditional on one request parameter. Amazon returns inventoryDetails — the available, reserved and replenishment quantities — and expirationDetails only when the call passes details=SHOW; the parameter defaults to HIDE, which answers inventory summary totals alone. A pull that leaves it out comes back with the SKU and the two totals and nothing else, which is one reason an expiration table can be empty.

The trap is the one that gives the report its character: listInventory has no date dimension and Amazon keeps no history. You cannot ask it for last Tuesday, and no lookback parameter will make it answer one. The time series exists only because someone stored each response, and the endpoint will not backfill, so a gap in your snapshots is a gap nobody can fill later.

Pagination is the second 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 itself, or the loop never terminates and the same page is appended forever. Amazon also warns that the operation can return empty pages, so an empty page is not the end of the list — only a null nextToken is. It is worth reading that loop before trusting a row count.

There is a console view of the same stock: Amazon says the Amazon Warehousing and Distribution page in Seller Central is where you create and track shipments, view and move your AWD inventory, and track replenishments into the fulfilment network. Whether that page offers an export matching this file, and under what menu it sits, is not something Amazon documents publicly.

Sample rows

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

skutotal_onhand_quantitytotal_inbound_quantityavailable_distributable_quantityreserved_distributable_quantityreplenishment_quantity
SKU-EXAMPLE-01480012004000800600
SKU-EXAMPLE-0215000150000
SKU-EXAMPLE-03900300600300300
SKU-EXAMPLE-0402000000

Field reference

Main table

ColumnTypeDescription
skustringThe seller or merchant SKU, and the identity of a row in the per-SKU position table — one row per SKU per snapshot. It is the only column Amazon's schema marks required; every quantity beside it is optional. Nothing in the row says which snapshot it came from, because the endpoint carries no date dimension, so the pull's own date is the only time dimension the data has. The same column appears again further down because one pull answers two tables, and sku is what joins a SKU's expiration buckets back to this row.
total_onhand_quantityint64Units of this SKU physically held at Amazon Warehousing and Distribution at the moment of the call. This is the AWD position, not an FBA one — stock counted here is standing in the AWD warehouse and has not moved on to a fulfilment centre.
total_inbound_quantityint64Units in transit from the seller that have not yet been received at an AWD distribution centre, which is Amazon's own definition of the column. It is a quantity only: which shipments that quantity is made of, and whether any of them have stalled, is what the AWD inbound shipments report answers.
available_distributable_quantityint64The part of the AWD position that is available for downstream channel replenishment. The downstream channel is not only FBA: AWD distributes from one pool to the Amazon store and to non-Amazon channels, so this is the stock any replenishment can draw on. Read it beside the reserved figure rather than against the on-hand total; neither the evidence nor Amazon's reference states how the three relate arithmetically.
reserved_distributable_quantityint64Distributable stock that is spoken for rather than free: Amazon defines it as quantity reserved for a downstream channel replenishment order that is being prepared for shipment. How long a reservation stands is not established, so read a rising reserved figure against the replenishment orders in preparation rather than as a fault on its own.
replenishment_quantityint64Units in transit from AWD that have not yet been received at FBA — Amazon's own definition of this column. They have left the warehouse and have not yet landed at a fulfilment centre, so it describes stock in motion rather than stock standing in either place. Whether the figure reconciles with the AWD replenishment orders feed is not established here.

expiration

ColumnTypeDescription
skustringThe same seller SKU, repeated on the expiration grain. This column appears twice in the field reference because one pull answers two tables, and sku is what joins a SKU's expiration buckets back to its position row.
expirationtimestamp_msThe expiry date a bucket of stock carries, as epoch milliseconds. Only a minority of SKUs have expiration rows at all, so an absent bucket means the SKU does not carry dated stock — not that it expires today or never.
onhand_quantityint64Units on hand at AWD under one expiration date. It is the expiration grain's own quantity and is not the per-SKU column: whether a SKU's buckets add up to its total_onhand_quantity is not something the evidence settles.

Use cases

Knowing how much upstream stock you actually have. FBA inventory reports stop at the fulfilment centre. This is the only view of the buffer standing behind it, so "we have six weeks of cover" is a claim you can only check by reading AWD's on-hand position beside FBA's.

Separating stock that can move from stock that cannot. available_distributable_quantity and reserved_distributable_quantity split the AWD position into what a replenishment can draw on now and what is already spoken for. A healthy on-hand total with almost nothing available is a different problem from an empty warehouse, and only these two columns tell them apart.

Seeing what is still arriving. total_inbound_quantity is the units on their way in. Read it with the on-hand figure before deciding to reorder, or you order against a warehouse that is about to be refilled.

Watching dated stock before it becomes a write-off. For the SKUs that carry them, the expiration rows give a quantity per expiry date — which is the input to selling dated units down in time, and something no aggregate on-hand number can show.

Building the trend Amazon does not keep. Because the endpoint answers only "now", storing each snapshot is what turns this into a series: AWD cover by SKU over time, the day a SKU went to zero, the week reserved quantity started climbing. None of that can be recovered afterwards.

Telling an AWD position apart from AWD activity. This report counts units standing still. The inbound shipments report names the shipments arriving, and the replenishment orders report covers the moves out to FBA. A stock question is this one; a "where did it go" question is one of theirs.

Limitations and gotchas

There is no date in the file. Every row is as-of the call. If your pipeline does not stamp the snapshot date on ingest, the rows are undatable afterwards — and two snapshots concatenated become one indistinguishable pile.

History cannot be backfilled. Amazon keeps none. A month of missing pulls is a month that no amount of API access will recover, which makes this one of the few reports where a broken schedule is permanent data loss rather than a delay.

Most SKUs have no expiration rows. Only a minority of SKUs carry expiration buckets, so an empty expiration table is the normal case. Code that joins the position table to the buckets needs an outer join, or it will silently drop most of the catalogue.

The two grains do not sum to each other. Counting rows across both tables counts neither SKUs nor buckets. Whether a SKU's bucket quantities add up to its total_onhand_quantity is not established here — check it on a real file before reporting one as the other.

An empty response is ambiguous. Nothing comes back for a seller with no AWD stock and nothing comes back for a seller who is not enrolled in AWD either. The inbound shipments report is what tells those two apart.

This is an AWD position, not an FBA one. Units counted here are in the warehouse in front of FBA and do not appear in FBA's inventory reports, so adding the two totals together overstates what is standing in fulfilment centres by exactly the amount that still has to be replenished. Amazon does say that with auto-replenishment left on a product is "considered in stock and buyable" once AWD receives it, so outside FBA is not the same as unsellable.

replenishment_quantity is stock that has already left AWD. Amazon defines it as the quantity in transit from AWD that has not yet been received at FBA, so it is neither standing in the warehouse nor sellable through FBA — a dashboard that adds it to the on-hand total is counting units that are no longer there. Whether it ties out to the AWD replenishment orders report is a separate question this page does not answer.

FAQ

Does the AWD inventory report have a date column?

No. listInventory answers the position as it stands at the moment of the call and carries no date dimension at all, so the only date a row has is the one your own pull stamps on it when it lands.

How far back does AWD inventory history go?

Amazon keeps none, so the answer is however far back your own snapshots go. There is no request that returns a past position, which is why a gap in snapshots cannot be filled in later.

Why do most of my SKUs have no expiration rows?

Because only a minority of SKUs carry dated stock. The expiration buckets are a second, smaller table inside the same response, and a SKU with no bucket simply has no expiry date attached to its units.

What is the difference between on hand and distributable quantity at AWD?

On hand is what is physically in the AWD distribution centres. Amazon defines the distributable columns separately: available is the quantity available for downstream channel replenishment, and reserved is the quantity reserved for a downstream channel replenishment order that is being prepared for shipment. The exact arithmetic between them is not something this page asserts, because Amazon does not state it either.

Is AWD inventory the same as my FBA inventory?

No. AWD is the upstream warehouse that feeds fulfilment centres, so units counted here appear in neither the FBA inventory reports nor your FBA on-hand figure. Amazon does say that a product with auto-replenishment left on is considered in stock and buyable once AWD receives it, so AWD stock being outside FBA does not by itself make it unsellable.

Is there an Amazon report type for AWD inventory?

No. AWD has no report type and no asynchronous createReport flow. The data exists only behind the synchronous, paginated listInventory endpoint, which is why it is snapshotted rather than requested for a date range.

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", its availability table gives v2024-05-09 as sellers-only, and its roles table lists `listInventory` with Regions `NA`. Amazon publishes no other store for this API.
  • fields (total_onhand_quantity, total_inbound_quantity) — developer-docs.amazon.com/listinventory — `InventorySummary.totalOnhandQuantity` is "Total quantity that is present in AWD distribution centers" and `totalInboundQuantity` is "Total quantity that is in-transit from the seller and has not yet been received at an AWD Distribution Center".
  • fields (available_distributable_quantity, reserved_distributable_quantity) — developer-docs.amazon.com/listinventory — `InventoryDetails.availableDistributableQuantity` is "Quantity that is available for downstream channel replenishment" and `reservedDistributableQuantity` is "Quantity that is reserved for a downstream channel replenishment order that is being prepared for shipment". Neither is stated to be a part of the on-hand total.
  • fields (available_distributable_quantity, downstream channel) — sell.amazon.com/warehousing — AWD "is a low-cost bulk storage solution that distributes your inventory to the Amazon store and non-Amazon sales channels" and lets you "Send to other sales channels, like Walmart Fulfillment Services, all from a single pool of AWD inventory", so "downstream channel" is wider than FBA.
  • fields (replenishment_quantity) — developer-docs.amazon.com/listinventory — `InventoryDetails.replenishmentQuantity` is "Quantity that is in transit from AWD and has not yet been received at FBA".
  • fields (expiration, onhand_quantity) — developer-docs.amazon.com/listinventory — `ExpirationDetails.expiration` is "The expiration date of the SKU" and `onhandQuantity` is "The quantity that is present in AWD".
  • fields (which column is guaranteed) — developer-docs.amazon.com/listinventory — `InventorySummary` lists `required: [sku]`; every quantity is optional in the schema, and both `inventoryDetails` and `expirationDetails` "will only appear if the `details` parameter in the request is set to `SHOW`" (the parameter "Defaults to `HIDE,` which returns only inventory summary totals").
  • history_window — developer-docs.amazon.com/listinventory — listInventory's only query parameters are `sku`, `sortOrder`, `details`, `nextToken` and `maxResults`: there is no date filter, and no field in `InventorySummary` carries a date. The call therefore answers the present position only. Amazon publishes no retention figure for it.
  • latency — developer-docs.amazon.com/amazon-warehousing-and-distribution-api-use-case-guide — the AWD API's key tasks include "Return real-time information, such as expiration dates, about the inventory within an AWD distribution center and units that are reserved by a replenishment order".
  • how-to-get-it (pagination) — developer-docs.amazon.com/listinventory — `nextToken`: "To get a complete list, call this operation until `nextToken` is null. Note that this operation can return empty pages." `maxResults` is 1–200 with a default of 25.
  • 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, and track replenishments to the Amazon fulfillment network." No menu path and no export is described there.
  • requires — 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, so `requires` stays empty.
  • fields (sku) — developer-docs.amazon.com/listinventory — `InventorySummary.sku` is "The seller or merchant SKU" and is the schema's only `required` property, so it is the one column every row carries.
  • fields (quantity arithmetic) — developer-docs.amazon.com/listinventory — the schema states no relationship between `totalOnhandQuantity`, `availableDistributableQuantity`, `reservedDistributableQuantity` and the expiration buckets. The only place any addition appears is the operation's static sandbox payload (on-hand 20 against available 10 and reserved 10; buckets of 10 and 10), which is an example rather than a statement, so the page asserts no arithmetic.
  • fields (total_inbound_quantity, which shipments) — developer-docs.amazon.com/listinboundshipments — Amazon publishes the AWD inbound shipment statuses (`CREATED`, `SHIPPED`, `IN_TRANSIT`, `RECEIVING`, `DELIVERED`, `CLOSED`, `CANCELLED`) but never states which of them a unit must be in to count in `totalInboundQuantity`, so the status set behind the column stays unverified.
  • fields (replenishment_quantity, reconciliation) — developer-docs.amazon.com/listreplenishmentorders — the replenishment orders reference carries per-SKU order quantities and order statuses and states no relationship to the inventory column, so Amazon publishes no tie-out between the two.
  • requires (developer role) — developer-docs.amazon.com/get-inventory-summaries — 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, and no taxonomy term covers it or AWD enrolment, so `requires` stays empty.
  • requires (Professional plan) — sell.amazon.com/warehousing — the getting-started steps say "We recommend using a Professional selling account so you can take advantage of a full range of services", which is a recommendation rather than a requirement, so `professional-plan` is not claimed here.
  • CONFLICT (doc vs evidence), expiration type — developer-docs.amazon.com/listinventory types `ExpirationDetails.expiration` as a JSON `format: date-time` string, e.g. "2027-01-12T10:00:00.000Z". The production evidence behind this page types the column `timestamp_ms` (epoch milliseconds). The page follows the evidence — the raw JSON is plausibly ISO-8601 while the typed column stores epoch ms — and nothing was changed either way.
  • FBA sellability — sell.amazon.com/warehousing — "If you leave auto-replenishment enabled, your products are considered in stock and buyable when they're received by AWD." AWD units therefore sit outside FBA's inventory reports without being unsellable, which is what the limitations and FAQ now say.