> ## Documentation Index
> Fetch the complete documentation index at: https://docs.0xmonaco.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get portfolio stats

> Get portfolio stats.

 Get aggregate portfolio statistics for the authenticated user,
 scoped by time period. Includes volume, PnL, fees, equity, and
 win/loss metrics.



## OpenAPI

````yaml /proto-openapi/api/openapi.yaml get /api/v1/accounts/me/portfolio
openapi: 3.0.3
info:
  title: Monaco Protocol API
  description: REST API for the Monaco Protocol hybrid CLOB exchange.
  version: 1.0.0
servers:
  - url: https://staging.apimonaco.xyz
    description: Staging server (Testnet)
security: []
tags:
  - name: AccountsService
  - name: ApplicationsService
  - name: AuthService
  - name: BuildercodeRewardsService
  - name: CopyTradingService
  - name: DelegatedAgentsService
  - name: FaucetService
  - name: FeesService
  - name: HealthService
  - name: ManagedMarketsService
    description: |-
      Wallet-authenticated maker assignments. The signed session must match both
       configured maker user and application. Owner IDs are process fences, never auth.
       Only wallet sessions are supported; delegated-agent sessions receive 403.
  - name: MarginAccountsService
    description: |-
      Current public isolated-margin semantics:
       - a user has one parent margin account per application scope
       - opening orders create or reuse isolated position buckets under that parent
       - parent account creation is handled internally by margin workflows
  - name: MarketService
  - name: OrderbookService
  - name: OrdersService
  - name: PositionsService
    description: |-
      Current public isolated-margin semantics:
       - positions link to a parent margin account and, when applicable, a bucket id
       - opening orders create or reuse isolated position buckets under the parent
       - users can open another isolated position by reusing the parent account with a different market bucket
  - name: PulseService
  - name: SweeperService
  - name: TraderCodeService
  - name: TradesService
  - name: WhitelistService
  - name: WithdrawalsService
paths:
  /api/v1/accounts/me/portfolio:
    get:
      tags:
        - AccountsService
        - Accounts
      summary: Get portfolio stats
      description: |-
        Get portfolio stats.

         Get aggregate portfolio statistics for the authenticated user,
         scoped by time period. Includes volume, PnL, fees, equity, and
         win/loss metrics.
      operationId: get_portfolio_stats
      parameters:
        - name: period
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetPortfolioStatsResponse'
        '400':
          description: Invalid period parameter
        '401':
          description: Authentication required
        '429':
          description: >-
            Read rate limit exceeded — every authenticated read draws one
            request from the account's read budget; retry after the interval in
            details.retryAfter
        '500':
          description: Internal server error
        '503':
          description: Portfolio analytics reader unavailable
      security:
        - monacoSignature: []
        - monacoHttpSignature: []
