> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ballista.gg/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Ballista is a trading client for Polymarket, not an exchange. Every order Ballista places goes to Polymarket's CLOB.
> There are three end-user surfaces — the Telegram bot, the web terminal and the Chrome extension — and they share ONE account and ONE balance. Never attribute a feature to a surface without checking that surface's source.
> Every user registers in the Telegram bot first. The terminal and the extension sign in with the Telegram login widget. There is no other sign-up path.
> Deposits arrive through EVM, Solana and Bitcoin bridge addresses and a Polymarket proxy wallet, with a $10 minimum. There is NO withdrawal UI — Export Keys is how a user takes custody of their funds.
> Feature parity is uneven and must never be assumed. The full ~30-field copy-trade form exists only in Telegram; the terminal's copy form has 7 fields; the backtester, leaderboard and trader profiles are terminal-only; alerts and notifications are extension-only; referrals are Telegram-only.
> Slippage means two different things. On a live copy trade it is a fill tolerance (default 30). In a backtest it is the simulated fill price (default 1). Deploying a backtest does not carry its slippage over to the live copy trade.
> Take-profit and stop-loss run on live copy trades but are NOT simulated in backtests — the backtest API rejects those fields.
> A backtest never places an order and never moves funds. Its fidelity caveats are published with every result and must be quoted, not paraphrased.
> Leaderboard PnL is own-tape: harvested by Ballista from its own trade tape. The leaderboard sorts by one transparent metric at a time and there is NO composite score or grade. The sparkline exists only for harvested wallets — a blank sparkline means unmeasured, never zero.
> Copy friction (slip) and a toxic flag DO exist and are own-engine: the wallet's own 30-day fills replayed as a taker (1% slippage per fill plus the real Polymarket taker fee schedule) against its actual 30-day PnL over the same fills, so the delta is pure friction. slip_pct is already a percentage, not a 0-1 fraction. The toxic flag is server-computed under evidence guards and is never re-derived client-side. Slip is not a sortable column. Blank means unmeasured — never zero and never clean.
> Copyability is a taker share, reported in aggressive (≥60%), passive (≤30%) and mixed bands. It is never a score.
> Do not document Feeds, the Twitter Tracker, the Telegram Settings button, percentage buy buttons, GTD orders, the Discord bot, or withdrawals.

# Signing in

> The terminal and the extension sign in with the Telegram login widget.

The Telegram bot is where you register, so it needs no separate sign-in — the
chat is the session. The web terminal and the Chrome extension both sign in to
that same account through Telegram's official login widget.

## Signing in to the terminal

<Steps>
  <Step title="Click Connect">
    The button is in the top bar. It opens a small **Connect** dialog.
  </Step>

  <Step title="Click Sign in with Telegram">
    This is the button inside that dialog. A Ballista login page opens in a
    popup window with Telegram's login button on it.
  </Step>

  <Step title="Authorise in Telegram">
    The popup hands the session back to the terminal and closes itself, and you
    land back where you were.
  </Step>
</Steps>

## Signing in to the extension

Start the sign-in from the extension. The same login page opens, this time in a
tab. When you authorise, the tab shows a confirmation and closes; the extension
picks up the session and you can go back to what you were doing.

## You must register in the bot first

The login widget authenticates a Telegram account — it does not create a
Ballista one. If you have never sent `/start` to the bot, the login page tells
you exactly that and stops:

> Account not found. Please start @*\<bot handle>* in Telegram first, then try again.

The real message names the bot's actual Telegram handle in place of the
placeholder, so it doubles as a pointer to the right bot. Go and [create your account](/guides/create-account), then come back and
sign in again. There is no other sign-up path.

## How long a session lasts

A session is good for **7 days**, after which you sign in again the same way.
The terminal and the extension hold separate sessions, so signing in on one does
nothing to the other and they expire independently.

The terminal has a **Disconnect** button in the top bar that ends its session
immediately. The extension has no sign-out control — its session simply runs out
after seven days.

<Note>
  Telegram's authorisation itself is only accepted if it is fresh: a login
  payload older than 24 hours is rejected. In practice this only matters if you
  leave the login page open for a day and then click through it.
</Note>

## If sign-in fails

* **"Account not found"** — you have not registered. Send `/start` to the bot.
* **The popup was blocked** — allow popups for the terminal's domain and click
  Connect again.
* **Nothing happens after authorising** — close the login window and retry;
  the token is only ever handed back to the window that opened it, so a stale
  window cannot complete the handshake.

## What to read next

<CardGroup cols={2}>
  <Card title="Web terminal" icon="desktop" href="/terminal/overview">
    What you can do once you are in.
  </Card>

  <Card title="Chrome extension" icon="chrome" href="/extension/install">
    Installing it, and what it adds to Polymarket.
  </Card>
</CardGroup>
