> ## Documentation Index
> Fetch the complete documentation index at: https://developers.redo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ReplenishmentReport

> One product at a warehouse location on the replenishment report: pickable and reserve inventory, demand, thresholds, and replenishment status (OpenSearch-backed).

**Required scopes:** [`inventory_read`](/docs/api-reference/v3/reference/scopes#scope-inventory_read)

<ResponseField name="belowMinimum" type="Boolean!" required>
  Whether pickable quantity is below the configured minimum.
</ResponseField>

<ResponseField name="blockedReason" type="String">
  Why replenishment is blocked for this row, when stock is needed but cannot be moved.
</ResponseField>

<ResponseField name="demandShortfall" type="Int!" required>
  Demand shortfall versus available pickable stock.
</ResponseField>

<ResponseField name="emptyPickableBins" type={<a href="/docs/api-reference/v3/reference/inventory/replenishment-report-bin">[ReplenishmentReportBin!]!</a>} required>
  Empty pickable bins assigned to this product.

  <Expandable title="fields" lazyRender>
    <ResponseField name="name" type="String!" required>
      Bin name.
    </ResponseField>

    <ResponseField name="quantity" type="Int!" required>
      Quantity in this bin.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="fillRatio" type={<a href="/docs/api-reference/v3/reference/common/decimal">Decimal!</a>} required>
  Ratio of pickable on-hand to target capacity (0–1).
</ResponseField>

<ResponseField name="hasEmptyPickableBin" type="Boolean!" required>
  Whether an assigned pickable bin is empty.
</ResponseField>

<ResponseField name="hasPendingReplenishment" type="Boolean!" required>
  Whether an open replenishment request exists.
</ResponseField>

<ResponseField name="hasThreshold" type="Boolean!" required>
  Whether a replenishment threshold is configured.
</ResponseField>

<ResponseField name="id" type="ID!" required>
  Stable report row id (product and location pair in the index).
</ResponseField>

<ResponseField name="increment" type="Int">
  Configured replenishment increment.
</ResponseField>

<ResponseField name="location" type={<a href="/docs/api-reference/v3/reference/inventory/location">Location</a>}>
  Warehouse location for this report row.

  <Expandable title="fields" lazyRender>
    <ResponseField name="city" type="String">
      The city of the location's address.
    </ResponseField>

    <ResponseField name="company" type="String">
      The company name associated with the location.
    </ResponseField>

    <ResponseField name="countryCode" type="String">
      The country code, e.g. "US".
    </ResponseField>

    <ResponseField name="createdAt" type={<a href="/docs/api-reference/v3/reference/common/date-time">DateTime!</a>} required>
      When the record was created.
    </ResponseField>

    <ResponseField name="id" type="ID!" required>
      The id of this location.
    </ResponseField>

    <ResponseField name="inventoryItems" type={<a href="/docs/api-reference/v3/pagination">InventoryItemConnection!</a>} required>
      Traceable inventory units at this warehouse.

      **Requires:** [`inventory_read`](/docs/api-reference/v3/reference/scopes#scope-inventory_read)

      <Expandable title="fields" lazyRender>
        **Arguments**

        <ResponseField name="after" type="String">
          Forward pagination cursor — returns items after it. Pass an `edges[].cursor` or `pageInfo.endCursor` from a previous page.
        </ResponseField>

        <ResponseField name="before" type="String">
          Backward pagination cursor — returns items before it. Pass an `edges[].cursor` or `pageInfo.startCursor` from a previous page.
        </ResponseField>

        <ResponseField name="first" type="Int">
          Forward pagination: returns the first N items (max 100, default 25). Use with `after`; mutually exclusive with `last`/`before`.
        </ResponseField>

        <ResponseField name="last" type="Int">
          Backward pagination: returns the last N items (max 100, default 25). Use with `before`; mutually exclusive with `first`/`after`.
        </ResponseField>

        **Fields**

        <ResponseField name="edges" type={<a href="/docs/api-reference/v3/pagination">[InventoryItemEdge!]!</a>} required>
          The list of edges (each a node plus its pagination `cursor`).
        </ResponseField>

        <ResponseField name="nodes" type={<a href="/docs/api-reference/v3/reference/inventory/inventory-item">[InventoryItem!]!</a>} required>
          The nodes in this page, without the edge/cursor wrapper — a convenience over `edges`.
        </ResponseField>

        <ResponseField name="pageInfo" type={<a href="/docs/api-reference/v3/pagination">PageInfo!</a>} required>
          Pagination metadata for the current page.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="inventoryLevels" type={<a href="/docs/api-reference/v3/pagination">LocationInventoryLevelConnection!</a>} required>
      Per-product inventory levels held at this location.

      **Requires:** [`inventory_read`](/docs/api-reference/v3/reference/scopes#scope-inventory_read)

      <Expandable title="fields" lazyRender>
        **Arguments**

        <ResponseField name="after" type="String">
          Forward pagination cursor — returns items after it. Pass an `edges[].cursor` or `pageInfo.endCursor` from a previous page.
        </ResponseField>

        <ResponseField name="before" type="String">
          Backward pagination cursor — returns items before it. Pass an `edges[].cursor` or `pageInfo.startCursor` from a previous page.
        </ResponseField>

        <ResponseField name="first" type="Int">
          Forward pagination: returns the first N items (max 100, default 25). Use with `after`; mutually exclusive with `last`/`before`.
        </ResponseField>

        <ResponseField name="last" type="Int">
          Backward pagination: returns the last N items (max 100, default 25). Use with `before`; mutually exclusive with `first`/`after`.
        </ResponseField>

        **Fields**

        <ResponseField name="edges" type={<a href="/docs/api-reference/v3/pagination">[LocationInventoryLevelEdge!]!</a>} required>
          The list of edges (each a node plus its pagination `cursor`).
        </ResponseField>

        <ResponseField name="nodes" type={<a href="/docs/api-reference/v3/reference/inventory/location-inventory-level">[LocationInventoryLevel!]!</a>} required>
          The nodes in this page, without the edge/cursor wrapper — a convenience over `edges`.
        </ResponseField>

        <ResponseField name="pageInfo" type={<a href="/docs/api-reference/v3/pagination">PageInfo!</a>} required>
          Pagination metadata for the current page.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="name" type="String!" required>
      The location's display name.
    </ResponseField>

    <ResponseField name="phone" type="String">
      The contact phone number for the location.
    </ResponseField>

    <ResponseField name="postalCode" type="String">
      The postal or ZIP code, e.g. "84101".
    </ResponseField>

    <ResponseField name="stateCode" type="String">
      The state or province code, e.g. "UT".
    </ResponseField>

    <ResponseField name="storageLocations" type={<a href="/docs/api-reference/v3/pagination">StorageLocationConnection!</a>} required>
      Bins and other storage locations within this warehouse.

      **Requires:** [`locations_read`](/docs/api-reference/v3/reference/scopes#scope-locations_read)

      <Expandable title="fields" lazyRender>
        **Arguments**

        <ResponseField name="after" type="String">
          Forward pagination cursor — returns items after it. Pass an `edges[].cursor` or `pageInfo.endCursor` from a previous page.
        </ResponseField>

        <ResponseField name="before" type="String">
          Backward pagination cursor — returns items before it. Pass an `edges[].cursor` or `pageInfo.startCursor` from a previous page.
        </ResponseField>

        <ResponseField name="first" type="Int">
          Forward pagination: returns the first N items (max 100, default 25). Use with `after`; mutually exclusive with `last`/`before`.
        </ResponseField>

        <ResponseField name="last" type="Int">
          Backward pagination: returns the last N items (max 100, default 25). Use with `before`; mutually exclusive with `first`/`after`.
        </ResponseField>

        **Fields**

        <ResponseField name="edges" type={<a href="/docs/api-reference/v3/pagination">[StorageLocationEdge!]!</a>} required>
          The list of edges (each a node plus its pagination `cursor`).
        </ResponseField>

        <ResponseField name="nodes" type={<a href="/docs/api-reference/v3/reference/inventory/storage-location">[StorageLocation!]!</a>} required>
          The nodes in this page, without the edge/cursor wrapper — a convenience over `edges`.
        </ResponseField>

        <ResponseField name="pageInfo" type={<a href="/docs/api-reference/v3/pagination">PageInfo!</a>} required>
          Pagination metadata for the current page.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="street1" type="String">
      The first line of the street address.
    </ResponseField>

    <ResponseField name="street2" type="String">
      The second line of the street address.
    </ResponseField>

    <ResponseField name="updatedAt" type={<a href="/docs/api-reference/v3/reference/common/date-time">DateTime!</a>} required>
      When the record was last updated.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="lotTracked" type="Boolean!" required>
  Whether this product is lot-tracked at the warehouse.
</ResponseField>

<ResponseField name="maximumPickable" type="Int">
  Configured maximum pickable quantity, if set.
</ResponseField>

<ResponseField name="minimumPickable" type="Int!" required>
  Configured minimum pickable quantity.
</ResponseField>

<ResponseField name="needsReplenishment" type="Boolean!" required>
  Whether this row is flagged as needing replenishment under current rules.
</ResponseField>

<ResponseField name="openReplenishmentStartedAt" type={<a href="/docs/api-reference/v3/reference/common/date-time">DateTime</a>}>
  When the open replenishment request started.
</ResponseField>

<ResponseField name="openReplenishmentStatus" type="String">
  Status of the open replenishment request, if any.
</ResponseField>

<ResponseField name="overstockBins" type={<a href="/docs/api-reference/v3/reference/inventory/replenishment-report-bin">[ReplenishmentReportBin!]!</a>} required>
  Overstock/reserve bins holding this product.

  <Expandable title="fields" lazyRender>
    <ResponseField name="name" type="String!" required>
      Bin name.
    </ResponseField>

    <ResponseField name="quantity" type="Int!" required>
      Quantity in this bin.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="overstockOnHand" type="Int!" required>
  Total overstock/reserve on-hand quantity.
</ResponseField>

<ResponseField name="pickableBinCount" type="Int!" required>
  Number of pickable bins holding this product.
</ResponseField>

<ResponseField name="pickableBins" type={<a href="/docs/api-reference/v3/reference/inventory/replenishment-report-bin">[ReplenishmentReportBin!]!</a>} required>
  Pickable bins holding this product.

  <Expandable title="fields" lazyRender>
    <ResponseField name="name" type="String!" required>
      Bin name.
    </ResponseField>

    <ResponseField name="quantity" type="Int!" required>
      Quantity in this bin.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="pickableCapacity" type="Int">
  Configured pickable capacity, if known.
</ResponseField>

<ResponseField name="pickableOnHand" type="Int!" required>
  Total pickable on-hand quantity.
</ResponseField>

<ResponseField name="pickableShortfall" type="Int!" required>
  Pickable shortfall versus configured need and demand.
</ResponseField>

<ResponseField name="productId" type="ID!" required>
  Product id for this report row.
</ResponseField>

<ResponseField name="receivingOnHand" type="Int!" required>
  Receiving area on-hand quantity.
</ResponseField>

<ResponseField name="sameLotAvailable" type="Boolean!" required>
  For lot-tracked products, whether matching lot stock is available in reserve.
</ResponseField>

<ResponseField name="shortOfStock" type="Boolean!" required>
  Whether the product is short of stock for unpicked demand.
</ResponseField>

<ResponseField name="sku" type="String">
  Product SKU.
</ResponseField>

<ResponseField name="suggestedQuantity" type="Int!" required>
  Suggested quantity to replenish.
</ResponseField>

<ResponseField name="title" type="String">
  Product title.
</ResponseField>

<ResponseField name="unpickedItemTotal" type="Int!" required>
  Unpicked item demand.
</ResponseField>

<ResponseField name="unpickedShipmentCount" type="Int!" required>
  Shipments blocked on pickable stock for this product.
</ResponseField>

<ResponseField name="upc" type="String">
  Product UPC.
</ResponseField>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.