{
  "openapi": "3.1.0",
  "info": {
    "title": "HAF Block Explorer",
    "description": "HAF block explorer is an API for getting information about transactions/operations included in Hive blocks, as well as block producer (witness) information.",
    "license": {
      "name": "MIT License",
      "url": "https://opensource.org/license/mit"
    },
    "version": "1.28.8"
  },
  "externalDocs": {
    "description": "HAF Block Explorer gitlab repository",
    "url": "https://gitlab.syncad.com/hive/haf_block_explorer"
  },
  "tags": [
    {
      "name": "Block-search",
      "description": "Information about blocks"
    },
    {
      "name": "Transactions",
      "description": "Information about transactions"
    },
    {
      "name": "HBD",
      "description": "HBD supply and interest rate history"
    },
    {
      "name": "Accounts",
      "description": "Information about accounts"
    },
    {
      "name": "Witnesses",
      "description": "Information about witnesses"
    },
    {
      "name": "Proposals",
      "description": "Information about proposals"
    },
    {
      "name": "Other",
      "description": "General API information"
    }
  ],
  "servers": [
    {
      "url": "/hafbe-api"
    }
  ],
  "components": {
    "schemas": {
      "hafbe_backend.comment_type": {
        "type": "string",
        "enum": [
          "post",
          "comment",
          "all"
        ]
      },
      "hafbe_backend.sort_direction": {
        "type": "string",
        "enum": [
          "asc",
          "desc"
        ]
      },
      "hafbe_backend.order_by_votes": {
        "type": "string",
        "enum": [
          "voter",
          "vests",
          "account_vests",
          "proxied_vests",
          "timestamp"
        ]
      },
      "hafbe_backend.order_by_proxy": {
        "type": "string",
        "enum": [
          "account",
          "proxy_date",
          "proxied_vests"
        ]
      },
      "hafbe_backend.order_by_witness": {
        "type": "string",
        "enum": [
          "witness",
          "rank",
          "url",
          "votes",
          "votes_daily_change",
          "voters_num",
          "voters_num_daily_change",
          "price_feed",
          "bias",
          "block_size",
          "signing_key",
          "version",
          "feed_updated_at"
        ]
      },
      "hafbe_backend.order_by_proposal": {
        "type": "string",
        "enum": [
          "by_creator",
          "by_start_date",
          "by_end_date",
          "by_total_votes"
        ]
      },
      "hafbe_backend.order_by_proposal_vote": {
        "type": "string",
        "enum": [
          "by_voter_proposal",
          "by_proposal_voter"
        ]
      },
      "hafbe_backend.proposal_status": {
        "type": "string",
        "enum": [
          "all",
          "active",
          "inactive",
          "expired",
          "votable"
        ]
      },
      "hafbe_backend.granularity": {
        "type": "string",
        "enum": [
          "daily",
          "monthly",
          "yearly"
        ]
      },
      "hafbe_backend.block_range": {
        "type": "object",
        "properties": {
          "from": {
            "type": "integer"
          },
          "to": {
            "type": "integer"
          }
        }
      },
      "hafbe_backend.block_operations": {
        "type": "object",
        "properties": {
          "op_type_id": {
            "type": "integer",
            "description": "operation type identifier"
          },
          "op_count": {
            "type": "integer",
            "description": "amount of operations in block"
          }
        }
      },
      "hafbe_backend.blocksearch": {
        "type": "object",
        "properties": {
          "block_num": {
            "type": "integer",
            "description": "block number"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "creation date"
          },
          "producer_account": {
            "type": "string",
            "description": "account name of block's producer"
          },
          "producer_reward": {
            "type": "string",
            "description": "operation type identifier"
          },
          "trx_count": {
            "type": "integer",
            "description": "count of transactions in block"
          },
          "hash": {
            "type": "string",
            "description": "block hash in a blockchain is a unique, fixed-length string generated by applying a cryptographic hash function to a block's contents"
          },
          "prev": {
            "type": "string",
            "description": "hash of a previous block"
          },
          "operations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/hafbe_backend.block_operations"
            },
            "description": "List of block_operation"
          }
        }
      },
      "hafbe_backend.block_history": {
        "type": "object",
        "properties": {
          "total_blocks": {
            "type": "integer",
            "description": "Total number of blocks"
          },
          "total_pages": {
            "type": "integer",
            "description": "Total number of pages"
          },
          "block_range": {
            "$ref": "#/components/schemas/hafbe_backend.block_range",
            "description": "Range of blocks that contains the returned pages"
          },
          "blocks_result": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/hafbe_backend.blocksearch"
            },
            "description": "List of block results"
          }
        }
      },
      "hafbe_backend.latest_blocks": {
        "type": "object",
        "properties": {
          "block_num": {
            "type": "integer",
            "description": "block number"
          },
          "witness": {
            "type": "string",
            "description": "witness that created the block"
          },
          "operations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/hafbe_backend.block_operations"
            },
            "description": "List of block_operation"
          }
        }
      },
      "hafbe_backend.array_of_latest_blocks": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/hafbe_backend.latest_blocks"
        }
      },
      "hafbe_backend.input_type_return": {
        "type": "object",
        "properties": {
          "input_type": {
            "type": "string",
            "description": "operation type id"
          },
          "input_value": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "number of operations in the block"
          }
        }
      },
      "hafbe_backend.auth_with_weight": {
        "type": "array",
        "x-sql-datatype": "JSON",
        "items": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "integer"
            }
          ]
        },
        "minItems": 2,
        "maxItems": 2
      },
      "hafbe_backend.authority_type": {
        "type": "object",
        "properties": {
          "key_auths": {
            "type": "array",
            "x-sql-datatype": "JSON",
            "items": {
              "$ref": "#/components/schemas/hafbe_backend.auth_with_weight"
            }
          },
          "account_auths": {
            "type": "array",
            "x-sql-datatype": "JSON",
            "items": {
              "$ref": "#/components/schemas/hafbe_backend.auth_with_weight"
            }
          },
          "weight_threshold": {
            "type": "integer"
          }
        }
      },
      "hafbe_backend.account_authority": {
        "type": "object",
        "properties": {
          "owner": {
            "$ref": "#/components/schemas/hafbe_backend.authority_type",
            "description": "the most powerful key because it can change any key of an account, including the owner key. Ideally it is meant to be stored offline, and only used to recover a compromised account"
          },
          "active": {
            "$ref": "#/components/schemas/hafbe_backend.authority_type",
            "description": "key meant for more sensitive tasks such as transferring funds, power up/down transactions, converting Hive Dollars, voting for witnesses, updating profile details and avatar, and placing a market order"
          },
          "posting": {
            "$ref": "#/components/schemas/hafbe_backend.authority_type",
            "description": "key allows accounts to post, comment, edit, vote, reblog and follow or mute other accounts"
          },
          "memo": {
            "type": "string",
            "description": "default key to be used for memo encryption"
          },
          "witness_signing": {
            "type": "string",
            "description": "key used by a witness to sign blocks"
          }
        }
      },
      "hafbe_backend.account": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "account's identification number"
          },
          "name": {
            "type": "string",
            "description": "account's name"
          },
          "can_vote": {
            "type": "boolean",
            "description": "information whether the account can vote or not"
          },
          "mined": {
            "type": "boolean",
            "description": "information whether made a prove of work"
          },
          "proxy": {
            "type": "string",
            "description": "an account to which the account has designated as its proxy"
          },
          "recovery_account": {
            "type": "string",
            "description": "an account to which the account has designated as its recovery account"
          },
          "last_account_recovery": {
            "type": "string",
            "format": "date-time",
            "description": "time when the last account recovery was performed"
          },
          "created": {
            "type": "string",
            "format": "date-time",
            "description": "date of account creation"
          },
          "reputation": {
            "type": "integer",
            "description": "numerical rating of the user based on upvotes and downvotes on user's posts"
          },
          "pending_claimed_accounts": {
            "type": "integer",
            "description": "pool of prepaid accounts available for user allocation. These accounts are pre-registered and can be claimed by users as needed"
          },
          "json_metadata": {
            "type": "string",
            "description": "parameter encompasses personalized profile information"
          },
          "posting_json_metadata": {
            "type": "string",
            "description": "parameter encompasses personalized profile information"
          },
          "profile_image": {
            "type": "string",
            "description": "url to profile image"
          },
          "hbd_balance": {
            "type": "integer",
            "x-sql-datatype": "BIGINT",
            "description": "number of HIVE backed dollars the account has"
          },
          "balance": {
            "type": "integer",
            "x-sql-datatype": "BIGINT",
            "description": "account's HIVE balance"
          },
          "vesting_shares": {
            "type": "string",
            "description": "account's VEST balance"
          },
          "vesting_balance": {
            "type": "integer",
            "x-sql-datatype": "BIGINT",
            "description": "the VEST balance, presented in HIVE, is calculated based on the current HIVE price"
          },
          "hbd_saving_balance": {
            "type": "integer",
            "x-sql-datatype": "BIGINT",
            "description": "saving balance of HIVE backed dollars"
          },
          "savings_balance": {
            "type": "integer",
            "x-sql-datatype": "BIGINT",
            "description": "HIVE saving balance"
          },
          "savings_withdraw_requests": {
            "type": "integer",
            "description": "number representing how many payouts are pending from user's saving balance"
          },
          "reward_hbd_balance": {
            "type": "integer",
            "x-sql-datatype": "BIGINT",
            "description": "not yet claimed HIVE backed dollars stored in hbd reward balance"
          },
          "reward_hive_balance": {
            "type": "integer",
            "x-sql-datatype": "BIGINT",
            "description": "not yet claimed HIVE stored in hive reward balance"
          },
          "reward_vesting_balance": {
            "type": "string",
            "description": "not yet claimed VESTS stored in vest reward balance"
          },
          "reward_vesting_hive": {
            "type": "integer",
            "x-sql-datatype": "BIGINT",
            "description": "the reward vesting balance, denominated in HIVE, is determined by the prevailing HIVE price at the time of reward reception"
          },
          "posting_rewards": {
            "type": "string",
            "description": "rewards obtained by posting and commenting expressed in VEST"
          },
          "curation_rewards": {
            "type": "string",
            "description": "curator's reward expressed in VEST"
          },
          "delegated_vesting_shares": {
            "type": "string",
            "description": "VESTS delegated to another user, account's power is lowered by delegated VESTS"
          },
          "received_vesting_shares": {
            "type": "string",
            "description": "VESTS received from another user, account's power is increased by received VESTS"
          },
          "proxied_vsf_votes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "recursive proxy of VESTS"
          },
          "withdrawn": {
            "type": "string",
            "description": "the total VESTS already withdrawn from active withdrawals"
          },
          "vesting_withdraw_rate": {
            "type": "string",
            "description": "received until the withdrawal is complete, with each installment amounting to 1/13 of the withdrawn total"
          },
          "to_withdraw": {
            "type": "string",
            "description": "the remaining total VESTS needed to complete withdrawals"
          },
          "withdraw_routes": {
            "type": "integer",
            "description": "list of account receiving the part of a withdrawal"
          },
          "delayed_vests": {
            "type": "string",
            "description": "blocked VESTS by a withdrawal"
          },
          "witness_votes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "the roster of witnesses voted by the account"
          },
          "witnesses_voted_for": {
            "type": "integer",
            "description": "count of witness_votes"
          },
          "ops_count": {
            "type": "integer",
            "description": "the number of operations performed by the account"
          },
          "is_witness": {
            "type": "boolean",
            "description": "whether account is a witness"
          },
          "hbd_seconds": {
            "type": "string",
            "description": "accumulated HBD-seconds (liquid HBD balance integrated over time) since the last interest payment; the chain's raw value used to derive interest. Frozen from HF25 onward. Mirrors condenser_api.get_account.hbd_seconds"
          },
          "hbd_seconds_last_update": {
            "type": "string",
            "format": "date-time",
            "description": "timestamp of the most recent liquid HBD balance change (the anchor hbd_seconds is accrued from). Epoch if never set"
          },
          "hbd_last_interest_payment": {
            "type": "string",
            "format": "date-time",
            "description": "timestamp of the last liquid HBD interest payment to this account. Epoch for accounts that never received liquid HBD interest"
          }
        }
      },
      "hafbe_backend.proxy_power": {
        "type": "object",
        "properties": {
          "account": {
            "type": "string"
          },
          "proxy_date": {
            "type": "string",
            "format": "date-time"
          },
          "proxied_vests": {
            "type": "string",
            "description": "Own vesting shares plus sum of proxied vesting shares (levels 1\u20134) decreased by delayed vests"
          }
        }
      },
      "hafbe_backend.permlink": {
        "type": "object",
        "properties": {
          "permlink": {
            "type": "string",
            "description": "unique post identifier containing post's title and generated number"
          },
          "block": {
            "type": "integer",
            "description": "operation block number"
          },
          "trx_id": {
            "type": "string",
            "description": "hash of the transaction"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "creation date"
          },
          "operation_id": {
            "type": "string",
            "description": "unique operation identifier with an encoded block number and operation type id"
          }
        }
      },
      "hafbe_backend.permlink_history": {
        "type": "object",
        "properties": {
          "total_permlinks": {
            "type": "integer",
            "description": "Total number of permlinks"
          },
          "total_pages": {
            "type": "integer",
            "description": "Total number of pages"
          },
          "block_range": {
            "$ref": "#/components/schemas/hafbe_backend.block_range",
            "description": "Range of blocks that contains the returned pages"
          },
          "permlinks_result": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/hafbe_backend.permlink"
            },
            "description": "List of permlinks"
          }
        }
      },
      "hafbe_backend.wallet_stats": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "format": "date-time",
            "description": "end of the time period (capped at current time for the latest partial period)"
          },
          "new_wallets": {
            "type": "integer",
            "description": "number of new wallets (accounts) created in this period"
          },
          "total_wallets": {
            "type": "integer",
            "description": "cumulative total wallets on the chain through the end of this period"
          }
        }
      },
      "hafbe_backend.array_of_wallet_stats": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/hafbe_backend.wallet_stats"
        }
      },
      "hafbe_backend.witness": {
        "type": "object",
        "properties": {
          "witness_name": {
            "type": "string",
            "description": "witness's account name"
          },
          "rank": {
            "type": "integer",
            "description": "the current rank of the witness according to the votes cast on the blockchain. The top 20 witnesses (ranks 1 - 20) will produce blocks each round."
          },
          "url": {
            "type": "string",
            "description": "the witness's home page"
          },
          "vests": {
            "type": "string",
            "description": "the total weight of votes cast in favor of this witness, expressed in VESTS"
          },
          "votes_daily_change": {
            "type": "string",
            "description": "the increase or decrease in votes for this witness over the last 24 hours, expressed in vests"
          },
          "voters_num": {
            "type": "integer",
            "description": "the number of voters for this witness"
          },
          "voters_num_daily_change": {
            "type": "integer",
            "description": "the increase or decrease in the number of voters voting for this witness over the last 24 hours"
          },
          "price_feed": {
            "type": "number",
            "description": "the current price feed provided by the witness in HIVE/HBD"
          },
          "bias": {
            "type": "integer",
            "x-sql-datatype": "NUMERIC",
            "description": "When setting the price feed, you specify the base and quote. Typically, if market conditions are stable and, for example, HBD is trading at 0.25 USD on exchanges, a witness would set:\n  base: 0.250 HBD\n  quote: 1.000 HIVE\n(This indicates that one HIVE costs 0.25 HBD.) However, if the peg is not maintained and HBD does not equal 1 USD (either higher or lower), the witness can adjust the feed accordingly. For instance, if HBD is trading at only 0.90 USD on exchanges, the witness might set:\n  base: 0.250 HBD\n  quote: 1.100 HIVE\nIn this case, the bias is 10%"
          },
          "feed_updated_at": {
            "type": "string",
            "format": "date-time",
            "description": "timestamp when feed was updated"
          },
          "block_size": {
            "type": "integer",
            "description": "the maximum block size the witness is currently voting for, in bytes"
          },
          "signing_key": {
            "type": "string",
            "description": "the key used to verify blocks signed by this witness"
          },
          "version": {
            "type": "string",
            "description": "the version of hived the witness is running"
          },
          "missed_blocks": {
            "type": "integer",
            "description": "the number of blocks the witness should have generated but didn't (over the entire lifetime of the blockchain)"
          },
          "hbd_interest_rate": {
            "type": "integer",
            "description": "the interest rate the witness is voting for"
          },
          "last_confirmed_block_num": {
            "type": "integer",
            "description": "the last block number created by the witness"
          },
          "account_creation_fee": {
            "type": "integer",
            "description": "the cost of creating an account."
          }
        }
      },
      "hafbe_backend.witnesses_return": {
        "type": "object",
        "properties": {
          "total_witnesses": {
            "type": "integer",
            "description": "Total number of witnesses"
          },
          "total_pages": {
            "type": "integer",
            "description": "Total number of pages"
          },
          "witnesses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/hafbe_backend.witness"
            },
            "description": "List of witness parameters"
          }
        }
      },
      "hafbe_backend.witness_voter": {
        "type": "object",
        "properties": {
          "voter_name": {
            "type": "string",
            "description": "account name of the voter"
          },
          "vests": {
            "type": "string",
            "description": "number of vests this voter is directly voting with"
          },
          "account_vests": {
            "type": "string",
            "description": "number of vests in the voter's account.  if some vests are delegated, they will not be counted in voting"
          },
          "proxied_vests": {
            "type": "string",
            "description": "the number of vests proxied to this account"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "the time this account last changed its voting power"
          }
        }
      },
      "hafbe_backend.witness_voter_history": {
        "type": "object",
        "properties": {
          "total_votes": {
            "type": "integer",
            "description": "Total number of votes"
          },
          "total_pages": {
            "type": "integer",
            "description": "Total number of pages"
          },
          "voters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/hafbe_backend.witness_voter"
            },
            "description": "List of votes results"
          }
        }
      },
      "hafbe_backend.witness_votes_history_record": {
        "type": "object",
        "properties": {
          "voter_name": {
            "type": "string",
            "description": "account name of the voter"
          },
          "approve": {
            "type": "boolean",
            "description": "whether the voter approved or rejected the witness"
          },
          "vests": {
            "type": "string",
            "description": "number of vests this voter is directly voting with"
          },
          "account_vests": {
            "type": "string",
            "description": "number of vests in the voter's account.  if some vests are delegated, they will not be counted in voting"
          },
          "proxied_vests": {
            "type": "string",
            "description": "the number of vests proxied to this account"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "the time of the vote change"
          }
        }
      },
      "hafbe_backend.witness_votes_history": {
        "type": "object",
        "properties": {
          "total_votes": {
            "type": "integer",
            "description": "Total number of votes"
          },
          "total_pages": {
            "type": "integer",
            "description": "Total number of pages"
          },
          "votes_history": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/hafbe_backend.witness_votes_history_record"
            },
            "description": "List of witness votes"
          }
        }
      },
      "hafbe_backend.operation_body": {
        "type": "object",
        "x-sql-datatype": "JSON",
        "properties": {
          "type": {
            "type": "string"
          },
          "value": {
            "type": "object"
          }
        }
      },
      "hafbe_backend.operation": {
        "type": "object",
        "properties": {
          "op": {
            "$ref": "#/components/schemas/hafah_backend.operation_body",
            "x-sql-datatype": "JSONB",
            "description": "operation body"
          },
          "block": {
            "type": "integer",
            "description": "operation block number"
          },
          "trx_id": {
            "type": "string",
            "description": "hash of the transaction"
          },
          "op_pos": {
            "type": "integer",
            "description": "operation identifier that indicates its sequence number in transaction"
          },
          "op_type_id": {
            "type": "integer",
            "x-sql-datatype": "SMALLINT",
            "description": "operation type identifier"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "the time operation was included in the blockchain"
          },
          "virtual_op": {
            "type": "boolean",
            "description": "true if is a virtual operation"
          },
          "operation_id": {
            "type": "string",
            "description": "unique operation identifier with an encoded block number and operation type id"
          },
          "trx_in_block": {
            "type": "integer",
            "x-sql-datatype": "SMALLINT",
            "description": "transaction identifier that indicates its sequence number in block"
          }
        }
      },
      "hafbe_backend.operation_history": {
        "type": "object",
        "properties": {
          "total_operations": {
            "type": "integer",
            "description": "Total number of operations"
          },
          "total_pages": {
            "type": "integer",
            "description": "Total number of pages"
          },
          "operations_result": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/hafbe_backend.operation"
            },
            "description": "List of operation results"
          }
        }
      },
      "hafbe_backend.transaction_stats": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "format": "date-time",
            "description": "the time transaction was included in the blockchain"
          },
          "trx_count": {
            "type": "integer",
            "description": "amount of transactions"
          },
          "avg_trx": {
            "type": "integer",
            "description": "avarage amount of transactions in block"
          },
          "min_trx": {
            "type": "integer",
            "description": "minimal amount of transactions in block"
          },
          "max_trx": {
            "type": "integer",
            "description": "maximum amount of transactions in block"
          },
          "last_block_num": {
            "type": "integer",
            "description": "last block number in time range"
          }
        }
      },
      "hafbe_backend.array_of_transaction_stats": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/hafbe_backend.transaction_stats"
        }
      },
      "hafbe_backend.period_op_type_count": {
        "type": "object",
        "properties": {
          "op_type_id": {
            "type": "integer",
            "description": "operation type identifier"
          },
          "op_count": {
            "type": "integer",
            "format": "int64",
            "x-sql-datatype": "BIGINT",
            "description": "number of operations of this type in the period"
          }
        }
      },
      "hafbe_backend.operation_type_stats": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "format": "date-time",
            "description": "end timestamp of the period (capped at current time for the in-progress period)"
          },
          "total_transactions": {
            "type": "integer",
            "format": "int64",
            "x-sql-datatype": "BIGINT",
            "description": "total number of transactions in the period (from transaction_stats_by_day/month)"
          },
          "total_operations": {
            "type": "integer",
            "format": "int64",
            "x-sql-datatype": "BIGINT",
            "description": "total number of operations in the period (sum of operations[].op_count)"
          },
          "operations": {
            "type": "array",
            "description": "per-op-type breakdown for the period",
            "items": {
              "$ref": "#/components/schemas/hafbe_backend.period_op_type_count"
            }
          },
          "last_block_num": {
            "type": "integer",
            "description": "last block number included in the period"
          }
        }
      },
      "hafbe_backend.array_of_operation_type_stats": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/hafbe_backend.operation_type_stats"
        }
      },
      "hafbe_backend.hbd_granularity": {
        "type": "string",
        "enum": [
          "daily",
          "weekly",
          "monthly",
          "yearly"
        ]
      },
      "hafbe_backend.hbd_status": {
        "type": "object",
        "properties": {
          "period": {
            "type": "string",
            "format": "date-time",
            "description": "End of the UTC period, capped at the current time, as in transaction statistics. Values come from the last processed block of the period, which may be earlier than this label."
          },
          "hbd_supply": {
            "type": "string",
            "description": "Total HBD supply in milli-HBD, including the treasury, as a string to preserve integer precision."
          },
          "virtual_supply": {
            "type": "string",
            "description": "Virtual supply in milli-HIVE as a string to preserve integer precision."
          },
          "debt_ratio_pct": {
            "type": [
              "number",
              "null"
            ],
            "x-sql-datatype": "NUMERIC",
            "description": "Provisional formula from issue 147: 100 * current_hbd_supply / virtual_supply. The supplies have different asset units; this is not the protocol debt ratio. The definition is pending clarification. Rounded to three decimal places. Null when virtual_supply is zero."
          },
          "hbd_interest_rate": {
            "type": "integer",
            "description": "Declared HBD interest rate in basis points; 1500 means 15%."
          }
        }
      },
      "hafbe_backend.array_of_hbd_status": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/hafbe_backend.hbd_status"
        }
      },
      "hafbe_backend.proposal": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "proposal id assigned by hived at creation (mirrors condenser_api `id`)"
          },
          "proposal_id": {
            "type": "integer",
            "description": "proposal id assigned by hived at creation (mirrors condenser_api `proposal_id` \u2014 duplicate of `id` for client parity)"
          },
          "creator": {
            "type": "string",
            "description": "account that created the proposal"
          },
          "receiver": {
            "type": "string",
            "description": "account that receives the daily payout"
          },
          "start_date": {
            "type": "string",
            "format": "date-time",
            "description": "when the proposal becomes payable"
          },
          "end_date": {
            "type": "string",
            "format": "date-time",
            "description": "when the proposal stops being payable"
          },
          "daily_pay": {
            "type": "string",
            "description": "requested daily HBD payout in precision-3 units (milli-HBD)"
          },
          "subject": {
            "type": "string",
            "description": "human-readable proposal subject"
          },
          "permlink": {
            "type": "string",
            "description": "permlink pointing to the proposal discussion post"
          },
          "total_votes": {
            "type": "string",
            "description": "stake-weighted total approval in VESTS, summed across direct (non-proxied) voters"
          },
          "voters_num": {
            "type": "integer",
            "description": "number of direct (non-proxied) approving voters"
          },
          "paid_amount": {
            "type": "string",
            "description": "cumulative HBD paid to this proposal so far in precision-3 units (milli-HBD)"
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "inactive",
              "expired"
            ],
            "description": "Current proposal status computed from start_date/end_date relative to\nthe HAFBE processed head block. Removed proposals are filtered out\nupstream by every status filter (including `all`) and never appear in\nthe response, so this enum has only the three live states.\n"
          }
        }
      },
      "hafbe_backend.proposals_return": {
        "type": "object",
        "properties": {
          "total_proposals": {
            "type": "integer",
            "description": "Total number of proposals matching the status filter"
          },
          "total_pages": {
            "type": "integer",
            "description": "Total number of pages"
          },
          "proposals": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/hafbe_backend.proposal"
            },
            "description": "List of proposals"
          }
        }
      },
      "hafbe_backend.proposal_vote": {
        "type": "object",
        "properties": {
          "voter_name": {
            "type": "string",
            "description": "account name of the voter"
          },
          "proposal": {
            "$ref": "#/components/schemas/hafbe_backend.proposal",
            "description": "nested proposal object \u2014 mirrors condenser_api `ProposalVote.proposal` so the front end can display the proposal alongside the vote without a second request"
          },
          "voter_vests": {
            "type": "string",
            "description": "effective governance VESTS for this voter at last cache refresh (0 if voter currently has a proxy set)"
          },
          "direct_vests": {
            "type": "string",
            "description": "this voter's own governance VESTS (account_vests) at last cache refresh, independent of any proxy"
          },
          "proxied_vests": {
            "type": "string",
            "description": "VESTS from accounts that have proxied their governance to this voter"
          },
          "proxy": {
            "type": "string",
            "description": "name of the governance proxy this voter has set (empty string if none)"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "block timestamp at which this active vote was last (re)cast"
          }
        }
      },
      "hafbe_backend.proposal_votes_return": {
        "type": "object",
        "properties": {
          "total_votes": {
            "type": "integer",
            "description": "Total number of active proposal votes matching the filter"
          },
          "total_pages": {
            "type": "integer",
            "description": "Total number of pages"
          },
          "votes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/hafbe_backend.proposal_vote"
            },
            "description": "List of current active proposal votes"
          }
        }
      },
      "hafbe_backend.proposal_votes_history_record": {
        "type": "object",
        "properties": {
          "voter_name": {
            "type": "string",
            "description": "account name of the voter"
          },
          "approve": {
            "type": "boolean",
            "description": "whether the voter approved or withdrew approval of the proposal"
          },
          "voter_vests": {
            "type": "string",
            "description": "effective governance VESTS carried by this voter's direct proposal vote (0 if the voter currently has a proxy set \u2014 their stake counts through the proxy, and hived's proposal totals exclude them). NOTE: this is the voter's CURRENT stake, not the stake they held at the block of this historical vote event \u2014 no point-in-time vesting snapshot is kept."
          },
          "direct_vests": {
            "type": "string",
            "description": "this voter's own governance VESTS (account_vests), independent of any proxy. Never zeroed, so the voter's real stake stays visible when voter_vests is 0."
          },
          "proxied_vests": {
            "type": "string",
            "description": "VESTS from accounts that have proxied their governance to this voter"
          },
          "proxy": {
            "type": "string",
            "description": "name of the governance proxy this voter has set (empty string if none). Whenever this field is non-empty, voter_vests is 0. The converse does NOT hold: a voter who simply holds no VESTS also reports 0, with an empty proxy."
          },
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "the time of the vote change"
          }
        }
      },
      "hafbe_backend.proposal_votes_history": {
        "type": "object",
        "properties": {
          "total_votes": {
            "type": "integer",
            "description": "Total number of votes"
          },
          "total_pages": {
            "type": "integer",
            "description": "Total number of pages"
          },
          "votes_history": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/hafbe_backend.proposal_votes_history_record"
            },
            "description": "List of proposal vote changes"
          }
        }
      },
      "hafbe_backend.array_of_proxy_power": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/hafbe_backend.proxy_power"
        }
      }
    }
  },
  "paths": {
    "/witnesses": {
      "get": {
        "tags": [
          "Witnesses"
        ],
        "summary": "List witnesses",
        "description": "List all witnesses (both active and standby)\n\nSQL example\n* `SELECT * FROM hafbe_endpoints.get_witnesses(1,2);`\n\nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/witnesses?page-size=2'`\n",
        "operationId": "hafbe_endpoints.get_witnesses",
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Return page on `page` number, defaults to `1`\n"
          },
          {
            "in": "query",
            "name": "page-size",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 1000
            },
            "description": "Return max `page-size` operations per page, defaults to `100`"
          },
          {
            "in": "query",
            "name": "sort",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.order_by_witness",
              "default": "votes"
            },
            "description": "Sort key:\n\n * `witness` - the witness name\n\n * `rank` - their current rank (highest weight of votes => lowest rank)\n\n * `url` - the witness url\n\n * `votes` - total number of votes\n\n * `votes_daily_change` - change in `votes` in the last 24 hours\n\n * `voters_num` - total number of voters approving the witness\n\n * `voters_num_daily_change` - change in `voters_num` in the last 24 hours\n\n * `price_feed` - their current published value for the HIVE/HBD price feed\n\n * `feed_updated_at` - feed update timestamp\n\n * `bias` - if HBD is trading at only 0.90 USD on exchanges, the witness might set:\n        base: 0.250 HBD\n        quote: 1.100 HIVE\n      In this case, the bias is 10%\n\n * `block_size` - the block size they are voting for\n\n * `signing_key` - the witness' block-signing public key\n\n * `version` - the version of hived the witness is running\n"
          },
          {
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.sort_direction",
              "default": "desc"
            },
            "description": "Sort order:\n\n * `asc` - Ascending, from A to Z or smallest to largest\n\n * `desc` - Descending, from Z to A or largest to smallest\n"
          }
        ],
        "responses": {
          "200": {
            "description": "The list of witnesses\n\n* Returns `hafbe_backend.witnesses_return`\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/hafbe_backend.witnesses_return"
                },
                "example": {
                  "total_witnesses": 731,
                  "total_pages": 366,
                  "witnesses": [
                    {
                      "witness_name": "roadscape",
                      "rank": 1,
                      "url": "https://steemit.com/witness-category/@roadscape/witness-roadscape",
                      "vests": "94172201023355097",
                      "votes_daily_change": "0",
                      "voters_num": 306,
                      "voters_num_daily_change": 0,
                      "price_feed": 0.539,
                      "bias": 0,
                      "feed_updated_at": "2016-09-15T16:07:42",
                      "block_size": 65536,
                      "signing_key": "STM5AS7ZS33pzTf1xbTi8ZUaUeVAZBsD7QXGrA51HvKmvUDwVbFP9",
                      "version": "1.28.8",
                      "missed_blocks": 129,
                      "hbd_interest_rate": 1000,
                      "last_confirmed_block_num": 4999986,
                      "account_creation_fee": 2000
                    },
                    {
                      "witness_name": "arhag",
                      "rank": 2,
                      "url": "https://steemit.com/witness-category/@arhag/witness-arhag",
                      "vests": "91835048921097725",
                      "votes_daily_change": "0",
                      "voters_num": 348,
                      "voters_num_daily_change": 0,
                      "price_feed": 0.536,
                      "bias": 0,
                      "feed_updated_at": "2016-09-15T19:31:18",
                      "block_size": 65536,
                      "signing_key": "STM8kvk4JH2m6ZyHBGNor4qk2Zwdi2MJAjMYUpfqiicCKu7HqAeZh",
                      "version": "1.28.8",
                      "missed_blocks": 61,
                      "hbd_interest_rate": 1000,
                      "last_confirmed_block_num": 4999993,
                      "account_creation_fee": 7000
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/witnesses/{account-name}": {
      "get": {
        "tags": [
          "Witnesses"
        ],
        "summary": "Returns information about a witness.",
        "description": "Returns information about a witness given their account name.\n\nSQL example\n* `SELECT * FROM hafbe_endpoints.get_witness('blocktrades');`\n\nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/witnesses/blocktrades'`\n",
        "operationId": "hafbe_endpoints.get_witness",
        "parameters": [
          {
            "in": "path",
            "name": "account-name",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "witness account name"
          }
        ],
        "responses": {
          "200": {
            "description": "Various witness statistics\n\n* Returns `hafbe_backend.witness_return`\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/hafbe_backend.witness"
                },
                "example": {
                  "witness_name": "blocktrades",
                  "rank": 8,
                  "url": "https://blocktrades.us",
                  "vests": "82373419958692803",
                  "votes_daily_change": "0",
                  "voters_num": 263,
                  "voters_num_daily_change": 0,
                  "price_feed": 0.545,
                  "bias": 0,
                  "feed_updated_at": "2016-09-15T16:02:21",
                  "block_size": 65536,
                  "signing_key": "STM4vmVc3rErkueyWNddyGfmjmLs3Rr4i7YJi8Z7gFeWhakXM4nEz",
                  "version": "1.28.8",
                  "missed_blocks": 935,
                  "hbd_interest_rate": 1000,
                  "last_confirmed_block_num": 4999992,
                  "account_creation_fee": 9000
                }
              }
            }
          },
          "404": {
            "description": "No such witness"
          }
        }
      }
    },
    "/witnesses/{account-name}/voters": {
      "get": {
        "tags": [
          "Witnesses"
        ],
        "summary": "Get information about the voters for a witness",
        "description": "Get information about the voters voting for a given witness\n\nSQL example      \n* `SELECT * FROM hafbe_endpoints.get_witness_voters('blocktrades',1,2);`\n\nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/witnesses/blocktrades/voters?page-size=2'`\n",
        "operationId": "hafbe_endpoints.get_witness_voters",
        "parameters": [
          {
            "in": "path",
            "name": "account-name",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "witness account name"
          },
          {
            "in": "query",
            "name": "voter-name",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "When provided, only votes associated with this account will be included in the results, \nallowing for targeted analysis of an individual account's voting activity.\n"
          },
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Return page on `page` number, defaults to `1`\n"
          },
          {
            "in": "query",
            "name": "page-size",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 10000
            },
            "description": "Return max `page-size` operations per page, defaults to `100`"
          },
          {
            "in": "query",
            "name": "sort",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.order_by_votes",
              "default": "vests"
            },
            "description": "Sort order:\n\n * `voter` - account name of voter\n\n * `vests` - total voting power = account_vests + proxied_vests of voter\n\n * `account_vests` - direct vests of voter\n\n * `proxied_vests` - proxied vests of voter\n\n * `timestamp` - last time voter voted for the witness\n"
          },
          {
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.sort_direction",
              "default": "desc"
            },
            "description": "Sort order:\n\n * `asc` - Ascending, from A to Z or smallest to largest\n\n * `desc` - Descending, from Z to A or largest to smallest\n"
          }
        ],
        "responses": {
          "200": {
            "description": "The number of voters currently voting for this witness\n\n* Returns `hafbe_backend.witness_voter_history`\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/hafbe_backend.witness_voter_history"
                },
                "example": {
                  "total_votes": 263,
                  "total_pages": 132,
                  "voters": [
                    {
                      "voter_name": "blocktrades",
                      "vests": "13155953611548185",
                      "account_vests": "8172549681941451",
                      "proxied_vests": "4983403929606734",
                      "timestamp": "2016-04-15T02:19:57"
                    },
                    {
                      "voter_name": "dan",
                      "vests": "9928811304950768",
                      "account_vests": "9928811304950768",
                      "proxied_vests": "0",
                      "timestamp": "2016-06-27T12:41:42"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "No such witness"
          }
        }
      }
    },
    "/witnesses/{account-name}/voters/count": {
      "get": {
        "tags": [
          "Witnesses"
        ],
        "summary": "Get the number of voters for a witness",
        "description": "Get the number of voters for a witness\n\nSQL example      \n* `SELECT * FROM hafbe_endpoints.get_witness_voters_num('blocktrades');`\n\nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/witnesses/blocktrades/voters/count'`\n",
        "operationId": "hafbe_endpoints.get_witness_voters_num",
        "parameters": [
          {
            "in": "path",
            "name": "account-name",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The witness account name"
          }
        ],
        "responses": {
          "200": {
            "description": "The number of voters currently voting for this witness\n\n* Returns `INT`\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "integer"
                },
                "example": 263
              }
            }
          },
          "404": {
            "description": "No such witness"
          }
        }
      }
    },
    "/witnesses/{account-name}/votes/history": {
      "get": {
        "tags": [
          "Witnesses"
        ],
        "summary": "Get the history of votes for this witness.",
        "description": "Get information about each vote cast for this witness\n\nSQL example\n* `SELECT * FROM hafbe_endpoints.get_witness_votes_history('blocktrades');`\n\nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/witnesses/blocktrades/votes/history?page-size=2'`\n",
        "operationId": "hafbe_endpoints.get_witness_votes_history",
        "parameters": [
          {
            "in": "path",
            "name": "account-name",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "witness account name"
          },
          {
            "in": "query",
            "name": "voter-name",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "When provided, only votes associated with this account will be included in the results, \nallowing for targeted analysis of an individual account's voting activity.\n"
          },
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Return page on `page` number, defaults to `1`\n"
          },
          {
            "in": "query",
            "name": "page-size",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 10000
            },
            "description": "Return max `page-size` operations per page, defaults to `100`"
          },
          {
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.sort_direction",
              "default": "desc"
            }
          },
          {
            "in": "query",
            "name": "from-block",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Lower limit of the block range, can be represented either by a block-number (integer) or a timestamp (in the format YYYY-MM-DD HH:MI:SS).\n\nThe provided `timestamp` will be converted to a `block-num` by finding the first block \nwhere the block's `created_at` is more than or equal to the given `timestamp` (i.e. `block's created_at >= timestamp`).\n\nThe function will interpret and convert the input based on its format, example input:\n\n* `2016-09-15 19:47:21`\n\n* `5000000`\n"
          },
          {
            "in": "query",
            "name": "to-block",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Similar to the from-block parameter, can either be a block-number (integer) or a timestamp (formatted as YYYY-MM-DD HH:MI:SS). \n\nThe provided `timestamp` will be converted to a `block-num` by finding the first block \nwhere the block's `created_at` is less than or equal to the given `timestamp` (i.e. `block's created_at <= timestamp`).\n\nThe function will convert the value depending on its format, example input:\n\n* `2016-09-15 19:47:21`\n\n* `5000000`\n"
          }
        ],
        "responses": {
          "200": {
            "description": "The number of voters currently voting for this witness\n\n* Returns `hafbe_backend.witness_votes_history`\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/hafbe_backend.witness_votes_history"
                },
                "example": {
                  "total_votes": 263,
                  "total_pages": 132,
                  "votes_history": [
                    {
                      "voter_name": "jeremyfromwi",
                      "approve": true,
                      "vests": "441156952466",
                      "account_vests": "441156952466",
                      "proxied_vests": "0",
                      "timestamp": "2016-09-15T07:07:15"
                    },
                    {
                      "voter_name": "cryptomental",
                      "approve": true,
                      "vests": "686005633844",
                      "account_vests": "686005633844",
                      "proxied_vests": "0",
                      "timestamp": "2016-09-15T07:00:51"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "No such witness"
          }
        }
      }
    },
    "/accounts/{account-name}": {
      "get": {
        "tags": [
          "Accounts"
        ],
        "summary": "Get information about an account including Hive token balances.",
        "description": "Get account's balances and parameters\n\nSQL example\n* `SELECT * FROM hafbe_endpoints.get_account('blocktrades');`\n\nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/accounts/blocktrades'`\n",
        "operationId": "hafbe_endpoints.get_account",
        "parameters": [
          {
            "in": "path",
            "name": "account-name",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Name of the account"
          }
        ],
        "responses": {
          "200": {
            "description": "The account's parameters\n\n* Returns `hafbe_backend.account`\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/hafbe_backend.account"
                },
                "example": {
                  "id": 440,
                  "name": "blocktrades",
                  "can_vote": true,
                  "mined": true,
                  "proxy": "",
                  "recovery_account": "steem",
                  "last_account_recovery": "1970-01-01T00:00:00",
                  "created": "2016-03-30T00:04:36",
                  "reputation": 69,
                  "pending_claimed_accounts": 0,
                  "json_metadata": "",
                  "posting_json_metadata": "",
                  "profile_image": "",
                  "hbd_balance": 77246982,
                  "balance": 29594875,
                  "vesting_shares": "8172549681941451",
                  "vesting_balance": 2720696229,
                  "hbd_saving_balance": 0,
                  "savings_balance": 0,
                  "savings_withdraw_requests": 0,
                  "reward_hbd_balance": 0,
                  "reward_hive_balance": 0,
                  "reward_vesting_balance": "0",
                  "reward_vesting_hive": 0,
                  "posting_rewards": "65916519",
                  "curation_rewards": "196115157",
                  "delegated_vesting_shares": "0",
                  "received_vesting_shares": "0",
                  "proxied_vsf_votes": [
                    "4983403929606734",
                    "0",
                    "0",
                    "0"
                  ],
                  "withdrawn": "804048182205290",
                  "vesting_withdraw_rate": "80404818220529",
                  "to_withdraw": "8362101094935031",
                  "withdraw_routes": 4,
                  "delayed_vests": "0",
                  "witness_votes": [
                    "steempty",
                    "blocktrades",
                    "datasecuritynode",
                    "steemed",
                    "silversteem",
                    "witness.svk",
                    "joseph",
                    "smooth.witness",
                    "gtg"
                  ],
                  "witnesses_voted_for": 9,
                  "ops_count": 219867,
                  "is_witness": true,
                  "hbd_seconds": "73446284422014",
                  "hbd_seconds_last_update": "2016-09-15T19:47:09",
                  "hbd_last_interest_payment": "2016-09-02T14:59:15"
                }
              }
            }
          },
          "404": {
            "description": "No such account in the database"
          }
        }
      }
    },
    "/accounts/{account-name}/authority": {
      "get": {
        "tags": [
          "Accounts"
        ],
        "summary": "Get account's owner, active, posting, memo and witness signing authorities",
        "description": "Get information about account's owner, active, posting, memo and witness signing authorities.\n\nSQL example\n* `SELECT * FROM hafbe_endpoints.get_account_authority('blocktrades');`\n\nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/accounts/blocktrades/authority'` \n",
        "operationId": "hafbe_endpoints.get_account_authority",
        "parameters": [
          {
            "in": "path",
            "name": "account-name",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Name of the account"
          }
        ],
        "responses": {
          "200": {
            "description": "List of account's authorities\n\n* Returns `hafbe_backend.account_authority`\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/hafbe_backend.account_authority"
                },
                "example": {
                  "owner": {
                    "key_auths": [
                      [
                        "STM7WdrxF6iuSiHUB4maoLGXXBKXbqAJ9AZbzACX1MPK2AkuCh23S",
                        1
                      ]
                    ],
                    "account_auths": [],
                    "weight_threshold": 1
                  },
                  "active": {
                    "key_auths": [
                      [
                        "STM5vgGoHBrUuDCspAPYi3dLwSyistyrz61NWkZNUAXAifZJaDLPF",
                        1
                      ]
                    ],
                    "account_auths": [],
                    "weight_threshold": 1
                  },
                  "posting": {
                    "key_auths": [
                      [
                        "STM5SaNVKJgy6ghnkNoMAprTxSDG55zps21Bo8qe1rnHmwAR4LzzC",
                        1
                      ]
                    ],
                    "account_auths": [],
                    "weight_threshold": 1
                  },
                  "memo": "STM7EAUbNf1CdTrMbydPoBTRMG4afXCoAErBJYevhgne6zEP6rVBT",
                  "witness_signing": "STM4vmVc3rErkueyWNddyGfmjmLs3Rr4i7YJi8Z7gFeWhakXM4nEz"
                }
              }
            }
          },
          "404": {
            "description": "No such account in the database"
          }
        }
      }
    },
    "/accounts/{account-name}/proxy-power": {
      "get": {
        "tags": [
          "Accounts"
        ],
        "summary": "Get delegators and total vested power they contribute via witness-proxy",
        "description": "Lists every account that has set **{account-name}** as its witness proxy,\nthe date the proxy was set, and the total vested power contributed\n(own vesting_shares plus sum of proxied vesting shares levels 1\u20134 and decreased by delayed vests).\n\nSQL example:\n* `SELECT * FROM hafbe_endpoints.get_account_proxies_power('gtg', 1);`\n\nREST call example:\n* `GET 'https://your.hostname.com/hafbe-api/accounts/gtg/proxy-power?page=1'`\n",
        "operationId": "hafbe_endpoints.get_account_proxies_power",
        "parameters": [
          {
            "in": "path",
            "name": "account-name",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Name of the proxy account"
          },
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            },
            "description": "1-based page number (1000 rows per page)"
          },
          {
            "in": "query",
            "name": "sort",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.order_by_proxy",
              "default": "proxy_date"
            },
            "description": "Sort order:\n\n * `account` - delegator account name\n\n * `proxy_date` - block in which the proxy was set\n\n * `proxied_vests` - effective vested amount contributed via proxy\n"
          },
          {
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.sort_direction",
              "default": "desc"
            },
            "description": "Sort direction:\n\n * `asc` - Ascending, from A to Z or smallest to largest\n\n * `desc` - Descending, from Z to A or largest to smallest\n"
          }
        ],
        "responses": {
          "200": {
            "description": "Array of delegators and their total vested power",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/hafbe_backend.array_of_proxy_power"
                },
                "exaxmple": [
                  {
                    "account": "geoffrey",
                    "proxied_vests": 30847126195440,
                    "proxy_date": "2016-08-09T06:52:03"
                  }
                ]
              }
            }
          },
          "404": {
            "description": "No such account in the database"
          }
        }
      }
    },
    "/accounts/{account-name}/comment-permlinks": {
      "get": {
        "tags": [
          "Accounts"
        ],
        "summary": "Get comment permlinks for an account.",
        "description": "List comment permlinks of root posts or comments for an account.\n\nSQL example\n* `SELECT * FROM hafbe_endpoints.get_comment_permlinks('blocktrades','post',1,2,'4000000','4800000');`\n\nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/accounts/blocktrades/comment-permlinks?comment-type=post&page-size=2&from-block=4000000&to-block=4800000'`\n",
        "operationId": "hafbe_endpoints.get_comment_permlinks",
        "parameters": [
          {
            "in": "path",
            "name": "account-name",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Account to get operations for"
          },
          {
            "in": "query",
            "name": "comment-type",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.comment_type",
              "default": "all"
            },
            "description": "Sort order:\n\n * `post`    - permlinks related to root posts\n\n * `comment` - permlinks related to comments \n\n * `all`     - both, posts and comments\n"
          },
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Return page on `page` number, defaults to `1`"
          },
          {
            "in": "query",
            "name": "page-size",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 100
            },
            "description": "Return max `page-size` operations per page, defaults to `100`"
          },
          {
            "in": "query",
            "name": "from-block",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Lower limit of the block range, can be represented either by a block-number (integer) or a timestamp (in the format YYYY-MM-DD HH:MI:SS).\n\nThe provided `timestamp` will be converted to a `block-num` by finding the first block \nwhere the block's `created_at` is more than or equal to the given `timestamp` (i.e. `block's created_at >= timestamp`).\n\nThe function will interpret and convert the input based on its format, example input:\n\n* `2016-09-15 19:47:21`\n\n* `5000000`\n"
          },
          {
            "in": "query",
            "name": "to-block",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Similar to the from-block parameter, can either be a block-number (integer) or a timestamp (formatted as YYYY-MM-DD HH:MI:SS). \n\nThe provided `timestamp` will be converted to a `block-num` by finding the first block \nwhere the block's `created_at` is less than or equal to the given `timestamp` (i.e. `block's created_at <= timestamp`).\n\nThe function will convert the value depending on its format, example input:\n\n* `2016-09-15 19:47:21`\n\n* `5000000`\n"
          }
        ],
        "responses": {
          "200": {
            "description": "Result contains total number of operations,\ntotal pages, and the list of operations.\n\n* Returns `hafbe_backend.permlink_history`\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/hafbe_backend.permlink_history"
                },
                "example": {
                  "total_permlinks": 3,
                  "total_pages": 2,
                  "block_range": {
                    "from": 4000000,
                    "to": 4800000
                  },
                  "permlinks_result": [
                    {
                      "permlink": "witness-report-for-blocktrades-for-last-week-of-august",
                      "block": 4575065,
                      "trx_id": "d35590b9690ee8aa4b572901d62bc6263953346a",
                      "timestamp": "2016-09-01T00:18:51",
                      "operation_id": "19649754552074241"
                    },
                    {
                      "permlink": "blocktrades-witness-report-for-3rd-week-of-august",
                      "block": 4228346,
                      "trx_id": "bdcd754eb66f18eac11322310ae7ece1e951c08c",
                      "timestamp": "2016-08-19T21:27:00",
                      "operation_id": "18160607786173953"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "No such account in the database"
          }
        }
      }
    },
    "/accounts/{account-name}/operations/comments/{permlink}": {
      "get": {
        "tags": [
          "Accounts"
        ],
        "summary": "Get comment-related operations for an author-permlink.",
        "description": "List operations related to account. Optionally filtered by permlink,\ntime/blockrange, and specific comment-related operations.\n\nSQL example\n* `SELECT * FROM hafbe_endpoints.get_comment_operations('blocktrades','blocktrades-witness-report-for-3rd-week-of-august','0',1,3);`\n\nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/accounts/blocktrades/operations/comments/blocktrades-witness-report-for-3rd-week-of-august?page-size=3&operation-types=0'`\n",
        "operationId": "hafbe_endpoints.get_comment_operations",
        "parameters": [
          {
            "in": "path",
            "name": "account-name",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Account to get operations for"
          },
          {
            "in": "path",
            "name": "permlink",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Unique post identifier containing post's title and generated number\n"
          },
          {
            "in": "query",
            "name": "operation-types",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "List of operation types to include. If NULL, all comment operation types will be included.\ncomment-related operation type ids: `0, 1, 17, 19, 51, 52, 53, 61, 63, 72, 73`\n"
          },
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Return page on `page` number, defaults to `1`"
          },
          {
            "in": "query",
            "name": "page-size",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 10000
            },
            "description": "Return max `page-size` operations per page, defaults to `100`"
          },
          {
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.sort_direction",
              "default": "asc"
            },
            "description": "Sort order:\n\n * `asc` - Ascending, from A to Z or smallest to largest\n\n * `desc` - Descending, from Z to A or largest to smallest\n"
          },
          {
            "in": "query",
            "name": "data-size-limit",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 200000
            },
            "description": "If the operation length exceeds the `data-size-limit`,\nthe operation body is replaced with a placeholder (defaults to `200000`).\n"
          }
        ],
        "responses": {
          "200": {
            "description": "Result contains total number of operations,\ntotal pages, and the list of operations.\n\n* Returns `hafbe_backend.operation_history `\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/hafbe_backend.operation_history"
                },
                "example": {
                  "total_operations": 350,
                  "total_pages": 117,
                  "operations_result": [
                    {
                      "op": {
                        "type": "vote_operation",
                        "value": {
                          "voter": "blocktrades",
                          "author": "blocktrades",
                          "weight": 10000,
                          "permlink": "blocktrades-witness-report-for-3rd-week-of-august"
                        }
                      },
                      "block": 4228228,
                      "trx_id": "2bbeb7513e49cb169d4fe446ff980f2102f7210a",
                      "op_pos": 1,
                      "op_type_id": 0,
                      "timestamp": "2016-08-19T21:21:03",
                      "virtual_op": false,
                      "operation_id": "18160100980032256",
                      "trx_in_block": 1
                    },
                    {
                      "op": {
                        "type": "vote_operation",
                        "value": {
                          "voter": "murh",
                          "author": "blocktrades",
                          "weight": 3301,
                          "permlink": "blocktrades-witness-report-for-3rd-week-of-august"
                        }
                      },
                      "block": 4228239,
                      "trx_id": "e06bc7ad9c51a974ee2bd673e8fa4b4f7018bc18",
                      "op_pos": 0,
                      "op_type_id": 0,
                      "timestamp": "2016-08-19T21:21:36",
                      "virtual_op": false,
                      "operation_id": "18160148224672256",
                      "trx_in_block": 1
                    },
                    {
                      "op": {
                        "type": "vote_operation",
                        "value": {
                          "voter": "weenis",
                          "author": "blocktrades",
                          "weight": 10000,
                          "permlink": "blocktrades-witness-report-for-3rd-week-of-august"
                        }
                      },
                      "block": 4228240,
                      "trx_id": "c5a07b2a069db3ac9faffe0c5a6c6296ef3e78c5",
                      "op_pos": 0,
                      "op_type_id": 0,
                      "timestamp": "2016-08-19T21:21:39",
                      "virtual_op": false,
                      "operation_id": "18160152519641600",
                      "trx_in_block": 5
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "No such account in the database"
          }
        }
      }
    },
    "/total_wallet_addresses": {
      "get": {
        "tags": [
          "Accounts"
        ],
        "summary": "Total wallet counts over time",
        "description": "Time-series of new wallets (accounts) created per day, month or year,\nplus the cumulative total wallet count on the chain at the end of each period.\n\nUseful for live wallet-count tickers and chain-growth charts.\n\nThe latest period (today's partial day, current month, current year) is\nalways included; its `date` is capped at the current timestamp rather than\nthe period-end boundary.\n\nSQL example\n* `SELECT * FROM hafbe_endpoints.get_total_wallet_addresses();`\n\nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/total_wallet_addresses'`\n",
        "operationId": "hafbe_endpoints.get_total_wallet_addresses",
        "parameters": [
          {
            "in": "query",
            "name": "granularity",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.granularity",
              "default": "yearly"
            },
            "description": "granularity types:\n\n* daily\n\n* monthly\n\n* yearly\n"
          },
          {
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.sort_direction",
              "default": "desc"
            },
            "description": "Sort order:\n\n * `asc` - Ascending, from oldest to newest\n\n * `desc` - Descending, from newest to oldest\n"
          },
          {
            "in": "query",
            "name": "from-block",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Lower limit of the block range: block-number (integer) or timestamp (YYYY-MM-DD HH:MI:SS).\n\n* `2016-09-15 19:47:21`\n\n* `5000000`\n"
          },
          {
            "in": "query",
            "name": "to-block",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Upper limit of the block range: block-number (integer) or timestamp (YYYY-MM-DD HH:MI:SS).\n\n* `2016-09-15 19:47:21`\n\n* `5000000`\n"
          }
        ],
        "responses": {
          "200": {
            "description": "Wallet-count statistics over time\n\n* Returns array of `hafbe_backend.wallet_stats`\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/hafbe_backend.array_of_wallet_stats"
                },
                "example": [
                  {
                    "date": "2017-01-01T00:00:00",
                    "new_wallets": 12345,
                    "total_wallets": 234567
                  }
                ]
              }
            }
          },
          "400": {
            "description": "Invalid block range or parameter"
          }
        }
      }
    },
    "/block-search": {
      "get": {
        "tags": [
          "Block-search"
        ],
        "summary": "List block stats that match operation type filter, account name, and time/block range.",
        "description": "List the block stats that match given operation type filter,\naccount name and time/block range in specified order\n\nSQL example\n* `SELECT * FROM hafbe_endpoints.get_block_by_op(NULL,NULL,NULL,5);`\n\nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/block-search?page-size=5'`\n",
        "operationId": "hafbe_endpoints.get_block_by_op",
        "parameters": [
          {
            "in": "query",
            "name": "operation-types",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "List of operations: if the parameter is NULL, all operations will be included.\nexample: `18,12`\n"
          },
          {
            "in": "query",
            "name": "account-name",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Filter operations by the account that created them."
          },
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "type": "integer",
              "default": null
            },
            "description": "Return page on `page` number, defaults to `NULL`"
          },
          {
            "in": "query",
            "name": "page-size",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 1000
            },
            "description": "Return max `page-size` operations per page, defaults to `100`"
          },
          {
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.sort_direction",
              "default": "desc"
            },
            "description": "Sort order:\n\n * `asc` - Ascending, from A to Z or smallest to largest\n\n * `desc` - Descending, from Z to A or largest to smallest\n"
          },
          {
            "in": "query",
            "name": "from-block",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Lower limit of the block range, can be represented either by a block-number (integer) or a timestamp (in the format YYYY-MM-DD HH:MI:SS).\n\nThe provided `timestamp` will be converted to a `block-num` by finding the first block \nwhere the block's `created_at` is more than or equal to the given `timestamp` (i.e. `block's created_at >= timestamp`).\n\nThe function will interpret and convert the input based on its format, example input:\n\n* `2016-09-15 19:47:21`\n\n* `5000000`\n"
          },
          {
            "in": "query",
            "name": "to-block",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Similar to the from-block parameter, can either be a block-number (integer) or a timestamp (formatted as YYYY-MM-DD HH:MI:SS). \n\nThe provided `timestamp` will be converted to a `block-num` by finding the first block \nwhere the block's `created_at` is less than or equal to the given `timestamp` (i.e. `block's created_at <= timestamp`).\n\nThe function will convert the value depending on its format, example input:\n\n* `2016-09-15 19:47:21`\n\n* `5000000`\n"
          },
          {
            "in": "query",
            "name": "path-filter",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "x-sql-datatype": "TEXT[]",
              "default": null
            },
            "description": "A parameter specifying the desired value in operation body,\nexample: `value.creator=alpha`\n"
          }
        ],
        "responses": {
          "200": {
            "description": "Block number with filtered operations\n\n* Returns `hafbe_backend.block_history`\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/hafbe_backend.block_history"
                },
                "example": {
                  "total_blocks": 5000000,
                  "total_pages": 1000000,
                  "block_range": {
                    "from": 1,
                    "to": 5000000
                  },
                  "blocks_result": [
                    {
                      "block_num": 5000000,
                      "created_at": "2016-09-15T19:47:21",
                      "producer_account": "ihashfury",
                      "producer_reward": "3003845513",
                      "trx_count": 2,
                      "hash": "004c4b40245ffb07380a393fb2b3d841b76cdaec",
                      "prev": "004c4b3fc6a8735b4ab5433d59f4526e4a042644",
                      "operations": [
                        {
                          "op_type_id": 5,
                          "op_count": 1
                        },
                        {
                          "op_type_id": 9,
                          "op_count": 1
                        },
                        {
                          "op_type_id": 64,
                          "op_count": 1
                        },
                        {
                          "op_type_id": 80,
                          "op_count": 1
                        }
                      ]
                    },
                    {
                      "block_num": 4999999,
                      "created_at": "2016-09-15T19:47:18",
                      "producer_account": "smooth.witness",
                      "producer_reward": "3003846056",
                      "trx_count": 4,
                      "hash": "004c4b3fc6a8735b4ab5433d59f4526e4a042644",
                      "prev": "004c4b3e03ea2eac2494790786bfb9e41a8669d9",
                      "operations": [
                        {
                          "op_type_id": 0,
                          "op_count": 1
                        },
                        {
                          "op_type_id": 6,
                          "op_count": 2
                        },
                        {
                          "op_type_id": 30,
                          "op_count": 1
                        },
                        {
                          "op_type_id": 64,
                          "op_count": 1
                        },
                        {
                          "op_type_id": 72,
                          "op_count": 1
                        },
                        {
                          "op_type_id": 78,
                          "op_count": 1
                        },
                        {
                          "op_type_id": 85,
                          "op_count": 2
                        }
                      ]
                    },
                    {
                      "block_num": 4999998,
                      "created_at": "2016-09-15T19:47:15",
                      "producer_account": "steemed",
                      "producer_reward": "3003846904",
                      "trx_count": 2,
                      "hash": "004c4b3e03ea2eac2494790786bfb9e41a8669d9",
                      "prev": "004c4b3d6c34ebe3eb75dad04ce0a13b5f8a08cf",
                      "operations": [
                        {
                          "op_type_id": 0,
                          "op_count": 1
                        },
                        {
                          "op_type_id": 1,
                          "op_count": 1
                        },
                        {
                          "op_type_id": 64,
                          "op_count": 1
                        },
                        {
                          "op_type_id": 72,
                          "op_count": 1
                        }
                      ]
                    },
                    {
                      "block_num": 4999997,
                      "created_at": "2016-09-15T19:47:12",
                      "producer_account": "clayop",
                      "producer_reward": "3003847447",
                      "trx_count": 4,
                      "hash": "004c4b3d6c34ebe3eb75dad04ce0a13b5f8a08cf",
                      "prev": "004c4b3c51ee947feceeb1812702816114aea6e4",
                      "operations": [
                        {
                          "op_type_id": 0,
                          "op_count": 2
                        },
                        {
                          "op_type_id": 2,
                          "op_count": 1
                        },
                        {
                          "op_type_id": 5,
                          "op_count": 1
                        },
                        {
                          "op_type_id": 61,
                          "op_count": 1
                        },
                        {
                          "op_type_id": 64,
                          "op_count": 1
                        },
                        {
                          "op_type_id": 72,
                          "op_count": 2
                        }
                      ]
                    },
                    {
                      "block_num": 4999996,
                      "created_at": "2016-09-15T19:47:09",
                      "producer_account": "riverhead",
                      "producer_reward": "3003847991",
                      "trx_count": 2,
                      "hash": "004c4b3c51ee947feceeb1812702816114aea6e4",
                      "prev": "004c4b3bd268694ea02f24de50c50c9e7a831e60",
                      "operations": [
                        {
                          "op_type_id": 6,
                          "op_count": 2
                        },
                        {
                          "op_type_id": 64,
                          "op_count": 1
                        },
                        {
                          "op_type_id": 85,
                          "op_count": 2
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "No operations in database"
          }
        }
      }
    },
    "/proposals": {
      "get": {
        "tags": [
          "Proposals"
        ],
        "summary": "List current proposals",
        "description": "List proposals with paid amounts and stake-weighted vote totals.\nSort by `by_total_votes` uses governance VESTS aggregated across direct\n(non-proxied) approvers, matching the hived `list_proposals` ranking.\n\nSQL example\n* `SELECT * FROM hafbe_endpoints.get_proposals();`\n\nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/proposals?status=votable&sort=by_total_votes'`\n",
        "operationId": "hafbe_endpoints.get_proposals",
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Return page on `page` number, defaults to `1`\n"
          },
          {
            "in": "query",
            "name": "page-size",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 1000
            },
            "description": "Return max `page-size` proposals per page, defaults to `100`"
          },
          {
            "in": "query",
            "name": "sort",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.order_by_proposal",
              "default": "by_total_votes"
            },
            "description": "Sort key:\n\n * `by_creator` - sort alphabetically by creator account\n\n * `by_start_date` - sort by the proposal's start_date\n\n * `by_end_date` - sort by the proposal's end_date\n\n * `by_total_votes` - sort by stake-weighted approval (VESTS of direct, non-proxied voters)\n"
          },
          {
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.sort_direction",
              "default": "desc"
            },
            "description": "Sort order:\n\n * `asc` - Ascending, from smallest to largest\n\n * `desc` - Descending, from largest to smallest\n"
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.proposal_status",
              "default": "all"
            },
            "description": "Proposal status filter (removed proposals are never returned):\n\n * `active` - currently payable (`start_date <= now <= end_date`)\n\n * `inactive` - not yet started (`now < start_date`)\n\n * `expired` - finished (`now > end_date`)\n\n * `votable` - active OR inactive (`now <= end_date`)\n\n * `all` - any non-removed status\n"
          },
          {
            "in": "query",
            "name": "creator",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Filter proposals by creator account name"
          },
          {
            "in": "query",
            "name": "proposal-ids",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Comma-separated list of proposal IDs to filter by (e.g. `1,2,3`)"
          },
          {
            "in": "query",
            "name": "voter",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Filter to proposals currently approved by this voter account"
          },
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Exact-match filter on proposal subject"
          }
        ],
        "responses": {
          "200": {
            "description": "The list of proposals\n\n* Returns `hafbe_backend.proposals_return`\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/hafbe_backend.proposals_return"
                }
              }
            }
          }
        }
      }
    },
    "/proposals/votes": {
      "get": {
        "tags": [
          "Proposals"
        ],
        "summary": "List current active proposal votes",
        "description": "List currently active approvals across all proposals. The status filter\napplies to the joined proposal, not the vote. `voter_vests` is reported\nas 0 for voters who currently have a governance proxy set (their stake\ncounts through the proxy, not through their direct vote).\n\nSQL example\n* `SELECT * FROM hafbe_endpoints.get_proposal_votes();`\n\nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/proposals/votes?sort=by_proposal_voter&status=votable'`\n",
        "operationId": "hafbe_endpoints.get_proposal_votes",
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Return page on `page` number, defaults to `1`\n"
          },
          {
            "in": "query",
            "name": "page-size",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 1000
            },
            "description": "Return max `page-size` votes per page, defaults to `100`"
          },
          {
            "in": "query",
            "name": "sort",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.order_by_proposal_vote",
              "default": "by_proposal_voter"
            },
            "description": "Sort key:\n\n * `by_voter_proposal` - sort by (voter, then proposal_id)\n\n * `by_proposal_voter` - sort by (proposal_id, then voter)\n"
          },
          {
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.sort_direction",
              "default": "asc"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.proposal_status",
              "default": "all"
            },
            "description": "Filter votes by the joined proposal's status (removed proposals are never returned)."
          },
          {
            "in": "query",
            "name": "proposal-id",
            "required": false,
            "schema": {
              "type": "integer",
              "default": null
            },
            "description": "Filter votes for a specific proposal ID"
          },
          {
            "in": "query",
            "name": "voter",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Filter votes cast by a specific voter account name"
          }
        ],
        "responses": {
          "200": {
            "description": "The list of active proposal votes\n\n* Returns `hafbe_backend.proposal_votes_return`\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/hafbe_backend.proposal_votes_return"
                }
              }
            }
          }
        }
      }
    },
    "/proposals/{proposal-id}/votes/history": {
      "get": {
        "tags": [
          "Proposals"
        ],
        "summary": "Get the history of votes cast for this proposal.",
        "description": "Get information about each vote cast for this proposal, including\napprovals and later withdrawals of approval.\n\nEach record also carries the voter's governance stake. These vest figures are the\nvoter's CURRENT stake, NOT the stake they held at the block of the historical vote \u2014\nno point-in-time vesting snapshot is stored. `voter_vests` is 0 when the voter\ncurrently has a governance proxy set (their stake counts through the proxy, matching\n`GET /proposals/votes` and hived's proposal totals); their own stake is still\nreported in `direct_vests`.\n\nSQL example\n* `SELECT * FROM hafbe_endpoints.get_proposal_votes_history(1);`\n\nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/proposals/1/votes/history?page-size=2'`\n",
        "operationId": "hafbe_endpoints.get_proposal_votes_history",
        "parameters": [
          {
            "in": "path",
            "name": "proposal-id",
            "required": true,
            "schema": {
              "type": "integer"
            },
            "description": "proposal id"
          },
          {
            "in": "query",
            "name": "voter-name",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "When provided, only votes associated with this account will be included in the results,\nallowing for targeted analysis of an individual account's voting activity.\n"
          },
          {
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            },
            "description": "Return page on `page` number, defaults to `1`\n"
          },
          {
            "in": "query",
            "name": "page-size",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "minimum": 1,
              "maximum": 10000
            },
            "description": "Return max `page-size` votes per page, defaults to `100`"
          },
          {
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.sort_direction",
              "default": "desc"
            }
          },
          {
            "in": "query",
            "name": "from-block",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Lower limit of the block range, can be represented either by a block-number (integer) or a timestamp (in the format YYYY-MM-DD HH:MI:SS).\n\nThe provided `timestamp` will be converted to a `block-num` by finding the first block\nwhere the block's `created_at` is more than or equal to the given `timestamp` (i.e. `block's created_at >= timestamp`).\n\nThe function will interpret and convert the input based on its format, example input:\n\n* `2016-09-15 19:47:21`\n\n* `5000000`\n"
          },
          {
            "in": "query",
            "name": "to-block",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Similar to the from-block parameter, can either be a block-number (integer) or a timestamp (formatted as YYYY-MM-DD HH:MI:SS).\n\nThe provided `timestamp` will be converted to a `block-num` by finding the first block\nwhere the block's `created_at` is less than or equal to the given `timestamp` (i.e. `block's created_at <= timestamp`).\n\nThe function will convert the value depending on its format, example input:\n\n* `2016-09-15 19:47:21`\n\n* `5000000`\n"
          }
        ],
        "responses": {
          "200": {
            "description": "The history of votes cast for this proposal\n\n* Returns `hafbe_backend.proposal_votes_history`\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/hafbe_backend.proposal_votes_history"
                },
                "example": {
                  "total_votes": 12,
                  "total_pages": 6,
                  "votes_history": [
                    {
                      "voter_name": "alice",
                      "approve": true,
                      "voter_vests": "8322015717445",
                      "direct_vests": "8322015717445",
                      "proxied_vests": "0",
                      "proxy": "",
                      "timestamp": "2019-11-05T10:12:09"
                    },
                    {
                      "voter_name": "bob",
                      "approve": false,
                      "voter_vests": "0",
                      "direct_vests": "1245007811003",
                      "proxied_vests": "0",
                      "proxy": "alice",
                      "timestamp": "2019-11-04T08:43:21"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/transaction-statistics": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "Aggregated transaction statistics",
        "description": "History of amount of transactions per day, month or year.\n\nSQL example\n* `SELECT * FROM hafbe_endpoints.get_transaction_statistics();`\n\nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/transaction-statistics'`\n",
        "operationId": "hafbe_endpoints.get_transaction_statistics",
        "parameters": [
          {
            "in": "query",
            "name": "granularity",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.granularity",
              "default": "yearly"
            },
            "description": "granularity types:\n\n* daily\n\n* monthly\n\n* yearly\n"
          },
          {
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.sort_direction",
              "default": "desc"
            },
            "description": "Sort order:\n\n * `asc` - Ascending, from oldest to newest \n\n * `desc` - Descending, from newest to oldest \n"
          },
          {
            "in": "query",
            "name": "from-block",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Lower limit of the block range, can be represented either by a block-number (integer) or a timestamp (in the format YYYY-MM-DD HH:MI:SS).\n\nThe provided `timestamp` will be converted to a `block-num` by finding the first block \nwhere the block's `created_at` is more than or equal to the given `timestamp` (i.e. `block's created_at >= timestamp`).\n\nThe function will interpret and convert the input based on its format, example input:\n\n* `2016-09-15 19:47:21`\n\n* `5000000`\n"
          },
          {
            "in": "query",
            "name": "to-block",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Similar to the from-block parameter, can either be a block-number (integer) or a timestamp (formatted as YYYY-MM-DD HH:MI:SS). \n\nThe provided `timestamp` will be converted to a `block-num` by finding the first block \nwhere the block's `created_at` is less than or equal to the given `timestamp` (i.e. `block's created_at <= timestamp`).\n\nThe function will convert the value depending on its format, example input:\n\n* `2016-09-15 19:47:21`\n\n* `5000000`\n"
          }
        ],
        "responses": {
          "200": {
            "description": "Every period in the requested range, as a flat array.\n\n* Returns array of `hafbe_backend.transaction_stats`\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/hafbe_backend.array_of_transaction_stats"
                },
                "example": [
                  {
                    "date": "2017-01-01T00:00:00",
                    "trx_count": 6961192,
                    "avg_trx": 1,
                    "min_trx": 0,
                    "max_trx": 89,
                    "last_block_num": 5000000
                  }
                ]
              }
            }
          }
        }
      }
    },
    "/operation-type-statistics": {
      "get": {
        "tags": [
          "Transactions"
        ],
        "summary": "Aggregated per-op-type operation counts (with transaction totals)",
        "description": "For each period in the requested block range, returns:\n\n* `total_transactions` \u2014 total transactions in the period (from `transaction_stats_by_day`/`_by_month`)\n* `total_operations`   \u2014 total operations in the period (sum of `operations[].op_count`)\n* `operations`         \u2014 per-op-type breakdown (`op_type_id`, `op_count`)\n* `last_block_num`     \u2014 last block included in the period\n\nPeriods with no data still appear (empty `operations`, totals = 0).\n\nSQL example\n* `SELECT * FROM hafbe_endpoints.get_operation_type_statistics();`\n\nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/operation-type-statistics'`\n",
        "operationId": "hafbe_endpoints.get_operation_type_statistics",
        "parameters": [
          {
            "in": "query",
            "name": "granularity",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.granularity",
              "default": "yearly"
            },
            "description": "Period rollup granularity:\n\n* `daily`\n\n* `monthly`\n\n* `yearly`\n"
          },
          {
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.sort_direction",
              "default": "desc"
            },
            "description": "Sort order:\n\n* `asc`  - oldest first\n\n* `desc` - newest first\n"
          },
          {
            "in": "query",
            "name": "from-block",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Lower bound of the block range. Either a block-number (integer) or a timestamp (`YYYY-MM-DD HH:MI:SS`).\n\nWhen a `timestamp` is given, it is converted to the first block whose `created_at >= timestamp`.\n\nWhen omitted at `daily` granularity, the range defaults to the most recent **1 year**\ninstead of the whole chain -- an unbounded daily histogram is ~3,750 periods / ~6.6 MB\nand trips client timeouts. An explicitly supplied `from-block` is always honoured in\nfull, at every granularity, so a chart always receives every period of the range it\nasked for. `monthly` and `yearly` are never defaulted.\n\nThe response carries no signal that this default was applied -- it is a flat array\nwith no total count and no echoed bounds. A client that needs to know the window it\nactually got should read the first and last `date`, or pass `from-block` explicitly.\n"
          },
          {
            "in": "query",
            "name": "to-block",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Upper bound of the block range. Same format as `from-block`.\n\nWhen a `timestamp` is given, it is converted to the last block whose `created_at <= timestamp`.\n"
          },
          {
            "in": "query",
            "name": "op-types",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Comma-separated list of `op_type_id` values to include (e.g. `0,1,18`).\nWhen omitted, every operation type that occurs in the period is returned.\n\nNote: when this filter is set, `total_operations` reflects the sum of the\nfiltered op types only. `total_transactions` is always the unfiltered\nperiod total (transactions, not operations, so a filter on op types\ndoes not apply to it).\n"
          }
        ],
        "responses": {
          "200": {
            "description": "Every period in the requested range, as a flat array, each with its\noperation-type histogram and transaction totals.\n\n* Returns array of `hafbe_backend.operation_type_stats`\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/hafbe_backend.array_of_operation_type_stats"
                },
                "example": [
                  {
                    "date": "2017-01-02T00:00:00",
                    "total_transactions": 412000,
                    "total_operations": 365000,
                    "operations": [
                      {
                        "op_type_id": 0,
                        "op_count": 98000
                      },
                      {
                        "op_type_id": 1,
                        "op_count": 45000
                      },
                      {
                        "op_type_id": 18,
                        "op_count": 210000
                      }
                    ],
                    "last_block_num": 5000000
                  }
                ]
              }
            }
          }
        }
      }
    },
    "/hbd/status": {
      "get": {
        "tags": [
          "HBD"
        ],
        "summary": "HBD supply and interest rate history",
        "description": "Returns the HBD state at the last processed block of each UTC period.\nUses the existing transaction statistics to select blocks. Weekly periods start on Monday.\nRange boundaries select whole periods, as in transaction statistics.\nPeriods without blocks retain the last available state.\n\nThe debt ratio uses the provisional formula from issue 147 while its definition is clarified.\n\nSQL example\n* `SELECT * FROM hafbe_endpoints.get_hbd_status();`\n\nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/hbd/status'`\n",
        "operationId": "hafbe_endpoints.get_hbd_status",
        "parameters": [
          {
            "in": "query",
            "name": "granularity",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.hbd_granularity",
              "default": "yearly"
            },
            "description": "Period size; daily, weekly, monthly or yearly."
          },
          {
            "in": "query",
            "name": "direction",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/hafbe_backend.sort_direction",
              "default": "desc"
            },
            "description": "Sort periods from oldest to newest (asc) or newest to oldest (desc)."
          },
          {
            "in": "query",
            "name": "from-block",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Lower block boundary, supplied as a block number or timestamp, using the shared HAF block-range conversion. The containing calendar period is included in full. Omitted or null means the beginning of the processed history."
          },
          {
            "in": "query",
            "name": "to-block",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Upper block boundary, supplied as a block number or timestamp, using the shared HAF block-range conversion. The containing calendar period is included in full, up to the processed application head. Omitted or null means the processed head."
          }
        ],
        "responses": {
          "200": {
            "description": "All periods in the requested range as a flat array, without pagination.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/hafbe_backend.array_of_hbd_status"
                }
              }
            }
          },
          "400": {
            "description": "Invalid granularity, direction or block range."
          }
        }
      }
    },
    "/version": {
      "get": {
        "tags": [
          "Other"
        ],
        "summary": "Get Haf_block_explorer's version",
        "description": "Get haf_block_explorer's last commit hash (versions set by by hash value).\n\nSQL example\n* `SELECT * FROM hafbe_endpoints.get_hafbe_version();`\n\nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/version'`\n",
        "operationId": "hafbe_endpoints.get_hafbe_version",
        "responses": {
          "200": {
            "description": "Haf_block_explorer version\n\n* Returns `TEXT`\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                },
                "example": "c2fed8958584511ef1a66dab3dbac8c40f3518f0"
              }
            }
          },
          "404": {
            "description": "App not installed"
          }
        }
      }
    },
    "/last-synced-block": {
      "get": {
        "tags": [
          "Other"
        ],
        "summary": "Get last block number synced by haf_block_explorer (deprecated)",
        "deprecated": true,
        "description": "**Deprecated** \u2014 superseded by `/sync-status`, which returns the block\nnumber together with its timestamp (enabling single-call staleness\nchecks) and accounts for all of the app's HAF contexts. This endpoint\nremains for backward compatibility.\n\nGet the block number of the last block synced by haf_block_explorer.\n\nSQL example\n* `SELECT * FROM hafbe_endpoints.get_hafbe_last_synced_block();`\n\nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/last-synced-block'`\n",
        "operationId": "hafbe_endpoints.get_hafbe_last_synced_block",
        "responses": {
          "200": {
            "description": "Last synced block by Haf_block_explorer\n\n* Returns `INT`\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "integer"
                },
                "example": 5000000
              }
            }
          },
          "404": {
            "description": "No blocks synced"
          }
        }
      }
    },
    "/sync-status": {
      "get": {
        "tags": [
          "Other"
        ],
        "summary": "Get haf_block_explorer's sync status",
        "description": "Get the last block fully processed by haf_block_explorer as an object\ncontaining both the block number and its timestamp (UTC). This is the\nuniform HAF-app sync/health endpoint: the timestamp lets a consumer\ncompute staleness with a single call (`age = now() - last_block_time`)\nwithout needing a separate head-block reference. Supersedes the\ndeprecated `/last-synced-block`.\n\nhaf_block_explorer installs multiple HAF contexts (its own plus the\nbalance tracker and reputation tracker sub-apps); the reported block is\nthe least current block across those contexts, i.e. the lagging\ncontext, since that is what bounds the freshness of the API's answers.\n\nSQL example\n* `SELECT * FROM hafbe_endpoints.get_hafbe_sync_status();`\n\nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/sync-status'`\n",
        "operationId": "hafbe_endpoints.get_hafbe_sync_status",
        "responses": {
          "200": {
            "description": "Last block processed by haf_block_explorer and its timestamp.\n`last_block_time` is null if no block has been processed yet.\nWhile the HAF instance is still in massive sync (indexes not yet\nbuilt) the call fails fast with an error rather than executing an\nunindexed lookup.\n\n* Returns `JSON`\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "x-sql-datatype": "JSON",
                  "properties": {
                    "last_block_num": {
                      "type": "integer",
                      "description": "least block number processed across the app's HAF contexts"
                    },
                    "last_block_time": {
                      "type": "string",
                      "format": "date-time",
                      "description": "UTC timestamp of that block"
                    }
                  }
                },
                "example": {
                  "last_block_num": 5000000,
                  "last_block_time": "2016-09-15T19:47:21"
                }
              }
            }
          }
        }
      }
    },
    "/input-type/{input-value}": {
      "get": {
        "tags": [
          "Other"
        ],
        "summary": "Determines object type of input-value.",
        "description": "Determines whether the entered value is a block,\nblock hash, transaction hash, or account name.\nThis method is very specific to block explorer UIs.\n\nSQL example\n* `SELECT * FROM hafbe_endpoints.get_input_type('blocktrades');`\n      \nREST call example\n* `GET 'https://your.hostname.com/hafbe-api/input-type/blocktrades'`\n",
        "operationId": "hafbe_endpoints.get_input_type",
        "parameters": [
          {
            "in": "path",
            "name": "input-value",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Object type to be identified."
          }
        ],
        "responses": {
          "200": {
            "description": "Result contains total operations number,\ntotal pages and the list of operations\n\n* Returns `hafbe_backend.input_type_return `\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/hafbe_backend.input_type_return"
                },
                "example": {
                  "input_type": "account_name",
                  "input_value": [
                    "blocktrades"
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Input is not recognized"
          }
        }
      }
    },
    "/operation-type-counts": {
      "get": {
        "tags": [
          "Other"
        ],
        "summary": "Returns histogram of operation types in blocks.",
        "description": "Lists the counts of operations in result-limit blocks along with their creators. \nIf block-num is not specified, the result includes the counts of operations in the most recent blocks.\n\n\nSQL example\n* `SELECT * FROM hafbe_endpoints.get_latest_blocks(1);`\n\nREST call example      \n* `GET 'https://your.hostname.com/hafbe-api/operation-type-counts?result-limit=1'`\n",
        "operationId": "hafbe_endpoints.get_latest_blocks",
        "parameters": [
          {
            "in": "query",
            "name": "block-num",
            "required": false,
            "schema": {
              "type": "string",
              "default": null
            },
            "description": "Given block, can be represented either by a `block-num` (integer) or a `timestamp` (in the format `YYYY-MM-DD HH:MI:SS`),\n\nThe provided `timestamp` will be converted to a `block-num` by finding the first block \nwhere the block's `created_at` is less than or equal to the given `timestamp` (i.e. `block's created_at <= timestamp`). \n\nThe function will interpret and convert the input based on its format, example input:\n\n* `2016-09-15 19:47:21`\n\n* `5000000`\n"
          },
          {
            "in": "query",
            "name": "result-limit",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 20,
              "minimum": 1,
              "maximum": 1000
            },
            "description": "Specifies number of blocks to return starting with head block, defaults to `20`\n"
          }
        ],
        "responses": {
          "200": {
            "description": "Operation counts for each block \n\n* Returns array of `hafbe_backend.latest_blocks`\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/hafbe_backend.array_of_latest_blocks"
                },
                "example": [
                  {
                    "block_num": 5000000,
                    "witness": "ihashfury",
                    "operations": [
                      {
                        "op_count": 1,
                        "op_type_id": 64
                      },
                      {
                        "op_count": 1,
                        "op_type_id": 9
                      },
                      {
                        "op_count": 1,
                        "op_type_id": 80
                      },
                      {
                        "op_count": 1,
                        "op_type_id": 5
                      }
                    ]
                  }
                ]
              }
            }
          },
          "404": {
            "description": "No blocks in the database"
          }
        }
      }
    }
  }
}