Skip to main content

Portfolios

A portfolio groups connected accounts inside a workspace. Every integration belongs to exactly one, and most portfolio-data endpoints can be scoped to one.

Base URL: https://api-v2.kryptos.io · Required Permission: portfolios:read

EndpointReturns
GET/v1/portfoliosList them
GET/v1/portfolios/defaultThe workspace's default portfolio
GET/v1/portfolios/{id}One portfolio

List

curl -X GET "https://api-v2.kryptos.io/v1/portfolios?workspaceId=WORKSPACE_ID" \
-H "Authorization: Bearer ACCESS_TOKEN"
ParameterTypeDefaultDescription
workspaceIdstringRequired unless your token is workspace-bound
pageinteger1Page number
limitinteger501–100
{
"success": true,
"data": {
"portfolios": [
{
"id": "pf_main",
"workspaceId": "ws_12ab",
"name": "Main",
"description": null,
"isDefault": true,
"metadata": null,
"integrationsCount": 7,
"integrationLogos": ["https://...", "https://..."],
"createdAt": "2026-01-04T11:02:00.000Z",
"updatedAt": "2026-01-04T11:02:00.000Z"
}
],
"pagination": { "page": 1, "limit": 50, "total": 2, "totalPages": 1, "hasMore": false }
}
}
FieldTypeDescription
idstringPortfolio id — pass as portfolioId elsewhere
namestringDisplay name
descriptionstring | nullFree text
isDefaultbooleanThe workspace's default portfolio
metadataobject | nullArbitrary client-supplied data
integrationsCountnumberAccounts in this portfolio — list responses only
integrationLogosarrayUp to 5 provider logos, for list rendering — list responses only
createdAt, updatedAtstringISO 8601

integrationsCount and integrationLogos are computed for the list view and absent from single-portfolio responses.

Default portfolio

curl -X GET "https://api-v2.kryptos.io/v1/portfolios/default?workspaceId=WORKSPACE_ID" \
-H "Authorization: Bearer ACCESS_TOKEN"
{ "success": true, "data": { "portfolio": { "id": "pf_main", "name": "Main", "isDefault": true } } }

Returns the workspace's default portfolio. Use it when you need a portfolio id but don't know the workspace's layout — every active workspace has a default.

Note the response nests the object under data.portfolio, unlike /v1/portfolios/{id} which returns it as data directly.

One portfolio

GET /v1/portfolios/{id} returns { success, data }.

workspaceId is a required query parameter on both /default and /{id} unless your token is workspace-bound; omitting it returns 400.

Scoping data to a portfolio

Most portfolio-data endpoints take a /portfolio/{portfolioId} path segment:

  • /v1/holdings/portfolio/{portfolioId}
  • /v1/calculated-balances/portfolio/{portfolioId}
  • /v1/defi/portfolio/{portfolioId} (and its /totals, /staking, /lending, /farming variants)
  • /v1/nfts/portfolio/{portfolioId}