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

# Your wallet and keys

> Export Keys hands you the raw private key. Here is what it controls and how to handle it.

Ballista holds the private key to your signing wallet so it can place orders and
run copy trades without asking you to sign each one. You can take a copy of that
key at any time.

In the Telegram bot, open **Deposit & Wallet** and tap **🔑 Export Keys**. The
bot replies with the raw private key as a single copyable line.

<Warning>
  Anyone who has this key controls your wallet. Treat the message as the secret
  it is: do not forward it, do not paste it into a chat or a support ticket, and
  do not store it anywhere you would not store a bank password. Delete the
  message once you have saved the key somewhere safe.
</Warning>

## What the key controls

The exported key is the **signing wallet** described in
[How your account works](/guides/how-it-works) — not the wallet your money is
in. Your USDC and your positions sit in the separate Polymarket proxy wallet
that this key controls.

<Warning>
  Import this key into MetaMask or any ordinary wallet and it will look **empty**.
  That is expected: the balance is not held at this address, it is held by the
  proxy contract the address controls. Nothing has gone missing.
</Warning>

Controlling the proxy wallet is what makes the key valuable — it is the whole
account. There is no second factor sitting
behind it, and no way to freeze a key that has leaked. If you believe the key is
compromised, move the funds out immediately and register a fresh account.

## What exporting does not do

Exporting is a read. It hands you a copy and changes nothing else:

* Ballista still holds its own encrypted copy of the key, and your account keeps
  working exactly as before.
* Your copy trades, presets and alerts keep running.
* Nothing is rotated or revoked. There is no way to make Ballista's copy stop
  being valid short of abandoning the account.

<Note>
  The export is recorded — Ballista logs that an export happened, never the key
  itself. Nothing about your key is written to a log.
</Note>

## Getting funds out

This is the mechanism. Ballista has no withdrawal screen anywhere: not in the
bot, not in the terminal, not in the extension.

Because the funds live in the proxy wallet rather than at the key's own address,
you do not send them from a wallet app. You go through Polymarket:

<Steps>
  <Step title="Export the key">
    **Deposit & Wallet → 🔑 Export Keys** in the Telegram bot.
  </Step>

  <Step title="Import it into a wallet you control">
    Any wallet that accepts a private key. It will show an empty account — that
    is the signing address, not where your balance is.
  </Step>

  <Step title="Sign in to Polymarket with it">
    Polymarket resolves the same proxy wallet from that key, so your balance and
    positions appear there.
  </Step>

  <Step title="Withdraw from Polymarket">
    Use Polymarket's own withdrawal flow to move the funds out.
  </Step>
</Steps>

If you believe your key has leaked, this is also the fastest way to get ahead of
whoever has it.

## Handling the key safely

* Keep it in a password manager or an offline note, never in a chat history.
* Never enter it into a site that asks for it — Ballista never will, and no
  Ballista surface has a field to paste a private key into.
* If someone claiming to be support asks for your key, that is not support.

## What to read next

<CardGroup cols={2}>
  <Card title="What Ballista does not do" icon="ban" href="/guides/what-ballista-does-not-do">
    Withdrawals, and the other things that genuinely are not there.
  </Card>

  <Card title="Getting help" icon="life-ring" href="/guides/getting-help">
    What to send, and what never to send.
  </Card>
</CardGroup>
