---
title: "GET /v2/users/{username}/portfolio"
method: GET
path: "/v2/users/{username}/portfolio"
tags: ["Portfolio"]
---

# GET /v2/users/{username}/portfolio

`GET /v2/users/{username}/portfolio`

## Request

- Base URL: `https://api.arbital.xyz` (the document declares no server; this is the origin it was published from)
- URL: `https://api.arbital.xyz/v2/users/{username}/portfolio`
- Auth: HTTP bearer

Returns a redacted request-time Codex portfolio for an active, viewer-visible CALLD profile. The owner can read their own portfolio; other authenticated viewers require explicit portfolio_public consent. The server resolves active Privy-managed wallets from the username; clients cannot supply wallet addresses. Managed-wallet address, walletId, address-derived lot ID, and userAddress fields are omitted. A 503 public_profile_portfolio_authorization_unavailable does not prove consent; 503 portfolio_unavailable is returned only after authorization succeeded and Codex failed. Every request reads Codex and the backend retains no completed portfolio snapshot; only overlapping requests for the same wallet pair may share in-flight work. There is no PostgreSQL portfolio fallback, and this display data is never quote, sell, or execution authority.

## Path parameters

- `username` string, required

## Response `200`

Current portfolio for the server-resolved managed wallets

- PublicProfilePortfolio: Request-time Codex portfolio for an active CALLD profile's server-resolved Privy-managed wallets. Owners retain access; other viewers require explicit consent. Display only and never quote, sell, or execution authority.
  - `complete` boolean, required
  - `coverage` 'managed_wallets', required
  - `observedAtMs` string, required
  - `portfolio` PublicProfilePortfolioObject, required: Public-profile portfolio projection with managed-wallet identifiers removed from every position.
    - `balances` PublicProfilePortfolioPosition[], required
      - `balance` PublicProfilePortfolioBalance, required: A public-profile holding balance with managed-wallet address and wallet ID removed.
        - `balance` string, required
        - `shiftedBalance` number, required
        - `tokenAddress` string, required
        - `tokenId` string, required
      - `tokenFilterResult` CodexWatchTokenFilterResult, required
        - `change24` string, required
        - `createdAt` integer, required
        - `liquidity` string: Codex-reported USD liquidity used only for display eligibility.
        - `marketCap` string, required
        - `priceUSD` string, required
        - `token` CodexWatchToken, required
          - `address` string, required
          - `decimals` integer, required
          - `info` object, required
            - `circulatingSupply` string, nullable, required
            - `id` string, required
            - `imageLargeUrl` string, nullable, required
            - `imageSmallUrl` string, nullable, required
            - `imageThumbHash` string, nullable, required
            - `imageThumbUrl` string, nullable, required
            - `name` string, nullable, required
            - `symbol` string, nullable, required
            - `totalSupply` string, nullable, required
          - `isScam` boolean, nullable: Codex scam classification. Null means unverified, not safe.
          - `launchpad` object, nullable, required
            - `graduationPercent` number, nullable, required
            - `launchpadIconUrl` string, nullable, required
          - `name` string, nullable, required
          - `networkId` integer, required
          - `symbol` string, nullable, required
        - `volume1` string, required
        - `volume24` string, required
      - `userToken` PublicProfilePortfolioUserToken, required: Display-only provider or indexed basis with owner wallet address and the address-derived lot ID removed.
        - `averageEntryMarketCapUsd` number, nullable, required
        - `averageEntryPriceUsd` number, required
        - `basisSource` 'arbital_indexer' | 'arbital_relay' | 'codex' | 'codex_plus_mobula_receipts', required
        - `basisStatus` 'complete', required
        - `costBasisUsdcAtomic` string, nullable, required
        - `currentCostBasisUsd` number, required
        - `currentRealizedPnlUsd` number, required
        - `holdingSince` string, date-time, required
        - `humanAmountRemaining` number, required
        - `networkId` integer, required
        - `tokenAddress` string, required
        - `tokenAmountRemaining` number, required
        - `totalCostBasisUsd` number, required
        - `totalRealizedPnlUsd` number, required
        - `unrealizedPnlUsd` number, required
        - `updatedAt` string, date-time, required
        - `wasSwapped` true, required
        - `realizedPnlUsd1y` number, nullable, required: Codex wallet/token rolling one-year realized profit in USD, excluding unrealized P&L. Provider estimate, not position-cycle profit or net accounting. Null when unavailable or the basis is synthetic. Zero is a reported zero, not missing data.
      - `valuation` object, required
        - `includeInEquity` boolean, required
        - `includeRealizedPnl` boolean, required
        - `includeUnrealizedPnl` boolean, required
        - `useLivePrice` boolean, required
    - `livePerpPnl` number, required
    - `nativeEvmBalances` PublicProfilePortfolioPosition[], required
      - `balance` PublicProfilePortfolioBalance, required: A public-profile holding balance with managed-wallet address and wallet ID removed.
        - `balance` string, required
        - `shiftedBalance` number, required
        - `tokenAddress` string, required
        - `tokenId` string, required
      - `tokenFilterResult` CodexWatchTokenFilterResult, required
        - `change24` string, required
        - `createdAt` integer, required
        - `liquidity` string: Codex-reported USD liquidity used only for display eligibility.
        - `marketCap` string, required
        - `priceUSD` string, required
        - `token` CodexWatchToken, required
          - `address` string, required
          - `decimals` integer, required
          - `info` object, required
            - `circulatingSupply` string, nullable, required
            - `id` string, required
            - `imageLargeUrl` string, nullable, required
            - `imageSmallUrl` string, nullable, required
            - `imageThumbHash` string, nullable, required
            - `imageThumbUrl` string, nullable, required
            - `name` string, nullable, required
            - `symbol` string, nullable, required
            - `totalSupply` string, nullable, required
          - `isScam` boolean, nullable: Codex scam classification. Null means unverified, not safe.
          - `launchpad` object, nullable, required
            - `graduationPercent` number, nullable, required
            - `launchpadIconUrl` string, nullable, required
          - `name` string, nullable, required
          - `networkId` integer, required
          - `symbol` string, nullable, required
        - `volume1` string, required
        - `volume24` string, required
      - `userToken` PublicProfilePortfolioUserToken, required: Display-only provider or indexed basis with owner wallet address and the address-derived lot ID removed.
        - `averageEntryMarketCapUsd` number, nullable, required
        - `averageEntryPriceUsd` number, required
        - `basisSource` 'arbital_indexer' | 'arbital_relay' | 'codex' | 'codex_plus_mobula_receipts', required
        - `basisStatus` 'complete', required
        - `costBasisUsdcAtomic` string, nullable, required
        - `currentCostBasisUsd` number, required
        - `currentRealizedPnlUsd` number, required
        - `holdingSince` string, date-time, required
        - `humanAmountRemaining` number, required
        - `networkId` integer, required
        - `tokenAddress` string, required
        - `tokenAmountRemaining` number, required
        - `totalCostBasisUsd` number, required
        - `totalRealizedPnlUsd` number, required
        - `unrealizedPnlUsd` number, required
        - `updatedAt` string, date-time, required
        - `wasSwapped` true, required
        - `realizedPnlUsd1y` number, nullable, required: Codex wallet/token rolling one-year realized profit in USD, excluding unrealized P&L. Provider estimate, not position-cycle profit or net accounting. Null when unavailable or the basis is synthetic. Zero is a reported zero, not missing data.
      - `valuation` object, required
        - `includeInEquity` boolean, required
        - `includeRealizedPnl` boolean, required
        - `includeUnrealizedPnl` boolean, required
        - `useLivePrice` boolean, required
    - `otherPnl` number, required
    - `otherPnlV2` number, required
    - `unverifiedBalances` PublicProfilePortfolioPosition[]: Redacted unverified holdings excluded from public portfolio totals.
      - `balance` PublicProfilePortfolioBalance, required: A public-profile holding balance with managed-wallet address and wallet ID removed.
        - `balance` string, required
        - `shiftedBalance` number, required
        - `tokenAddress` string, required
        - `tokenId` string, required
      - `tokenFilterResult` CodexWatchTokenFilterResult, required
        - `change24` string, required
        - `createdAt` integer, required
        - `liquidity` string: Codex-reported USD liquidity used only for display eligibility.
        - `marketCap` string, required
        - `priceUSD` string, required
        - `token` CodexWatchToken, required
          - `address` string, required
          - `decimals` integer, required
          - `info` object, required
            - `circulatingSupply` string, nullable, required
            - `id` string, required
            - `imageLargeUrl` string, nullable, required
            - `imageSmallUrl` string, nullable, required
            - `imageThumbHash` string, nullable, required
            - `imageThumbUrl` string, nullable, required
            - `name` string, nullable, required
            - `symbol` string, nullable, required
            - `totalSupply` string, nullable, required
          - `isScam` boolean, nullable: Codex scam classification. Null means unverified, not safe.
          - `launchpad` object, nullable, required
            - `graduationPercent` number, nullable, required
            - `launchpadIconUrl` string, nullable, required
          - `name` string, nullable, required
          - `networkId` integer, required
          - `symbol` string, nullable, required
        - `volume1` string, required
        - `volume24` string, required
      - `userToken` PublicProfilePortfolioUserToken, required: Display-only provider or indexed basis with owner wallet address and the address-derived lot ID removed.
        - `averageEntryMarketCapUsd` number, nullable, required
        - `averageEntryPriceUsd` number, required
        - `basisSource` 'arbital_indexer' | 'arbital_relay' | 'codex' | 'codex_plus_mobula_receipts', required
        - `basisStatus` 'complete', required
        - `costBasisUsdcAtomic` string, nullable, required
        - `currentCostBasisUsd` number, required
        - `currentRealizedPnlUsd` number, required
        - `holdingSince` string, date-time, required
        - `humanAmountRemaining` number, required
        - `networkId` integer, required
        - `tokenAddress` string, required
        - `tokenAmountRemaining` number, required
        - `totalCostBasisUsd` number, required
        - `totalRealizedPnlUsd` number, required
        - `unrealizedPnlUsd` number, required
        - `updatedAt` string, date-time, required
        - `wasSwapped` true, required
        - `realizedPnlUsd1y` number, nullable, required: Codex wallet/token rolling one-year realized profit in USD, excluding unrealized P&L. Provider estimate, not position-cycle profit or net accounting. Null when unavailable or the basis is synthetic. Zero is a reported zero, not missing data.
      - `valuation` object, required
        - `includeInEquity` boolean, required
        - `includeRealizedPnl` boolean, required
        - `includeUnrealizedPnl` boolean, required
        - `useLivePrice` boolean, required
  - `source` 'codex', required
  - `summary` CodexWatchPortfolioSummary, required: Backend-computed request-time valuation. total_equity_usd is exact-only across consumer-visible holdings; priced_equity_usd is a labelled subtotal when coverage or pricing is incomplete. After a successful metadata lookup, non-native holdings with neither a provider token card nor a usable provider balance price are omitted from the consumer portfolio and valuation. Clients must not reconstruct either aggregate in the browser.
    - `coverage_reasons` string[], required
    - `priced_cash_usd` string, required
    - `priced_equity_usd` string, required
    - `priced_holding_count` integer, required
    - `total_equity_usd` string, nullable, required
    - `unpriced_holding_count` integer, required
    - `valuation_complete` boolean, required
  - `valuation` ExternalPortfolioValuation, required
    - `cashUsd` string, required
    - `equityUsd` string, required

## Other responses

- `400`: Stable machine-readable problem. HTTP 429 and 503 responses include retry and cache-validity fields plus Retry-After and X-Request-ID headers.
- `401`: Stable machine-readable problem. HTTP 429 and 503 responses include retry and cache-validity fields plus Retry-After and X-Request-ID headers.
- `403`: Stable machine-readable problem. HTTP 429 and 503 responses include retry and cache-validity fields plus Retry-After and X-Request-ID headers.
- `404`: Stable machine-readable problem. HTTP 429 and 503 responses include retry and cache-validity fields plus Retry-After and X-Request-ID headers.
- `429`: Stable machine-readable problem. HTTP 429 and 503 responses include retry and cache-validity fields plus Retry-After and X-Request-ID headers.
- `503`: Stable machine-readable problem. HTTP 429 and 503 responses include retry and cache-validity fields plus Retry-After and X-Request-ID headers.

---

[API](https://skmtc.dev/arbital/apis/arbital-api.md) - [All operations](https://skmtc.dev/arbital/apis/arbital-api/llms.txt) - [OpenAPI document](https://skmtc.dev/arbital/apis/arbital-api/revisions/bb0185edf43a?raw)
