Skip to content
Knowledge ERP Docs
API Reference ↗
Inventory

Locations & Bins

Locations are the warehouses, stores, or vehicles where your stock lives; bins are the hierarchical shelves, racks, and drawers inside them that tell you exactly where each unit sits.

A location is a distinct physical site — a warehouse, a retail store, a service vehicle — where your inventory is stored and operations are performed. Inside each location you build a hierarchy of bins: the racks, shelves, drawers, or zones that tell you exactly where each unit sits. Together, locations and bins give every piece of stock a precise address and allow the system to route transfers, purchase order receipts, and appointments to the right place.

Single vs. multi-location: if your account has only one location, the location field is hidden throughout the UI to reduce noise — you only see it when it matters.

Creating a location #

New locations are created from Inventory → Locations → New Location. The only required field is a Name (e.g. Main Warehouse or Service Van #3). Everything else is optional but unlocks important features:

Your plan caps how many locations you can have — Starter 1, Growth 3, Business 10. Once you reach the cap, New Location is disabled until you upgrade.

  • Address — street, city, state, postal code, and country. Shown on documents and used by the appointments module.
  • Enable Sales Orders — when on, this location can be chosen as the fulfillment site on a sales order.
  • Allow Backordering by Default — when on, Products without an explicit backorderable setting can be sold beyond available stock at this location.
  • Enable Appointments — makes the location bookable for appointment types. Requires at least one location hours record to constrain scheduling.
  • Support Email — appointment confirmation and notification emails are sent to this address.

The Inventory Transfers section (visible only in multi-location accounts) adds:

  • Default Receiving Bin — the bin pre-filled anywhere stock lands here: an inbound transfer, a purchase-order receipt, or stock added by hand. Saves clicks at the receiving dock.

Every location is created with a bin named Receiving, set as its default receiving bin. It is a real place — the dock or bench where things land before anyone puts them away — so it is an honest answer to "where is this?" at the moment goods arrive, rather than picking an arbitrary shelf. Whatever is sitting in it is your put-away list. You can rename it, point the default at a different bin, or ignore it entirely.

  • Auto-create Purchase Orders — when toggled on, a draft PO is generated automatically each day at the configured Auto PO Time for every Product at this location that has fallen below its reorder point.

The location list #

The list at Inventory → Locations shows each location's name, city, state, and icon flags for whether Sales Orders and Appointments are enabled. Click any row to open the location's detail view.

What lives on the location page #

The location detail page shows all settings plus relation tabs:

  • Bins — all bins in this location; create, edit, and delete them inline (see below).
  • Inventory Source Locations — in multi-location accounts, configure which other locations to pull stock from when this location runs low, with priority ordering and optional auto-transfer requests.
  • Appointment Types — manage the appointment types offered at this location, including duration, concurrent slot cap, and assigned employees.
  • Location Hours — operating hours that constrain appointment scheduling.
  • Change history — a full audit trail of edits.

Bins #

A bin is a named storage slot inside a location — a shelf, a rack, a drawer, or any subdivision that makes sense for your operation. Bins are hierarchical: a bin can have a parent bin, and the system automatically computes the full path (e.g. Aisle 1 > Rack B > Shelf 3) any time a bin or one of its ancestors is renamed. That path is what you see on unit records and on scan-based lookups.

Bins also get an auto-generated barcode with a B prefix, so warehouse staff can scan a bin label to filter units or confirm a put-away.

Creating and managing bins #

Bins can be managed from two places:

  • Inventory → Bins — the standalone bin list, with filters for location and in-stock only. The Units column shows a live count of units in each bin and links through to the unit list pre-filtered to that bin.
  • Bins tab on the location page — create, edit, and delete bins inline without leaving the location record. This is the fastest path when setting up a new location.

The bin form asks for:

  • Location — required; determines which location the bin belongs to.
  • Parent Bin — optional; leave blank to create a top-level bin. The dropdown is scoped to bins in the chosen location.
  • Name — the label for this level (e.g. Rack B or Shelf 3). The full path is computed automatically.

Renaming a bin cascades the new path to all of its child bins automatically.

Inventory source locations #

In multi-location accounts each location can declare source locations — other sites it draws replenishment stock from. Each source entry records:

  • Source Location — the location to pull from.
  • Priority — a number where lower means tried first (e.g. priority 1 is checked before priority 2).
  • Auto-create Transfer Request — when on and the location falls below a reorder point, a transfer request is created automatically pointing to this source.
  • Default Requester — the user attributed to any auto-generated transfer.

This is distinct from the Auto PO feature, which creates a purchase order from a vendor rather than moving stock between your own locations.

How locations and bins tie into other modules #

  • Units — every unit records its current location and bin. Moving a unit (check-in, transfer, adjustment) updates these automatically.
  • Transfers — a transfer moves units from one location to another; the destination location's default receiving bin pre-fills when one is configured.
  • Purchase Orders — receipts land units in the receiving location; the default receiving bin pre-fills on the receive form.
  • Appointments — appointment booking is scoped to a location's enabled appointment types and operating hours.
  • Reorder Points — a reorder point can be set globally (no location) or scoped to a specific location, so each site has its own min/max thresholds.

Doing it from the API #

# List all locations
curl "https://your-domain.com/api/v1/inventory/locations" \
  -H "Authorization: Bearer $TOKEN"

# Create a location
curl -X POST "https://your-domain.com/api/v1/inventory/locations" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "Main Warehouse", "city": "Austin", "state": "TX"}'

# List bins for a specific location
curl "https://your-domain.com/api/v1/inventory/bins?location_id={location_id}" \
  -H "Authorization: Bearer $TOKEN"

# Create a bin inside a location
curl -X POST "https://your-domain.com/api/v1/inventory/bins" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"location_id": "...", "name": "Rack B", "parent_id": null}'

Bins support a parent_id filter on listing (GET /inventory/bins?parent_id=...) to page through the children of a specific bin. Results are ordered by full_path.