---
title: "Command line"
description: "Your mailbox and every API operation, from a terminal or a script."
url: "https://openemail.uk/docs/knowledge/developers/cli"
area: "Knowledge base"
category: "Developers"
status: "live"
---

# Command line

Your mailbox and every API operation, from a terminal or a script.

## Details

- The `openemail` command, installed from npm as `@openemail/cli`. It is one file with no dependencies and needs Node.js 20.12 or later. `npm i -g @openemail/cli` installs it, and `npx @openemail/cli <command>` runs it without an install.
- There are two ways to sign in. `openemail login` opens your browser, where you pick the workspace, the permissions and how long the access lasts, and each browser sign-in is a connected app you can remove under Account → Connected apps. An API key, saved with `openemail login --with-token` or set as `OPENEMAIL_API_KEY`, never opens a browser and never asks for a code, which suits scripts and CI.
- A browser sign-in acts as you, so a sensitive change, such as adding a webhook or removing a domain, asks for the same verification code the web app asks for. One code covers that sign-in for 60 minutes, and `openemail verify` asks for it before a script runs.
- `inbox`, `search`, `read`, `reply` and `send` work the mailbox the way the app does, with the same search syntax, attachments, scheduled sends, undo and translation. `archive`, `star`, `snooze` and the other thread actions take several thread ids at once.
- Every method of the SDK is a command, `openemail <resource> <verb>`, so anything the REST API can do, the command line can do. `openemail api` calls any path directly, with the same sign-in.
- `ai translate`, `ai compose` and `ai summarize` bring the AI features to the terminal. `openemail mcp config` prints the setup for Claude Code, Claude Desktop, Cursor, VS Code, Windsurf and Codex, and `openemail mcp serve` lets such a client reuse the sign-in of the command line.
- It is made for scripts: data goes to stdout and everything else to stderr, `--json` prints only JSON, `--all` walks every page of a list, each kind of failure has its own exit code, and nothing prompts in CI or without a terminal. `openemail temp` makes a disposable inbox with no account and no key, and `temp watch --first` waits for its first message.
- What is missing: billing, creating and switching workspaces, account security, data export, writing calendar events, forwarding and linking a DNS provider need a browser session, so the command line does not do them yet, and `openemail open` opens the right page of the web app instead. Like the SDK, it has no release workflow, so a version reaches npm when somebody publishes it.
