---
title: "Users hooks"
description: "React hooks for users — list, get, update, delete. Admin only."
section: "Libraries"
group: "React hooks"
order: 463
---

## Usage

```tsx
import Aeontel from "@aeontel/sdk";
import { AeontelProvider, useListUsers } from "@aeontel/react";

const client = new Aeontel(import.meta.env.VITE_AEONTEL_API_KEY);

function App() {
  return (
    <AeontelProvider client={client}>
      <UserList />
    </AeontelProvider>
  );
}

function UserList() {
  const { data, isLoading } = useListUsers();
  if (isLoading) return <p>Loading…</p>;
  return (
    <ul>
      {data?.data.map((u) => (
        <li key={u.id}>{u.email}</li>
      ))}
    </ul>
  );
}
```

## Hooks

### `useDeleteUser` `mutation`

Delete a user (admin only). Auto-invalidates user queries on success.

```ts
useDeleteUser(options?: MutationOpts<SuccessResponse, string>)
```

**Types:** [SuccessResponse](/types/success-response)

```ts
const del = useDeleteUser();
del.mutate("usr_abc123");
```

### `useListUsers` `query`

Fetch paginated list of users (admin only).

```ts
useListUsers(params?: ListUsersParams, options?: QueryOpts<PaginatedResponse<User>>)
```

**Types:** [ListUsersParams](/types/list-users-params) · [User](/types/user)

```ts
const { data, isLoading } = useListUsers();
```

### `useMe` `composite`

Fetch the currently authenticated user. Resolves the bearer token /
cookie session to the underlying user row server-side. Use this to
render the signed-in identity without knowing the user's prefixed ID
up front (header avatars, mobile sign-in screens, CLI `whoami`, etc.).

```ts
useMe(options?: QueryOpts<User>)
```

**Types:** [User](/types/user)

```ts
const { data: me } = useMe();
if (me) return <p>Signed in as {me.email}</p>;
```

### `useRetrieveUser` `query`

Fetch a single user by ID (admin only).

```ts
useRetrieveUser(id: string, options?: QueryOpts<User>)
```

**Types:** [User](/types/user)

```ts
const { data: user } = useRetrieveUser("usr_abc123");
```

### `useUpdateUser` `mutation`

Update a user (admin only). Optimistically updates the detail cache
and invalidates on settle.

```ts
useUpdateUser(options?: MutationOpts<User, UpdateUserParams>)
```

**Types:** [User](/types/user)

```ts
const update = useUpdateUser();
update.mutate({ id: "usr_abc123", role: "admin" });
```
