Skip to main content
Condor uses a two-server architecture: the Condor Server (agentic layer) and the Hummingbot API Server (execution layer). This guide installs both.
Secure your API before going live. Hummingbot API can place orders, read balances, and manage bots. AI assistants (MCP, Condor agents, and similar tools) make that surface easier to reach—and easier to misuse if the API is open on the public internet.We recommend Tailscale for production, especially when Condor and the API run on different machines. Tailscale puts the API on a private encrypted network so only your devices can connect—without publishing port 8000 on a public IP. Use strong API passwords too; Tailscale is network isolation on top of auth, not a replacement for it.Full walkthrough: Securing Condor and Hummingbot API with Tailscale · Hummingbot API Tailscale guide

Prerequisites

ComponentMinimumRecommended
OSLinux x64 or ARM (Ubuntu 20.04+), macOSUbuntu 22.04 LTS
Memory4 GB RAM8 GB RAM
Storage10 GB SSD20 GB SSD
CPU2 vCPUs4 vCPUs
Any cloud provider works. Popular choices:
  • AWS EC2: t3.medium or larger
  • Google Cloud: e2-medium or larger
  • Digital Ocean: Basic Droplet with 4GB RAM
  • Hetzner: CX21 or larger
Allow SSH (port 22) for administration. Do not expose port 8000 publicly for production—use Tailscale so Condor and other clients reach the API at http://hummingbot-api:8000 on your private tailnet.

Quick Install

From an empty directory:
curl -fsSL https://raw.githubusercontent.com/hummingbot/deploy/main/setup.sh | bash
Interactive setup will prompt for:
  • Telegram Bot Token: Create one via @BotFather
  • Telegram User ID: Get yours via @userinfobot
  • Whether to configure and launch Hummingbot API with Docker—answer yes if you are deploying Condor and the API on the same machine locally. Have Docker installed and running first. If the API runs on another server, you can skip this step and add that API URL later in Telegram under /servers.
  • Tailscale (when installing Hummingbot API): answer y for production or any remote setup; paste your tskey-auth-... key when prompted

Create a Telegram Bot

  1. Open @BotFather in Telegram
  2. Send /newbot and follow the prompts to name your bot
  3. Copy the bot token (format: 123456789:ABCdefGHIjklMNOpqrsTUVwxyz)

Get Your User ID

  1. Open @userinfobot in Telegram
  2. Send /start to receive your user ID

Secure Remote Access with Tailscale

Use Tailscale when Condor and Hummingbot API run on different machines—for example Condor on your laptop and the API on a cloud VPS.

On the API server

  1. Run the Hummingbot API only installer (or Quick Start with API enabled)
  2. When asked Use Tailscale for secure private networking?, answer y
  3. Paste your auth key and deploy:
cd hummingbot-api
make deploy
make tailscale-status   # confirm hummingbot-api appears on your tailnet

On the Condor machine

  1. Install Tailscale and sign in to the same account
  2. In Telegram, open /servers and add the API with:
    • Host: hummingbot-api (MagicDNS name, not a public IP)
    • Port: 8000
    • Username / Password: same as the API .env
Test from the Condor host:
curl -u YOUR_USERNAME:YOUR_PASSWORD http://hummingbot-api:8000/health
Tailscale also works when Condor and the API run on the same machine—you still get a stable hostname and avoid publishing port 8000 publicly.

Verify Installation

  1. Open your Telegram bot and send /start
  2. You should see the main menu with commands like /portfolio, /trade, /agent
Note: After Condor starts successfully, admins should receive a Telegram message: “Condor is online and ready.” If that does not appear within a minute or two, check the troubleshooting section below (for example attach to the condor tmux session after Quick Start).
Welcome to Condor! 🦅

Commands:
/portfolio - View balances
/trade - Place orders
/agent - Trading Agents
/keys - Manage credentials
/servers - API servers

Access Points

ServiceLocal URLTailnet URL (when Tailscale enabled)Description
TelegramYour botPrimary interface
APIhttp://localhost:8000http://hummingbot-api:8000REST API
Swaggerhttp://localhost:8000/docshttp://hummingbot-api:8000/docsAPI documentation
Web DashboardRun /web in TelegramBrowser interface

Managing Services

