---
title: "Lists stock locations (warehouses, shelves, vehicles; job sites on request)."
method: GET
path: "/api/v1/locations"
tags: ["Locations"]
---

# Lists stock locations (warehouses, shelves, vehicles; job sites on request).

`GET /api/v1/locations`

## Request

- Base URL: `https://app.flexonthejob.com`
- URL: `https://app.flexonthejob.com/api/v1/locations`
- Auth: HTTP bearer

Requires `ViewInventory`. Job sites are excluded by default because one exists per
job and stock there is never "on hand"; pass `includeJobSites=true` to see them.
Cursor-paginated: pass the last location's `syncId` as `after`. Example:
`GET /api/v1/locations?search=van`.
Also available as CSV (`Accept: text/csv` or `?format=csv`); paging cursor in `X-Next-Cursor`.

## Query parameters

- `search` string
- `includeJobSites` boolean
- `includeInactive` boolean
- `parentLocationId` integer
- `updatedSince` string, date-time
- `after` string
- `limit` integer
- `format` 'csv'

## Response `200`

One page of locations.

- PagedResponseOfLocationSummary: One page of a cursor-paginated /api/v1 collection (API_AND_MCP.md: `?after=<syncId>&limit=`).
  - `items` LocationSummary[]: Items of this page in ascending creation order.
    - `id` integer: Numeric id, usable in `/api/v1/locations/{id}` and stock writes.
    - `syncId` string, uuid: Stable cross-device id; also the pagination cursor.
    - `name` string: Display name, e.g. `Main Warehouse`.
    - `address` string, nullable: Street address when recorded; null otherwise.
    - `parentLocationId` integer, nullable: Id of the containing location; null for a top-level location.
    - `locationType` string: Name of the location's type as configured by the organization, e.g. `Warehouse`, `Vehicle`, `Job Site`.
    - `isJobSite` boolean: True for a customer job site: stock there is "delivered", never counted as on hand, and cannot be adjusted or moved directly.
    - `isTransportVehicle` boolean: True for a vehicle (van, truck) that carries stock.
    - `isSystemLocation` boolean: True for the organization's built-in `No Location` bucket, the default for stock created without a location.
    - `status` string: One of `Active`, `Inactive`, `Maintenance`, `Temporary`.
    - `jobId` integer, nullable: For a job site: the job it belongs to; null otherwise.
    - `createdAt` string, date-time: UTC creation time.
    - `updatedAt` string, date-time, nullable: UTC last modification time; null when never edited.
  - `nextCursor` string, nullable: SyncId of the last item; pass it back as `?after=` to fetch the next page. `null` when this is the last page.

## Other responses

- `400`: Unknown `after` cursor.
- `401`: Unauthorized
- `403`: Forbidden
- `429`: Too Many Requests

---

[API](https://skmtc.dev/flexonthejob/apis/flex-api.md) · [All operations](https://skmtc.dev/flexonthejob/apis/flex-api/llms.txt) · [OpenAPI document](https://skmtc.dev/flexonthejob/apis/flex-api/revisions/19c8f4d27acf?raw)
