# Bookmap Cloud Notes sheet

> A Bookmap Cloud Notes sheet: one note with a price line per level, in the contract Bookmap names. Without a LIVE plan it answers an empty sheet that says why, so old notes go.

Source: https://firmtape.com/docs/developers/live/bookmap-csv

A Bookmap Cloud Notes sheet: one note with a price line per level, in the contract Bookmap names. Without a LIVE plan it answers an empty sheet that says why, so old notes go.

`GET /api/v1/bookmap.csv`

Plan LIVE · Key scope live · Limit 120 a minute per key; a 304 is free · Version 1.0.0 · Since 2026-09-30

**This endpoint serves:** [LIVE: Platform integrations](https://firmtape.com/docs/live#integrations). **Plan:** [LIVE](https://firmtape.com/features/live). LIVE: today's session every second, alerts, ASK, the levels API and the platform integrations, and 5 LAB credits a month. Every finished session is free in REPLAY.

## Parameters

| Name | What it does | Default | Error |
| --- | --- | --- | --- |
| `sym` (required) query, string | Comma list, up to 20. |  |  |
| `oi` query, 1 | `1` adds the open-interest levels. |  |  |
| `line` query, 0 | `0` drops the horizontal price line. |  |  |
| `automap` query, string | Bookmap's data feed for the `#automap` line, or `none`. | RITHMIC |  |
| `alias` query, string | Comma list, one name per symbol, to override the contract Bookmap reads. |  |  |
| `key` query, string | Legacy: the key in the address, for platforms that cannot send headers. Prefer the header. |  |  |

## Response

CSV. An auth or plan failure is also 200, an empty sheet whose first line names it, with `X-FirmTape-Status`.

## Errors

| Status | Code | What to do |
| --- | --- | --- |
| 400 |  | `missing_sym` or `too_many_symbols`, as one line of text. |

## Caching

Answers carry an `ETag`: send it back as `If-None-Match` and an unchanged reading answers 304 with no body, not counted against the limit.

## Request

```sh
curl \
  -H "Authorization: Bearer $FIRMTAPE_LIVE_KEY" \
  "https://firmtape.com/api/v1/bookmap.csv?sym=SPX,ES"
```

```python
import os, requests

H = {"Authorization": f"Bearer {os.environ['FIRMTAPE_LIVE_KEY']}"}
r = requests.get("https://firmtape.com/api/v1/bookmap.csv?sym=SPX,ES", headers=H)
print(r.status_code, r.text[:500])
```

```js
const r = await fetch("https://firmtape.com/api/v1/bookmap.csv?sym=SPX,ES", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.FIRMTAPE_LIVE_KEY}` },
});
console.log(r.status, await r.text());
```

## Example response

```json
#automap RITHMIC,,,,,,,
Symbol,Price Level,Note,Foreground Color,Background Color,Text Alignment,Diameter,Draw Note Price Horizontal Line
ESZ6,6752.25,FT flip 6752.25,#000000,#E0A040,right,1,TRUE

```

## Changes

- 2026-09-30: Added.
