---
title: "Lists customers, oldest first, one page at a time."
method: GET
path: "/api/v1/customers"
tags: ["Customers"]
---

# Lists customers, oldest first, one page at a time.

`GET /api/v1/customers`

## Request

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

Cursor pagination: pass the `nextCursor` of the previous response as
`after`. Filters combine with AND. Example:
`GET /api/v1/customers?isActive=true&updatedSince=2026-01-01T00:00:00Z&limit=100`.
Also available as CSV (`Accept: text/csv` or `?format=csv`); paging cursor in `X-Next-Cursor`.

## Query parameters

- `after` string
- `limit` integer
- `updatedSince` string, date-time
- `isActive` boolean
- `customerType` 'EndCustomer' | 'Installer' | 'Distributor' | 'Commercial'
- `status` 'None' | 'Preferred' | 'Difficult'
- `search` string
- `format` 'csv'

## Response `200`

A page of customers.

- PagedResponseOfCustomerDto: One page of a cursor-paginated /api/v1 collection (API_AND_MCP.md: `?after=<syncId>&limit=`).
  - `items` CustomerDto[]: Items of this page in ascending creation order.
    - `id` integer: Numeric id used in URLs (e.g. `/api/v1/customers/42`). Stable within this organization.
    - `syncId` string, uuid: Globally unique sync id (GUID). Use it as the `after` pagination cursor and when correlating with offline devices.
    - `name` string: Display name, e.g. `"Jane Doe"`. Always present.
    - `companyName` string, nullable: Company / trading name when the customer is a business, e.g. `"Doe Roofing LLC"`.
    - `customerType` string: Customer type: `EndCustomer`, `Installer`, `Distributor` or `Commercial`.
    - `primaryContact` string, nullable: Name of the primary contact person, if different from `name`.
    - `email` string, nullable: Contact e-mail address.
    - `phone` string, nullable: Main phone number as entered (no normalisation).
    - `mobilePhone` string, nullable: Mobile phone number as entered.
    - `address` string, nullable: Primary (billing) street address line 1.
    - `address2` string, nullable: Primary address line 2 (suite, unit).
    - `city` string, nullable: Primary address city.
    - `state` string, nullable: Primary address state / province.
    - `postalCode` string, nullable: Primary address ZIP / postal code.
    - `country` string, nullable: Primary address country.
    - `isTaxExempt` boolean, nullable: True when the customer is tax exempt; null when not recorded.
    - `priceTier` string: Price tier applied to this customer: `Standard`, `Silver`, `Gold`, `Platinum` or `Custom`.
    - `paymentTerms` string: Default payment terms: `DueOnReceipt`, `Net15`, `Net30`, `Net45`, `Net60`, `COD` or `Prepaid`.
    - `creditLimit` number, double: Credit limit in the organization's currency, e.g. `5000.00`.
    - `currentBalance` number, double: Outstanding balance owed by the customer, e.g. `1250.50`.
    - `storeCreditBalance` number, double: Store credit available to the customer, e.g. `0.00`.
    - `status` string: Status flag: `None`, `Preferred` or `Difficult`.
    - `taxId` string, nullable: Tax identification number, if recorded.
    - `warningNotes` string, nullable: Warning shown to staff when the customer is selected (e.g. `"Pays late"`).
    - `notes` string, nullable: Free-form internal notes.
    - `isActive` boolean: False when the customer has been deactivated (kept for history, hidden from pickers).
    - `createdAt` string, date-time: UTC creation timestamp, e.g. `2026-03-14T09:12:00Z`.
    - `updatedAt` string, date-time, nullable: UTC timestamp of the last edit; null when never edited after creation.
  - `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 or filter value (validation problem listing the field).
- `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)
