---
updatedAt: 2026-05-20T06:40:45.000Z
---

Fetch the complete documentation index at: https://docs.blockdaemon.com/llms.txt. Use this file to discover all available pages before exploring further. Append .md to any documentation page URL to get its markdown version.

# Get a List of Historical Stake & Rewards for Multiple Validators

Returns the historical stake & rewards allocated to multiple validator addresses.

# OpenAPI definition

```json
{
  "openapi": "3.0.3",
  "info": {
    "version": "1.0.0",
    "title": "Staking Reporting API",
    "description": "### Protocols \nThe following protocols are currently supported:\n* Cardano\n* Cosmos\n* Ethereum\n* NEAR\n* Polkadot\n* Polygon \n* Solana \n",
    "contact": {
      "name": "Blockdaemon",
      "email": "support@blockdaemon.com",
      "url": "https://blockdaemon.com"
    },
    "x-logo": {
      "url": "logo.png"
    }
  },
  "servers": [
    {
      "url": "https://svc.blockdaemon.com/reporting/staking",
      "description": "Production server"
    }
  ],
  "security": [
    {
      "apiKeyAuthHeader": []
    },
    {
      "bearerAuth": []
    }
  ],
  "paths": {
    "/v1/polkadot/mainnet/validator/history": {
      "post": {
        "tags": [
          "Polkadot Staking Reporting"
        ],
        "summary": "Get a List of Historical Stake & Rewards for Multiple Validators",
        "description": "Returns the historical stake & rewards allocated to multiple validator addresses.",
        "operationId": "GetHistoricalStakeAndRewardsValidators2",
        "parameters": [
          {
            "$ref": "#/components/parameters/aggregate"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StakingQuery2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "List of Historical Stake & Rewards for Multiple Validators",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/List_ValidatorRewardsFormat"
                },
                "example": [
                  {
                    "address": "several",
                    "currency": "DOT",
                    "return": 6559.94623010048,
                    "timeStart": "2023-03-06T00:00:00Z",
                    "timeEnd": "2023-03-12T23:59:59Z",
                    "timeAggregation": "weekly",
                    "startingBalance": 4177750.14572143,
                    "metadata": {
                      "commission": 0.008,
                      "validatorRewards": 6385.47327940744,
                      "commissionRewards": 174.472950693047
                    }
                  },
                  {
                    "address": "123VugBRFMqUEFviSYrG3ewdZ46ZmqxjmRaGY6BvakfdPVaG",
                    "currency": "DOT",
                    "return": 866.240819784686,
                    "timeStart": "2023-03-13T00:00:00Z",
                    "timeEnd": "2023-03-19T23:59:59Z",
                    "timeAggregation": "weekly",
                    "startingBalance": 1975113.60144355,
                    "metadata": {
                      "commission": 0.03,
                      "validatorRewards": 841.010504645326,
                      "commissionRewards": 25.2303151393598
                    }
                  }
                ]
              }
            }
          },
          "400": {
            "description": "Invalid value for query parameter or body, or both.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                },
                "example": "Invalid value for: body (Long at 'toTime')"
              }
            }
          },
          "401": {
            "description": "Invalid or expired token",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedError"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/NotFound"
                }
              }
            }
          },
          "405": {
            "description": "Method Not Allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowed"
                }
              }
            }
          },
          "429": {
            "description": "Rate Limit Exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequests"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServerError"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceUnavailable"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "apiKeyAuthHeader": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key",
        "description": "Unlock higher TPS - Create your own API key in the [Blockdaemon App](https://app.blockdaemon.com).\n",
        "x-default": "2go1YqUcuAr4WZ2-3WgSD3c7qpatZqQuNWhTVBldKZnTSUtw"
      },
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "Opaque",
        "description": "[Legacy Auth] Unlock higher TPS - Create your own API key in the [Blockdaemon App](https://app.blockdaemon.com).\n",
        "x-default": "2go1YqUcuAr4WZ2-3WgSD3c7qpatZqQuNWhTVBldKZnTSUtw"
      }
    },
    "schemas": {
      "StakingQuery2": {
        "required": [
          "fromTime",
          "toTime",
          "timeUnit"
        ],
        "type": "object",
        "properties": {
          "fromTime": {
            "type": "integer",
            "format": "int64",
            "description": "The millisecond timestamp from which you wish to retrieve the historical stake and rewards.",
            "default": 1678174507000,
            "example": 1678174507000
          },
          "toTime": {
            "type": "integer",
            "format": "int64",
            "description": "The millisecond timestamp until which you wish to retrieve the historical stake and rewards.",
            "default": 1678779307000,
            "example": 1678779307000
          },
          "timeUnit": {
            "$ref": "#/components/schemas/TimeUnit2"
          },
          "addresses": {
            "type": "array",
            "description": "A list of addresses.",
            "default": [
              "11VR4pF6c7kfBhfmuwwjWY3FodeYBKWx7ix2rsRCU2q6hqJ"
            ],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "TimeUnit2": {
        "type": "string",
        "default": "week",
        "description": "This parameter is used to aggregate rewards. It must be one of `era`, `day`, `week`, or `month`.",
        "enum": [
          "era",
          "day",
          "week",
          "month"
        ]
      },
      "List_ValidatorRewardsFormat": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/ValidatorRewardsFormat1"
        }
      },
      "ValidatorRewardsFormat1": {
        "required": [
          "address",
          "currency",
          "return",
          "timeStart",
          "timeEnd",
          "timeAggregation",
          "startingBalance",
          "metadata"
        ],
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "The public address."
          },
          "currency": {
            "type": "string",
            "description": "The cryptocurrency protocol the request relates to."
          },
          "return": {
            "type": "number",
            "format": "float",
            "description": "The sum of the rewards for the previous UTC day. Rewards are recorded per session (four hours on Polkadot), and calculated per era (twenty-four hours on Polkadot). Thus, rewards will be calculated once per day on Polkadot."
          },
          "timeStart": {
            "type": "string",
            "description": "The timestamp, in UTC, that marks the start of the period covered."
          },
          "timeEnd": {
            "type": "string",
            "description": "The timestamp, in UTC, that marks the end of the period covered."
          },
          "timeAggregation": {
            "description": "The agregation period, one of `era`, `day`, `week`, or `month`.",
            "type": "string"
          },
          "startingBalance": {
            "type": "number",
            "description": "The staked amount at the beginning of the previous UTC day (at the timeStart).",
            "format": "float"
          },
          "metadata": {
            "$ref": "#/components/schemas/MetadataPolkadot"
          }
        }
      },
      "MetadataPolkadot": {
        "required": [
          "commission",
          "validatorRewards",
          "commissionRewards"
        ],
        "type": "object",
        "description": "The protocol specific data.",
        "properties": {
          "commission": {
            "type": "number",
            "format": "float",
            "description": "The validator commission rate. It refers to the percentage of staking rewards that validators are allowed to charge for their services, it varies across validators. It’s the fee that nominators are charged by the validator. Validators have the freedom to choose their commission rate based on various factors, such as their operational costs, infrastructure requirements, and the value they provide to the network."
          },
          "validatorRewards": {
            "type": "number",
            "format": "float",
            "description": "The rewards the validator has earned from staking activity on the network."
          },
          "commissionRewards": {
            "type": "number",
            "format": "float",
            "description": "The fee a validator earned from its nominators."
          },
          "era": {
            "type": "integer",
            "format": "int32",
            "description": "A unit of time. An era’s duration is exactly 1 day (24 hours). The start and end times are always 15:36:18.003 UTC. Each era consists of 6 epochs, each of which consists of 2400 slots for Polkadot."
          }
        }
      },
      "UnauthorizedError": {
        "description": "Invalid or expired token.",
        "allOf": [
          {
            "$ref": "#/components/schemas/error"
          }
        ],
        "example": {
          "status": 401,
          "code": "401",
          "title": "Unauthorized",
          "detail": "https://blockdaemon.com/documentation/"
        }
      },
      "TooManyRequests": {
        "description": "Rate limit exceeded.",
        "allOf": [
          {
            "$ref": "#/components/schemas/error"
          }
        ],
        "example": {
          "status": 429,
          "code": "429",
          "title": "Too Many Requests",
          "detail": "Request rate limits have been exceeded. Try again after a few seconds."
        }
      },
      "NotFound": {
        "description": "Not Found",
        "items": {
          "type": "string"
        },
        "example": "Not Found"
      },
      "MethodNotAllowed": {
        "description": "Method Not Allowed",
        "allOf": [
          {
            "$ref": "#/components/schemas/error"
          }
        ],
        "example": {
          "status": 405,
          "code": 405,
          "title": "method not allowed",
          "detail": "https://blockdaemon.com/documentation/"
        }
      },
      "ServerError": {
        "description": "An internal server error happened.",
        "allOf": [
          {
            "$ref": "#/components/schemas/error"
          }
        ],
        "example": {
          "status": 500,
          "code": "500",
          "title": "Internal Server Error",
          "detail": "https://blockdaemon.com/documentation/"
        }
      },
      "ServiceUnavailable": {
        "description": "Service Unavailable",
        "allOf": [
          {
            "$ref": "#/components/schemas/error"
          }
        ],
        "example": {
          "status": 503,
          "code": "503",
          "title": "Unavailable",
          "detail": "https://blockdaemon.com/documentation/"
        }
      },
      "error": {
        "type": "object",
        "properties": {
          "status": {
            "type": "integer",
            "description": "The HTTP status of the error.",
            "example": 400
          },
          "code": {
            "type": "integer",
            "description": "The numeric error code.",
            "example": 16384
          },
          "title": {
            "type": "string",
            "description": "The short error description.",
            "example": "Invalid Address"
          },
          "detail": {
            "type": "string",
            "description": "The long error description.",
            "example": "The requested address is invalid on this protocol"
          }
        }
      }
    },
    "parameters": {
      "aggregate": {
        "name": "aggregate",
        "in": "query",
        "description": "Set to true for the rewards to be aggregated across addresses.",
        "required": false,
        "schema": {
          "type": "boolean"
        }
      }
    }
  },
  "x-readme": {
    "samples-languages": [
      "curl",
      "go",
      "javascript",
      "python",
      "node"
    ],
    "explorer-enabled": false
  }
}
```