Skip to Content
CLI

CLI

Manage your Vendo data pipeline from the terminal with the Vendo CLI. Log in, manage apps, sources, destinations and jobs, and use JSON output in scripts, CI and AI agents.

Last reviewed October 10, 2026

Command-line interface. Manage apps, sources, destinations, jobs and models from your terminal.

Installation

curl -fsSL https://app2.vendodata.com/install.sh | bash

The installer downloads the latest Vendo CLI binary for your platform and verifies its SHA-256 checksum. It installs vendo to ~/.local/bin and sets up shell completions when possible. If ~/.local/bin is not on your PATH, the installer tells you. Add it, then open a new terminal.

The CLI is one native binary for macOS (Apple silicon and Intel) and Linux (x64 and arm64). It uses the certificates of your system for HTTPS, for example the macOS keychain. To use a company certificate, add it to the certificate store of your system.

The CLI source code, releases and issue tracker are at github.com/vendo-analytics/vendo-cli .

Quickstart

vendo login vendo workspace vendo status

Log in

The CLI stores credentials in a profile at ~/.config/vendo/config.json. Log in once and every command after that works with no flags.

vendo login

When the CLI has no API key that works, vendo login signs you in through the browser:

  1. The CLI prints the sign-in URL and opens it in your browser when you press Enter.
  2. In the browser, confirm the Vendo account. If you have access to more than one account, select the account.
  3. The CLI saves an account-scoped API key in a profile. The profile name is the account slug.
  4. The CLI checks the key with /api/v1/me and shows the vendo workspace screen for the profile that it saved.
Acme Corp · acme-corp Account ID: 7f3a9b2c-1d4e-4f5a-8b6c-2d1e0f9a8b7c Profile: acme-corp Base URL: https://app2.vendodata.com API key: vend...8b7c (key ID key_2f752aed, scopes full access) Checks [ok] CLI 1.1.0 at ~/.local/bin/vendo, on PATH [ok] Config ~/.config/vendo/config.json [ok] Zsh completions installed [ok] Signed in as Acme Corp Next steps Run `vendo help` to see everything you can do. Done: Vendo CLI setup complete.

If the key check fails, vendo login shows the screen with the failed check, then the error, and exits with code 1.

If the saved key works, vendo login keeps it and shows the screen again. It does not create a second key. These cases start a new browser sign-in:

  • You add --force.
  • The API rejects the saved key (HTTP 401 or 403).
  • You use --env or --base-url to select a different Vendo instance from the saved profile’s instance. --env accepts staging and prod, for example vendo login --env staging.

If the key check fails for a different reason, for example a network error, vendo login changes nothing. It exits with code 1.

If stdin is a pipe or a file, vendo login reads a line from it in place of the Enter key. See Prompts in scripts and CI.

vendo init, the old name, still works. It does the same as vendo login, but it is not in the help.

Log in with VENDO_API_KEY

When the VENDO_API_KEY environment variable is set, the CLI uses that key in place of the profile’s key. vendo login then checks that key and never opens a browser. If the key works, vendo login shows Using the API key in VENDO_API_KEY. and the workspace screen. It does not save the key.

In these cases, vendo login stops with exit code 1. The error tells you to unset VENDO_API_KEY to sign in through the browser:

  • The API rejects the key (HTTP 401 or 403).
  • You add --force.
  • You use --env or --base-url to select a different Vendo instance from the key’s instance.

Headless login (CI, scripts, automation)

For environments without a browser, create an account-scoped API key in Workspace Settings → Developers → API Keys (see Creating an API Key). Then give the key and the account ID to vendo login:

vendo login --api-key vendo_sk_… --account <account-id>

The CLI checks the credentials with /api/v1/me and writes the same profile that the browser login writes. Commands after that need no flags.

Check the session

vendo workspace # the account, your profiles and the setup checks vendo logout # remove the saved credentials of the active profile vendo logout --all # remove every saved profile

vendo workspace shows who you are and checks your setup on one screen:

