# Track stock and stock locations

> Count each variant's stock at each location, record what is on its way, and manage the warehouses and shops your orders ship from.

Source: https://docs.coritan.com/organizations/commerce/inventory/

In the dashboard:

- /dashboard/organizations/…/commerce/inventory: https://www.coritan.com/dashboard/organizations

**Inventory** shows how much of each variant your store holds at each stock location, and lists the locations themselves. What a shopper can buy is what is *available*: the units on the shelf less the units that open orders reserve. A variant that tracks stock sells out when nothing is available, unless it keeps selling at zero.

## Before you begin

- Every member can read the page. Adjusting stock needs the Tier 3 support role or higher, and creating or changing locations needs the Admin or Owner role. The page says which of these you can do.
- A variant counts stock when **Track stock** is ticked on it in [Products](/organizations/commerce/products/#add-options-and-variants).
- Create at least one location before you count stock. The first location becomes the default.

## Find an item's stock

1. In the [dashboard](https://www.coritan.com/dashboard/organizations), open the organization, then **Commerce**, then **Inventory**.
2. Choose **All items** or **Low stock**, which lists the items with 5 or fewer available.
3. When the store has more than one location, change **Every location** to one location to see only its stock.
4. Search by SKU or title.

Each row is one item: the stock behind a variant. The first three locations that are turned on get a column each, and **Other locations** adds up the rest. Each location's figure is what is available there, with the units stocked, reserved and incoming beneath it. **Available** gives the total across locations, marked **Low**, **Sold out** or **Not tracked**. Select the product's name to open it.

## Adjust stock

1. On the item's row, select **Adjust…**.
2. Choose the **Location**. The dialog shows what is **On the shelf**, **Reserved**, **Available** and **Incoming** there.
3. Choose how to change the count:
   - **Add or remove**: enter the **Change**, such as `10` or `-3`. Stock never goes below 0.
   - **Set the count**: enter what is **On the shelf** after you counted it. Units reserved for open orders stay held.
4. Optionally, enter **Incoming**: the units on their way to this location, such as an open purchase order.
5. Check the line that says what the count will be after the change, then select **Save stock**.

Orders move stock on their own. Placing an order reserves its units, shipping takes them off the shelf, and cancelling an order or refunding units before they ship frees them. Sellable units counted back on a [return](/organizations/commerce/returns/#mark-the-items-received) go back on the shelf.

## Add a stock location

1. Under **Locations**, select **New location…**.
2. Enter a **Name**, such as the warehouse's.
3. Enter the address: **Street**, **Building or unit**, **Postal code**, **City**, **Province or state** and **Country**. The country is a two-letter code such as `NL`. Orders ship from here, so taxes and shipping zones read it.
4. When a fulfilment provider packs the orders taken from this location, choose it in **Fulfilled by**. Otherwise keep **No provider: the store ships them itself**.
5. Tick **Make it the default location** to send new stock and imports there. The first location is always the default.
6. Select **Create location**.

A store has up to 100 locations. The **Sells to** column shows the sales channels that sell from each one; choose them under **Sells from** on each channel in [Settings](/organizations/commerce/settings/#manage-sales-channels). [Send orders to a fulfilment provider](/organizations/commerce/fulfilment-providers/#choose-which-orders-it-gets) explains how **Fulfilled by** routes orders.

## Change, turn off or delete a location

Each action is in the menu on the location's row.

**Edit location…**
: Change the name, the address or who fulfils it, then select **Save location**.

**Make default**
: New stock and imports go to it. Turn a location on before you make it the default.

**Turn off** and **Turn on**
: Shoppers cannot buy the stock at a turned-off location. To turn off the default location, make another one the default first.

**Delete location…**
: Type the location's name, then select **Delete location**. Only an empty location that nothing refers to can be deleted: no stock, shipping zone, fulfilment or return. The default location cannot be deleted. Turn a location off instead to stop selling from it.

## Result

- The item's figures change at once in the list, and the **Low stock** count follows.
- Shoppers can buy what is available at the locations each storefront's sales channel sells from.
- A new location gets a column in the list, and orders can ship from it.

## Troubleshooting

**Adjust…** is missing
: Your role is below Tier 3 support, or none of the item's variants tracks stock.

The storefront says a variant is sold out, but it has stock
: The stock may be at a turned-off location, or at a location the storefront's sales channel does not sell from. Check **Sells to** on the location.

A variant sells when it has no stock
: It keeps selling at zero. Untick **Keep selling at zero** on the variant in [Products](/organizations/commerce/products/).

A location cannot be deleted
: Something still refers to it: stock, a shipping zone, a fulfilment or a return. Turn it off instead.

## Related

- [Add and edit your store's products](/organizations/commerce/products/)
- [Send orders to a fulfilment provider](/organizations/commerce/fulfilment-providers/)
- [Import your Shopify products into the store](/organizations/commerce/imports/)

## With the API

Stock levels are under `https://api.coritan.com/api/v1/orgs/{org_slug}/commerce/inventory-items`, and a batch route sets up to 1,000 counts at one location by SKU. [Set stock levels](/organizations/storefront/commerce-api/#set-stock-levels) and [Add stock locations](/organizations/storefront/commerce-api/#add-stock-locations) have the details.

```bash
curl "https://api.coritan.com/api/v1/orgs/acme/commerce/inventory-items?low_stock=5" \
  -H "Authorization: Bearer $CORITAN_TOKEN"
```
