---
title: "Lists the additional locations (job sites / addresses) of one customer."
method: GET
path: "/api/v1/customers/{id}/locations"
tags: ["Customers"]
---

# Lists the additional locations (job sites / addresses) of one customer.

`GET /api/v1/customers/{id}/locations`

## Request

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

The customer's primary address is on the customer resource itself; this collection
holds the extra sites jobs can be booked at. Cursor-paginated like every list.
Also available as CSV (`Accept: text/csv` or `?format=csv`); paging cursor in `X-Next-Cursor`.

## Path parameters

- `id` integer, required

## Query parameters

- `after` string
- `limit` integer
- `isActive` boolean
- `format` 'csv'

## Response `200`

A page of locations (may be empty).

- PagedResponseOfCustomerLocationDto: One page of a cursor-paginated /api/v1 collection (API_AND_MCP.md: `?after=<syncId>&limit=`).
  - `items` CustomerLocationDto[]: Items of this page in ascending creation order.
    - `id` integer: Numeric id of the location. Stable within this organization.
    - `syncId` string, uuid: Globally unique sync id (GUID). Use it as the `after` pagination cursor.
    - `customerId` integer: Id of the owning customer (matches the `{id}` in the URL).
    - `name` string: Label given to the location, e.g. `"Main Office"` or `"Rental Property 1"`.
    - `address` string, nullable: Street address line 1.
    - `address2` string, nullable: Street address line 2 (suite, unit).
    - `city` string, nullable: City.
    - `state` string, nullable: State / province.
    - `postalCode` string, nullable: ZIP / postal code.
    - `country` string, nullable: Country.
    - `isMailingAddress` boolean: True when this is the customer's mailing address.
    - `isActive` boolean: False when the location has been retired and should not be offered for new jobs.
    - `notes` string, nullable: Free-text notes about the site (gate codes, parking), max 500 characters.
    - `createdAt` string, date-time: UTC creation timestamp.
    - `updatedAt` string, date-time, nullable: UTC timestamp of the last edit; 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`: Malformed `after` cursor.
- `401`: Unauthorized
- `403`: Forbidden
- `404`: No such customer in this organization.
- `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)
