---
updatedAt: 2026-05-20T06:40:44.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 the Historical Stake & Rewards of a Validator

Returns the historical stake & rewards allocated to a given validator address.

# 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/{address}": {
      "post": {
        "tags": [
          "Polkadot Staking Reporting"
        ],
        "summary": "Get the Historical Stake & Rewards of a Validator",
        "description": "Returns the historical stake & rewards allocated to a given validator address.",
        "operationId": "GetHistoricalStakeAndRewardsValidator1",
        "parameters": [
          {
            "$ref": "#/components/parameters/ValidatorAddress"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SingleStakingQuery2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Historical Stake & Rewards of a Validator",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidatorRewardsFormat1"
                },
                "example": [
                  {
                    "address": "11VR4pF6c7kfBhfmuwwjWY3FodeYBKWx7ix2rsRCU2q6hqJ",
                    "currency": "DOT",
                    "return": 783.089894122252,
                    "timeStart": "2023-03-11T15:36:18Z",
                    "timeEnd": "2023-03-11T15:36:18Z",
                    "timeAggregation": "era",
                    "startingBalance": 2058184.9337035,
                    "metadata": {
                      "commission": 0.008,
                      "validatorRewards": 776.874894962552,
                      "commissionRewards": 6.21499915970041,
                      "era": 1013
                    }
                  }
                ]
              }
            }
          },
          "400": {
            "description": "Invalid value for: path parameter address or body, or both.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                },
                "example": "Invalid value for: path parameter address (expected value to match: ^1[a-zA-Z0-9]{40,50}$, but was: fBhfmuwwjWY3FodeYBKWx7ix2rsRCU2q6hqJ)"
              }
            }
          },
          "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": {
      "SingleStakingQuery2": {
        "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"
          }
        }
      },
      "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"
        ]
      },
      "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": {
      "ValidatorAddress": {
        "in": "path",
        "name": "address",
        "description": "A single public address to check.",
        "required": true,
        "schema": {
          "type": "string",
          "default": "11VR4pF6c7kfBhfmuwwjWY3FodeYBKWx7ix2rsRCU2q6hqJ",
          "pattern": "^1[a-zA-Z0-9]{40,50}$"
        },
        "example": "11VR4pF6c7kfBhfmuwwjWY3FodeYBKWx7ix2rsRCU2q6hqJ"
      }
    }
  },
  "x-readme": {
    "samples-languages": [
      "curl",
      "go",
      "javascript",
      "python",
      "node"
    ],
    "explorer-enabled": false
  }
}
```