Skip to content
DashboardRequest access

CLI Reference

The devel CLI wraps the API for day-to-day project management and sending test emails.

npm install -g @develemail/cli
devel --version

There are two separate credential stores, depending on the command:

devel login / devel logout

Authenticate via browser and save an owner session.

devel login --url https://your-instance.com/api
devel login --url https://your-instance.com/api --app-url https://app.your-instance.com
devel logout
OptionDescription
--url <url>Base URL of your DevelEmail API. Default https://develemail.com/api.
--app-url <url>Dashboard URL to open for sign-in. Default: discovered from the API server.

devel login asks the API for its dashboard host (GET /meta/public-urls) and opens <dashboard>/cli-auth there, so on develemail.com it signs you in on the dashboard host. If the server doesn't answer within 3 seconds, or predates that endpoint, it falls back to --url without its trailing /api. Pass --app-url to skip discovery. devel login prints the URL to visit and also tries to open it in your browser; the browser is only launched for http: and https: URLs, so on a headless machine open the printed URL by hand. The session is saved to ~/.config/develemail/auth.json, and login times out after 5 minutes.

devel init

Provisions a project and API key in one step, then writes the credentials to your env files. Requires an owner session.

devel init --project my-app --from [email protected]
OptionDescription
--project <name>Project name (created if it doesn't exist). Required.
--env-file <paths>Comma-separated env files to write to. Default .env,.env.prod.
--key-name <name>Name for the new API key. Default cli.
--env <env>Environment for new projects. Default production.
--from <address>Default from address for new projects.

devel project

Manage projects. Requires an owner session.

devel project list
devel project get <id>
devel project create --name my-app --env production --from [email protected]
devel project update <id> --recipient-cooldown 0

create also accepts --domain <domainId>, --rate-limit <n>, and --webhook <url>.

update --recipient-cooldown <minutes> sets how long the same subject can't be re-sent to the same recipient. The platform default is 5; 0 disables the check; default restores the platform default. Sends with a different subject are never blocked by it. A blocked send returns HTTP 429 with code: "recipient_cooldown".

devel domains

Manage domains. Requires an owner session.

devel domains list
devel domains get <id>
devel domains add example.com
devel domains records <id>
devel domains publish-dns <id>
devel domains verify <id> --wait
CommandOptions
devel domains add <name>--dkim-selector <selector>, --json
devel domains records <id>--json, --format table|bind for the DNS records to publish
devel domains verify <id>--wait polls until verified, --timeout <seconds> (default 600) bounds it

devel domains publish-dns

Publishes a domain's DNS records to Cloudflare. Connect a token first with devel cloudflare connect. It shows the planned changes and asks for confirmation before applying them.

OptionDescription
--zone <zoneId>Cloudflare zone ID. Default: auto-pick.
--yesApply without prompting.
--jsonOutput JSON.

devel inbound

Manage inbound mailboxes (routes that receive mail for a domain into the DevelEmail Inbox). Requires an owner session. <domain> is a domain name or ID, and <local-part> is the part before the @, or * for a catch-all.

devel inbound list example.com
devel inbound add example.com privacy --if-missing
devel inbound update example.com privacy --notify [email protected]
devel inbound remove example.com privacy --yes
devel inbound check example.com
CommandOptions
devel inbound list <domain>--json
devel inbound add <domain> <local>--webhook <url>, --notify <email>, --if-missing exits 0 if the route already exists
devel inbound update <domain> <local>--webhook <url|none>, --notify <email|none>, --active, --inactive
devel inbound remove <domain> <local>--yes skips the confirmation prompt
devel inbound check <domain>--json; shows MX records and whether they reach mail.develemail.com

A route with no webhook is inbox-only: received mail appears in the Inbox.

devel cloudflare

Manage the Cloudflare integration. Requires an owner session.

export CLOUDFLARE_API_TOKEN=...
devel cloudflare connect --token-env CLOUDFLARE_API_TOKEN
devel cloudflare status
devel cloudflare zones

connect reads the token from the named environment variable, so it never appears in your shell history or process list. zones accepts --json.

devel key

Manage API keys for a project. Requires an owner session.

devel key list --project <id>
devel key create --project <id> --name production

create also accepts --expires <date> (ISO-8601) and --rate-limit <n> (requests per minute). The secret is only printed once — store it immediately.

devel send

Send a test email using API key auth.

devel send --to [email protected] --subject "Test" --html "<p>Hello</p>"

--from defaults to $DEVELEMAIL_FROM or [email protected]. Prints the sent email's ID.

devel logs

List recent emails using API key auth.

devel logs --limit 50 --status failed

devel tail

Poll and print new email events as they happen (Ctrl-C to stop).

devel tail
devel tail --since 2026-07-20T00:00:00Z