Acme Corp · acme-corp Account ID: 7f3a9b2c-1d4e-4f5a-8b6c-2d1e0f9a8b7c Profile: acme-corp Base URL: https://app2.vendodata.com API key: vend...8b7c (key ID key_2f752aed, scopes full access) Profiles * acme-corp 7f3a9b2c… sandbox 0c1d2e3f… stg.vendodata.com Checks [ok] CLI 1.1.0 at ~/.local/bin/vendo, on PATH [ok] Config ~/.config/vendo/config.json [ok] Zsh completions installed [ok] Signed in as Acme Corp
  • The first line is the account name and the account slug. The API key shows masked.
  • Profiles shows when you have two or more saved profiles. * marks the profile in use.
  • Checks shows [ok], [warn] or [fail] for each check. A check with a problem shows its fix below it.

vendo workspace also works when you are not logged in or offline. It then shows the values that your config has and the checks with their fixes.

vendo workspace exits with code 1 only when you are not signed in. For example, the API key is missing, the profile does not exist or the API rejects the key. No answer from the API also gives code 1. A setup problem, for example the CLI not on your PATH, is a warning. Scripts can use vendo workspace as a sign-in check.

vendo workspace replaces vendo whoami and vendo doctor. These commands, vendo profile current and vendo config show still work and show the same as vendo workspace. They are not in the help. vendo doctor exits with code 1 when any check fails, also a setup check.

vendo logout --all asks for confirmation at a terminal. In a script or CI, add --yes. See Prompts in scripts and CI.

Profiles and accounts

Each login saves a profile. Use the profile commands to see and change profiles:

vendo profile list # all saved profiles; * marks the profile in use vendo profile switch # select a profile from a list (at a terminal) vendo profile switch <profile> # switch by profile name vendo profile switch --account <accountId> # switch by account ID vendo profile set --account <account-id> # set values on the active profile vendo --profile # select a profile from a list and make it active vendo --profile <name> status # use a profile for one command vendo status --profile # select a profile from a list for this command only

--profile with no name opens a list of your saved profiles at a terminal. Each row shows the profile name, the account ID and the host of the base URL. The default base URL shows no host. * marks the profile in use. Use the arrow keys to move, type to filter and press Enter to select:

  • vendo --profile with no command makes the profile that you select active. It does the same as vendo profile switch <name>.
  • --profile as the last word of a command runs that command with the profile that you select. The saved active profile does not change.

vendo profile switch with no profile name opens the same list.

--profile with no name must be the last word. The CLI reads the word after --profile as the profile name. Where the list cannot open (see Prompts in scripts and CI), --profile with no name is a usage error (exit code 2). When you have no saved profiles, it shows No profiles to choose from. and exits with code 2.

vendo profile set accepts --api-key, --account and --base-url. The vendo config commands still work: config use is profile switch, config set is profile set, and config reset is logout --all.

Select a profile with VENDO_PROFILE

The VENDO_PROFILE environment variable selects a profile in the same way as --profile. Use it to select a profile for one shell or one CI job:

export VENDO_PROFILE=sandbox vendo status

The CLI selects the profile in this order:

  1. --profile <name>
  2. VENDO_PROFILE
  3. The active profile that you saved with vendo profile switch or vendo login

An empty VENDO_PROFILE has no effect. VENDO_PROFILE never changes the saved active profile:

  • vendo profile set writes to the profile that VENDO_PROFILE selects.
  • vendo logout removes the profile that VENDO_PROFILE selects.
  • vendo login does not make the profile that it saves active. It tells you how to select that profile with VENDO_PROFILE.

vendo profile switch changes the saved active profile. If VENDO_PROFILE names a different profile, the CLI tells you that VENDO_PROFILE still overrides the active profile in this shell. With --json, it does not show this note.

If no profile has the name in VENDO_PROFILE, a command that sends a request with the profile’s API key stops with exit code 1. vendo logout stops too:

Error: Profile "nope" not found (VENDO_PROFILE selects it). Run `vendo profile list` to see your profiles, or unset VENDO_PROFILE to use the active profile.

vendo profile list and vendo profile switch still work. vendo profile set creates a profile with that name.

Find a command

vendo help (or vendo --help) shows all commands in three sections. Each group shows its commands on the line below its description, for example list, diagnose, get, …:

