Skip to Content
BlitzPulse docs are live. Looking for the app? Visit https://app.blitzglobalcapital.com.
Api ReferencePortfolio API

Portfolio API

Auto-generated from openapi-snapshot.json. Do not edit by hand — changes are overwritten by scripts/docs/generate_api_reference.py.

15 endpoints in this group.

GET /api/portfolio/archive-stats

Archive Stats

Row counts and date range for the snapshot and intraday tables.

Parameters

NameInTypeRequiredDescription
tenant_idqueryintegeroptional
account_idqueryoptional

Responses

CodeDescription
200Successful Response
422Validation Error

POST /api/portfolio/backfill/csv

Backfill From Csv

Deprecated stub — use /api/portfolio/backfill/upload instead.

Parameters

NameInTypeRequiredDescription
tenant_idqueryintegeroptional

Responses

CodeDescription
200Successful Response
422Validation Error

POST /api/portfolio/backfill/save

Backfill Save

Request body: application/json

Responses

CodeDescription
201Successful Response
422Validation Error

POST /api/portfolio/backfill/upload

Backfill Upload

Upload a CSV of historical position snapshots and upsert into daily_position_snapshots.

Expected CSV columns (flexible header matching): symbol, date, quantity, avg_cost, market_price, market_value Optional: unrealized_pnl, day_change_pct, source

Parameters

NameInTypeRequiredDescription
yearqueryintegeroptional
source_typequerystringoptional
tenant_idqueryintegeroptional

Request body: multipart/form-data

Responses

CodeDescription
201Successful Response
422Validation Error

DELETE /api/portfolio/data

Delete Year Data

Soft-delete a year’s realized_trades + daily_position_snapshots.

Both tables get deleted_at = now() on still-active rows. No row is physically removed (see migration 0115_soft_delete_realized_dps).

Parameters

NameInTypeRequiredDescription
tenant_idqueryintegeroptional
yearqueryintegerrequired

Responses

CodeDescription
200Successful Response
422Validation Error

POST /api/portfolio/eod

Run Eod Ingestion

Trigger end-of-day Schwab position fetch + snapshot save.

Parameters

NameInTypeRequiredDescription
tenant_idqueryintegeroptional

Responses

CodeDescription
200Successful Response
422Validation Error

GET /api/portfolio/eod/run-log

Get Eod Run Log

Return recent EOD snapshot runs grouped by snapshot_date.

Parameters

NameInTypeRequiredDescription
tenant_idqueryintegeroptional
account_idqueryoptional
limitqueryintegeroptional

Responses

CodeDescription
200Successful Response
422Validation Error

POST /api/portfolio/eod/trigger

Run Eod Ingestion

Trigger end-of-day Schwab position fetch + snapshot save.

Parameters

NameInTypeRequiredDescription
tenant_idqueryintegeroptional

Responses

CodeDescription
200Successful Response
422Validation Error

GET /api/portfolio/fees-summary

Fees Summary

Parameters

NameInTypeRequiredDescription
daysqueryintegeroptional
account_hashqueryoptional

Responses

CodeDescription
200Successful Response
422Validation Error

GET /api/portfolio/pnl

Get Pnl Series

Daily P&L time series. P0-8: limit capped at 100.

Parameters

NameInTypeRequiredDescription
tenant_idqueryintegeroptional
account_idqueryoptional
start_datequeryoptional
end_datequeryoptional
limitqueryintegeroptionalPage size (max 100).
cursorqueryoptionalOpaque pagination cursor from a previous page’s next_cursor.

Responses

CodeDescription
200Successful Response
422Validation Error

GET /api/portfolio/realized-trades

Get Realized Trades

Return realized trades from broker statement uploads, newest first.

Parameters

NameInTypeRequiredDescription
tenant_idqueryintegeroptional
account_idqueryoptional
yearqueryoptional
symbolqueryoptional
limitqueryintegeroptional

Responses

CodeDescription
200Successful Response
422Validation Error

GET /api/portfolio/snapshots

Get Snapshots

Parameters

NameInTypeRequiredDescription
tenant_idqueryintegeroptional
account_idqueryoptional
start_datequeryoptional
end_datequeryoptional
as_of_datequeryoptional
latest_onlyquerybooleanoptional
limitqueryintegeroptional

Responses

CodeDescription
200Successful Response
422Validation Error

POST /api/portfolio/snapshots

Save Snapshots

Request body: application/json

Responses

CodeDescription
201Successful Response
422Validation Error

POST /api/portfolio/snapshots/archive

Archive Snapshots

  1. Move daily_position_snapshots older than keep_snapshot_years to archive table.
  2. Roll up 5-min intraday bars older than keep_intraday_years into market_data_daily (preserving OHLCV + VWAP) before deleting them.
  3. Purge intraday bars beyond the retention window.

Parameters

NameInTypeRequiredDescription
tenant_idqueryintegeroptional
keep_snapshot_yearsqueryintegeroptional
keep_intraday_yearsqueryintegeroptional

Responses

CodeDescription
200Successful Response
422Validation Error

DELETE /api/portfolio/trades

Delete Trades

Soft-delete realized_trades for the given tenant + year.

Sets deleted_at = now() on already-active rows (idempotent — rows that are already soft-deleted are skipped). Returns the number of rows that transitioned to soft-deleted in this call.

Parameters

NameInTypeRequiredDescription
tenant_idqueryintegeroptional
yearqueryintegerrequired

Responses

CodeDescription
200Successful Response
422Validation Error