### List managers

`GET /api/v1/managers`

One page of managers. A caller without tenant-wide visibility sees their own descendants only — never their parent, never a sibling branch.

- Authentication: manager session (JWT) or API token
- Permission: `prm_managers_index` (View managers)
- Risk: read

#### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `filter[parent_id]` | query | integer | no | Direct children of one manager. Also accepted as a bare parent_id query parameter. Narrows within the caller's subtree, never past it. |
| `q` | query | string | no | Searches name, username and email. |

#### Response — 200 OK

```json
{
  "data": [
    {
      "id": 57,
      "tenant_id": 12,
      "email": "giza@acme.example",
      "username": "giza-reseller",
      "firstname": "Mona",
      "status": "active",
      "parent_manager_id": 41,
      "parent_username": "cairo-reseller",
      "balance": 1840.00,
      "debt_limit": 5000.00,
      "debt": 0.00,
      "discount_rate": 10.00,
      "points_balance": 240,
      "users_count": 312,
      "created_at": "2026-05-02 09:00:00"
    }
  ],
  "meta": { "page": 1, "page_size": 50, "total": 9, "has_next": false }
}
```

#### Note

debt, parent_username, users_count and the other joined fields are computed by the list projection only. Fetching one manager by id returns the same record without them, so a client that reads users_count off a detail response will always see zero.

