> ## 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.

# searchReplenishmentReports

> Search the replenishment report (OpenSearch location bin inventory index) for products at a warehouse location. Narrow results with textSearch on product title, SKU, UPC, or barcodes. Each row includes replenishment status fields such as needsReplenishment and suggestedQuantity. Always scoped to the authenticated account and the requested location.

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

## Arguments

<ResponseField name="after" type="String">
  Forward pagination cursor.
</ResponseField>

<ResponseField name="before" type="String">
  Backward pagination cursor.
</ResponseField>

<ResponseField name="first" type="Int">
  Forward page size (default 25, max 100).
</ResponseField>

<ResponseField name="last" type="Int">
  Backward page size (default 25, max 100).
</ResponseField>

<ResponseField name="locationId" type="ID!" required>
  Warehouse location to search.
</ResponseField>

<ResponseField name="reverse" type="Boolean">
  Reverse the selected sort direction.
</ResponseField>

<ResponseField name="sortKey" type={<a href="/docs/api-reference/v3/reference/inventory/replenishment-report-sort-key">ReplenishmentReportSortKey</a>}>
  Sort key. Defaults to UPDATED\_AT, newest first.
</ResponseField>

<ResponseField name="textSearch" type="String">
  Filter by product: case-insensitive match on title, SKU, UPC, and barcodes.
</ResponseField>

## Returns

<ResponseField name="searchReplenishmentReports" type={<a href="/docs/api-reference/v3/pagination">ReplenishmentReportConnection!</a>} required>
  A paginated list of ReplenishmentReport items.

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

      <Expandable title="fields" lazyRender>
        <ResponseField name="cursor" type="String!" required>
          Opaque cursor for this item; pass to `after`/`before` to page from here.
        </ResponseField>

        <ResponseField name="node" type={<a href="/docs/api-reference/v3/reference/inventory/replenishment-report">ReplenishmentReport!</a>} required>
          The item at this edge.

          <Expandable title="fields" lazyRender>
            <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.
            </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.
            </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.
            </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.
            </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>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

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

      <Expandable title="fields" lazyRender>
        <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>
              </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>
              </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>
              </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>
      </Expandable>
    </ResponseField>

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

      <Expandable title="fields" lazyRender>
        <ResponseField name="endCursor" type="String">
          Cursor of the last edge in this page; pass to `after` to page forward.
        </ResponseField>

        <ResponseField name="hasNextPage" type="Boolean!" required>
          Whether more items exist after this page (drives forward pagination with `first`/`after`).
        </ResponseField>

        <ResponseField name="hasPreviousPage" type="Boolean!" required>
          Whether more items exist before this page (drives backward pagination with `last`/`before`).
        </ResponseField>

        <ResponseField name="startCursor" type="String">
          Cursor of the first edge in this page; pass to `before` to page backward.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

## Example

```graphql theme={null}
query {
  searchReplenishmentReports(after: "...", before: "...", first: 10, last: 10, locationId: "...", reverse: true, sortKey: DEMAND_SHORTFALL, textSearch: "...") {
    nodes {
      belowMinimum
      blockedReason
      demandShortfall
      fillRatio
      hasEmptyPickableBin
      hasPendingReplenishment
      hasThreshold
      id
      # ...
    }
    pageInfo { hasNextPage endCursor }
  }
}
```


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