Account: login Authenticate with your Vendo account logout Remove stored credentials workspace Show the current account, your profiles and setup checks status Account health overview help Print this message or the help of the given subcommand(s) version Print version profile Manage account profiles list, switch, set update Update the Vendo CLI using the hosted installer Data pipeline: apps Manage apps list, diagnose, get, pause, resume, delete, create, update …
SectionCommands
Accountlogin, logout, workspace, status, help, version, profile, update
Data pipelineapps, sources, destinations, jobs
Data catalogcatalog, dictionary, metrics, models, measurement

vendo <command> --help shows the flags and examples of a command. vendo help <command> shows the same help. On each command’s help, --profile and --debug are under Global options.

vendo version shows the CLI version, as vendo --version does. With --json, it prints {"version": "<version>"}.

vendo commands is not in the help. It shows the same list as vendo help. For the full command tree as JSON, see vendo commands --json.

Group menu

At a terminal, run a group without its command, for example vendo apps or vendo measurement ltv. The CLI shows a menu of the commands in that group:

  • Use the up and down arrow keys to move.
  • Type to filter by name and description.
  • Press Enter to run the selected command. If you select a group, its menu opens.
  • Press Esc or Ctrl-C to close the menu. The CLI exits with code 0 and runs nothing.

The CLI runs the selected command as if you typed it, with the global options that you typed. If the command needs a value, for example <appId>, the CLI asks for it. See Missing values.

The menu shows only when stdin, stdout and stderr are terminals. In these cases, a group without its command shows the group’s help on stderr and exits with code 2:

  • The command runs in a script, a pipe or CI.
  • CI or VENDO_NO_INPUT turns off prompts. See Prompts in scripts and CI.
  • TERM is dumb.

vendo with no command shows the main help, as before.

Missing values

At a terminal, a command that you type without a required value asks for that value. The CLI does not ask for optional values.

? vendo apps get > a0000001... Demo Shop shopify source active a0000002... Demo Ads google_ads source, destination active a0000003... Demo Warehouse bigquery destination inactive [↑↓ to move, enter to select, type to filter]
  • An ID of an app, source, destination, job, model or metric: a list of the items that the list command of the group returns. Each row shows the short ID and a few columns that tell the items apart. The list shows the newest 500 items or fewer.
  • A platform, for example for vendo catalog get or vendo apps create --type: a list of the platforms that are ready to connect.
  • A methodology, a cohort period, a dictionary entry, a sync type or a data type: a list of the values that you can use.
  • A name, a search text, a date or a file path: a question on one line. Type the value and press Enter.

The CLI puts the value where you would type it and runs the command as if you typed it. A delete or a cancel still asks for confirmation. --dry-run, --json and --output apply as usual.

  • If the list is empty, the CLI shows a message, for example No apps to choose from., and exits with code 2.
  • Press Esc or Ctrl-C to stop. The CLI exits with code 0 and runs nothing.
  • If the command cannot run, for example because there is no API key, the CLI shows that error before it asks.

The CLI asks only where the group menu can show. In other cases, a missing value is a usage error (exit code 2), as before.

Select from a list

At a terminal, these commands show their rows as a list that you can select from:

  • vendo apps list, vendo sources list, vendo destinations list and vendo jobs list
  • vendo catalog list, vendo dictionary list, vendo metrics list and vendo models list
  • vendo measurement methodologies list, vendo measurement ltv list and vendo measurement signals list
  • vendo profile list

The list has the same rows as the table, without the header. The count of the table is in the line below the list. Use the arrow keys to move and type to filter. Press Enter to select an item:

  1. The CLI shows the details of the item, as the get command of the group shows them. For a cohort, it shows the details as vendo measurement ltv cohort does. For a signal or a profile, it shows no details.
  2. A menu shows the actions that you can do with the item, and back.
? vendo apps > pause Pause an app delete Delete an app (soft delete) back Back to the list
ItemActions
Apppause when it is active or resume when it is inactive, delete
Sourcesync when it is active, pause or resume, delete
Destinationsync when it is active, refresh-source when it has a source app, pause or resume, delete
Jobtail and cancel when it is queued, pending or running
Metricactivate when it is a draft, delete
Signalclick-path for the click_path signal
Profileswitch, if it is not the saved active profile

The menu does not show update, because update needs at least one flag. To change an item, type vendo <group> update <id> with the flags to change.

A platform, a dictionary entry, a model, a methodology and a cohort have no actions. Their menu shows only back.

