Skip to main content
GET
/
api
/
v2
/
portfolio
/
positions
GET /api/v2/portfolio/positions — Get user positions with PnL
curl --request GET \
  --url https://api.shuriken.trade/api/v2/portfolio/positions \
  --header 'Authorization: Bearer <token>'
{
  "data": {
    "positionCount": 1,
    "positions": [
      {
        "balanceUsd": 1000,
        "boughtUsd": 1500,
        "latestBalanceRaw": "1000000000",
        "latestTokenUsdPrice": 1,
        "network": "sol",
        "realisedPnlPct": -33.33,
        "soldUsd": 500,
        "tokenAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
        "tokenDecimal": 6,
        "totalPnlPct": 0,
        "walletAddress": "CuieVDEDtLo7FypA9SbLM9saXFdb1dsshEkyErMqkRQq"
      }
    ],
    "totalValueUsd": 1000
  },
  "requestId": "<string>",
  "pagination": {
    "hasMore": true,
    "limit": 1,
    "page": 1,
    "total": 1
  }
}

Authorizations

Authorization
string
header
required

Use Authorization: Bearer <jwt> for user auth or Authorization: Bearer sk_{keyId}_{secret} for API key auth.

Query Parameters

chain
string

Filter by chain

status
string

Filter by position status

Response

200 - application/json

Portfolio positions

V2 success response envelope

data
object
required

Positions response with aggregated data

Example:
{
"positionCount": 1,
"positions": [
{
"balanceUsd": 1000,
"boughtUsd": 1500,
"latestBalanceRaw": "1000000000",
"latestTokenUsdPrice": 1,
"network": "sol",
"realisedPnlPct": -33.33,
"soldUsd": 500,
"tokenAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"tokenDecimal": 6,
"totalPnlPct": 0,
"walletAddress": "CuieVDEDtLo7FypA9SbLM9saXFdb1dsshEkyErMqkRQq"
}
],
"totalValueUsd": 1000
}
requestId
string
required
pagination
object

Page-based pagination info (per RFC)