How you manage Condor depends on how you installed it. After Quick Start (deploy installer): Condor runs in a tmux session named condor.
tmux attach -t condor    # live logs and tracebacks (detach: Ctrl+B, then D)
tmux kill-session -t condor   # stop Condor completely
From the directory that contains the condor folder, you can also upgrade with:
curl -fsSL https://raw.githubusercontent.com/hummingbot/deploy/main/setup.sh | bash -s -- --upgrade
After Manual install: Condor runs in the foreground of the terminal where you ran make run (stop with Ctrl+C). Watch that terminal, or run under tmux yourself if you want a detachable session. Hummingbot API (Docker): From the hummingbot-api directory (sibling of condor when installed by the deploy script):
docker compose ps
docker compose logs -f   # or your compose plugin equivalent
make tailscale-status    # when Tailscale is enabled

Troubleshooting

  1. Confirm the process is running
    • Quick Start / deploy: tmux attach -t condor and look for tracebacks or exit messages.
    • Manual install: Check the terminal where make run is running.
  2. Check condor/.env on the machine that runs Condor: TELEGRAM_TOKEN must match @BotFather, and ADMIN_USER_ID must be your numeric Telegram user id (from @userinfobot).
  3. Access still pending: New users must be approved. An admin should use /admin (or the admin flow from /start) to approve you.
  4. Deploy installer hint: If admins never see “Condor is online and ready.”, attach to tmux (above) and fix errors shown there; the installer also reminds you to verify .env when that message is missing.
Condor talks to the Hummingbot API over HTTP using the host, port, username, and password stored for each server (see /servers in Telegram or condor/config.yml). Status checks call http://{host}:{port} and list accounts; failures surface as Offline (Cannot reach server, Connection timeout) or Auth Error (Invalid credentials).
  1. Is the API stack up? On the machine where Docker runs the API: docker compose ps (from the hummingbot-api repo directory). You want the API container healthy and port 8000 (default) listening.
  2. Smoke test from the Condor host: curl -sS -o /dev/null -w "%{http_code}" http://127.0.0.1:8000/docs (same machine) or curl -u USER:PASS http://hummingbot-api:8000/health (Tailscale). You should get 200. If this fails, Condor will show offline until the API is reachable.
  3. Wrong host for your layout
    • API and Condor on the same machine: host is usually localhost or 127.0.0.1.
    • API on a different host or VPS: use hummingbot-api (MagicDNS) when Tailscale is enabled—not a public IP and not localhost (localhost would point at the Condor machine itself).
    • Docker Desktop / WSL: If Condor runs in one environment and the API in another, localhost may not cross namespaces; use the host gateway IP or publish ports and use the reachable address from Condor’s network namespace.
  4. Tailscale / firewall: Prefer Tailscale over opening port 8000 on a public firewall. If you must use a public IP, allow inbound 8000 only from the Condor host—but Tailscale is strongly recommended instead.
  5. Credentials: Auth Error means HTTP 401—username/password in /servers must match the API’s HTTP basic auth (the deploy flow syncs config.yml with hummingbot-api/.env when both are installed together; if you changed one side, align the other or re-save in /servers).
  • /servers shows No servers configured until at least one entry exists in condor/config.yml under servers: (and users need access to a server—admins own new entries; others must be shared).
  • Server not found in the UI usually means the configured server name does not exist anymore (typo after edit, or deleted entry)—open /servers, pick a valid server, or add one again.
  • No servers available (errors when running commands) often means your user has no server shared with them—ask an owner admin to share a server with your Telegram user id.
  • After Manual install, you must add the real API URL (and auth) via /servers if config.yml was not pre-filled.
  1. Docker daemon: The deploy script checks that Docker is running before bringing up the API. On Linux: docker info. On Mac/Windows: open Docker Desktop and wait until it is fully started.
  2. Compose: You need either docker compose (plugin) or legacy docker-compose (the installer checks this).
  3. API-only recovery: If Quick Start skipped or failed the API step, use the Hummingbot API only tab command, or from hummingbot-api: make setup, docker compose pull, make deploy (see hummingbot-api README).
  4. Sibling layout: Condor’s setup wizard expects hummingbot-api next to condor (../hummingbot-api from the Condor directory) when both are installed by the same flow—keep that layout unless you know how to point config.yml at a custom URL.
ProblemTry this
Name hummingbot-api does not workEnable MagicDNS in Tailscale DNS settings
Auth key rejectedKey must start with tskey-auth-; generate a new one if it expired
Connection refusedOn the API server: make tailscale-status and make deploy again
Login fails (401)Use the same username/password as in the API .env
Still reachable on public IPRemove port 8000 from your cloud provider’s firewall / security group
See also: Hummingbot API Tailscale guide

Next Step

Adding Credentials

Connect your exchange accounts