The CLI runs the action that you select as if you typed it, for example vendo apps pause <appId>. A delete or a cancel still asks for confirmation. After the action, the CLI stops with the exit code of the action. Select back to go back to the list. Press Esc or Ctrl-C to stop. The CLI exits with code 0 and runs nothing.

The list shows only where the group menu can show. Where the list cannot show, the command prints the table, as before. With --json or --output, the command prints what it did before: the JSON or the chosen field. If there are no rows, the command prints the table and its count.

The get commands and the actions also work as commands that you type, without the list.

Commands

Account health

vendo status

Shows the total, active, paused and errored apps, sources and destinations in your account. It also shows the recent job failures and the next steps.

Apps

vendo apps list # list all apps vendo apps diagnose # show apps that need attention vendo apps get <appId> # get app details vendo apps pause <appId> # pause an app vendo apps resume <appId> # resume a paused app vendo apps delete <appId> # delete an app (asks for confirmation)

Sources

vendo sources list # list all data sources vendo sources get <sourceId> # get source details vendo sources sync <sourceId> # start a manual sync vendo sources sync <id> --watch # sync and wait until the job completes vendo sources pause <sourceId> # pause a source vendo sources resume <sourceId> # resume a paused source vendo sources delete <sourceId> # delete a source (asks for confirmation)

Destinations

A destination sends data from Vendo to another platform.

vendo destinations list # list all destinations vendo destinations get <destinationId> # get destination details vendo destinations sync <destinationId> # start a manual sync vendo destinations sync <id> --watch # sync and wait until the job completes vendo destinations refresh-source <id> # import source data that is missing for a time window vendo destinations pause <destinationId> # pause a destination vendo destinations resume <destinationId> # resume a paused destination vendo destinations delete <destinationId> # delete a destination (asks for confirmation)

The old command names vendo integrations and vendo int still work. They do the same as vendo destinations.

Jobs

vendo jobs list # list sync jobs vendo jobs list --status running # filter by status vendo jobs get <jobId> # get job details vendo jobs tail <jobId> # follow one job live vendo jobs tail --source <id> # follow the latest job of a source vendo jobs tail --integration <destinationId> # follow the latest job of a destination vendo jobs tail --source <id> --next # wait for the next new job, then follow it vendo jobs cancel <jobId> # cancel a pending or running job (asks for confirmation) vendo jobs watch # live view of running and pending jobs

jobs list --status accepts queued, pending, running, completed, warning, failed and canceled. jobs list --type accepts import, export, data_quality and attribution. Press TAB after the flag to see the values.

The --integration flag of jobs list, jobs tail and jobs watch takes a destination ID.

jobs tail --next

With --source or --integration, the --next flag changes what jobs tail follows. The CLI does not follow the latest job that exists. It waits for the next new job and then follows it. Use it before you start a sync, so that you see the job from the start.

# Wait for the next job of this source, then follow it vendo jobs tail --source 1a2b3c4d --next # Wait for the next job of this destination vendo jobs tail --integration 5e6f7a8b --next

Use jobs tail to follow one sync. Use jobs watch for a live view of all running and pending jobs:

vendo jobs watch --interval 10 # refresh every 10 seconds vendo jobs watch --source <id> # only the jobs of one source

Catalog

vendo catalog list # the platforms that are ready to connect vendo catalog list --all # every platform, also the ones on request vendo catalog list --category advertising # filter by category vendo catalog list --role destination # filter by role (source, destination) vendo catalog get <appType> # details of one platform

vendo catalog list shows the platforms that are ready to connect. At a terminal, you can select a platform to see its details (see Select from a list). The Availability column shows ready or on request. The last line counts the platforms and tells you how to see all of them:

35 ready · 560 more on request (vendo catalog list --all)

With --category or --role, the counts are for that filter, and the hint keeps the filter, for example (vendo catalog list --category advertising --all). vendo catalog get shows the availability of one platform on its Availability line.

The catalog commands need an API key, but they do not need an account ID.

Models

vendo models list # list data models vendo models get <modelId> # get model details

models list shows the ID, name, type, validity and last validation of each data model. The type is the model type, for example sql. models get shows the details of one model, for example its description, primary keys and SQL query.

Other commands

vendo dictionary, vendo metrics and vendo measurement are in the main help. Run vendo <command> --help to see their commands and flags.

