# Paper Trading

_Source: https://docs.neurotrading.io/en/api/paper-trading_

Paper Trading (shown as **Demo Mode** on the dashboard) gives your account a set of paper wallets with a pretend balance. Trades are priced against the live market exactly as a real trade would be at that moment — same venue, same route, same slippage — and then filled on paper: nothing is signed, nothing goes on-chain, and no fees or tips are paid.

It is the right place to test a script before it touches real funds.

> **Info**
>
> **Availability:** Paper Trading works through the API for Solana and Robinhood Chain. The dashboard and the Telegram bot don't offer a switch for it yet, so you turn it on with `POST /demo/mode`. Once an account is in Paper Trading, the dashboard and the bot show a Paper Trading banner and a button to switch back to real.

## How it works with the API

There are no separate paper-trading endpoints. Paper Trading is a **mode on your account**:

1. Switch the account into Paper Trading with `POST /demo/mode`.
2. Fetch your wallets again with `GET /wallets` — you now get your paper wallets.
3. Trade with the ordinary `POST /tradings/buy` and `POST /tradings/sell`, naming a paper wallet.
4. Switch back with `POST /demo/mode` and `{"mode": "real"}` when you are done.

> **Error**
>
> The mode belongs to the **account**, not to your script. While it is on, the dashboard and the Telegram bot are in Paper Trading too, and when you switch back to real, everything — including a script that is still running — trades for real again. Check `enabled` in `GET /demo/status` before a script places a trade, and stop scripts before you switch modes.

## Turning it on

```bash
curl -s -X POST "$NEURO_API/demo/mode" \
  -H "Authorization: Bearer $NEURO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "demo", "startingBalanceSol": 100}'
```

| Field | Type | Notes |
| --- | --- | --- |
| `mode` | `"demo"` \| `"real"` | Required. |
| `startingBalanceSol` | number | Paper SOL balance, 1–10,000. The first time, it defaults to 50 SOL; after that, leaving it out keeps the balance you have. Ignored with `"real"`. |
| `chainId` | number | An EVM network to get a paper wallet on, such as `4663` for Robinhood Chain. Leave it out for Solana. |
| `startingBalance` | number | Paper balance of that EVM network's coin (for example ETH), 0.1–1,000. Defaults to 10 the first time. Needs `chainId`. |

## Checking the mode

```bash
curl -s "$NEURO_API/demo/status" -H "Authorization: Bearer $NEURO_TOKEN"
```

```json
{
  "code": 200,
  "message": "Success",
  "data": {
    "mode": "demo",
    "enabled": true,
    "provisioned": true,
    "provisionedAt": "2026-10-20T09:12:44.000Z",
    "lastResetAt": null,
    "canResetAt": null,
    "startingBalanceSol": 100,
    "startingBalances": { "4663": 10 }
  }
}
```

`enabled` is the one to check: `true` means trades are paper fills.

## What a paper trade returns

A paper buy or sell answers in the same shape as a real one ([Placing trades](/api/trading)), with two differences:

* The transaction id starts with `demo_` (for example `demo_3f2a…`). It is not an on-chain signature and will not be found on an explorer. `GET /tradings/demo_…/status` answers `success` for it straight away.
* Fees, tips and gas are always zero.

Paper trades appear in `GET /tradings` and in your positions and PnL like real ones, but only while the account is in Paper Trading — real and paper history never mix. They never count toward points, volume or referral rewards.

Transfers, withdrawals and private-key export are refused for paper wallets.

## Starting over

`POST /demo/reset` wipes every paper balance, holding, trade, sniper bot and copy-trade subscription, and reseeds the balances:

```bash
curl -s -X POST "$NEURO_API/demo/reset" \
  -H "Authorization: Bearer $NEURO_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"confirm": true, "startingBalanceSol": 100}'
```

| Field | Notes |
| --- | --- |
| `confirm` | Required, and must be exactly `true`. |
| `startingBalanceSol` | New paper SOL balance, 1–10,000. Leave it out to keep the current one. |
| `chainId`, `startingBalance` | Reseed one EVM network's paper wallet at a new balance. |

You can reset **once an hour**. A reset inside that hour answers `429`, and `canResetAt` in `GET /demo/status` says when the next one is allowed. A reset sent while a paper trade is still being recorded answers `409`; retry after a moment.
