> ## Documentation Index
> Fetch the complete documentation index at: https://docs.arena-predictions.com/llms.txt
> Use this file to discover all available pages before exploring further.

# CLI

> Install arena-prediction-cli 0.6.0 and sign in.

<Badge color="gray">arena-prediction-cli 0.6.0</Badge>

The `arena` command is paper trading from a terminal. Node.js 20 or newer. One login covers the CLI, the [MCP server](/mcp) and the website.

```bash theme={null}
npm install -g arena-prediction-cli@0.6.0
arena --version
arena login
```

`arena login` opens a browser. Google is the default. `arena login --provider apple` uses Apple. There is no guest sign-in.

`npx arena-prediction-cli@0.6.0 login` runs the same binary without adding `arena` to `PATH`. An agent should use the global install, because prompts and hooks call `arena`.

## A machine with no browser

Sign in on a machine that has a browser, into a file:

```bash theme={null}
ARENA_CREDENTIALS_FILE=./arena-creds.json arena login
```

Copy the file, keep it readable only by you (`chmod 600`), and set `ARENA_CREDENTIALS_FILE` to that path. One host per file: a refresh replaces the stored token, so two hosts sharing it sign each other out.

## Signed out

These work before `arena login`:

| Command | What it returns |
| - | - |
| `arena resolve "chiefs ml"` | Instrument id, ticker and the side to buy |
| `arena games` | Today's games, with each team's chance |
| `arena game <game_id>` | Every instrument on one game |
| `arena instrument <ins_id>` | What YES means, and which ticker holds it |
| `arena quotes <ins_id>` | That bet's price on Kalshi, Novig and Polymarket |
| `arena gaps` | Price gaps across those venues, after fees |
| `arena leaderboard` | The public boards |
| `arena trader <name>` | A published record. A private account answers `private: true` |

Store `ins_` ids. Tickers change per game.

## API keys

`arena keys` ships in 0.6.0. It uses your login, not a key. See [API keys](/getting-started/api-keys).

```bash theme={null}
arena keys create --label "nightly job" --save ./arena.key
arena keys check --key-file ./arena.key
```

## Route

`--venue` chooses where a paper ticket is priced. Pass an instrument id, not a venue ticker.

| Flag | What it does |
| - | - |
| `--venue best` | Default. One ticket can split: the best venue fills what it can, and the rest fills on the next eligible venue. |
| `--venue kalshi` | Kalshi only. The ticket does not split. |

The CLI prints each leg: size, price, and venue. On the HTTP order result the same split is `fills` (see [Conventions](/conventions/overview#units-are-in-the-name)). `fillVenue` is the first leg.

```bash theme={null}
arena buy <ins_id> --contracts 10 --venue best
arena buy <ins_id> --contracts 10 --venue kalshi
```

## Live orders

Live submission is off until Arena turns it on. You can save credentials in Settings before that. A saved key does not send an order.

Arena's switches `ARENA_KALSHI_LIVE_TRADE` and `ARENA_POLY_INTL_LIVE_TRADE` stay off by default.

| Opt in | Venue | What you set |
| - | - | - |
| `--live` | Kalshi | A trading key in [Settings](https://arena-predictions.com/settings#kalshi-trading). Scope `trade:write:kalshi`. HTTP `execution` `kalshi`. |
| `--poly-intl` | Polymarket International | Credentials in [Settings](https://arena-predictions.com/settings#poly-intl-trading). Scope `trade:write:poly-intl`. HTTP `execution` `poly-intl`. MCP field `poly_intl`. |

`--live` is Kalshi. `--poly-intl` is Polymarket International. Passing both is refused. Neither flag is on unless you set it.

Arena lists Polymarket International. It does not list Polymarket US.

A visitor in the US, or in PR, GU, VI, AS, MP, or UM, cannot trade Polymarket International. Arena reads `CF-IPCountry` and refuses the order with `us_not_eligible`. Settings hides the form when this account is ineligible.

Polymarket International credentials are your API key, secret, passphrase, signer address, and signer private key. Arena stores them envelope-encrypted. The secret, passphrase, and signer private key are not shown again. The website calls `GET`, `PUT`, and `DELETE` `/api/account/poly-intl-trading` with your session. That path is not under `/api/v1`. Signed out, it answers `401 unauthorized`.

Kalshi uses the same pattern at `/api/account/kalshi-trading`: a key id and a private key, stored envelope-encrypted.

```bash theme={null}
arena buy <ins_id> --contracts 10 --live
arena buy <ins_id> --contracts 10 --poly-intl
```

Paper orders stay the default. `execution` on [`POST /portfolio/orders`](/api-reference/trading/place-a-paper-order) is `paper` unless you send `kalshi` or `poly-intl`.

## Where to read the rest

Every command and flag: [arena-predictions.com/docs/cli](https://arena-predictions.com/docs/cli).

Agents: [arena-predictions.com/agents](https://arena-predictions.com/agents) and the [agents page](/agents) here.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.