Skip to main content
The Portfolio API supports two complementary use cases: stateless valuation for one-off item lists you send in the request body, and saved portfolios that persist items and transactions under your account for ongoing tracking and historical analysis. Portfolio item limits are 1,000 items for Free and Starter accounts, 5,000 for Pro, and 10,000 for Quant — the same limit applies regardless of how items were added.

Portfolio management

POST /portfolio

Creates a new empty portfolio under your account. Auth: API key required
Request body
string
required
Display name for the portfolio.

GET /portfolio

Returns all saved portfolios for your account. Auth: API key required
string
Set to value to add total_value and change_24h_pct to every portfolio in the response. Omitted by default, since valuing every portfolio costs an extra lookup per portfolio.
string
default:"USD"
Portfolio base currency (ISO 4217). Values are returned in this currency.
string | null
Pinned pricing provider key, or null when the portfolio is valued at the best ask across all providers.
integer | null
Current total value in minor units of the base currency. Present only with include=value.
number | null
Percent change against the previous daily close. Present only with include=value, and null until a previous close exists.

DELETE /portfolio/:id

Permanently deletes a portfolio and all of its saved items and transactions. Auth: API key required
string
required
UUID of the portfolio to delete.

Valuation

POST /portfolio/value

Values a user-supplied item list using the current best ask across the selected providers. Use this for one-off valuations without creating a saved portfolio. Tiers: Free, Starter, Pro, Quant
array
required
Array of objects, each with item_id (integer) and quantity (integer). Maximum 100 items per request.
string[]
Optional provider filter. Omit to use all available providers.
string
default:"USD"
Target output currency (ISO 4217).
Request body
Response example
array
Per-item valuation results.
number
Sum of all item_value entries.
integer
Number of items successfully priced.
array
Item IDs from the request that could not be matched in the catalog.

GET /portfolio/:id/value

Values all items currently in a saved portfolio using live market prices. Auth: API key required
string
required
UUID of the portfolio to value.
string
default:"USD"
Target output currency (ISO 4217).
string[]
Optional provider filter. Repeat to pass multiple values.
This is a live valuation based on current indexed prices, not a historical replay.

Import and export

POST /portfolio/:id/import

Imports items from your linked Steam inventory into a saved portfolio. If you omit asset_ids, the full inventory is imported. Auth: API key required + linked Steam account
string
required
UUID of the destination portfolio.
Request body (optional asset filter and cost basis)
object
Optional per-unit purchase price in minor units, keyed by Steam asset ID. Every imported asset with a price also gets a matching buy transaction — dated today, marketplace steam, in the portfolio’s base currency — so the import carries cost basis. Assets you leave out are imported without one.
Items already saved under the same Steam asset ID are skipped automatically. Items that cannot be matched to a catalog entry are returned in unresolved and are not stored.

POST /portfolio/:id/import/csv

Uploads a CSV file to bulk import transactions or snapshot-style holdings into a portfolio. Auth: API key required
string
required
UUID of the destination portfolio.
Both ledger and snapshot CSV formats are supported. The format is detected automatically from the CSV headers. Buy transactions imported from CSV can create missing portfolio items automatically.

GET /portfolio/:id/export

Downloads portfolio data as a CSV file. Auth: API key required
string
required
UUID of the portfolio to export.
string
default:"transactions"
Export format. One of: transactions, items.

Portfolio items

GET /portfolio/:id/items

Returns the items currently stored in a portfolio. Auth: API key required
string
required
UUID of the portfolio.

POST /portfolio/:id/items

Manually adds one item to a portfolio. Auth: API key required
string
required
UUID of the portfolio.
integer
Catalog item ID. Provide either item_id or market_hash_name.
integer
required
Number of units to add.
string
Phase variant for Doppler/Gamma items, or null.
Request body

DELETE /portfolio/:id/items/:entry_id

Removes a saved portfolio entry. Auth: API key required
string
required
UUID of the portfolio.
string
required
Portfolio entry UUID. This is the UUID assigned to the portfolio entry — it is not the catalog item_id.
entry_id is the portfolio entry UUID, not the catalog item_id. You can retrieve it from GET /portfolio/:id/items.

Transactions

GET /portfolio/:id/transactions

Returns the portfolio’s buy/sell ledger, newest first. Auth: API key required
string
required
UUID of the portfolio.

POST /portfolio/:id/transactions

Records a buy or sell transaction for an item in the portfolio. Auth: API key required
string
required
UUID of the portfolio.
integer
Catalog item ID. Provide either item_id or market_hash_name.
string
required
Transaction direction. One of: buy, sell.
integer
required
Number of units transacted.
number
required
Price per unit in the specified currency.
string
required
Transaction date in YYYY-MM-DD format.
string
Marketplace where the transaction occurred (e.g., skinport).
string
required
Currency for the price (ISO 4217).
Request body
Buy transactions can automatically create portfolio items for items not yet tracked in the portfolio.

PATCH /portfolio/:id/transactions/:tx_id

Partially updates an existing transaction. Auth: API key required
string
required
UUID of the portfolio.
string
required
UUID of the transaction to update.
integer
Updated unit count.
number
Updated price per unit.
string
Updated date in YYYY-MM-DD format.
number
Absolute fee paid, in the transaction currency.
number
Fee as a percentage of the transaction total.
string
Updated marketplace name.
string
Free-text note for this transaction.
string
Updated transaction currency (ISO 4217).

DELETE /portfolio/:id/transactions/:tx_id

Permanently deletes a transaction from the portfolio ledger. Auth: API key required
string
required
UUID of the portfolio.
string
required
UUID of the transaction to delete.

Historical valuation

GET /portfolio/:id/history

Rebuilds daily portfolio values from the transaction ledger. Returns a time series of portfolio worth over the selected date range. Auth: API key required
string
required
UUID of the portfolio.
string
Inclusive start date in YYYY-MM-DD format.
string
Inclusive end date in YYYY-MM-DD format. Defaults to today.
string
Optional window such as 30d. When provided, it overrides start_date.
string
default:"USD"
Target output currency (ISO 4217).
string[]
Optional provider filter. Repeat to pass multiple values.
integer
Maximum number of daily data points to return.
string
Opaque cursor from the previous page for cursor-based pagination.
Historical valuation is daily only. Each day’s value uses the best available price across your selected providers. If no price update exists for a given day, the most recent available price is used. pagination.total is always -1 — use next_cursor to paginate.
Last modified on September 10, 2026