Location APIs (v2)

Every Capillary org is built on a location structure: concepts group your channels or brands, zones divide your geography, stores are your physical outlets, and tills are the point-of-sale terminals inside each store. The Location APIs let you create and manage this structure in bulk — onboarding new stores, reorganizing zones, adding tills — and search across all location types to retrieve or verify what's configured in your org.

What you can do

  • Create locations in bulk — add up to 100 concepts, zones, or stores per request, and up to 50 tills per request.
  • Update locations in bulk — modify existing locations by code, ID, or external ID.
  • Search and filter — retrieve locations by type, code, name, or external ID with pagination and sorting.
  • Retrieve hierarchy — view each location's parent zone, parent concept, and child tills in a single response.
  • Include custom fields — surface org-configured custom field values alongside standard location attributes.

Location types

Locations follow a four-level hierarchy. Higher-level entities must exist before child entities can be created.

TypeDescriptionBelongs to
CONCEPTTop-level grouping that represents a brand, channel, or business unit.Another concept (optional — omit groupParentCode to create a root concept).
ZONEGeographic or operational region.Another zone (required via areaParentCode).
STOREPhysical retail location.A zone (area parent) and a concept (group parent). Both are required.
TILLPoint-of-sale terminal inside a store. Inherits locale from its parent store automatically.A store (required via storeParentCode).

Locale settings

Concepts, zones, and stores each require a language (IETF BCP 47), currency (ISO 4217), and timezone (IANA). You can set these explicitly, or pass inheritLocale=true to inherit them from the parent entity. If the parent entity's locale is not configured, the request fails.

Tills inherit locale from their parent store automatically. Locale fields are not accepted in till requests.

API operations

Each write operation processes items independently — a failure on one item does not block the others. The HTTP status reflects the overall result: 201 if all items succeeded, 207 if some failed, or 400 if all failed.

OperationMethodEndpointBatch limit
Search locationsGET/v2/locationsUp to 100 results per page
Create storesPOST/v2/locations/stores100 stores per request
Create zonesPOST/v2/locations/zones100 zones per request
Create conceptsPOST/v2/locations/concepts100 concepts per request
Create tillsPOST/v2/locations/tills50 tills per request
Update storesPUT/v2/locations/stores100 stores per request
Update zonesPUT/v2/locations/zones100 zones per request
Update conceptsPUT/v2/locations/concepts100 concepts per request
Update tillsPUT/v2/locations/tills50 tills per request

QuickStart: set up your location hierarchy

Create entities in order — a child entity cannot be created before its parent exists.

Step 1 — Create concepts

Call Add concepts in bulk to create your top-level channel or brand groupings. Omit groupParentCode to create a root-level concept.

Step 2 — Create zones

Call Add zones in bulk to create geographic regions. Set areaParentCode to link each zone to its parent zone.

Step 3 — Create stores

Call Add stores in bulk to create physical retail locations. Set areaParentCode to the parent zone and groupParentCode to the parent concept.

Step 4 — Create tills

Call Add tills in bulk to create point-of-sale terminals inside stores. Set storeParentCode to the parent store. Locale is inherited automatically from the parent store.

Step 5 — Search and verify

Call Get locations to confirm your hierarchy. Use includeChildren=true with a single entityCodes value to retrieve a location's children, or filter by type to list all entities of a specific kind.