Connect an AI tool

CLI 1.1.0 removed the vendo mcp command. To connect an AI tool such as Claude or Cursor to Vendo, see MCP Server.

Short IDs

Most tables show the first 8 characters of an ID and then ..., for example 1a2b3c4d.... The Job ID column of vendo status shows the 8 characters without .... You can use these 8 characters in place of the full ID of an app, source, destination, job, metric, model or methodology. Type them with or without the ...:

vendo apps list vendo apps get 1a2b3c4d vendo apps get 1a2b3c4d... vendo jobs list --source 1a2b3c4d

The CLI finds the full ID in the list of that resource just before it sends the request:

  • If one item matches, the CLI uses its full ID.
  • If more than one item matches, the command stops with exit code 1 before it sends the request. The error lists the matching items (10 or fewer) and tells you to use the full ID.
  • If no item matches, the CLI sends the short ID as you typed it. The API then answers as for any other unknown ID.
Error: Short ID 1a2b3c4d matches 2 apps: 1a2b3c4d-1111-4111-8111-111111111111 Demo Shop shopify 1a2b3c4d-2222-4222-8222-222222222222 Demo Ads google_ads Use the full ID.

The CLI reads the first 500 items of the list, in the order of the API. For jobs, these are the 500 newest jobs. For an item that is not in the first 500, use the full ID. For metrics, the CLI also looks at archived metrics when no other metric matches.

The CLI does not look up a full ID. It does not look up a short ID on a --dry-run. For a delete or a cancel, it looks up the short ID only after you confirm.

JSON output and AI agents

The CLI works well for scripts and AI agents. Add --json to get output that a program can read.

JSON output

With --json, most commands that show API data print the API response as the API sent it. Other commands make their own JSON, for example vendo workspace, vendo status and vendo apps diagnose.

vendo workspace --json has all the keys that vendo whoami --json and vendo doctor --json had. data is the /api/v1/me response, and config shows where each value comes from. summary, checks and suggestions show the checks. When the CLI gets no answer from /api/v1/me, the JSON has no data and no identity, and stderr has no JSON error.

These commands got --json in CLI 1.1. Their JSON does not include the API key:

CommandJSON on stdout
vendo login{"profile", "baseUrl", "accountId", "auth", "accountName", "workspace"}. auth is verified, unverified or incomplete. workspace is what vendo workspace --json prints for the profile. Messages, for example the sign-in URL, go to stderr.
vendo logout{"removed": [profile names]}
vendo profile list{"profiles": [{"name", "active", "accountId", "baseUrl"}]}
vendo profile switch{"profile": {...}}. With --json, the command never opens the list. profile is null when you give no profile name or --account, or when there are no profiles.
vendo profile set{"profile": {...}, "configPath"}
vendo jobs tailNothing while it waits. Then the last job, as vendo jobs get --json prints it.
vendo jobs watchOne line of JSON each time the job list changes (newline-delimited JSON)
vendo completions <shell>{"shell", "script"}
vendo completions{"shell", "installed"}. Both are null when the CLI cannot detect your shell.
vendo update{"previousVersion", "version", "installPath", "binaryPath"}. The installer’s output goes to stderr.
vendo version{"version"}

--debug output, warnings and the update notice go to stderr, so they do not change the JSON on stdout.

JSON errors

With --json, an error is one line of JSON on stderr. It is the last line on stderr. It always has this shape:

{"error":{"message":"App not found","code":"NOT_FOUND","status":404,"requestId":"req_2f752aed80804759"}}
FieldValue
messageThe text that the error shows after Error:
codeThe API’s error code, for example NOT_FOUND. null when the API sends no code.
statusThe HTTP status of the API’s answer. null when no answer came back, for example after a timeout or a network error.
requestIdThe ID on the Request ID: line of the text error. null when the text error has no Request ID: line.

An error that the CLI finds itself has only a message. For example, no API key, a missing --yes or a bad flag value:

{"error":{"message":"This deletes app 1a2b3c4d-0000-0000-0000-000000000000. Re-run with --yes to confirm.","code":null,"status":null,"requestId":null}}

The exit codes do not change with --json:

  • 1 for an error.
  • 2 for a usage error, for example an unknown command or a missing argument. When the command includes --json, the usage error is JSON too. Its message includes the tips of the text error, for example tip: a similar subcommand exists: 'list'.

