---
title: "Returns one customer."
method: GET
path: "/api/v1/customers/{id}"
tags: ["Customers"]
---

# Returns one customer.

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

## Request

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

Send the previous `ETag` as `If-None-Match` to receive `304 Not Modified` when unchanged.

## Path parameters

- `id` integer, required

## Response `200`

The customer, with an `ETag` header.

- CustomerDto: A customer of the calling organization as returned by `GET /api/v1/customers` and `GET /api/v1/customers/{id}`. Money values are decimals in the organization's currency; dates are ISO-8601 UTC. Additional job-site addresses are a separate collection at `/api/v1/customers/{id}/locations`.
  - `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.

## Other responses

- `304`: Unchanged since the supplied `If-None-Match`.
- `401`: Unauthorized
- `403`: Forbidden
- `404`: No such customer in this organization (also for deleted customers).
- `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)