components:
  schemas:
    GetPortfolioStatsResponse:
      type: object
      properties:
        period:
          example: 30d
          type: string
          description: Period used for this query
          nullable: true
        volume:
          example: '231.81'
          type: string
          description: Total trade volume (sum of quoteVolume)
          nullable: true
        totalTrades:
          example: '42'
          type: string
          description: Number of trades in period
          nullable: true
        totalOrders:
          example: '56'
          type: string
          description: Number of orders in period
          nullable: true
        feesPaid:
          example: '0.12'
          type: string
          description: Total fees paid by user
          nullable: true
        pnl:
          example: '-0.01'
          type: string
          description: >-
            Legacy realized PnL over the period, average-cost basis:
            gains/losses booked only when a position is reduced or closed, net
            of fees, with funding folded in. Excludes unrealized PnL on open
            positions. For the full PnL picture use totalPnl and pnlBreakdown,
            whose components follow the gross-of-fees convention instead.
          nullable: true
        totalEquity:
          example: '280.93'
          type: string
          description: Total equity (sum of all balances)
          nullable: true
        spotEquity:
          example: '280.93'
          type: string
          description: Spot account equity
          nullable: true
        perpsEquity:
          example: '0.00'
          type: string
          description: Perpetuals account equity
          nullable: true
        winLossRatio:
          example: 0.65
          type: number
          description: >-
            Position-level win rate: winning positions over winning + losing
            positions (break-even excluded). Each position (one flat->open->flat
            round-trip) is classified once by its net realized PnL after all
            fees, not per fill. Null when the period has no closed positions.
          format: double
          nullable: true
        maxDrawdown:
          example: '0.00'
          type: string
          description: Maximum peak-to-trough drawdown on running PnL
          nullable: true
        unrealizedPnl:
          example: '12.34'
          type: string
          description: >-
            Current unrealized PnL across open spot holdings (cost basis vs
            latest close) and open perp positions (entry vs mark). A live value,
            independent of the period parameter.
          nullable: true
        totalPnl:
          example: '10.11'
          type: string
          description: >-
            Current lifetime total PnL: realized + unrealized - fundingPaid -
            fees, with realized components gross of fees. A live value,
            independent of the period parameter; the addends are in
            pnlBreakdown.
          nullable: true
        pnlBreakdown:
          $ref: '#/components/schemas/PnlBreakdown'
    PnlBreakdown:
      type: object
      properties:
        spotRealized:
          example: '3.21'
          type: string
          description: >-
            Cumulative realized spot PnL, average-cost basis, gross of fees;
            withdrawals realize at fair value
          nullable: true
        spotUnrealized:
          example: '1.00'
          type: string
          description: >-
            Unrealized PnL on current spot holdings: quantity x (latest close -
            average cost)
          nullable: true
        perpsRealized:
          example: '5.55'
          type: string
          description: Cumulative realized perps PnL, gross of fees
          nullable: true
        perpsUnrealized:
          example: '2.00'
          type: string
          description: 'Unrealized PnL on open perp positions: quantity x (mark - entry)'
          nullable: true
        fundingPaid:
          example: '0.50'
          type: string
          description: >-
            Cumulative funding paid; positive means paid, negative means
            received (same sign convention as the funding-payments endpoint).
            Subtracted in totalPnl.
          nullable: true
        fees:
          example: '1.15'
          type: string
          description: >-
            Cumulative trading fees; positive means charged, negative means
            rebated. Subtracted in totalPnl.
          nullable: true
      description: |-
        Lifetime PnL components for the authenticated user. The fields satisfy
         totalPnl = (spotRealized + perpsRealized) + (spotUnrealized + perpsUnrealized) - fundingPaid - fees.
  securitySchemes:
    monacoSignature:
      type: apiKey
      description: >-
        Ed25519 session-key request signing. Every authenticated request carries
        three headers: `X-Monaco-PublicKey` (64-char lowercase-hex session
        public key), `X-Monaco-Timestamp` (Unix milliseconds, within 30s of
        server time), and `X-Monaco-Signature` (hex ed25519 signature). The
        signature is over `METHOD\npath?query\ntimestamp_ms\nSHA256_hex(body)`,
        where the body hash is the SHA-256 of the empty byte string when there
        is no body. Obtain the session keypair from `POST
        /api/v1/auth/challenge` followed by `POST /api/v1/auth/verify`.
      name: X-Monaco-Signature
      in: header
    monacoHttpSignature:
      type: apiKey
      description: >-
        RFC 9421 Ed25519 session-key request signatures. Send Signature-Input,
        Signature, and Content-Digest together; never combine them with
        X-Monaco-* credentials. The monaco signature covers @method, @path,
        @query, and content-digest in that order, with created (Unix seconds
        within 30s of server time), keyid (registered lowercase-hex session
        public key), and alg=ed25519 parameters. Content-Digest uses RFC 9530
        sha-256 over the exact body bytes, including the empty body. Query
        coverage retains ordering and percent encoding. Timestamp freshness does
        not reject repeated identical requests; use endpoint idempotency where
        supported. Existing legacy signing remains supported during server-first
        migration; SDK RFC 9421 signing is opt-in. See
        https://docs.0xmonaco.com/reference/http-message-signatures for the
        complete profile and trust model.
      name: Signature
      in: header

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.