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

# Get rkSOL portfolio history

> Returns the holders' rkSOL position at each point of the window, oldest first. All holders in `ids` count as one position, with one average cost. Each point has `timestamp`; `holdingRksol`, the rkSOL held; and in USD, `holdingRksolUsd`, `realizedPnlUsd`, `unrealizedPnlUsd` and `totalPnlUsd`. The USD fields are `null` at a point with no rkSOL price inside the window yet. The list is empty when the holders have no rkSOL transactions.



## OpenAPI

````yaml /api-reference/openapi.json get /v1/rksol/portfolio
openapi: 3.1.0
info:
  title: Starke API
  version: 1.0.0
servers:
  - url: https://api.starke.finance
    description: Production
security: []
paths:
  /v1/rksol/portfolio:
    get:
      tags:
        - rkSOL
      summary: Get rkSOL portfolio history
      description: >-
        Returns the holders' rkSOL position at each point of the window, oldest
        first. All holders in `ids` count as one position, with one average
        cost. Each point has `timestamp`; `holdingRksol`, the rkSOL held; and in
        USD, `holdingRksolUsd`, `realizedPnlUsd`, `unrealizedPnlUsd` and
        `totalPnlUsd`. The USD fields are `null` at a point with no rkSOL price
        inside the window yet. The list is empty when the holders have no rkSOL
        transactions.
      operationId: getV1RksolPortfolio
      parameters:
        - name: ids
          in: query
          required: true
          schema:
            type: string
          description: Comma-separated holder wallet addresses, 1 to 50 of them.
          example: Ho1der1111111111111111111111111111111111111
        - name: start_time
          in: query
          required: true
          schema:
            type: string
            format: date-time
            pattern: >-
              ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
          description: The start of the window, an ISO 8601 date-time.
          example: '2026-11-01T00:00:00Z'
        - name: end_time
          in: query
          required: true
          schema:
            type: string
            format: date-time
            pattern: >-
              ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
          description: >-
            The end of the window, an ISO 8601 date-time, not before
            `start_time`.
          example: '2026-11-02T00:00:00Z'
        - name: granularity
          in: query
          required: true
          schema:
            type: string
            enum:
              - 15mins
              - 1hour
              - 1day
          description: 'The spacing of the points: `15mins`, `1hour` or `1day`.'
          example: 1hour
      responses:
        '200':
          description: One entry for each point in the window.
          content:
            application/json:
              example:
                - timestamp: '2026-11-01T00:00:00.000Z'
                  holdingRksol: 10
                  holdingRksolUsd: 1756
                  realizedPnlUsd: 0
                  unrealizedPnlUsd: 2
                  totalPnlUsd: 2
        '400':
          description: >-
            The query is invalid: a JSON body `{ "errors": [{ "path", "message"
            }] }`. When `start_time` is after `end_time`, the body is the plain
            text `Bad Request` instead.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
        '500':
          description: >-
            An unexpected error. The body is the plain text `Internal Server
            Error`.
      security: []
components:
  schemas:
    ValidationError:
      type: object
      properties:
        errors:
          type: array
          items:
            type: object
            properties:
              path:
                type: string
              message:
                type: string
            required:
              - path
              - message
      required:
        - errors

````

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