API Documentation

Trading Journal API

HTTP API and MCP server for connecting AI tools, backtesters, importers and scripts to your journal and to the Daily Pivot Breakout history. Create a key in Settings, then call /api/v1/* or connect the MCP server.

Auth

  1. Open Settings → API & Integrations (or API Keys from the account menu).
  2. Create a key and copy it right away. It is only shown when you create it.
  3. Send it on every request:
Authorization: Bearer ftw_...

Keys can optionally be restricted to a single account. Scopes default to full read/write.

Base URL

https://journal.financialtechwiz.com/api/v1

Use this as $BASE in the examples below. CORS is open on /api/v1/*.

Endpoints

GET /accounts

List accounts available to this key.

curl -H "Authorization: Bearer $FTW_API_KEY" \
  "https://journal.financialtechwiz.com/api/v1/accounts"

POST /accounts

Create a journal account (e.g. one per backtest). name / description become the default public store title/bio when you publish.

{
  "name": "Mean Reversion BT 2024-06",
  "description": "SPY 15m mean reversion"
}

PATCH /accounts/:id

Update account fields. Shared public listings sync title/bio from name/description.

POST /shared-journals

Publish an account to the public store/leaderboard. Omit displayName/bio to use the account name and description.

{ "accountId": "<uuid>" }

GET /trades

Query params: accountId, from, to, symbol, status (open|closed), source, limit (max 2000), offset.

curl -H "Authorization: Bearer $FTW_API_KEY" \
  "https://journal.financialtechwiz.com/api/v1/trades?status=closed&from=2024-01-01&limit=100"

POST /trades

Create one trade, or batch-import many.

Single trade

{
  "accountId": "<optional>",
  "source": "my-backtester",
  "externalId": "run42-trade-7",
  "symbol": "AAPL",
  "assetType": "stock",
  "side": "long",
  "openedAt": "2024-06-01T14:30:00.000Z",
  "closedAt": "2024-06-03T15:00:00.000Z",
  "entryQty": 100,
  "entryPrice": 190.5,
  "entryFees": 1.0,
  "exitQty": 100,
  "exitPrice": 195.25,
  "exitFees": 1.0,
  "notes": "Breakout continuation"
}

Batch (recommended for backtests)

{
  "accountId": "<optional>",
  "source": "my-backtester",
  "trades": [
    {
      "externalId": "run42-trade-1",
      "symbol": "SPY",
      "assetType": "etf",
      "side": "long",
      "openedAt": "2024-01-02T15:00:00.000Z",
      "closedAt": "2024-01-05T15:00:00.000Z",
      "entryQty": 10,
      "entryPrice": 470.0,
      "exitQty": 10,
      "exitPrice": 475.5
    }
  ]
}

Dedup: when both source and externalId are set, a repeat POST returns the existing trade (created: false). Safe to re-run imports. P/L, win/loss, and days in trade are computed server-side.

GET /trades/:id

Fetch one trade including executions and legs.

PATCH /trades/:id

Partial update (notes, tags, flat entry/exit fields, dates, accountId, etc.).

curl -X PATCH -H "Authorization: Bearer $FTW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"notes":"Updated thesis"}' \
  "https://journal.financialtechwiz.com/api/v1/trades/<tradeId>"

DELETE /trades/:id

Delete a trade.

POST /trades/:id/executions

Add an entry/exit fill and recalculate aggregates. Use this to close or partially exit an open trade.

{
  "type": "exit",
  "executedAt": "2024-06-03T15:00:00.000Z",
  "quantity": 50,
  "price": 210,
  "fees": 0
}

PATCH /executions/:id

Edit a fill; returns the updated execution and parent trade.

DELETE /executions/:id

Delete a fill and recalculate the parent trade.

GET /equity

Query params: accountId, from, to.

POST /equity

Upsert one day or a batch:

{
  "accountId": "<optional>",
  "equity": [
    { "date": "2024-01-02", "netLiq": 100000 },
    { "date": "2024-01-03", "netLiq": 100420 }
  ]
}

DELETE /equity

Delete by id, date, or all=true with accountId.

Breakout history (Daily Pivot Breakout)

Read every Daily Pivot Breakout signal since 2000 and how it played out under the system's exit rules: when a stock broke out, the return, R multiple, momentum, relative volume and market condition at the signal. Requires an active Financial Tech Wiz Trading Journal membership and a key with the read:backtests scope (keys made before breakout access launched need to be replaced). Responses contain dates, percentages and ratios only, never prices. Historical results are hypothetical, include survivorship bias and are not investment advice.

GET /backtests

List saved versions of the system with their statistics. Query: kind (portfolio | all_signals | all), size (10x10 | 20x5), exitKey, ranking, sort (marRatio, cagrPct, maxDrawdownPct, winRatePct, profitFactor, trades and more), dir, limit (max 100).

GET /backtests/:id

One saved version: statistics, monthly percentage returns and Monte Carlo percentiles.

GET /backtests/trades

Find individual breakouts. Query: symbol, from and to (YYYY-MM-DD), runId (omit for every signal of the Official system), marketCondition, outcome (win | loss | open), exitReason, minRvol/maxRvol, minRoc/maxRoc, minPctAbove/maxPctAbove, sort (signalDate | returnPct | rMultiple | rvol | roc), dir, limit (max 50).

# When did NVDA break out, newest first?
curl -H "Authorization: Bearer $KEY" "$BASE/backtests/trades?symbol=NVDA&sort=signalDate&dir=desc"

GET /backtests/stats

Aggregate matching breakouts with the same filters plus groupBy (none | year | marketCondition | rvol | roc | pctAbove | exitReason | holdDays).

# How have NVDA breakouts played out, by year?
curl -H "Authorization: Bearer $KEY" "$BASE/backtests/stats?symbol=NVDA&groupBy=year"

Backtester integration recipe

  1. Create an API key (optionally scoped to a “Backtests” account).
  2. Resolve accountId via GET /accounts if needed.
  3. After each backtest run, POST /trades with a fixed source (e.g. "quantconnect") and a stable externalId per trade.
  4. Optionally push daily equity via POST /equity.
  5. Re-running the same export is idempotent when source + externalId are set.

Enums

assetType: stock | option | callOption | putOption | etf | crypto | forex | futures | other

side: long | short | call | put | longCall | longPut | shortCall | shortPut

MCP server

The MCP server lets Cursor, Claude or any MCP-compatible tool work with your journal and the breakout history through this API. Point it at the API with your key:

{
  "mcpServers": {
    "ftw-journal": {
      "command": "node",
      "args": ["<path-to-repo>/mcp/src/index.js"],
      "env": {
        "FTW_API_KEY": "ftw_your_key_here",
        "FTW_API_BASE": "https://journal.financialtechwiz.com/api/v1"
      }
    }
  }
}
ToolsWhat they do
list_accounts, create_account, update_account, delete_accountManage journals and accounts
list_trades, get_trade, import_trades, update_trade, delete_tradeRead, import and edit trades (single or batch)
add_execution, update_execution, delete_executionEdit individual fills
list_equity, upsert_equity, delete_equityDaily net liquidity
list_shared_journals, publish_journal, unpublish_journalPublic journals on the leaderboard
list_backtests, get_backtest, find_backtest_trades, backtest_trade_statsDaily Pivot Breakout history: when a stock broke out and how its breakouts played out (paid membership)

Questions to try once it is connected:

  • When did NVDA break out, and how did those breakouts play out?
  • How did breakouts with relative volume above 2 do in bear markets?
  • Import these backtest trades into a new journal called Momentum Test and publish it.
  • Analyze my 10 worst trades this year and what they had in common.

Disclaimer: The Financial Tech Wiz Trading Journal is for educational and informational purposes only and does not constitute financial, investment, or trading advice.

TradingView Lightweight Charts™ Copyright (с) 2025 TradingView, Inc. https://www.tradingview.com/