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

# Create your account

> One command in the Telegram bot creates your wallet and your Polymarket account.

Registration happens in the Telegram bot, and only in the Telegram bot. There is
no sign-up form on the web terminal and none in the extension — both of them
sign in to an account the bot already created.

<Steps>
  <Step title="Open the Ballista bot in Telegram">
    Start a chat with the bot from any Telegram client.
  </Step>

  <Step title="Send /start">
    The bot posts a placeholder while it works, then replaces it with your main
    menu. First-time setup takes a few seconds — it is deploying a wallet on
    your behalf.
  </Step>

  <Step title="Read the menu">
    When setup finishes the menu shows your balance and your EVM deposit
    address. That address is live immediately; you can fund it before doing
    anything else.
  </Step>
</Steps>

## What `/start` provisions

The first `/start` is the only step where anything is created. In one pass it:

* generates an Ethereum keypair for you and stores the private key encrypted,
* creates your Polymarket API credentials,
* deploys your Polymarket proxy wallet — the wallet that will hold your USDC and
  your positions,
* fetches your bridge deposit addresses for EVM chains, Solana and Bitcoin,
* grants the token approvals Polymarket needs so your orders can settle.

After that, `/start` is just a way back to the main menu. Sending it again does
not create a second account or reset anything.

<Note>
  If setup fails partway — a slow chain, a timeout — the bot tells you what
  failed rather than pretending it worked. Send `/start` again; the setup step is
  re-runnable and picks up whatever is still missing.
</Note>

## Registering from a referral link

A referral link looks like `t.me/<bot>?start=ref_YOURFRIENDSCODE`. Opening it
starts the bot with the code attached, and the code is applied as part of
creating your account.

Attribution only happens on the registration itself. If you already have a
Ballista account, opening someone's link does nothing — you cannot be
re-attributed later, and neither can anyone you invite. An unrecognised code is
ignored silently, and the account is still created.

## What to read next

<CardGroup cols={2}>
  <Card title="Deposits" icon="wallet" href="/guides/deposits">
    Fund the account you just created.
  </Card>

  <Card title="Signing in elsewhere" icon="right-to-bracket" href="/guides/signing-in">
    Bring the same account to the terminal and the extension.
  </Card>
</CardGroup>
