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

# How your account works

> The wallet Ballista holds, the Polymarket wallet it signs for, and the one balance behind every surface.

Your Ballista account is two wallets that work together, plus a set of
Polymarket API credentials. Understanding which is which explains where your
money sits and what your exported key controls.

## The signing wallet

When you registered, Ballista generated an ordinary Ethereum keypair for you.
The private key is encrypted before it is stored and decrypted only when
something has to be signed on your behalf.

This wallet does not hold your trading balance. Its job is to sign: order
payloads for Polymarket's order book, and the authentication that proves you own
the account.

## The Polymarket proxy wallet

Registration also deploys a Polymarket proxy wallet controlled by that signing
key. This is the wallet that matters day to day:

* your USDC balance lives there,
* your positions are held there,
* it is the address Polymarket knows you by — the Telegram bot's wallet screen
  and the terminal's deposit dialog link it to its Polymarket profile page and to
  PolygonScan.

Because the proxy wallet holds the funds and the signing key merely authorises
it, you never pay gas to place an order. Ballista also grants the token
approvals Polymarket's contracts need during setup, which is why order placement
just works from the first deposit.

## One balance, every surface

There is a single balance, read live from Polymarket, and every surface reads
the same one. The bot's main menu, the terminal's deposit dialog and the
extension's wallet tab are three views of one number.

The same is true of everything built on it. Positions opened in Telegram appear
in the terminal's portfolio. A preset saved in the extension shows up in the
terminal. A copy trade created in the bot runs whether or not you ever open the
terminal, because it runs on Ballista's servers rather than in any client.

<Info>
  The one thing that is genuinely per-surface is where a feature is *offered* —
  the backtester only exists in the terminal, price alerts only in the extension.
  The account underneath is identical. See
  [What Ballista does not do](/guides/what-ballista-does-not-do).
</Info>

## Where Polymarket ends and Ballista begins

Ballista never matches a trade. It builds and signs an order and hands it to
Polymarket's central limit order book, which decides whether and at what price
it fills. Market data, resolution and settlement are Polymarket's too.

What Ballista adds is everything around that: the wallet provisioning above, the
copy-trading engine that watches other wallets and replicates their fills into
your account, the backtester, the leaderboard, and the alerting.

## What to read next

<CardGroup cols={2}>
  <Card title="Your key" icon="key" href="/guides/wallet-and-keys">
    What Export Keys gives you and what it controls.
  </Card>

  <Card title="Placing orders" icon="chart-line" href="/guides/orders">
    How an order reaches the book.
  </Card>
</CardGroup>
