{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "outputs",
    "channels"
  ],
  "properties": {
    "outputs": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true,
        "required": [
          "txid",
          "output",
          "amount_msat",
          "scriptpubkey",
          "status",
          "reserved"
        ],
        "properties": {
          "txid": {
            "type": "txid",
            "description": "the ID of the spendable transaction"
          },
          "output": {
            "type": "u32",
            "description": "the index within *txid*"
          },
          "amount_msat": {
            "type": "msat",
            "description": "the amount of the output"
          },
          "scriptpubkey": {
            "type": "hex",
            "description": "the scriptPubkey of the output"
          },
          "address": {
            "type": "string",
            "description": "the bitcoin address of the output"
          },
          "redeemscript": {
            "type": "hex",
            "description": "the redeemscript, only if it's p2sh-wrapped"
          },
          "status": {
            "type": "string",
            "enum": [
              "unconfirmed",
              "confirmed",
              "spent"
            ]
          },
          "reserved": {
            "type": "boolean",
            "description": "whether this UTXO is currently reserved for an in-flight tx"
          }
        },
        "allOf": [
          {
            "if": {
              "properties": {
                "status": {
                  "type": "string",
                  "enum": [
                    "confirmed"
                  ]
                }
              }
            },
            "then": {
              "additionalProperties": false,
              "required": [
                "blockheight"
              ],
              "properties": {
                "txid": {},
                "output": {},
                "amount_msat": {},
                "scriptpubkey": {},
                "address": {},
                "value": {},
                "redeemscript": {},
                "status": {},
                "reserved": {},
                "reserved_to_block": {},
                "blockheight": {
                  "type": "u32",
                  "description": "Block height where it was confirmed"
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "reserved": {
                  "type": "boolean",
                  "enum": [
                    "true"
                  ]
                }
              }
            },
            "then": {
              "additionalProperties": false,
              "required": [
                "reserved_to_block"
              ],
              "properties": {
                "txid": {},
                "output": {},
                "amount_msat": {},
                "scriptpubkey": {},
                "address": {},
                "value": {},
                "redeemscript": {},
                "status": {},
                "blockheight": {},
                "reserved": {},
                "reserved_to_block": {
                  "type": "u32",
                  "description": "Block height where reservation will expire"
                }
              }
            }
          }
        ]
      }
    },
    "channels": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true,
        "required": [
          "peer_id",
          "our_amount_msat",
          "amount_msat",
          "funding_txid",
          "funding_output",
          "connected",
          "state"
        ],
        "properties": {
          "peer_id": {
            "type": "pubkey",
            "description": "the peer with which the channel is opened"
          },
          "our_amount_msat": {
            "type": "msat",
            "description": "available satoshis on our node's end of the channel"
          },
          "channel_sat": {
            "deprecated": true
          },
          "amount_msat": {
            "type": "msat",
            "description": "total channel value"
          },
          "channel_total_sat": {
            "deprecated": true
          },
          "funding_txid": {
            "type": "txid",
            "description": "funding transaction id"
          },
          "funding_output": {
            "type": "u32",
            "description": "the 0-based index of the output in the funding transaction"
          },
          "connected": {
            "type": "boolean",
            "description": "whether the channel peer is connected"
          },
          "state": {
            "type": "string",
            "enum": [
              "OPENINGD",
              "CHANNELD_AWAITING_LOCKIN",
              "CHANNELD_NORMAL",
              "CHANNELD_SHUTTING_DOWN",
              "CLOSINGD_SIGEXCHANGE",
              "CLOSINGD_COMPLETE",
              "AWAITING_UNILATERAL",
              "FUNDING_SPEND_SEEN",
              "ONCHAIN",
              "DUALOPEND_OPEN_INIT",
              "DUALOPEND_AWAITING_LOCKIN"
            ],
            "description": "the channel state, in particular \"CHANNELD_NORMAL\" means the channel can be used normally"
          }
        },
        "allOf": [
          {
            "if": {
              "properties": {
                "state": {
                  "type": "string",
                  "enum": [
                    "CHANNELD_NORMAL"
                  ]
                }
              }
            },
            "then": {
              "additionalProperties": false,
              "required": [
                "short_channel_id"
              ],
              "properties": {
                "peer_id": {},
                "our_amount_msat": {},
                "channel_sat": {},
                "amount_msat": {},
                "channel_total_sat": {},
                "funding_txid": {},
                "funding_output": {},
                "connected": {},
                "state": {},
                "short_channel_id": {
                  "type": "short_channel_id",
                  "description": "short channel id of channel"
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "state": {
                  "type": "string",
                  "enum": [
                    "CHANNELD_SHUTTING_DOWN",
                    "CLOSINGD_SIGEXCHANGE",
                    "CLOSINGD_COMPLETE",
                    "AWAITING_UNILATERAL",
                    "FUNDING_SPEND_SEEN",
                    "ONCHAIN"
                  ]
                }
              }
            },
            "then": {
              "additionalProperties": false,
              "required": [],
              "properties": {
                "peer_id": {},
                "our_amount_msat": {},
                "channel_sat": {},
                "amount_msat": {},
                "channel_total_sat": {},
                "funding_txid": {},
                "funding_output": {},
                "connected": {},
                "state": {},
                "short_channel_id": {
                  "type": "short_channel_id",
                  "description": "short channel id of channel (only if funding reached lockin depth before closing)"
                }
              }
            }
          }
        ]
      }
    }
  }
}
