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 and publishes its public booking page. Requires at least one opening hours rule to constrain scheduling, and requires the location's street address, city and Support Phone — the public booking page shows customers both, and a booking is an invitation to drive somewhere.
  • Support Email — appointment confirmation and notification emails are sent to this address.
  • Support Phone — shown to customers on the public booking page, on their confirmation, and in the confirmation email. Required once appointments are enabled.

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.

Locations in the Appointments menu #

Locations also appears under Appointments → Locations, because the public booking link, the opening hours and the appointment types all live on a location — and you shouldn't have to go looking under stock control to set up online booking.

It is the same list of the same locations, not a separate copy: edit a location from either menu and you are editing one record. The two entries differ only in what they show you:

  • Appointments → Locations lists only locations with Enable Appointments turned on, and trades the sales-order column for Appointment Types and Opening Hours counts — the two things a location needs before its booking link leads anywhere bookable.
  • Inventory → Locations lists every location, bookable or not.

Each entry highlights on its own, so the menu always shows which door you came in by.

A location you have just made bookable does not appear under Appointments → Locations until Enable Appointments is saved. Until then, find it under Inventory → Locations.

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.
  • Opening Hours — the 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.

A bin can also carry a bin name — what people in the building actually call it. Give the bin above the name Power Tools Rack A and every picker, column and scan message reads Power Tools Rack A (Aisle 1 > Rack B > Shelf 3). The name does not replace the code: the code is what is painted on the shelf and printed on the bin's barcode label, so both are shown together. The name is optional, and a bin without one reads exactly as it always has.

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.
  • Bin Code — required; the code for this level (e.g. Rack B or Shelf 3), the one on the shelf. The full path is computed automatically from it, and the bin's barcode label carries it.
  • Bin Name — optional; what people here call this bin (e.g. Power Tools Rack A). Shown in front of the code wherever a bin is offered or displayed.

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.

A bin returns name (the code), full_path, the optional display_name, and display_path — the two paired for display, falling back to full_path when no name is set. display_name is accepted on create and update. name and full_path are unchanged.