# ovok.projects

Canonical page: https://docs.ovok.com/web-sdk/core/namespaces/projects

`ovok.projects` is for project admins, from a console or a server client. `members`, `features` and `settings` act on the current project, the one the session belongs to.

## List your projects [#list-your-projects]

```ts
for await (const project of ovok.projects.list()) {
  console.log(project.projectId, project.name);
}
```

- `list` returns a `PagePromise`: await it for the first page, or `for await` for every project.
- It lists the projects the caller administers, wherever they are signed in.

## Manage members [#manage-members]

```ts
const invited = await ovok.projects.members.invite({
  email: 'ada@example.com',
  firstName: 'Ada',
  lastName: 'Lovelace',
  admin: false,
});

await ovok.projects.members.update(invited.id, { admin: true });
await ovok.projects.members.remove(invited.id);
```

- `list` pages through members and filters by `accessPolicyId`, `profileId` or `userId`.
- `update` and `remove` take the membership id.

## Turn features on and off [#turn-features-on-and-off]

```ts
const { features } = await ovok.projects.features.retrieve();

await ovok.projects.features.update(['ai', 'bots', 'email']);
```

- `update` sends the full list of features to enable.

## Change settings [#change-settings]

Boolean settings and text settings use separate calls.

```ts
await ovok.projects.settings.update('PATIENT_REGISTRATION_ENABLED', true);

await ovok.projects.settings.updateText('PATIENT_APP_URL', 'https://app.example.com');
await ovok.projects.settings.updateText('PATIENT_APP_URL', null);
```

- Both resolve to all project settings.
- Passing `null` clears a text setting.
- The server rejects an invalid value or a disallowed app URL; see [errors and retries](/web-sdk/core/errors-and-retries).

## Reference [#reference]

- [projects API reference](/web-sdk/core/reference/core/projects): every method, setting key and type.
- [ovok.slim](/web-sdk/core/namespaces/slim) for the care-home project tree.
