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
- Open Settings → API & Integrations (or API Keys from the account menu).
- Create a key and copy it right away. It is only shown when you create it.
- 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/v1Use 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
- Create an API key (optionally scoped to a “Backtests” account).
- Resolve
accountIdviaGET /accountsif needed. - After each backtest run,
POST /tradeswith a fixedsource(e.g."quantconnect") and a stableexternalIdper trade. - Optionally push daily equity via
POST /equity. - 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"
}
}
}
}| Tools | What they do |
|---|---|
| list_accounts, create_account, update_account, delete_account | Manage journals and accounts |
| list_trades, get_trade, import_trades, update_trade, delete_trade | Read, import and edit trades (single or batch) |
| add_execution, update_execution, delete_execution | Edit individual fills |
| list_equity, upsert_equity, delete_equity | Daily net liquidity |
| list_shared_journals, publish_journal, unpublish_journal | Public journals on the leaderboard |
| list_backtests, get_backtest, find_backtest_trades, backtest_trade_stats | Daily 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.