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

# storageLocations

> List storage locations (bins, totes, and other slots), newest first. Pass `locationId`, `name`, or both.

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

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

<ResponseField name="locationId" type="ID">
  Only return storage locations at this warehouse. List warehouses with `locations`.
</ResponseField>

<ResponseField name="name" type="String">
  Only return storage locations whose name matches, ignoring case (same rule as the per-location unique index). Without `locationId`, returns the matching storage location in each warehouse.
</ResponseField>

<ResponseField name="orderBy" type={<a href="/docs/api-reference/v3/reference/inventory/storage-location-sort-key">StorageLocationSortKey</a>}>
  Which key to sort by (creation time, newest first). Combine with `reverse` to flip direction.
</ResponseField>

<ResponseField name="reverse" type="Boolean">
  Reverses the sort direction selected by `orderBy` (or its default).
</ResponseField>

## Returns

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

  <Expandable title="fields" lazyRender>
    <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`).

      <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/storage-location">StorageLocation!</a>} required>
          The item at this edge.

          <Expandable title="fields" lazyRender>
            <ResponseField name="binInventoryLevels" type={<a href="/docs/api-reference/v3/pagination">BinInventoryLevelConnection!</a>} required>
              Product quantities held in this storage 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="inStock" type="Boolean">
                  true returns only rows holding stock (quantity above zero). false returns only empty or negative rows, such as emptied assignments and LOST balancing entries.
                </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>

                <ResponseField name="orderBy" type={<a href="/docs/api-reference/v3/reference/inventory/bin-inventory-level-sort-key">BinInventoryLevelSortKey</a>}>
                  Which key to sort by (creation time, newest first). Combine with `reverse` to flip direction.
                </ResponseField>

                <ResponseField name="reverse" type="Boolean">
                  Reverses the sort direction selected by `orderBy` (or its default).
                </ResponseField>
              </Expandable>
            </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 storage location.
            </ResponseField>

            <ResponseField name="inventoryItems" type={<a href="/docs/api-reference/v3/pagination">InventoryItemConnection!</a>} required>
              Inventory items currently in this storage 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="isSellable" type="Boolean!" required>
              Whether on-hand quantity in this slot counts as sellable inventory.
            </ResponseField>

            <ResponseField name="location" type={<a href="/docs/api-reference/v3/reference/inventory/location">Location!</a>} required>
              The warehouse this storage location belongs to.

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

            <ResponseField name="name" type="String!" required>
              The display name of the bin or slot.
            </ResponseField>

            <ResponseField name="priority" type={<a href="/docs/api-reference/v3/reference/inventory/storage-location-priority">StorageLocationPriority</a>}>
              Pick priority relative to other bins, when set.
            </ResponseField>

            <ResponseField name="source" type={<a href="/docs/api-reference/v3/reference/inventory/storage-location-source">StorageLocationSource!</a>} required>
              How this record was created.
            </ResponseField>

            <ResponseField name="stockedProductCount" type="Int!" required>
              How many product levels in this storage location have a quantity above zero.
            </ResponseField>

            <ResponseField name="totalQuantity" type="Int!" required>
              The sum of every level's quantity in this storage location. Negative in areas such as LOST that offset stock elsewhere.
            </ResponseField>

            <ResponseField name="type" type={<a href="/docs/api-reference/v3/reference/inventory/storage-location-type">StorageLocationType!</a>} required>
              The kind of storage location.
            </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>
      </Expandable>
    </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`.

      <Expandable title="fields" lazyRender>
        <ResponseField name="binInventoryLevels" type={<a href="/docs/api-reference/v3/pagination">BinInventoryLevelConnection!</a>} required>
          Product quantities held in this storage 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="inStock" type="Boolean">
              true returns only rows holding stock (quantity above zero). false returns only empty or negative rows, such as emptied assignments and LOST balancing entries.
            </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>

            <ResponseField name="orderBy" type={<a href="/docs/api-reference/v3/reference/inventory/bin-inventory-level-sort-key">BinInventoryLevelSortKey</a>}>
              Which key to sort by (creation time, newest first). Combine with `reverse` to flip direction.
            </ResponseField>

            <ResponseField name="reverse" type="Boolean">
              Reverses the sort direction selected by `orderBy` (or its default).
            </ResponseField>

            **Fields**

            <ResponseField name="edges" type={<a href="/docs/api-reference/v3/pagination">[BinInventoryLevelEdge!]!</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/bin-inventory-level">[BinInventoryLevel!]!</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="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 storage location.
        </ResponseField>

        <ResponseField name="inventoryItems" type={<a href="/docs/api-reference/v3/pagination">InventoryItemConnection!</a>} required>
          Inventory items currently in this storage 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">[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="isSellable" type="Boolean!" required>
          Whether on-hand quantity in this slot counts as sellable inventory.
        </ResponseField>

        <ResponseField name="location" type={<a href="/docs/api-reference/v3/reference/inventory/location">Location!</a>} required>
          The warehouse this storage location belongs to.

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

          <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="name" type="String!" required>
          The display name of the bin or slot.
        </ResponseField>

        <ResponseField name="priority" type={<a href="/docs/api-reference/v3/reference/inventory/storage-location-priority">StorageLocationPriority</a>}>
          Pick priority relative to other bins, when set.
        </ResponseField>

        <ResponseField name="source" type={<a href="/docs/api-reference/v3/reference/inventory/storage-location-source">StorageLocationSource!</a>} required>
          How this record was created.
        </ResponseField>

        <ResponseField name="stockedProductCount" type="Int!" required>
          How many product levels in this storage location have a quantity above zero.
        </ResponseField>

        <ResponseField name="totalQuantity" type="Int!" required>
          The sum of every level's quantity in this storage location. Negative in areas such as LOST that offset stock elsewhere.
        </ResponseField>

        <ResponseField name="type" type={<a href="/docs/api-reference/v3/reference/inventory/storage-location-type">StorageLocationType!</a>} required>
          The kind of storage location.
        </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="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 {
  storageLocations(after: "...", before: "...", first: 10, last: 10, locationId: "...", name: "...", orderBy: CREATED_AT, reverse: true) {
    nodes {
      createdAt
      id
      isSellable
      name
      priority
      source
      stockedProductCount
      totalQuantity
      # ...
    }
    pageInfo { hasNextPage endCursor }
  }
}
```


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