# Read your options and stocks paper wallet

`GET https://app.skylit.ai/api/nexus/v1/trading/wallets/{book}`

API: Nexus.

How much paper cash your bot's got before it sizes a trade. `main` is your own paper wallet, `agent` is your bot's.

- Every number is in cents, so `9927100` is $99,271.00.
- `buyingPowerCents` is what you can spend on a new trade: your cash minus what resting buys hold back (`reservedCents`). A paper trade can't take you below zero.
- `openMarketValueCents` and `equityCents` are left out when an open position hasn't been marked yet, instead of guessed.
- `opened` is `false` until your first trade on that wallet. Until then you'll see the starting $100,000.

You only ever see your own wallets. It counts as a read.

## Authentication

Send your Skylit API key as a bearer token: `Authorization: Bearer <key>`. No other header is accepted.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `book` | path | string | yes | `main` is your own paper wallet, `agent` is your bot's. (one of `main`, `agent`) |

## Example request

```bash
curl "https://app.skylit.ai/api/nexus/v1/trading/wallets/main" \
  -H "Authorization: Bearer $SKYLIT_API_KEY"
```

## Responses

### 200

The wallet.

Your bot's agent wallet: two trades open and one resting buy.:

```json
{
  "data": {
    "book": "agent",
    "currency": "USD",
    "asOf": "2026-10-12T14:45:00Z",
    "opened": true,
    "startingCashCents": 10000000,
    "cashCents": 9927100,
    "buyingPowerCents": 9887100,
    "reservedCents": 40000,
    "realizedPnlCents": 12400,
    "openPositions": 2,
    "openCostBasisCents": 85300,
    "openMarketValueCents": 91200,
    "equityCents": 10018300
  }
}
```

### 400

The request was refused before anything was traded. Codes: `bad_request`, `bad_contract`, `invalid_quantity`, `invalid_price`, `unsupported_asset_class`, `unsupported_order_type`, `only_market_orders`, `limit_price_required` (a limit with no `limitPrice`), `invalid_limit_price` (not in cents, or outside 0.01 to 99,999.99 for options or 999,999.99 for stocks), `stop_price_required` (a stop with no `stopPrice`), `invalid_stop_price` (not in cents, or outside 0.01 to 999,999.99), `invalid_take_profit`, `test_orders_unavailable`, `test_modify_unavailable`.

A typo in the body.:

```json
{
  "error": {
    "code": "bad_request",
    "message": "Unknown field \"quantitty\". See the trades API docs for the fields you can send."
  }
}
```

### 401

No key, or a key that isn't valid. Codes: `missing_api_key`, `invalid_api_key`.

No key sent.:

```json
{
  "error": {
    "code": "missing_api_key",
    "message": "Send your Skylit API key in the Authorization header: Authorization: Bearer YOUR_SKYLIT_API_KEY."
  }
}
```

### 403

The key works but the account can't do this. Codes: `account_suspended`, `nexus_access_denied`, `futures_access_denied`.

The account doesn't include Nexus.:

```json
{
  "error": {
    "code": "nexus_access_denied",
    "message": "This Skylit account doesn't include Nexus, so it can't place Nexus trades."
  }
}
```

### 429

Over a rate limit. Wait `Retry-After` seconds, then retry. Codes: `rate_limited`, and `stream_limit_reached` (too many live streams open: 3 per key, 6 per account).

Headers: `Retry-After`, `X-RateLimit-Limit`, `X-RateLimit-Remaining`.

Too many writes from this key.:

```json
{
  "error": {
    "code": "rate_limited",
    "message": "Too many requests (limit 30). Slow down and retry in 12 seconds."
  }
}
```

### 500

Something went wrong on our side. If you sent a `clientOrderId`, retry with the same one. Code: `internal_error`.

Retry with the same clientOrderId.:

```json
{
  "error": {
    "code": "internal_error",
    "message": "Something went wrong on our side. If you sent a clientOrderId, retry with the same one (it can't fill twice). Otherwise check your account before retrying."
  }
}
```

### 503

Try again in a moment (honour `Retry-After` when it's sent). Codes: `stale_quote` (the quote, or a stock's last trade, is more than 15 seconds old, so nothing filled), `no_live_price`, `rules_pending`, `unavailable`, `auth_unavailable`, `access_check_unavailable`, `api_keys_unavailable`, `trades_api_disabled`, `stream_unavailable` (the live stream isn't on, or the server is restarting: try again shortly, or poll the reads).

Headers: `Retry-After`.

No live price right now.:

```json
{
  "error": {
    "code": "no_live_price",
    "message": "There's no live price for this contract right now, so nothing was filled. Try again in a moment."
  }
}
```
