{
  "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
  }
}
