> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stateset.com/llms.txt
> Use this file to discover all available pages before exploring further.

# `GET /api/v1/customers`

> `GET /api/v1/customers`

### Query parameters

<ParamField query="limit" type="integer (int32)">
  Maximum number of results to return (default: 50).
</ParamField>

<ParamField query="offset" type="integer (int32)">
  Number of results to skip (default: 0). Ignored when `after` cursor is set.
</ParamField>

<ParamField query="after" type="string">
  Cursor for keyset pagination (opaque token from `next_cursor`).
</ParamField>

<ParamField query="email" type="string">
  Filter by email address (exact match).
</ParamField>

<ParamField query="status" type="string">
  Filter by customer status (active, inactive, deleted).
</ParamField>

<ParamField query="tag" type="string">
  Filter by tag.
</ParamField>

<ParamField query="accepts_marketing" type="boolean">
  Filter by marketing opt-in.
</ParamField>

### Responses

<ResponseField name="200" type="CustomerListResponse">
  List of customers
</ResponseField>

<ResponseField name="400" type="ErrorBody">
  Invalid filter parameter
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
    --url 'https://api.stateset.com/api/v1/customers' \
    --header 'Authorization: Bearer YOUR_API_KEY'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "customers": [
      {
        "accepts_marketing": true,
        "created_at": "2026-07-24T12:00:00Z",
        "email": "string",
        "first_name": "string",
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "last_name": "string",
        "phone": null,
        "status": "string",
        "updated_at": "2026-07-24T12:00:00Z"
      }
    ],
    "has_more": true,
    "limit": 1,
    "next_cursor": null,
    "offset": 1,
    "total": 1
  }
  ```
</ResponseExample>
