Skip to main content
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

The CLI prints a one-time code and opens 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.
Only approve a code you started yourself. Anyone holding a code you approve gets access to your account.
  • zeeg whoami shows the account, the API origin, and the scopes the login carries.
  • zeeg logout revokes the login on Zeeg’s side and removes it from this machine.
The access token lasts an hour and renews itself; a login you don’t use for 30 days ends, and 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:
Plain 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:
Messages meant for you (the login code, questions, notices) go to stderr and never mix with the JSON.

Exit codes

Last modified on September 27, 2026