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

# Limits

> Every minimum, cap and window, with what happens when you hit one.

The numbers Ballista enforces, in one place. Anything not listed here is not
capped.

## Money

| Limit                | Value           | Enforced by                                                                                                    |
| -------------------- | --------------- | -------------------------------------------------------------------------------------------------------------- |
| Deposit minimum      | **\$10**        | Printed on the bot's and the terminal's deposit screens. The extension does not show it, but it still applies. |
| Order minimum        | **\$1**         | The Telegram bot, on a market buy or a limit buy                                                               |
| Smallest order value | **1¢**          | The terminal and the extension                                                                                 |
| Smallest order size  | **0.01 shares** | The exchange's own increment, so everywhere                                                                    |

The \$1 figure is the **bot's own floor**, not a number the other surfaces check.
Below roughly a dollar an order rounds down to zero size at the exchange and is
rejected there, so the bot stops you before the round trip rather than after it.

The terminal and the extension are looser. They refuse an order worth less than
a cent, and a buy whose dollar amount cannot reach 0.01 shares at your limit
price, and leave anything above that to Polymarket. Whichever surface you are on,
the fix for a rejection is to increase the size.

## Prices

| Limit                    | Value                                 |
| ------------------------ | ------------------------------------- |
| Limit order price        | Strictly between **0 and 1**          |
| Limit price granularity  | Whole cents — 0.555 is placed as 0.56 |
| Alert threshold          | Strictly between **0 and 1**          |
| Copy-trade price filters | Strictly between **0 and 1**          |

Exactly 0 and exactly 1 are never valid. A market at those prices has resolved.

## Presets

| Limit                           | Value |
| ------------------------------- | ----- |
| Presets per order type and side | **6** |

Six market buys, six market sells, six limit buys, six limit sells. Creating a
seventh in a full slot is refused; delete one first. See
[Presets](/guides/presets).

## Backtests

| Limit                     | Value                     |
| ------------------------- | ------------------------- |
| Queued or running at once | **2** per account         |
| Widest window             | **180 days**              |
| Window end                | Cannot be in the future   |
| Starting capital          | Must be greater than zero |

The two-run cap is not a rate limit you should retry into — the only thing that
clears it is one of your own runs finishing. The 180-day ceiling is a cost bound:
window width drives how much trade history has to be pulled, which is the
expensive part of a run. See [Backtesting](/guides/backtesting).

## Copy trades

| Limit                 | Value                                                                          |
| --------------------- | ------------------------------------------------------------------------------ |
| Sizing                | Exactly one of percentage **or** fixed USDC — never both, never neither        |
| Copy percentage       | Greater than 0, up to **10,000%**                                              |
| Fixed USDC per trade  | Greater than 0 — but the Telegram bot's form will not accept less than **\$5** |
| Buy and sell slippage | **0 to 100**                                                                   |
| Retries on failure    | **0 to 5**                                                                     |

Every spend cap — per trade, per market, per side, total — is optional and must
be greater than zero when set. Leaving one unset means it does not apply, not
that it is zero. See [Copy-trade settings](/guides/copy-trade-settings).

<Warning>
  A copy percentage above 100 means you trade *more* than the wallet you are
  copying. The ceiling is high because the field is expressed as a percentage of
  the leader's size, not because 10,000% is a sensible setting.
</Warning>

## Accounts and sessions

| Limit                          | Value                                              |
| ------------------------------ | -------------------------------------------------- |
| Terminal and extension session | **7 days**, then sign in again                     |
| Telegram login payload         | Rejected if older than **24 hours**                |
| Referral code                  | **4 to 20** letters and numbers, permanent, unique |

## What to read next

<CardGroup cols={2}>
  <Card title="What Ballista does not do" icon="ban" href="/guides/what-ballista-does-not-do">
    The limits that are not numbers.
  </Card>

  <Card title="Getting help" icon="life-ring" href="/guides/getting-help">
    When you have hit something that is not on this page.
  </Card>
</CardGroup>
