{
  "Player.OnPlay": {
    "type": "notification",
    "description":
        "Playback of a media item has been started or the playback speed has changed. If there is no ID available extra information will be provided.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "$ref": "Player.Notifications.Data",
        "required": true
      }
    ],
    "returns": null
  },
  "Player.OnResume": {
    "type": "notification",
    "description":
        "Playback of a media item has been resumed. If there is no ID available extra information will be provided.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "$ref": "Player.Notifications.Data",
        "required": true
      }
    ],
    "returns": null
  },
  "Player.OnAVStart": {
    "type": "notification",
    "description":
        "Playback of a media item has been started and first frame is available. If there is no ID available extra information will be provided.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "$ref": "Player.Notifications.Data",
        "required": true
      }
    ],
    "returns": null
  },
  "Player.OnAVChange": {
    "type": "notification",
    "description":
        "Audio- or videostream has changed. If there is no ID available extra information will be provided.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "$ref": "Player.Notifications.Data",
        "required": true
      }
    ],
    "returns": null
  },
  "Player.OnPause": {
    "type": "notification",
    "description":
        "Playback of a media item has been paused. If there is no ID available extra information will be provided.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "$ref": "Player.Notifications.Data",
        "required": true
      }
    ],
    "returns": null
  },
  "Player.OnStop": {
    "type": "notification",
    "description":
        "Playback of a media item has been stopped. If there is no ID available extra information will be provided.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "object",
        "required": true,
        "properties": {
          "item": {
            "$ref": "Notifications.Item"
          },
          "end": {
            "type": "boolean",
            "required": true,
            "description": "Whether the player has reached the end of the playable item(s) or not"
          }
        }
      }
    ],
    "returns": null
  },
  "Player.OnSpeedChanged": {
    "type": "notification",
    "description":
        "Speed of the playback of a media item has been changed. If there is no ID available extra information will be provided.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "$ref": "Player.Notifications.Data",
        "required": true
      }
    ],
    "returns": null
  },
  "Player.OnSeek": {
    "type": "notification",
    "description":
        "The playback position has been changed. If there is no ID available extra information will be provided.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "object",
        "required": true,
        "properties": {
          "item": {
            "$ref": "Notifications.Item"
          },
          "player": {
            "$ref": "Player.Notifications.Player.Seek",
            "required": true
          }
        }
      }
    ],
    "returns": null
  },
  "Player.OnPropertyChanged": {
    "type": "notification",
    "description": "A property of the playing items has changed.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "object",
        "required": true,
        "properties": {
          "property": {
            "$ref": "Player.Property.Value"
          },
          "player": {
            "$ref": "Player.Notifications.Player",
            "required": true
          }
        }
      }
    ],
    "returns": null
  },
  "Playlist.OnAdd": {
    "type": "notification",
    "description": "A playlist item has been added.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "object",
        "required": true,
        "properties": {
          "playlistid": {
            "$ref": "Playlist.Id",
            "required": true
          },
          "item": {
            "$ref": "Notifications.Item"
          },
          "position": {
            "$ref": "Playlist.Position"
          }
        }
      }
    ],
    "returns": null
  },
  "Playlist.OnRemove": {
    "type": "notification",
    "description": "A playlist item has been removed.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "object",
        "required": true,
        "properties": {
          "playlistid": {
            "$ref": "Playlist.Id",
            "required": true
          },
          "position": {
            "$ref": "Playlist.Position"
          }
        }
      }
    ],
    "returns": null
  },
  "Playlist.OnClear": {
    "type": "notification",
    "description": "A playlist item has been cleared.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "object",
        "required": true,
        "properties": {
          "playlistid": {
            "$ref": "Playlist.Id",
            "required": true
          }
        }
      }
    ],
    "returns": null
  },
  "AudioLibrary.OnUpdate": {
    "type": "notification",
    "description": "An audio item has been updated.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "object",
        "required": true,
        "properties": {
          "id": {
            "$ref": "Library.Id",
            "required": true
          },
          "type": {
            "type": "string",
            "id": "Notifications.Library.Audio.Type",
            "enum": [
              "song"
            ],
            "required": true
          },
          "transaction": {
            "$ref": "Optional.Boolean",
            "description": "True if the update is being performed within a transaction."
          },
          "added": {
            "$ref": "Optional.Boolean",
            "description": "True if the update is for a newly added item."
          }
        }
      }
    ],
    "returns": null
  },
  "AudioLibrary.OnRemove": {
    "type": "notification",
    "description": "An audio item has been removed.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "object",
        "required": true,
        "properties": {
          "id": {
            "$ref": "Library.Id",
            "required": true
          },
          "type": {
            "$ref": "Notifications.Library.Audio.Type",
            "required": true
          },
          "transaction": {
            "$ref": "Optional.Boolean",
            "description": "True if the removal is being performed within a transaction."
          }
        }
      }
    ],
    "returns": null
  },
  "AudioLibrary.OnScanStarted": {
    "type": "notification",
    "description": "An audio library scan has started.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "null",
        "required": true
      }
    ],
    "returns": null
  },
  "AudioLibrary.OnScanFinished": {
    "type": "notification",
    "description": "Scanning the audio library has been finished.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "null",
        "required": true
      }
    ],
    "returns": null
  },
  "AudioLibrary.OnCleanStarted": {
    "type": "notification",
    "description": "An audio library clean operation has started.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "null",
        "required": true
      }
    ],
    "returns": null
  },
  "AudioLibrary.OnCleanFinished": {
    "type": "notification",
    "description": "The audio library has been cleaned.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "null",
        "required": true
      }
    ],
    "returns": null
  },
  "AudioLibrary.OnExport": {
    "type": "notification",
    "description": "An audio library export has finished.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "object",
        "required": false,
        "properties": {
          "file": {
            "type": "string",
            "required": false,
            "default": ""
          },
          "failcount": {
            "type": "integer",
            "minimum": 0,
            "required": false,
            "default": 0
          }
        }
      }
    ],
    "returns": null
  },
  "VideoLibrary.OnUpdate": {
    "type": "notification",
    "description": "A video item has been updated.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "object",
        "required": true,
        "properties": {
          "id": {
            "$ref": "Library.Id",
            "required": true
          },
          "type": {
            "type": "string",
            "id": "Notifications.Library.Video.Type",
            "enum": [
              "movie",
              "tvshow",
              "episode",
              "musicvideo"
            ],
            "required": true
          },
          "playcount": {
            "type": "integer",
            "minimum": 0,
            "default": -1
          },
          "transaction": {
            "$ref": "Optional.Boolean",
            "description": "True if the update is being performed within a transaction."
          },
          "added": {
            "$ref": "Optional.Boolean",
            "description": "True if the update is for a newly added item."
          }
        }
      }
    ],
    "returns": null
  },
  "VideoLibrary.OnExport": {
    "type": "notification",
    "description": "A video library export has finished.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "object",
        "required": false,
        "properties": {
          "file": {
            "type": "string",
            "required": false,
            "default": ""
          },
          "root": {
            "type": "string",
            "required": false,
            "default": ""
          },
          "failcount": {
            "type": "integer",
            "minimum": 0,
            "required": false,
            "default": 0
          }
        }
      }
    ],
    "returns": null
  },
  "VideoLibrary.OnRemove": {
    "type": "notification",
    "description": "A video item has been removed.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "object",
        "required": true,
        "properties": {
          "id": {
            "$ref": "Library.Id",
            "required": true
          },
          "type": {
            "$ref": "Notifications.Library.Video.Type",
            "required": true
          },
          "transaction": {
            "$ref": "Optional.Boolean",
            "description": "True if the removal is being performed within a transaction."
          }
        }
      }
    ],
    "returns": null
  },
  "VideoLibrary.OnScanStarted": {
    "type": "notification",
    "description": "A video library scan has started.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "null",
        "required": true
      }
    ],
    "returns": null
  },
  "VideoLibrary.OnScanFinished": {
    "type": "notification",
    "description": "Scanning the video library has been finished.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "null",
        "required": true
      }
    ],
    "returns": null
  },
  "VideoLibrary.OnCleanStarted": {
    "type": "notification",
    "description": "A video library clean operation has started.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "null",
        "required": true
      }
    ],
    "returns": null
  },
  "VideoLibrary.OnCleanFinished": {
    "type": "notification",
    "description": "The video library has been cleaned.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "null",
        "required": true
      }
    ],
    "returns": null
  },
  "VideoLibrary.OnRefresh": {
    "type": "notification",
    "description":
        "The video library has been refreshed and a home screen reload might be necessary.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "null",
        "required": true
      }
    ],
    "returns": null
  },
  "System.OnQuit": {
    "type": "notification",
    "description": "Kodi will be closed.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "object",
        "required": true,
        "properties": {
          "exitcode": {
            "type": "integer",
            "minimum": 0,
            "required": true
          }
        }
      }
    ],
    "returns": null
  },
  "System.OnRestart": {
    "type": "notification",
    "description": "The system will be restarted.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "null",
        "required": true
      }
    ],
    "returns": null
  },
  "System.OnSleep": {
    "type": "notification",
    "description": "The system will be suspended.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "null",
        "required": true
      }
    ],
    "returns": null
  },
  "System.OnWake": {
    "type": "notification",
    "description": "The system woke up from suspension.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "null",
        "required": true
      }
    ],
    "returns": null
  },
  "System.OnLowBattery": {
    "type": "notification",
    "description": "The system is on low battery.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "null",
        "required": true
      }
    ],
    "returns": null
  },
  "Application.OnVolumeChanged": {
    "type": "notification",
    "description": "The volume of the application has changed.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "object",
        "required": true,
        "properties": {
          "volume": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100,
            "required": true
          },
          "muted": {
            "type": "boolean",
            "required": true
          }
        }
      }
    ],
    "returns": null
  },
  "Input.OnInputRequested": {
    "type": "notification",
    "description": "The user is requested to provide some information.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "object",
        "required": true,
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "keyboard",
              "time",
              "date",
              "ip",
              "password",
              "numericpassword",
              "number",
              "seconds"
            ],
            "required": true
          },
          "value": {
            "type": "string",
            "required": true
          },
          "title": {
            "type": "string"
          }
        }
      }
    ],
    "returns": null
  },
  "Input.OnInputFinished": {
    "type": "notification",
    "description": "The user has provided the requested input.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "null",
        "required": true
      }
    ],
    "returns": null
  },
  "GUI.OnScreensaverActivated": {
    "type": "notification",
    "description": "The screensaver has been activated.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "null",
        "required": true
      }
    ],
    "returns": null
  },
  "GUI.OnScreensaverDeactivated": {
    "type": "notification",
    "description": "The screensaver has been deactivated.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "object",
        "required": true,
        "properties": {
          "shuttingdown": {
            "type": "boolean",
            "required": true
          }
        }
      }
    ],
    "returns": null
  },
  "GUI.OnDPMSActivated": {
    "type": "notification",
    "description": "Energy saving/DPMS has been activated.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "null",
        "required": true
      }
    ],
    "returns": null
  },
  "GUI.OnDPMSDeactivated": {
    "type": "notification",
    "description": "Energy saving/DPMS has been deactivated.",
    "params": [
      {
        "name": "sender",
        "type": "string",
        "required": true
      },
      {
        "name": "data",
        "type": "null",
        "required": true
      }
    ],
    "returns": null
  }
}
