zeeg works with your Zeeg account from the terminal: event types, available times, bookings, notes, CRM records, routing forms and AI phone calls. It calls the public Zeeg API v2, so it can do exactly what an API token can do, with your own dashboard permissions.
Coming soon.
@zeeg/cli isn’t published to npm yet. This page describes the shape it ships with.The CLI needs a plan that includes API access. A free plan cannot sign in. Finding available times (
zeeg availability) and booking meetings (zeeg bookings create) need a paid plan; a trial can use everything else. If your API access comes from AI minutes alone, the CLI can only run zeeg agents and zeeg calls start.Install
Node.js 20 or later:Log in
https://api.zeeg.me/oauth/device in your browser. Sign in to Zeeg if you’re not signed in already, check that the code on the page matches the one in your terminal, and allow access. On a machine without a browser, run zeeg login --no-browser and open the printed link anywhere.
zeeg whoamishows the account, the API origin, and the scopes the login carries.zeeg logoutrevokes the login on Zeeg’s side and removes it from this machine.
zeeg login starts a new one.
Where the login is stored
In the system keychain: Keychain on macOS, Credential Manager on Windows, and the Secret Service (GNOME Keyring, KWallet) on Linux. A machine without one, such as a server you reach over SSH, keeps it in~/.config/zeeg/credentials.json (or under $XDG_CONFIG_HOME), readable only by you; the CLI says so the first time. Set ZEEG_TOKEN_STORE=file to use the file everywhere.
Other environments
--base-url or ZEEG_API_URL points the CLI at another API origin, for example a local backend:
http is accepted for localhost, 127.0.0.1 and [::1] only — every other origin needs https. Each origin keeps its own login.
Commands
zeeg <command> --help lists every option. Times are in your machine’s time zone unless you pass --tz.
Commands that reach other people or spend AI minutes (bookings create, cancel, reschedule, hand-over, calls start) ask before they act. Pass -y / --yes to skip the question, which scripts must do: without a terminal to ask in, they stop instead.
JSON output
In a terminal the CLI prints tables. When its output goes to a pipe or a file, or with--json, it prints the API’s JSON unchanged, so you can hand it to jq or an agent: