{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/blockfrost/refs/heads/main/json-schema/blockfrost-proposal-schema.json",
  "title": "proposal",
  "description": "proposal schema from Blockfrost API",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Governance Action Identifier (CIP-0129)"
    },
    "tx_hash": {
      "type": "string",
      "description": "Hash of the proposal transaction."
    },
    "cert_index": {
      "type": "integer",
      "description": "Index of the certificate within the proposal transaction."
    },
    "governance_type": {
      "type": "string",
      "enum": [
        "hard_fork_initiation",
        "new_committee",
        "new_constitution",
        "info_action",
        "no_confidence",
        "parameter_change",
        "treasury_withdrawals"
      ],
      "description": "Type of proposal."
    },
    "governance_description": {
      "additionalProperties": true,
      "type": "object",
      "nullable": true,
      "description": "An object describing the content of this GovActionProposal in a readable way."
    },
    "deposit": {
      "type": "string",
      "description": "The deposit amount paid for this proposal."
    },
    "return_address": {
      "type": "string",
      "description": "Bech32 stake address of the reward address to receive the deposit when it is repaid."
    },
    "ratified_epoch": {
      "type": "integer",
      "nullable": true,
      "description": "The epoch at which the proposal was ratified. Null if the proposal has not been ratified."
    },
    "enacted_epoch": {
      "type": "integer",
      "nullable": true,
      "description": "The epoch at which the proposal was enacted. Null if the proposal has not been enacted."
    },
    "dropped_epoch": {
      "type": "integer",
      "nullable": true,
      "description": "The epoch at which the proposal was dropped. A proposal is dropped if it expires or if any of its dependencies expire."
    },
    "expired_epoch": {
      "type": "integer",
      "nullable": true,
      "description": "The epoch at which the proposal expired. Null if the proposal has not expired."
    },
    "expiration": {
      "type": "integer",
      "description": "The epoch at which this governance action will expire."
    }
  },
  "required": [
    "id",
    "tx_hash",
    "cert_index",
    "governance_type",
    "deposit",
    "return_address",
    "governance_description",
    "ratified_epoch",
    "enacted_epoch",
    "dropped_epoch",
    "expired_epoch",
    "expiration"
  ]
}