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

# Retrieve a customer

Get a customer with their payment count and totals.

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

Returns the customer with their totals. List their payments with [`GET /payments?customer_id=…`](https://developer.402pay.co/api/payments/list.md).

### Path

- `id` (string, required): The customer's ID, such as `cst_gWFWcc7Ga0Pv7LSC`.

### Errors

- 404 `not_found` No customer with that ID belongs to your business.

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/cst_gWFWcc7Ga0Pv7LSC" \
  -H "Authorization: Bearer $PAY402_SECRET_KEY"
```

Request, Node.js:

```js
const response = await fetch("https://dash.402pay.co/api/v1/customers/cst_gWFWcc7Ga0Pv7LSC", {
  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/cst_gWFWcc7Ga0Pv7LSC",
    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"
  }
}
```
