Obol tvs API

The tvs API from Obol — 2 operation(s) for tvs.

OpenAPI Specification

obol-tvs-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Obol Address tvs API
  description: "## What is this API?\n\nThis API is for creating and managing [Distributed Validators](https://docs.obol.tech/docs/int/key-concepts#distributed-validator). This API works in tandem with Obol's [Distributed Validator Launchpad](https://hoodi.launchpad.obol.org), a dapp designed to allow people to authenticate their counterparties and agree to the terms of a Distributed Validator Cluster. This API will be made more easy for code-only interaction in the coming quarters with the release of the Obol-SDK. \n\nRead more about Obol and how to use the [launchpad](https://hoodi.launchpad.obol.org) on our [docs site](https://docs.obol.tech/). \n\nFor enquiries:"
  version: v1.0.0-local
  contact:
    name: Obol Labs
    url: https://obol.tech
    email: support@obol.tech
servers:
- url: https://api.obol.tech
  description: Production environment
- url: http://localhost:3000
  description: Local development server
- url: https://localhost:3000
  description: HTTPS Local development server
tags:
- name: tvs
paths:
  /tvs/{network}:
    get:
      description: Returns either summary (total balance) or detailed (validator-level) TVS data for a specific timestamp. All returned data (balances, counts, totals) corresponds to the timestamp shown in the response. Each network has one data snapshot per day.
      operationId: TVSController_getTVS[0]
      parameters:
      - name: network
        required: true
        in: path
        description: Network name (e.g., mainnet, hoodi)
        schema:
          example: mainnet
          type: string
      - name: limit
        required: false
        in: query
        description: Number of results per page (only applies when details=true).
        schema:
          type: integer
          default: 100
          maximum: 1000
      - name: page
        required: false
        in: query
        description: Page number (only applies when details=true)
        schema:
          type: integer
          default: 0
      - name: details
        required: false
        in: query
        description: If true, returns detailed validator-level data
        schema:
          type: string
          default: 'false'
      - name: timestamp
        required: false
        in: query
        description: ISO 8601 timestamp or date (YYYY-MM-DD). If date-only format is used, returns data for that day regardless of exact time. If not provided, returns the latest available data.
        schema:
          example: '2025-10-02'
      responses:
        '200':
          description: TVS data retrieved successfully
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/TVSSummaryResponse'
                - $ref: '#/components/schemas/TVSDetailedResponse'
        '400':
          description: Invalid parameters
        '404':
          description: No data found for the specified network/timestamp
        '500':
          description: An unknown error occurred
      summary: Get Total Value Staked Of Obol for a network
      tags:
      - tvs
  /v1/tvs/{network}:
    get:
      description: Returns either summary (total balance) or detailed (validator-level) TVS data for a specific timestamp. All returned data (balances, counts, totals) corresponds to the timestamp shown in the response. Each network has one data snapshot per day.
      operationId: TVSController_getTVS[1]_v1
      parameters:
      - name: network
        required: true
        in: path
        description: Network name (e.g., mainnet, hoodi)
        schema:
          example: mainnet
          type: string
      - name: limit
        required: false
        in: query
        description: Number of results per page (only applies when details=true).
        schema:
          type: integer
          default: 100
          maximum: 1000
      - name: page
        required: false
        in: query
        description: Page number (only applies when details=true)
        schema:
          type: integer
          default: 0
      - name: details
        required: false
        in: query
        description: If true, returns detailed validator-level data
        schema:
          type: string
          default: 'false'
      - name: timestamp
        required: false
        in: query
        description: ISO 8601 timestamp or date (YYYY-MM-DD). If date-only format is used, returns data for that day regardless of exact time. If not provided, returns the latest available data.
        schema:
          example: '2025-10-02'
      responses:
        '200':
          description: TVS data retrieved successfully
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/TVSSummaryResponse'
                - $ref: '#/components/schemas/TVSDetailedResponse'
        '400':
          description: Invalid parameters
        '404':
          description: No data found for the specified network/timestamp
        '500':
          description: An unknown error occurred
      summary: Get Total Value Staked Of Obol for a network
      tags:
      - tvs
components:
  schemas:
    TVSDetailedResponse:
      type: object
      properties:
        timestamp:
          type: string
          description: Timestamp of the data snapshot. All data in this response (balances, counts) is for this specific timestamp.
          example: '2025-10-02T00:00:00.000Z'
        network:
          type: string
          description: Network name
          example: mainnet
        balances:
          description: Array of validator balances at the snapshot timestamp
          type: array
          items:
            $ref: '#/components/schemas/ValidatorBalance'
        total_count:
          type: number
          description: Total number of validators at the snapshot timestamp (used for pagination)
          example: 100
        total_pages:
          type: number
          description: Total number of pages based on the limit parameter and total_count at the snapshot timestamp
          example: 4
      required:
      - timestamp
      - network
      - balances
      - total_count
      - total_pages
    TVSSummaryResponse:
      type: object
      properties:
        total_balance_eth:
          type: number
          description: Total balance in ETH across all clusters at the specified timestamp (rounded to nearest integer)
          example: 12346
        total_balance_usd:
          type: number
          description: Total balance in USD across all clusters at the specified timestamp (calculated using ETH closing price for that day, rounded to nearest integer)
          example: 45678901
        timestamp:
          type: string
          description: Timestamp of the data snapshot. All data in this response is for this specific timestamp.
          example: '2025-10-02T00:00:00.000Z'
        network:
          type: string
          description: Network name
          example: mainnet
        total_unclaimed_balance_eth_denominated:
          type: number
          description: Total unclaimed balance in ETH (from daily fees/revenue data for the snapshot date, rounded to 2 decimal places)
          example: 67.45
        total_claimed_balance_eth_denominated:
          type: number
          description: Total claimed balance in ETH (from daily fees/revenue data for the snapshot date, rounded to 2 decimal places)
          example: 71.23
        total_eth_transferred:
          type: number
          description: Total ETH transferred (from daily fees/revenue data for the snapshot date, rounded to 2 decimal places)
          example: 4.56
        total_revenue:
          type: number
          description: Total revenue (from daily fees/revenue data for the snapshot date, rounded to 2 decimal places)
          example: 142.89
        total_fees_eth_denominated:
          type: number
          description: Total fees in ETH (from daily fees/revenue data for the snapshot date, rounded to 2 decimal places)
          example: 504.12
      required:
      - total_balance_eth
      - total_balance_usd
      - timestamp
      - network
    ValidatorBalance:
      type: object
      properties:
        public_key:
          type: string
          description: Validator public key
          example: '0xa35873f8b87560432432b5247e0d88b23602db03695722585ac7e7151efd457f91fc5e8bd949b67777e5f1cfd504a902'
        balance_eth:
          type: number
          description: Balance in ETH at the snapshot timestamp
          example: 32
      required:
      - public_key
      - balance_eth
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: JWT
      type: http