---
title: "A page of clients, whole or changed since a position (any role)"
method: GET
path: "/v1/clients"
tags: ["clients"]
---

# A page of clients, whole or changed since a position (any role)

`GET /v1/clients`

## Request

- Base URL: `https://api.sixminute.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.sixminute.ai/v1/clients`
- Auth: HTTP bearer

With no `since` the pages are the whole list. The last page carries an `ETag`, the position the read ended at: send it as `since` to read only what changed since then, and also as `If-None-Match`, so that a read finding nothing changed is a 304 with no body. Send each `next_cursor` as `since` to continue; a null `next_cursor` means the last page. A `since` the API cannot continue (from another sign-in) is a 400: read from the start. Where a practice system shows each person their own matters (`capabilities.matter_visibility` is `member`), the page holds the clients the firm made itself and the clients of the matters THE CALLER is served by `GET /v1/matters`, and no others: a client that system named is served only while one of its matters is the caller's to see, with an `updated_at` that is the later of its own and the instant such a matter came into the caller's sight, so it arrives on an incremental pull. Every other firm's answer is unchanged.

## Query parameters

- `since` string
- `limit` integer

## Headers

- `if-none-match` string

## Response `200`

The page.

- object
  - `rows` object[], required
    - `id` string, required
    - `name` string, required
    - `external_ref` string, nullable
    - `active` boolean
    - `contacts` object[]
      - `name` string, required
      - `email` string, nullable
      - `kind` 'primary' | 'billing' | 'other'
    - `domains` string[]
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `next_cursor` string, nullable, required

## Other responses

- `304`: Nothing changed since `since`.
- `400`: The body, query or path did not validate; `errors` lists the fields.
- `401`: No bearer token, or one that does not verify or has expired.
- `403`: The token verified but may not do this: no organisation, not provisioned, wrong role, or a device problem.

---

[API](https://skmtc.dev/sixminute/apis/sixminute-api.md) - [All operations](https://skmtc.dev/sixminute/apis/sixminute-api/llms.txt) - [OpenAPI document](https://skmtc.dev/sixminute/apis/sixminute-api/revisions/605577eadc10?raw)
