> ## 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.

# Sign in

> Logging the extension into your Ballista account with Telegram.

The extension signs in with Telegram, the same identity behind the
[Telegram bot](/telegram/overview) and the [web terminal](/terminal/overview). There is
no separate extension password and no separate balance.

<Info>
  **Register in the Telegram bot first.** The extension signs in to an existing
  account; it cannot create one. If you have not done that yet, see
  [Create your account](/guides/create-account).
</Info>

## Log in with Telegram

<Steps>
  <Step title="Open the popup">
    Click the Ballista icon in your toolbar. Before you are signed in it shows a
    single card: *Sign in with your Telegram account*.
  </Step>

  <Step title="Press Login with Telegram">
    A new tab opens with the Telegram login widget, hosted by Ballista.
  </Step>

  <Step title="Authorise in Telegram">
    Confirm the login the way Telegram asks — in the browser widget or on your
    phone. The page shows *Authenticating…* while it works.
  </Step>

  <Step title="Let the tab close itself">
    On success the page redirects to a confirmation screen, the extension picks up
    your session from that redirect, and the tab closes on its own. The popup is
    now signed in.
  </Step>
</Steps>

The session lives in the extension's own storage on your machine, and the extension reads
it directly out of the redirect — the token is never handed back to a server.

## If it says the account was not found

The login page will say, naming the bot to open:

> Account not found. Please start @… in Telegram first, then try again.

The message names the Ballista bot's exact Telegram handle in place of the `@…`.

That means the Telegram account you just authorised with has no Ballista account behind
it. Start the bot the message names, run through registration, and come back to the
extension. See [Signing in](/guides/signing-in) for how the one account works across all
three surfaces.

## Staying signed in

A session lasts **seven days**. When it lapses the popup goes back to the sign-in card,
and pressing **Login with Telegram** again is all it takes — it is the same two clicks.
The extension has no sign-out button.

<Note>
  The on-page panel on Polymarket uses the same session. If it says *Not logged in —
  open the Ballista extension to sign in*, sign in from the popup and the panel picks
  it up.
</Note>
