> For the complete index of the 402pay docs, see [llms.txt](https://developer.402pay.co/llms.txt).

# List customers

List the people who have paid you or started to, with totals for each.

`GET https://dash.402pay.co/api/v1/customers`

A customer is added when checkout collects an email, when a payment names one in `customer_email`, or when you [create one](https://developer.402pay.co/api/customers/create.md), so a customer can have no payments yet. In `stats`, `payments_count` and `volume` count succeeded payments, and `incomplete_count` counts the rest.

### Query

- `q` (string): Matches the name, email or ID.
- `blocked` (boolean): `true` or `false`.
- `sort` (string): `created_at`, `last_payment_at`, `payments_count`, `volume` or `name`, with `-` for descending. Defaults to `-last_payment_at`.
- `limit` (integer): Page size, from 1 to 100. Defaults to 25.
- `cursor` (string): The `next_cursor` from the previous page. See [pagination](https://developer.402pay.co/api/pagination.md).

### Errors

- 400 `invalid_request` A filter has a value it can't take, or the `cursor` belongs to another list.

Any request can also fail on its key or its body. See [errors](https://developer.402pay.co/api/errors.md).

Request, cURL:

```bash
curl "https://dash.402pay.co/api/v1/customers?limit=10" \
  -H "Authorization: Bearer $PAY402_SECRET_KEY"
```

Request, Node.js:

```js
const response = await fetch("https://dash.402pay.co/api/v1/customers?limit=10", {
  headers: {
    Authorization: `Bearer ${process.env.PAY402_SECRET_KEY}`,
  },
});
const { data } = await response.json();
```

Request, Python:

```python
import os

import requests

response = requests.get(
    "https://dash.402pay.co/api/v1/customers?limit=10",
    headers={
        "Authorization": f"Bearer {os.environ['PAY402_SECRET_KEY']}",
    },
)
data = response.json()["data"]
```

Response, 200 OK:

```json
{
  "data": [
    {
      "id": "cst_gWFWcc7Ga0Pv7LSC",
      "kind": "customer",
      "name": "Harper Wilson",
      "email": "harper.wilson@example.com",
      "blocked": false,
      "note": "",
      "stats": {
        "payments_count": 2,
        "incomplete_count": 2,
        "volume": {
          "amount": 22810,
          "currency": "USD"
        },
        "average": {
          "amount": 11405,
          "currency": "USD"
        },
        "last_payment_at": "2026-09-26T21:22:47.082Z",
        "preferred_rail": "crypto"
      },
      "created_at": "2026-09-26T21:01:16.809Z",
      "updated_at": "2026-09-26T21:01:16.809Z"
    }
  ],
  "has_more": true,
  "next_cursor": "cst_gWFWcc7Ga0Pv7LSC"
}
```
