Other commands

Max PrilutskiyCEO & Co-Founder2 min read

Setup and identity commands. None of them touch source content — they only manage credentials and project bindings.

lingo login#

Authenticate against Lingo.dev. Two flows:

Browser (default, interactive)#

bash
lingo login

Opens Lingo.dev in your browser, where you sign in and approve the CLI. The CLI stores the session in ~/.lingo/credentials.json and keeps it fresh until you run lingo logout.

If you created an organization in the web app and haven't finished setting it up, login then prints a link to finish it:

text
Finish setting up Acme Inc in the web app: https://lingo.dev/orgs/org_a8c...

Setup in the web app makes the organization's first engine from your website.

API key (CI / non-interactive)#

bash
lingo login --api-key lk_...

Stores the API key. Generate keys on the Lingo.dev platform under your organization's API keys settings.

You can also pass --api-key as a global flag on any command, which bypasses stored credentials entirely:

bash
lingo push --api-key lk_...

Convenient for one-off CI jobs that shouldn't write credentials to disk.

lingo logout#

bash
lingo logout

Clears ~/.lingo/credentials.json. No-op if you weren't logged in.

bash
lingo link
lingo link --org org_a8c... --engine eng_b9d...   # skip prompts

Bind the current project to an organization and a localization engine. Writes orgId + engineId into .lingo/config.json (commit it).

Interactive mode lets you pick from your existing orgs and engines or create new ones inline: link prompts for a name, asks the onboarding survey for a new organization, and creates it through the API before linking.

While an organization you created is still being set up in the web app, link doesn't create engines in it. It shows the link to finish setup and lists the organization's existing engines. If there are none, it exits with that link: finish setup, then run lingo link again. Organizations you were invited to and runs with an API key are not affected.

bash
lingo unlink

Removes orgId and engineId from .lingo/config.json. Doesn't delete the org or the engine — only severs the local binding. Useful before re-linking to a different engine.

lingo whoami#

bash
lingo whoami
lingo whoami --json

Shows three things:

  1. Identity — the email you're logged in as, or whether you're using an API key.
  2. Org — the linked organization (resolves the name from the API).
  3. Engine — the linked engine (resolves the name from the API).
text
Email:   you@company.com
  Org:     Acme Inc (org_a8c...)
  Engine:  Production (eng_b9d...)
  Auth:    session

If you're not in a linked project directory, the Org/Engine lines are omitted. --json outputs the same data structured for scripting.

Global --api-key flag#

Every command accepts a --api-key flag that overrides stored credentials for that invocation only. Standard pattern in CI:

yaml
env:
  LINGO_API_KEY: ${{ secrets.LINGO_API_KEY }}
steps:
  - run: lingo push --backfill-missing --yes --wait --api-key "$LINGO_API_KEY"

(The CLI also reads LINGO_API_KEY from the environment as a fallback.)

Where to next#

  • lingo push — scoped + delta translation.
  • lingo pull — fetch the last push's outputs, with conflict detection.
  • Configuration — .lingo/config.json, lockfile, run state.