Portfolio
The portfolio is every saved-list item with a quantity held (qtyHeld), valued at the current floor of one market scope. Enter
quantities and cost bases on a list’s items (PATCH /v1/lists/{listId}/items, or the Holdings columns of a list in the app); the
portfolio adds them up across all of your organization’s lists.
All three reads need an API key with catalog:read (the scope of list reads) and a plan with market data for the scope you ask for
(402 otherwise; see entitlements).
| Operation | Returns |
|---|---|
GET /v1/portfolio |
Positions, totals and exposure by event date |
GET /v1/portfolio/export.csv |
The same rows as CSV |
GET /v1/portfolio/history |
Cost, market value and P&L per hour or day |
Positions
Section titled “Positions”curl -H "Authorization: Bearer $STATUS302_API_KEY" \ "https://api.status302.com/v1/portfolio?scope=secondary:best"scope is the market the floors come from (primary by default, tm_resale, secondary:best or secondary:<marketplace>). For each
position:
costTotal= quantity × cost basis, in the cost basis’s currency (costCurrency).marketValue= quantity × floor, andpnl= quantity × (floor − cost basis), in the market’s currency (currency);pnlPctispnl÷ the cost of the tickets in it. No seller fee is deducted. Without a floor in the scope,floor,marketValueandpnlare null.bucketsays when the event takes place:past,next7d,next30d,laterorundated;exposuresums the totals per bucket.risksflags upcoming positions:losing_soon(P&L below zero within 7 days of the event) andfloor_falling(the floor’s Δ24h is at or belowfloorFallingAt).
Money is in minor units (see money). totals equal the holdings of GET /v1/overview.
An event held in two lists is two positions (eventPositions counts them; list names the position’s list). groupBy=event folds
them into one row per event: list is null and lists names the lists, quantities and money are summed, costBasis is the average
per ticket over the items that have one (null when their cost currencies differ) and risks are recomputed on the folded P&L.
totals and exposure are the same either way.
GET /v1/portfolio/export.csv takes the same scope and groupBy and returns the rows as RFC 4180 CSV, in the same order: money in
major units, changes as percentages, times in RFC 3339 UTC. It needs CSV export on your plan and counts against the plan’s export row
limit, like list exports.
History
Section titled “History”GET /v1/portfolio/history?scope=primary&from=…&to=…&interval=1d returns the portfolio’s cost, value, pnl and pnlCost per
bucket, one series per currency, aligned on t (column-oriented: series[i].value[k] belongs to t[k]).
fromdefaults to 30 days beforeto(default now);intervaldefaults to1hfor spans up to 31 days and1dbeyond (at most 2000 buckets). The range is clamped to your plan’s series history.- An item counts from the bucket in which it was added to its list, with its current quantity and cost basis: earlier quantities and removed items are not recorded.
- A bucket’s floor is the last one in it, else the last before it (up to 7 days before
from).
© 2026 status403 Sp. z o.o.Aleja Solidarności 68/121, 00-240 Warsaw, PolandKRS 0001269943NIP 5253108931Share capital PLN 5,000.00
Registry court: District Court for the Capital City of Warsaw, 12th Commercial Division

