# Configuration (/en/docs/zm/configuration)

Change which app, source or local profile the tool uses, and check the settings before a pull or
agent session. Public configuration selects the app and data paths; OAuth tokens remain in the
system keyring. This reference gives the accepted keys and their defaults.

## Settings [#settings]

Set a value with `zm config set <key> <value>` and see them all with `zm config show`.

| Key | Meaning |
| --- | --- |
| `zoom.clientId` | Public Client ID of the [existing or new app](/llms.mdx/docs/zm/zoom-app/content.md); unset by default, required for API login |
| `account.profile` | [Local label](/llms.mdx/docs/zm/sessions/content.md#select-a-local-profile) for stored meetings; unset by default, required for store operations |
| `source` | Where `pull` and `watch` read from: `api` (default) or `files` |
| `files.folder` | Transcript folder for file-source pull/watch; unset by default |
| `files.timezone` | the IANA zone of downloaded transcript filenames, for example `Europe/Madrid`; default UTC |

Check `zm config show` after editing. Switching `account.profile` does not switch the authenticated
Zoom user. Changing the client ID selects a different keyring entry, so authorize that app before
using its API. `ZOOM_CLIENT_ID` is not a runtime setting for the installed `zm` command; use
`zm config set zoom.clientId` rather than an environment variable copied from a development probe.

A malformed config still allows `--help` and `--version`; config commands report the error.

## Find the configuration file [#find-the-configuration-file]

`zm config set` creates and updates `config.json` for you. It contains public settings, not Zoom
access tokens; you do not download this file from Marketplace. `zm doctor --json` reports its
actual path without checking the saved OAuth session.

| Platform | Default public configuration |
| --- | --- |
| Linux and macOS | `~/.config/zm/config.json`, or the `zm` directory under `XDG_CONFIG_HOME` |
| Windows | `%APPDATA%\zm\Config\config.json` |
| Explicit override | `config.json` inside `ZM_CONFIG_DIR` |

Older macOS layouts are migrated when possible; doctor shows the path actually in use. Keep
public app settings separate from keyring tokens and the shared meeting database.

## Environment variables [#environment-variables]

| Variable | Effect |
| --- | --- |
| `ZM_CONFIG_DIR` | overrides the configuration directory; changing it also changes the keyring service used for login |
| `MESSAGING_STORE` | selects an explicit shared database path for import, pull, watch, meeting reads and MCP reads |
| `OPENAI_API_KEY` | used by an explicitly selected OpenAI embedding endpoint ([topic search](/llms.mdx/docs/zm/topic-search/content.md)) |

Directories otherwise follow the platform convention. The default shared database is `wirecat.db`
([where meetings are stored](/llms.mdx/docs/zm/archive/content.md#where-meetings-are-stored)). Use the same environment in your
terminal and MCP entry; otherwise they can read different profiles or stores. Continue with
[sessions](/llms.mdx/docs/zm/sessions/content.md) to verify authorization separately from these public settings.
