Skip to main content
Runpod CLI is an open source command-line tool for managing your Runpod resources from your local machine. You can manage Pods, Serverless endpoints, templates, network volumes, and models, transfer files between your system and Runpod, diagnose issues, and view account information.

Quick start

After installing and configuring runpodctl, you can start managing resources immediately:

Install Runpod CLI locally

Every you deploy comes preinstalled with runpodctl and a Pod-scoped API key. You can also install it on your local machine to manage resources remotely.

Step 1: Choose an installation method

Choose the installation method that matches your operating system.
The install script automatically detects your operating system and architecture:
Or using curl:
The script installs the latest version to /usr/local/bin when run as root, or to ~/.local/bin for non-root users. If you don’t have root access, the script displays instructions for adding runpodctl to your PATH.
This installs runpodctl globally on your system, so you can run commands from any directory.

Step 2: Configure your API key

Before you can use runpodctl locally, you must configure it with an API key. The easiest way to set up your API key and SSH configuration is with the doctor command:
This command guides you through first-time setup, including API key configuration and SSH key setup. Alternatively, you can manually configure your API key:
After running the command, you should see a confirmation message similar to this:

Step 3: Verify installation

To verify that runpodctl installed successfully, run this command:
You should see which version is installed:

Command groups

Runpod CLI organizes commands into groups based on the resource type:

Help and reference

Learn how to use Runpod CLI commands by browsing the CLI reference using the sidebar to the left, or by running the help command:
Learn more about a particular command by running:

Output format

Successful command output goes to standard output as JSON by default, which makes runpodctl scriptable and agent-friendly. Use the --output flag to switch to a human-readable table or YAML:
template search and hub search emit [] on standard output when nothing matches, instead of a prose message, so a caller piping the output into a JSON parser gets a valid empty list on the no-match case.

Error format

When a command fails, runpodctl writes a single flat JSON object to standard error and exits with a non-zero status. Branch on the code field, never on the message text:
Codes runpodctl generates: The API can also return its own code, which is passed through in lowercase. Treat the list above as the set the CLI generates rather than an exhaustive one.

Exit codes

Every documented resource command exits non-zero on failure, including model, update, send, and receive (which previously exited 0 on some failure paths). Do not rely on stdout being empty to detect failure. Check the exit code and parse the JSON error object on stderr. A few legacy surfaces still print plain-text errors and do not carry a code:
  • The legacy pod verbs (get pod, create pod, remove pod, start pod, stop pod, create pods, remove pods) and get cloud print Error: <message> via cobra and exit 1.
  • exec prints plain text and exits 1.
  • project prints to standard output and exits 0 on failure (tracked upstream).
Parsers should tolerate a non-JSON line on stderr from those commands, and should not rely on the exit code for project until the upstream fix lands.

Environment variables

Invoke is a separate service from the control plane. Pointing RUNPOD_API_URL or RUNPOD_GRAPHQL_URL at a non-production host does not move the invoke URLs; override RUNPOD_INVOKE_URL explicitly when you need that.

Shell completion

Enable tab completion for your shell to make working with runpodctl easier:
This command auto-detects your shell and adds the appropriate source command to your shell configuration file (~/.bashrc or ~/.zshrc). The command is idempotent—running it again skips installation if completion is already configured. Restart your shell or source the configuration file for changes to take effect.