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 place — 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 includes a number of locations — Starter 1, Growth 3, Business 10. At or over that number, New Location refuses, and says how many you have against how many the plan includes.
If you are already over it — you moved down a tier, say — nothing happens to the locations you have. They all keep working, none of them is billed as an extra, and locations are not a charged line item at all. The allowance decides one thing only: whether another can be added.
Which cards you see. The form is grouped into cards, and the Sales Module, Rentals, and Appointments Module cards are shown only when your plan includes those modules — there is no point offering a lending charity a rental reminder lead time or an unpublishable booking page. This changes what the form shows you, not what is stored: any values already stored stay exactly as they are, everything that reads them goes on reading the same answer, and the card is back on the form again if the module is added to your plan. The Loans & Checkouts card is always here, because loans come with Inventory and you already need Inventory to open a location.
- Address — street, city, state, postal code, and country. Shown on documents and used by the appointments module.
- Enable Sales Orders (Sales Module card) — when on, this location can be chosen as the fulfillment location on a sales order.
- Allow Backordering by Default (Sales Module card) — 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 (staff inbox) — where appointment notifications are delivered to your team. Not shown to customers. The address customers are given is the Support Email under Account Settings → Customer Portal.
- Support Phone — shown to customers on the public booking page, on their confirmation, and in the confirmation email. Required once appointments are enabled.
The Loans & Checkouts card adds:
- Default Loan / Checkout Period (days) — how long this location lends things out for. Set it and, while you are working at this location, the due date arrives already filled in that many days ahead when you hand equipment over: on Scan Checkout, on the per-unit Check Out action, on the bulk Check Out on the units list, and as the Expected return on a new loan agreement. Turning a confirmed appointment into a loan uses the period set on the location the appointment is booked at. It is a starting point on a form, not a rule — change the date on any of them and the date you typed is the one that is saved. It does not change rentals.
- Due-date Reminder (days before) — email borrowers this many days before a loan is due. Leave blank for no reminders. This is when to remind, not how long the loan runs.
- Auto-approve due-date extensions — when on, a borrower's portal extension request is applied immediately rather than waiting for staff approval.
Leave the period blank and nothing changes. The date field stays empty and whoever is at the counter types it, which is what those four screens did before this setting existed, and a loan raised from an appointment is still dated a week out as it always has been. There is no built-in number behind the blank.
If you run more than one location, the date you are offered follows the location switcher — it is the period set on the location you are working at, not on every location at once. Switch location and the next handover is dated from that location's period instead.
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, and state. A Takes Sales Orders column (reading Yes or No) appears only when your plan includes the Sales module, and a Takes Appointments column only when it includes Appointments. Click any row to open the location's detail view, where the same two settings appear the same way, alongside Allow Backordering by Default for Sales.
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 at the location 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 locations 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
1is checked before priority2). - 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 — every reorder point names a location, so each location has its own min/max thresholds.
Locations you cannot work at #
Where a form asks you to choose a location, the locations you can use come first and the rest are listed below them, greyed out, each saying why — you have no role at this location, or the permission your role there does not carry. Nothing is hidden: a location that vanishes from a list looks deleted, and knowing a warehouse exists but is not yours is the more useful answer. If you need one of them, an administrator can change that under Users & Access; see per-location roles.
Two pickers deliberately keep offering every location, because in both the location you are choosing is by definition somebody else's: a transfer's From Location, and the Source Locations a location draws replenishment from.
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_idfilter on listing (GET /inventory/bins?parent_id=...) to page through the children of a specific bin. Results are ordered byfull_path.A bin returns
name(the code),full_path, the optionaldisplay_name, anddisplay_path— the two paired for display, falling back tofull_pathwhen no name is set.display_nameis accepted on create and update.nameandfull_pathare unchanged.