--debug output, warnings and the update notice can come before the JSON error on stderr. Read the last line.

Some commands print a JSON error and exit with code 0, as their text versions do:

  • vendo logout --json when you are not logged in.
  • vendo jobs tail --json when the job fails or the wait times out. Stdout still has the last job.

vendo destinations refresh-source --json prints the API response on stdout also when the API answers with the status unavailable. It then prints the JSON error on stderr and exits with code 1.

The command tree

vendo commands --json prints every command as a tree. The CLI reads it from its own command definitions, so it always matches the help. Each command has these fields:

  • name, path, description and aliases
  • arguments and options
  • commands: the commands in a group

Each option has name, short, valueName, description, required, default and global. possibleValues lists the values that the CLI accepts. suggestedValues lists the values that TAB offers, for example the job statuses of jobs list --status. help, completions and old command names, for example vendo init, vendo int, vendo whoami and vendo self-update, are not in the tree.

Prompts in scripts and CI

The CLI asks a question only when stdin and stdout are terminals. These are the questions and menus:

  • The y/N confirmation of delete, jobs cancel and logout --all
  • The group menu
  • The questions for missing values
  • The profile list of vendo profile switch and of --profile with no name
  • The lists of the list commands (see Select from a list)

The menus and lists show only when stdin, stdout and stderr are terminals.

The “Press ENTER to open in the browser” step of vendo login is different. vendo login always shows this line. In these cases, it reads stdin and opens the browser when it reads a line:

  • Stdin is not a terminal, for example a pipe. echo | vendo login opens the browser.
  • Stdin is a terminal and prompts are on. Stdout does not have to be a terminal.

To turn off all prompts, also at a terminal, set CI or VENDO_NO_INPUT. Any value turns prompts off, except an empty value, 0 or false. Most CI services set CI for you. There is no --no-input flag.

export VENDO_NO_INPUT=1

When prompts are off, or when the CLI runs without a terminal:

  • A delete, cancel or logout --all needs --yes. Without --yes, the command stops with exit code 1 before it sends a request. --json does not replace --yes.
  • A group without its command shows its help and exits with code 2.
  • A command without a required value shows its usage error and exits with code 2.
  • The list commands print their tables.
  • vendo profile switch without a profile name does not ask. It prints Cancelled. and changes nothing.
  • --profile without a name is a usage error (exit code 2).

When CI or VENDO_NO_INPUT turns off prompts at a terminal, vendo login does not wait for Enter and does not open a browser. It prints the sign-in URL and waits for the sign-in. If stdin is a pipe or a file, vendo login still reads it, also when CI or VENDO_NO_INPUT is set.

TERM=dumb turns off the group menu, the questions for missing values, the profile list and the lists of the list commands. The y/N confirmations still ask.

An AI agent that runs vendo on a pseudo-terminal waits at these menus, questions and lists. For example, vendo apps list waits at the list and does not print the table. Set VENDO_NO_INPUT=1 for the agent, or add --json or --output to a list command.

CI example

For CI, use a headless login once at the start of the job:

vendo login --api-key vendo_sk_… --account <account-id> vendo sources sync 1a2b3c4d --watch --json vendo apps delete <appId> --yes

Keep the API key in a secret of your CI service. The headless login writes the same profile that the browser login writes. All commands after it in the same runner need no flags.

Options

Global options

FlagDescription
--profile <name>Use a specific account profile (or set VENDO_PROFILE). With no name, select a profile from a list (see Profiles and accounts)
--debugShow request diagnostics and request IDs on stderr
-h, --helpShow help for any command
-V, --versionShow the CLI version

--debug

The --debug flag (or the VENDO_DEBUG=1 environment variable) shows diagnostics for each request:

  • Request: the method, the URL and the CLI’s request ID.
  • Response: the status, the server’s request ID (X-Request-Id) and the duration in milliseconds.
  • Failure: the API’s error message and error code.
# Turn on with the flag vendo sources list --debug # Turn on with an environment variable VENDO_DEBUG=1 vendo jobs list --status failed

The debug output goes to stderr, so it does not change --json output that you send to other tools.

Common command flags

