Browse the docs

Reference

Command line (CLI)

tandem runs every Tandem operation from your terminal: the same ones the app, the REST API and the MCP server use, with the same checks and the same change history.

Install and sign in

npm install -g tandemcrm
tandem login

tandem login shows a code and opens https://app.tandemcrm.app/device in your browser. Approve it there and the CLI is signed in as you, so it can do everything you can in the app, including approving suggestions and managing webhooks. Changes it makes are signed with your name. tandem logout signs it out.

For scripts and CI, use an API key instead: tandem login --key crm_sk_…, or set TANDEM_API_KEY. The CLI then acts as that key, like an agent, with the key's scopes. Self-hosting? Set TANDEM_URL or pass --url to tandem login.

Commands

CommandWhat it does
tandem whoamiWho you're signed in as, and the open workspace
tandem workspacesYour workspaces
tandem use <workspace>Switch workspace, by name, slug or id
tandem opsEvery operation you can run
tandem help <operation>An operation's parameters
tandem <operation> --param value …Run one
tandem api <METHOD> <path>Any other endpoint, e.g. tandem api GET /v1/webhooks
tandem export [file.zip]Download the whole workspace

Running operations

tandem search --query acme
tandem upsert_company --name Acme --domain acme.com
tandem update_deal --id 3f1c… --stage won --amount 24000
tandem create_task --title "Send the proposal" --due 2026-11-12 --record.type deal --record.id 3f1c…
tandem set_custom_fields --type deal --id 3f1c… --fields '{"budget": 50000}'
echo '{"name": "Globex", "domain": "globex.com"}' | tandem upsert_company -

Parameters are the operation's input fields as flags. Numbers, true/false and comma-separated lists are converted using the operation's schema; objects and lists of objects take JSON; dots set nested fields. --input '{…}' or - (JSON on stdin) gives the whole input, and flags override it. --idempotency-key makes a retried write run once.

Output is the operation's JSON result; --compact prints it on one line for jq. Errors go to stderr with a hint, and the exit code is 1.

This page as Markdown · All docs in one file