FlagDescription
--jsonPrint JSON (see JSON output and AI agents)
--limit <n>Number of results (default: 20)
--offset <n>Pagination offset
--output <field>Print a single field for each row, for example id
-y, --yesSkip the confirmation (delete, cancel and logout --all)
--dry-runShow what the command does without doing it
--watchWait until the job completes after you start a sync

Examples

Scripting with JSON output

# Get the IDs of all failed jobs vendo jobs list --status failed --json | jq -r '.data[].id' # Count the sources vendo sources list --json | jq '.meta.pagination.total' # Read the error code of a failed command vendo apps get <appId> --json 2>&1 >/dev/null | tail -n 1 | jq -r '.error.code'

Monitoring

# Follow the next source sync live vendo jobs tail --source 1a2b3c4d --next # Check the account and the setup vendo workspace

Start a sync and wait

# Sync and wait until the job completes vendo sources sync 1a2b3c4d --watch # Or start the sync and monitor it separately vendo sources sync 1a2b3c4d vendo jobs list --source 1a2b3c4d

Shell completions

The installer sets up TAB completion for bash, zsh and fish when it can. It saves the completion script and makes your shell load it:

ShellWhere the installer sets up completions
zsh~/.zshrc
bash~/.bashrc. On macOS, also the login file that bash reads: ~/.bash_profile, ~/.bash_login or ~/.profile. If none exists, the installer creates ~/.bash_profile.
fish~/.config/fish/completions/vendo.fish

On macOS, Terminal opens bash as a login shell. A login shell reads the login file, not ~/.bashrc.

The installer and vendo update run vendo completions <shell>. The help does not list vendo completions, but you can run it. To see whether completions are set up for your shell, run vendo completions with no shell. It tells you what the command does, whether completions are installed and how to install them. It writes this text to stderr and nothing to stdout. vendo workspace checks completions too.

Set up completions manually

Zsh. Add these lines at the end of ~/.zshrc:

autoload -Uz compinit && compinit eval "$(vendo completions zsh)"

Put them after the line that loads a framework such as oh-my-zsh, Prezto or Zim. A compinit that runs after the eval line removes the Vendo completions. vendo completions and vendo workspace count the eval line only when compinit, or a framework that runs it, comes before it.

Bash. Add this line to ~/.bashrc. On macOS, add it to ~/.bash_profile, or to the login file that your bash reads:

eval "$(vendo completions bash)"

Fish. Save the script where fish loads it:

vendo completions fish > ~/.config/fish/completions/vendo.fish

Then open a new terminal.

TAB also offers the values of flags that have a fixed list of values, for example vendo jobs list --status.

Updating

vendo status, vendo workspace and the browser sign-in of vendo login check for a new version once a day. When a new version is available, the CLI tells you on stderr.

vendo update

To install a specific version, not the latest:

vendo update --version 1.1.0

The --version flag downloads and installs that release. Use it to go back to a version that you know works, or to keep CI on one CLI version. To install a specific version with the installer, set VENDO_VERSION:

curl -fsSL https://app2.vendodata.com/install.sh | VENDO_VERSION=1.1.0 bash

From CLI 0.3.x, update with vendo self-update. In 1.1.0, vendo self-update still works and does the same as vendo update.

Coming from an earlier version

CLI 1.1.0 replaces the TypeScript CLI 0.3.1. Your profiles, your config file and your scripts keep working. The old command names still work, but they are not in the help:

OldNow
vendo initvendo login
vendo integrations, vendo intvendo destinations
vendo config ...vendo profile ...
vendo config usevendo profile switch
vendo whoami, vendo doctorvendo workspace
vendo profile current, vendo config showvendo workspace
vendo config resetvendo logout --all
vendo self-updatevendo update

Other changes that can affect a script:

  • A delete, jobs cancel and logout --all need --yes when no one can answer the question. --json no longer replaces --yes. See Prompts in scripts and CI.
  • With --json, nested keys keep the API’s snake_case, and an error is one line of JSON on stderr. See JSON output and AI agents.
  • A wrong command or flag exits with code 2, not 1.
  • vendo mcp is removed. See MCP Server.

The full list of changes is in the CLI changelog .

Need help?

When you contact support, give your workspace, the source or destination name, the job ID and the first error message.

support@vendodata.com
Last updated on