{
	"openrpc": "1.2.4",
	"info": {
		"title": "Firebolt Provider SDK",
		"version": "0.18.0-proposed.1",
		"x-module-descriptions": {
			"BroadcastPlayer": "A module for controlling and accessing media over broadcast",
			"Player": "A module for providing and using media player capabilities. This handles operations that would be associated with any player generically",
			"StreamingPlayer": "A module for controlling and accessing media over streaming"
		},
		"x-interface-names": {}
	},
	"methods": [
		{
			"name": "Player.onRequestLoad",
			"summary": "Registers as a provider for when new media should be loaded into the player",
			"params": [
				{
					"name": "listen",
					"required": true,
					"schema": {
						"type": "boolean"
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "event",
					"x-response": {
						"$ref": "#/components/schemas/PlayerMediaSession",
						"examples": [
							{
								"mediaSessionId": "sess1"
							}
						]
					},
					"x-error": {
						"type": "object",
						"additionalProperties": false,
						"required": [
							"code",
							"message"
						],
						"properties": {
							"code": {
								"title": "errorObjectCode",
								"description": "A Number that indicates the error type that occurred. This MUST be an integer. The error codes from and including -32768 to -32000 are reserved for pre-defined errors. These pre-defined errors SHOULD be assumed to be returned from any JSON-RPC api.",
								"type": "integer"
							},
							"message": {
								"title": "errorObjectMessage",
								"description": "A String providing a short description of the error. The message SHOULD be limited to a concise single sentence.",
								"type": "string"
							},
							"data": {
								"title": "errorObjectData",
								"description": "A Primitive or Structured value that contains additional information about the error. This may be omitted. The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.)."
							}
						}
					}
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:base",
					"x-allow-focus": false
				}
			],
			"result": {
				"name": "loadRequest",
				"summary": "The request to load new media",
				"schema": {
					"anyOf": [
						{
							"$ref": "#/x-schemas/Types/ListenResponse"
						},
						{
							"$ref": "#/components/schemas/PlayerLoadProviderRequest"
						}
					]
				}
			},
			"examples": [
				{
					"name": "Default Example",
					"params": [
						{
							"name": "listen",
							"value": true
						}
					],
					"result": {
						"name": "Default Result",
						"value": {
							"correlationId": "abc",
							"parameters": {
								"playerId": "app1:123",
								"locator": "https://cdn.rdkcentral.com/media/assets/asset.hls"
							}
						}
					}
				}
			]
		},
		{
			"name": "Player.onRequestPlay",
			"summary": "Registers as a provider for when media should start playing",
			"params": [
				{
					"name": "listen",
					"required": true,
					"schema": {
						"type": "boolean"
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "event",
					"x-response": {
						"$ref": "#/components/schemas/PlayerMediaSession",
						"examples": [
							{
								"mediaSessionId": "sess1"
							}
						]
					},
					"x-error": {
						"type": "object",
						"additionalProperties": false,
						"required": [
							"code",
							"message"
						],
						"properties": {
							"code": {
								"title": "errorObjectCode",
								"description": "A Number that indicates the error type that occurred. This MUST be an integer. The error codes from and including -32768 to -32000 are reserved for pre-defined errors. These pre-defined errors SHOULD be assumed to be returned from any JSON-RPC api.",
								"type": "integer"
							},
							"message": {
								"title": "errorObjectMessage",
								"description": "A String providing a short description of the error. The message SHOULD be limited to a concise single sentence.",
								"type": "string"
							},
							"data": {
								"title": "errorObjectData",
								"description": "A Primitive or Structured value that contains additional information about the error. This may be omitted. The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.)."
							}
						}
					}
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:base",
					"x-allow-focus": false
				}
			],
			"result": {
				"name": "playRequest",
				"summary": "The request to start playing media",
				"schema": {
					"anyOf": [
						{
							"$ref": "#/x-schemas/Types/ListenResponse"
						},
						{
							"$ref": "#/x-schemas/Player/PlayerProviderRequest"
						}
					]
				}
			},
			"examples": [
				{
					"name": "Default Example",
					"params": [
						{
							"name": "listen",
							"value": true
						}
					],
					"result": {
						"name": "Default Result",
						"value": {
							"correlationId": "abc",
							"parameters": {
								"playerId": "app1:123"
							}
						}
					}
				}
			]
		},
		{
			"name": "Player.onRequestStop",
			"summary": "Registers as a provider for when media should stop playing",
			"params": [
				{
					"name": "listen",
					"required": true,
					"schema": {
						"type": "boolean"
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "event",
					"x-response": {
						"$ref": "#/components/schemas/PlayerMediaSession",
						"examples": [
							{
								"mediaSessionId": "sess1"
							}
						]
					},
					"x-error": {
						"type": "object",
						"additionalProperties": false,
						"required": [
							"code",
							"message"
						],
						"properties": {
							"code": {
								"title": "errorObjectCode",
								"description": "A Number that indicates the error type that occurred. This MUST be an integer. The error codes from and including -32768 to -32000 are reserved for pre-defined errors. These pre-defined errors SHOULD be assumed to be returned from any JSON-RPC api.",
								"type": "integer"
							},
							"message": {
								"title": "errorObjectMessage",
								"description": "A String providing a short description of the error. The message SHOULD be limited to a concise single sentence.",
								"type": "string"
							},
							"data": {
								"title": "errorObjectData",
								"description": "A Primitive or Structured value that contains additional information about the error. This may be omitted. The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.)."
							}
						}
					}
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:base",
					"x-allow-focus": false
				}
			],
			"result": {
				"name": "stopRequest",
				"summary": "The request to stop playing media",
				"schema": {
					"anyOf": [
						{
							"$ref": "#/x-schemas/Types/ListenResponse"
						},
						{
							"$ref": "#/x-schemas/Player/PlayerProviderRequest"
						}
					]
				}
			},
			"examples": [
				{
					"name": "Default Example",
					"params": [
						{
							"name": "listen",
							"value": true
						}
					],
					"result": {
						"name": "Default Result",
						"value": {
							"correlationId": "abc",
							"parameters": {
								"playerId": "app1:123"
							}
						}
					}
				}
			]
		},
		{
			"name": "Player.onRequestStatus",
			"summary": "Registers as a provider for when player status needs to be provided",
			"params": [
				{
					"name": "listen",
					"required": true,
					"schema": {
						"type": "boolean"
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "event",
					"x-response": {
						"$ref": "#/components/schemas/PlayerStatus",
						"examples": [
							{
								"mediaSessionId": "sess1",
								"state": "IDLE"
							}
						]
					},
					"x-error": {
						"type": "object",
						"additionalProperties": false,
						"required": [
							"code",
							"message"
						],
						"properties": {
							"code": {
								"title": "errorObjectCode",
								"description": "A Number that indicates the error type that occurred. This MUST be an integer. The error codes from and including -32768 to -32000 are reserved for pre-defined errors. These pre-defined errors SHOULD be assumed to be returned from any JSON-RPC api.",
								"type": "integer"
							},
							"message": {
								"title": "errorObjectMessage",
								"description": "A String providing a short description of the error. The message SHOULD be limited to a concise single sentence.",
								"type": "string"
							},
							"data": {
								"title": "errorObjectData",
								"description": "A Primitive or Structured value that contains additional information about the error. This may be omitted. The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.)."
							}
						}
					}
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:base",
					"x-allow-focus": false
				}
			],
			"result": {
				"name": "statusRequest",
				"summary": "The request to get the status of a player",
				"schema": {
					"anyOf": [
						{
							"$ref": "#/x-schemas/Types/ListenResponse"
						},
						{
							"$ref": "#/x-schemas/Player/PlayerProviderRequest"
						}
					]
				}
			},
			"examples": [
				{
					"name": "Default Example",
					"params": [
						{
							"name": "listen",
							"value": true
						}
					],
					"result": {
						"name": "Default Result",
						"value": {
							"correlationId": "abc",
							"parameters": {
								"playerId": "123"
							}
						}
					}
				}
			]
		},
		{
			"name": "Player.onRequestProgress",
			"summary": "Registers as a provider for when player progress needs to be provided",
			"params": [
				{
					"name": "listen",
					"required": true,
					"schema": {
						"type": "boolean"
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "event",
					"x-response": {
						"$ref": "#/components/schemas/PlayerProgress",
						"examples": [
							{
								"speed": 1,
								"startPosition": 0,
								"position": 5000,
								"endPosition": 3600000,
								"liveSyncTime": "2021-04-23T18:25:43.511Z"
							}
						]
					},
					"x-error": {
						"type": "object",
						"additionalProperties": false,
						"required": [
							"code",
							"message"
						],
						"properties": {
							"code": {
								"title": "errorObjectCode",
								"description": "A Number that indicates the error type that occurred. This MUST be an integer. The error codes from and including -32768 to -32000 are reserved for pre-defined errors. These pre-defined errors SHOULD be assumed to be returned from any JSON-RPC api.",
								"type": "integer"
							},
							"message": {
								"title": "errorObjectMessage",
								"description": "A String providing a short description of the error. The message SHOULD be limited to a concise single sentence.",
								"type": "string"
							},
							"data": {
								"title": "errorObjectData",
								"description": "A Primitive or Structured value that contains additional information about the error. This may be omitted. The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.)."
							}
						}
					}
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:base",
					"x-allow-focus": false
				}
			],
			"result": {
				"name": "progressRequest",
				"summary": "The request to stop playing media",
				"schema": {
					"anyOf": [
						{
							"$ref": "#/x-schemas/Types/ListenResponse"
						},
						{
							"$ref": "#/x-schemas/Player/PlayerProviderRequest"
						}
					]
				}
			},
			"examples": [
				{
					"name": "Default Example",
					"params": [
						{
							"name": "listen",
							"value": true
						}
					],
					"result": {
						"name": "Default Result",
						"value": {
							"correlationId": "abc",
							"parameters": {
								"playerId": "123"
							}
						}
					}
				}
			]
		},
		{
			"name": "Player.provideStatus",
			"tags": [
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:base"
				}
			],
			"summary": "Tells listeners the current status of a player",
			"params": [
				{
					"name": "playerId",
					"summary": "The id of the player the status is for",
					"schema": {
						"type": "string"
					},
					"required": true
				},
				{
					"name": "status",
					"summary": "The status",
					"schema": {
						"$ref": "#/components/schemas/PlayerStatus"
					},
					"required": true
				}
			],
			"result": {
				"name": "providedResponse",
				"schema": {
					"const": null
				}
			},
			"examples": [
				{
					"name": "Default example #1",
					"params": [
						{
							"name": "playerId",
							"value": "123"
						},
						{
							"name": "status",
							"value": {
								"mediaSessionId": "sess2",
								"state": "BLOCKED",
								"blockedReason": "CONTENT_NOT_FOUND"
							}
						}
					],
					"result": {
						"name": "providedResponse",
						"value": null
					}
				}
			]
		},
		{
			"name": "Player.provideProgress",
			"tags": [
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:base"
				}
			],
			"summary": "Tells listeners the current progress of a player",
			"params": [
				{
					"name": "playerId",
					"summary": "The id of the player the progress is for",
					"schema": {
						"type": "string"
					},
					"required": true
				},
				{
					"name": "progress",
					"summary": "The progress",
					"schema": {
						"$ref": "#/components/schemas/PlayerProgress"
					},
					"required": true
				}
			],
			"result": {
				"name": "providedResponse",
				"schema": {
					"const": null
				}
			},
			"examples": [
				{
					"name": "Default example #1",
					"params": [
						{
							"name": "playerId",
							"value": "123"
						},
						{
							"name": "progress",
							"value": {
								"speed": 1,
								"startPosition": 0,
								"position": 5000,
								"endPosition": 3600000,
								"liveSyncTime": "2021-04-23T18:25:43.511Z"
							}
						}
					],
					"result": {
						"name": "providedResponse",
						"value": null
					}
				}
			]
		},
		{
			"name": "Player.loadResponse",
			"summary": "Internal API for Load Provider to send back response.",
			"params": [
				{
					"name": "response",
					"required": true,
					"schema": {
						"allOf": [
							{
								"$ref": "#/x-schemas/Types/ProviderResponse"
							},
							{
								"type": "object",
								"properties": {
									"result": {
										"$ref": "#/components/schemas/PlayerMediaSession",
										"examples": [
											{
												"mediaSessionId": "sess1"
											}
										]
									}
								}
							}
						]
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:base",
					"x-allow-focus": false,
					"x-response-for": "onRequestLoad"
				}
			],
			"result": {
				"name": "result",
				"schema": {
					"type": "null"
				}
			},
			"examples": [
				{
					"name": "Example #1",
					"params": [
						{
							"name": "response",
							"value": {
								"correlationId": "123",
								"result": {
									"mediaSessionId": "sess1"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				},
				{
					"name": "Example #2",
					"params": [
						{
							"name": "response",
							"value": {
								"correlationId": "123",
								"result": {
									"mediaSessionId": "sess2"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				}
			]
		},
		{
			"name": "Player.loadError",
			"summary": "Internal API for Load Provider to send back error.",
			"params": [
				{
					"name": "error",
					"required": true,
					"schema": {
						"allOf": [
							{
								"$ref": "#/x-schemas/Types/ProviderResponse"
							},
							{
								"type": "object",
								"properties": {
									"result": {
										"type": "object",
										"additionalProperties": false,
										"required": [
											"code",
											"message"
										],
										"properties": {
											"code": {
												"title": "errorObjectCode",
												"description": "A Number that indicates the error type that occurred. This MUST be an integer. The error codes from and including -32768 to -32000 are reserved for pre-defined errors. These pre-defined errors SHOULD be assumed to be returned from any JSON-RPC api.",
												"type": "integer"
											},
											"message": {
												"title": "errorObjectMessage",
												"description": "A String providing a short description of the error. The message SHOULD be limited to a concise single sentence.",
												"type": "string"
											},
											"data": {
												"title": "errorObjectData",
												"description": "A Primitive or Structured value that contains additional information about the error. This may be omitted. The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.)."
											}
										}
									}
								}
							}
						]
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:base",
					"x-allow-focus": false,
					"x-error-for": "onRequestLoad"
				}
			],
			"result": {
				"name": "result",
				"schema": {
					"type": "null"
				}
			},
			"examples": [
				{
					"name": "Example 1",
					"params": [
						{
							"name": "error",
							"value": {
								"correlationId": "123",
								"result": {
									"code": 1,
									"message": "Error"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				}
			]
		},
		{
			"name": "Player.playResponse",
			"summary": "Internal API for Play Provider to send back response.",
			"params": [
				{
					"name": "response",
					"required": true,
					"schema": {
						"allOf": [
							{
								"$ref": "#/x-schemas/Types/ProviderResponse"
							},
							{
								"type": "object",
								"properties": {
									"result": {
										"$ref": "#/components/schemas/PlayerMediaSession",
										"examples": [
											{
												"mediaSessionId": "sess1"
											}
										]
									}
								}
							}
						]
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:base",
					"x-allow-focus": false,
					"x-response-for": "onRequestPlay"
				}
			],
			"result": {
				"name": "result",
				"schema": {
					"type": "null"
				}
			},
			"examples": [
				{
					"name": "Example #1",
					"params": [
						{
							"name": "response",
							"value": {
								"correlationId": "123",
								"result": {
									"mediaSessionId": "sess1"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				},
				{
					"name": "Example #2",
					"params": [
						{
							"name": "response",
							"value": {
								"correlationId": "123",
								"result": {
									"mediaSessionId": "sess2"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				}
			]
		},
		{
			"name": "Player.playError",
			"summary": "Internal API for Play Provider to send back error.",
			"params": [
				{
					"name": "error",
					"required": true,
					"schema": {
						"allOf": [
							{
								"$ref": "#/x-schemas/Types/ProviderResponse"
							},
							{
								"type": "object",
								"properties": {
									"result": {
										"type": "object",
										"additionalProperties": false,
										"required": [
											"code",
											"message"
										],
										"properties": {
											"code": {
												"title": "errorObjectCode",
												"description": "A Number that indicates the error type that occurred. This MUST be an integer. The error codes from and including -32768 to -32000 are reserved for pre-defined errors. These pre-defined errors SHOULD be assumed to be returned from any JSON-RPC api.",
												"type": "integer"
											},
											"message": {
												"title": "errorObjectMessage",
												"description": "A String providing a short description of the error. The message SHOULD be limited to a concise single sentence.",
												"type": "string"
											},
											"data": {
												"title": "errorObjectData",
												"description": "A Primitive or Structured value that contains additional information about the error. This may be omitted. The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.)."
											}
										}
									}
								}
							}
						]
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:base",
					"x-allow-focus": false,
					"x-error-for": "onRequestPlay"
				}
			],
			"result": {
				"name": "result",
				"schema": {
					"type": "null"
				}
			},
			"examples": [
				{
					"name": "Example 1",
					"params": [
						{
							"name": "error",
							"value": {
								"correlationId": "123",
								"result": {
									"code": 1,
									"message": "Error"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				}
			]
		},
		{
			"name": "Player.stopResponse",
			"summary": "Internal API for Stop Provider to send back response.",
			"params": [
				{
					"name": "response",
					"required": true,
					"schema": {
						"allOf": [
							{
								"$ref": "#/x-schemas/Types/ProviderResponse"
							},
							{
								"type": "object",
								"properties": {
									"result": {
										"$ref": "#/components/schemas/PlayerMediaSession",
										"examples": [
											{
												"mediaSessionId": "sess1"
											}
										]
									}
								}
							}
						]
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:base",
					"x-allow-focus": false,
					"x-response-for": "onRequestStop"
				}
			],
			"result": {
				"name": "result",
				"schema": {
					"type": "null"
				}
			},
			"examples": [
				{
					"name": "Example #1",
					"params": [
						{
							"name": "response",
							"value": {
								"correlationId": "123",
								"result": {
									"mediaSessionId": "sess1"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				},
				{
					"name": "Example #2",
					"params": [
						{
							"name": "response",
							"value": {
								"correlationId": "123",
								"result": {
									"mediaSessionId": "sess2"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				}
			]
		},
		{
			"name": "Player.stopError",
			"summary": "Internal API for Stop Provider to send back error.",
			"params": [
				{
					"name": "error",
					"required": true,
					"schema": {
						"allOf": [
							{
								"$ref": "#/x-schemas/Types/ProviderResponse"
							},
							{
								"type": "object",
								"properties": {
									"result": {
										"type": "object",
										"additionalProperties": false,
										"required": [
											"code",
											"message"
										],
										"properties": {
											"code": {
												"title": "errorObjectCode",
												"description": "A Number that indicates the error type that occurred. This MUST be an integer. The error codes from and including -32768 to -32000 are reserved for pre-defined errors. These pre-defined errors SHOULD be assumed to be returned from any JSON-RPC api.",
												"type": "integer"
											},
											"message": {
												"title": "errorObjectMessage",
												"description": "A String providing a short description of the error. The message SHOULD be limited to a concise single sentence.",
												"type": "string"
											},
											"data": {
												"title": "errorObjectData",
												"description": "A Primitive or Structured value that contains additional information about the error. This may be omitted. The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.)."
											}
										}
									}
								}
							}
						]
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:base",
					"x-allow-focus": false,
					"x-error-for": "onRequestStop"
				}
			],
			"result": {
				"name": "result",
				"schema": {
					"type": "null"
				}
			},
			"examples": [
				{
					"name": "Example 1",
					"params": [
						{
							"name": "error",
							"value": {
								"correlationId": "123",
								"result": {
									"code": 1,
									"message": "Error"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				}
			]
		},
		{
			"name": "Player.statusResponse",
			"summary": "Internal API for Status Provider to send back response.",
			"params": [
				{
					"name": "response",
					"required": true,
					"schema": {
						"allOf": [
							{
								"$ref": "#/x-schemas/Types/ProviderResponse"
							},
							{
								"type": "object",
								"properties": {
									"result": {
										"$ref": "#/components/schemas/PlayerStatus",
										"examples": [
											{
												"mediaSessionId": "sess1",
												"state": "IDLE"
											}
										]
									}
								}
							}
						]
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:base",
					"x-allow-focus": false,
					"x-response-for": "onRequestStatus"
				}
			],
			"result": {
				"name": "result",
				"schema": {
					"type": "null"
				}
			},
			"examples": [
				{
					"name": "Example #1",
					"params": [
						{
							"name": "response",
							"value": {
								"correlationId": "123",
								"result": {
									"mediaSessionId": "sess1",
									"state": "IDLE"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				},
				{
					"name": "Example #2",
					"params": [
						{
							"name": "response",
							"value": {
								"correlationId": "123",
								"result": {
									"mediaSessionId": "sess2",
									"state": "BLOCKED",
									"blockedReason": "CONTENT_NOT_FOUND"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				}
			]
		},
		{
			"name": "Player.statusError",
			"summary": "Internal API for Status Provider to send back error.",
			"params": [
				{
					"name": "error",
					"required": true,
					"schema": {
						"allOf": [
							{
								"$ref": "#/x-schemas/Types/ProviderResponse"
							},
							{
								"type": "object",
								"properties": {
									"result": {
										"type": "object",
										"additionalProperties": false,
										"required": [
											"code",
											"message"
										],
										"properties": {
											"code": {
												"title": "errorObjectCode",
												"description": "A Number that indicates the error type that occurred. This MUST be an integer. The error codes from and including -32768 to -32000 are reserved for pre-defined errors. These pre-defined errors SHOULD be assumed to be returned from any JSON-RPC api.",
												"type": "integer"
											},
											"message": {
												"title": "errorObjectMessage",
												"description": "A String providing a short description of the error. The message SHOULD be limited to a concise single sentence.",
												"type": "string"
											},
											"data": {
												"title": "errorObjectData",
												"description": "A Primitive or Structured value that contains additional information about the error. This may be omitted. The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.)."
											}
										}
									}
								}
							}
						]
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:base",
					"x-allow-focus": false,
					"x-error-for": "onRequestStatus"
				}
			],
			"result": {
				"name": "result",
				"schema": {
					"type": "null"
				}
			},
			"examples": [
				{
					"name": "Example 1",
					"params": [
						{
							"name": "error",
							"value": {
								"correlationId": "123",
								"result": {
									"code": 1,
									"message": "Error"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				}
			]
		},
		{
			"name": "Player.progressResponse",
			"summary": "Internal API for Progress Provider to send back response.",
			"params": [
				{
					"name": "response",
					"required": true,
					"schema": {
						"allOf": [
							{
								"$ref": "#/x-schemas/Types/ProviderResponse"
							},
							{
								"type": "object",
								"properties": {
									"result": {
										"$ref": "#/components/schemas/PlayerProgress",
										"examples": [
											{
												"speed": 1,
												"startPosition": 0,
												"position": 5000,
												"endPosition": 3600000,
												"liveSyncTime": "2021-04-23T18:25:43.511Z"
											}
										]
									}
								}
							}
						]
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:base",
					"x-allow-focus": false,
					"x-response-for": "onRequestProgress"
				}
			],
			"result": {
				"name": "result",
				"schema": {
					"type": "null"
				}
			},
			"examples": [
				{
					"name": "Example #1",
					"params": [
						{
							"name": "response",
							"value": {
								"correlationId": "123",
								"result": {
									"speed": 1,
									"startPosition": 0,
									"position": 5000,
									"endPosition": 3600000,
									"liveSyncTime": "2021-04-23T18:25:43.511Z"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				},
				{
					"name": "Example #2",
					"params": [
						{
							"name": "response",
							"value": {
								"correlationId": "123",
								"result": {
									"speed": 3,
									"startPosition": 5000,
									"position": 10000,
									"endPosition": 3600000,
									"liveSyncTime": "2021-04-23T18:25:43.511Z"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				}
			]
		},
		{
			"name": "Player.progressError",
			"summary": "Internal API for Progress Provider to send back error.",
			"params": [
				{
					"name": "error",
					"required": true,
					"schema": {
						"allOf": [
							{
								"$ref": "#/x-schemas/Types/ProviderResponse"
							},
							{
								"type": "object",
								"properties": {
									"result": {
										"type": "object",
										"additionalProperties": false,
										"required": [
											"code",
											"message"
										],
										"properties": {
											"code": {
												"title": "errorObjectCode",
												"description": "A Number that indicates the error type that occurred. This MUST be an integer. The error codes from and including -32768 to -32000 are reserved for pre-defined errors. These pre-defined errors SHOULD be assumed to be returned from any JSON-RPC api.",
												"type": "integer"
											},
											"message": {
												"title": "errorObjectMessage",
												"description": "A String providing a short description of the error. The message SHOULD be limited to a concise single sentence.",
												"type": "string"
											},
											"data": {
												"title": "errorObjectData",
												"description": "A Primitive or Structured value that contains additional information about the error. This may be omitted. The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.)."
											}
										}
									}
								}
							}
						]
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:base",
					"x-allow-focus": false,
					"x-error-for": "onRequestProgress"
				}
			],
			"result": {
				"name": "result",
				"schema": {
					"type": "null"
				}
			},
			"examples": [
				{
					"name": "Example 1",
					"params": [
						{
							"name": "error",
							"value": {
								"correlationId": "123",
								"result": {
									"code": 1,
									"message": "Error"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				}
			]
		},
		{
			"name": "BroadcastPlayer.onRequestCreate",
			"summary": "Registers as a provider for creating player instances",
			"params": [
				{
					"name": "listen",
					"required": true,
					"schema": {
						"type": "boolean"
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "event",
					"x-response": {
						"$ref": "#/components/schemas/BroadcastPlayerInstance",
						"examples": [
							{
								"playerId": "123",
								"windowId": "456"
							}
						]
					},
					"x-error": {
						"type": "object",
						"additionalProperties": false,
						"required": [
							"code",
							"message"
						],
						"properties": {
							"code": {
								"title": "errorObjectCode",
								"description": "A Number that indicates the error type that occurred. This MUST be an integer. The error codes from and including -32768 to -32000 are reserved for pre-defined errors. These pre-defined errors SHOULD be assumed to be returned from any JSON-RPC api.",
								"type": "integer"
							},
							"message": {
								"title": "errorObjectMessage",
								"description": "A String providing a short description of the error. The message SHOULD be limited to a concise single sentence.",
								"type": "string"
							},
							"data": {
								"title": "errorObjectData",
								"description": "A Primitive or Structured value that contains additional information about the error. This may be omitted. The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.)."
							}
						}
					}
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:broadcast",
					"x-allow-focus": false
				}
			],
			"result": {
				"name": "createRequest",
				"summary": "The request to create a new player",
				"schema": {
					"anyOf": [
						{
							"$ref": "#/x-schemas/Types/ListenResponse"
						},
						{
							"$ref": "#/components/schemas/BroadcastPlayerCreateProviderRequest"
						}
					]
				}
			},
			"examples": [
				{
					"name": "Default Example",
					"params": [
						{
							"name": "listen",
							"value": true
						}
					],
					"result": {
						"name": "Default Result",
						"value": {
							"correlationId": "abc",
							"parameters": {}
						}
					}
				}
			]
		},
		{
			"name": "BroadcastPlayer.onRequestStatus",
			"summary": "Registers as a provider for when broadcast player status needs to be provided",
			"params": [
				{
					"name": "listen",
					"required": true,
					"schema": {
						"type": "boolean"
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "event",
					"x-response": {
						"$ref": "#/components/schemas/BroadcastPlayerStatus",
						"examples": [
							{
								"locked": false,
								"frequency": 695000000,
								"signalStrength": 90,
								"signalQuality": 90
							}
						]
					},
					"x-error": {
						"type": "object",
						"additionalProperties": false,
						"required": [
							"code",
							"message"
						],
						"properties": {
							"code": {
								"title": "errorObjectCode",
								"description": "A Number that indicates the error type that occurred. This MUST be an integer. The error codes from and including -32768 to -32000 are reserved for pre-defined errors. These pre-defined errors SHOULD be assumed to be returned from any JSON-RPC api.",
								"type": "integer"
							},
							"message": {
								"title": "errorObjectMessage",
								"description": "A String providing a short description of the error. The message SHOULD be limited to a concise single sentence.",
								"type": "string"
							},
							"data": {
								"title": "errorObjectData",
								"description": "A Primitive or Structured value that contains additional information about the error. This may be omitted. The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.)."
							}
						}
					}
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:broadcast",
					"x-allow-focus": false
				}
			],
			"result": {
				"name": "statusRequest",
				"summary": "The request to get the status of a player",
				"schema": {
					"anyOf": [
						{
							"$ref": "#/x-schemas/Types/ListenResponse"
						},
						{
							"$ref": "#/x-schemas/Player/PlayerProviderRequest"
						}
					]
				}
			},
			"examples": [
				{
					"name": "Default Example",
					"params": [
						{
							"name": "listen",
							"value": true
						}
					],
					"result": {
						"name": "Default Result",
						"value": {
							"correlationId": "abc",
							"parameters": {
								"playerId": "123"
							}
						}
					}
				}
			]
		},
		{
			"name": "BroadcastPlayer.provideStatus",
			"tags": [
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:broadcast"
				}
			],
			"summary": "Tells listeners the current broadcast status of a player",
			"params": [
				{
					"name": "playerId",
					"summary": "The id of the player the status is for",
					"schema": {
						"type": "string"
					},
					"required": true
				},
				{
					"name": "status",
					"summary": "The status",
					"schema": {
						"$ref": "#/components/schemas/BroadcastPlayerStatus"
					},
					"required": true
				}
			],
			"result": {
				"name": "providedResponse",
				"schema": {
					"const": null
				}
			},
			"examples": [
				{
					"name": "Default example #1",
					"params": [
						{
							"name": "playerId",
							"value": "123"
						},
						{
							"name": "status",
							"value": {
								"locked": false,
								"frequency": 695000000,
								"signalStrength": 90,
								"signalQuality": 90
							}
						}
					],
					"result": {
						"name": "providedResponse",
						"value": null
					}
				}
			]
		},
		{
			"name": "BroadcastPlayer.createResponse",
			"summary": "Internal API for Create Provider to send back response.",
			"params": [
				{
					"name": "response",
					"required": true,
					"schema": {
						"allOf": [
							{
								"$ref": "#/x-schemas/Types/ProviderResponse"
							},
							{
								"type": "object",
								"properties": {
									"result": {
										"$ref": "#/components/schemas/BroadcastPlayerInstance",
										"examples": [
											{
												"playerId": "123",
												"windowId": "456"
											}
										]
									}
								}
							}
						]
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:broadcast",
					"x-allow-focus": false,
					"x-response-for": "onRequestCreate"
				}
			],
			"result": {
				"name": "result",
				"schema": {
					"type": "null"
				}
			},
			"examples": [
				{
					"name": "Example #1",
					"params": [
						{
							"name": "response",
							"value": {
								"correlationId": "123",
								"result": {
									"playerId": "123",
									"windowId": "456"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				},
				{
					"name": "Example #2",
					"params": [
						{
							"name": "response",
							"value": {
								"correlationId": "123",
								"result": {
									"playerId": "abc",
									"windowId": "def"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				}
			]
		},
		{
			"name": "BroadcastPlayer.createError",
			"summary": "Internal API for Create Provider to send back error.",
			"params": [
				{
					"name": "error",
					"required": true,
					"schema": {
						"allOf": [
							{
								"$ref": "#/x-schemas/Types/ProviderResponse"
							},
							{
								"type": "object",
								"properties": {
									"result": {
										"type": "object",
										"additionalProperties": false,
										"required": [
											"code",
											"message"
										],
										"properties": {
											"code": {
												"title": "errorObjectCode",
												"description": "A Number that indicates the error type that occurred. This MUST be an integer. The error codes from and including -32768 to -32000 are reserved for pre-defined errors. These pre-defined errors SHOULD be assumed to be returned from any JSON-RPC api.",
												"type": "integer"
											},
											"message": {
												"title": "errorObjectMessage",
												"description": "A String providing a short description of the error. The message SHOULD be limited to a concise single sentence.",
												"type": "string"
											},
											"data": {
												"title": "errorObjectData",
												"description": "A Primitive or Structured value that contains additional information about the error. This may be omitted. The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.)."
											}
										}
									}
								}
							}
						]
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:broadcast",
					"x-allow-focus": false,
					"x-error-for": "onRequestCreate"
				}
			],
			"result": {
				"name": "result",
				"schema": {
					"type": "null"
				}
			},
			"examples": [
				{
					"name": "Example 1",
					"params": [
						{
							"name": "error",
							"value": {
								"correlationId": "123",
								"result": {
									"code": 1,
									"message": "Error"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				}
			]
		},
		{
			"name": "BroadcastPlayer.statusResponse",
			"summary": "Internal API for Status Provider to send back response.",
			"params": [
				{
					"name": "response",
					"required": true,
					"schema": {
						"allOf": [
							{
								"$ref": "#/x-schemas/Types/ProviderResponse"
							},
							{
								"type": "object",
								"properties": {
									"result": {
										"$ref": "#/components/schemas/BroadcastPlayerStatus",
										"examples": [
											{
												"locked": false,
												"frequency": 695000000,
												"signalStrength": 90,
												"signalQuality": 90
											}
										]
									}
								}
							}
						]
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:broadcast",
					"x-allow-focus": false,
					"x-response-for": "onRequestStatus"
				}
			],
			"result": {
				"name": "result",
				"schema": {
					"type": "null"
				}
			},
			"examples": [
				{
					"name": "Example",
					"params": [
						{
							"name": "response",
							"value": {
								"correlationId": "123",
								"result": {
									"locked": false,
									"frequency": 1,
									"signalStrength": 90,
									"signalQuality": 90
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				}
			]
		},
		{
			"name": "BroadcastPlayer.statusError",
			"summary": "Internal API for Status Provider to send back error.",
			"params": [
				{
					"name": "error",
					"required": true,
					"schema": {
						"allOf": [
							{
								"$ref": "#/x-schemas/Types/ProviderResponse"
							},
							{
								"type": "object",
								"properties": {
									"result": {
										"type": "object",
										"additionalProperties": false,
										"required": [
											"code",
											"message"
										],
										"properties": {
											"code": {
												"title": "errorObjectCode",
												"description": "A Number that indicates the error type that occurred. This MUST be an integer. The error codes from and including -32768 to -32000 are reserved for pre-defined errors. These pre-defined errors SHOULD be assumed to be returned from any JSON-RPC api.",
												"type": "integer"
											},
											"message": {
												"title": "errorObjectMessage",
												"description": "A String providing a short description of the error. The message SHOULD be limited to a concise single sentence.",
												"type": "string"
											},
											"data": {
												"title": "errorObjectData",
												"description": "A Primitive or Structured value that contains additional information about the error. This may be omitted. The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.)."
											}
										}
									}
								}
							}
						]
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:broadcast",
					"x-allow-focus": false,
					"x-error-for": "onRequestStatus"
				}
			],
			"result": {
				"name": "result",
				"schema": {
					"type": "null"
				}
			},
			"examples": [
				{
					"name": "Example 1",
					"params": [
						{
							"name": "error",
							"value": {
								"correlationId": "123",
								"result": {
									"code": 1,
									"message": "Error"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				}
			]
		},
		{
			"name": "StreamingPlayer.onRequestCreate",
			"summary": "Registers as a provider for creating player instances",
			"params": [
				{
					"name": "listen",
					"required": true,
					"schema": {
						"type": "boolean"
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "event",
					"x-response": {
						"$ref": "#/components/schemas/StreamingPlayerInstance",
						"examples": [
							{
								"playerId": "123",
								"windowId": "456"
							}
						]
					},
					"x-error": {
						"type": "object",
						"additionalProperties": false,
						"required": [
							"code",
							"message"
						],
						"properties": {
							"code": {
								"title": "errorObjectCode",
								"description": "A Number that indicates the error type that occurred. This MUST be an integer. The error codes from and including -32768 to -32000 are reserved for pre-defined errors. These pre-defined errors SHOULD be assumed to be returned from any JSON-RPC api.",
								"type": "integer"
							},
							"message": {
								"title": "errorObjectMessage",
								"description": "A String providing a short description of the error. The message SHOULD be limited to a concise single sentence.",
								"type": "string"
							},
							"data": {
								"title": "errorObjectData",
								"description": "A Primitive or Structured value that contains additional information about the error. This may be omitted. The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.)."
							}
						}
					}
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:streaming",
					"x-allow-focus": false
				}
			],
			"result": {
				"name": "createRequest",
				"summary": "The request to create a new player",
				"schema": {
					"anyOf": [
						{
							"$ref": "#/x-schemas/Types/ListenResponse"
						},
						{
							"$ref": "#/components/schemas/StreamingPlayerCreateProviderRequest"
						}
					]
				}
			},
			"examples": [
				{
					"name": "Default Example",
					"params": [
						{
							"name": "listen",
							"value": true
						}
					],
					"result": {
						"name": "Default Result",
						"value": {
							"correlationId": "abc",
							"parameters": {}
						}
					}
				}
			]
		},
		{
			"name": "StreamingPlayer.createResponse",
			"summary": "Internal API for Create Provider to send back response.",
			"params": [
				{
					"name": "response",
					"required": true,
					"schema": {
						"allOf": [
							{
								"$ref": "#/x-schemas/Types/ProviderResponse"
							},
							{
								"type": "object",
								"properties": {
									"result": {
										"$ref": "#/components/schemas/StreamingPlayerInstance",
										"examples": [
											{
												"playerId": "123",
												"windowId": "456"
											}
										]
									}
								}
							}
						]
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:streaming",
					"x-allow-focus": false,
					"x-response-for": "onRequestCreate"
				}
			],
			"result": {
				"name": "result",
				"schema": {
					"type": "null"
				}
			},
			"examples": [
				{
					"name": "Example #1",
					"params": [
						{
							"name": "response",
							"value": {
								"correlationId": "123",
								"result": {
									"playerId": "123",
									"windowId": "456"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				},
				{
					"name": "Example #2",
					"params": [
						{
							"name": "response",
							"value": {
								"correlationId": "123",
								"result": {
									"playerId": "abc",
									"windowId": "def"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				}
			]
		},
		{
			"name": "StreamingPlayer.createError",
			"summary": "Internal API for Create Provider to send back error.",
			"params": [
				{
					"name": "error",
					"required": true,
					"schema": {
						"allOf": [
							{
								"$ref": "#/x-schemas/Types/ProviderResponse"
							},
							{
								"type": "object",
								"properties": {
									"result": {
										"type": "object",
										"additionalProperties": false,
										"required": [
											"code",
											"message"
										],
										"properties": {
											"code": {
												"title": "errorObjectCode",
												"description": "A Number that indicates the error type that occurred. This MUST be an integer. The error codes from and including -32768 to -32000 are reserved for pre-defined errors. These pre-defined errors SHOULD be assumed to be returned from any JSON-RPC api.",
												"type": "integer"
											},
											"message": {
												"title": "errorObjectMessage",
												"description": "A String providing a short description of the error. The message SHOULD be limited to a concise single sentence.",
												"type": "string"
											},
											"data": {
												"title": "errorObjectData",
												"description": "A Primitive or Structured value that contains additional information about the error. This may be omitted. The value of this member is defined by the Server (e.g. detailed error information, nested errors etc.)."
											}
										}
									}
								}
							}
						]
					}
				}
			],
			"tags": [
				{
					"name": "rpc-only"
				},
				{
					"name": "capabilities",
					"x-provides": "xrn:firebolt:capability:player:streaming",
					"x-allow-focus": false,
					"x-error-for": "onRequestCreate"
				}
			],
			"result": {
				"name": "result",
				"schema": {
					"type": "null"
				}
			},
			"examples": [
				{
					"name": "Example 1",
					"params": [
						{
							"name": "error",
							"value": {
								"correlationId": "123",
								"result": {
									"code": 1,
									"message": "Error"
								}
							}
						}
					],
					"result": {
						"name": "result",
						"value": null
					}
				}
			]
		}
	],
	"components": {
		"schemas": {
			"ChallengeRequestor": {
				"title": "ChallengeRequestor",
				"type": "object",
				"required": [
					"id",
					"name"
				],
				"properties": {
					"id": {
						"type": "string",
						"description": "The id of the app that requested the challenge"
					},
					"name": {
						"type": "string",
						"description": "The name of the app that requested the challenge"
					}
				}
			},
			"Challenge": {
				"title": "Challenge",
				"type": "object",
				"required": [
					"capability",
					"requestor"
				],
				"properties": {
					"capability": {
						"type": "string",
						"description": "The capability that is being requested by the user to approve"
					},
					"requestor": {
						"description": "The identity of which app is requesting access to this capability",
						"$ref": "#/components/schemas/ChallengeRequestor"
					}
				}
			},
			"BroadcastPlayerCreateProviderRequest": {
				"title": "BroadcastPlayerCreateProviderRequest",
				"type": "object",
				"required": [
					"correlationId",
					"parameters"
				],
				"properties": {
					"correlationId": {
						"type": "string",
						"description": "An id to correlate the provider response with this request"
					},
					"parameters": {
						"description": "The request to load media in the player",
						"$ref": "#/components/schemas/BroadcastPlayerCreateRequest"
					}
				},
				"examples": [
					{}
				]
			},
			"BroadcastPlayerCreateRequest": {
				"title": "BroadcastPlayerCreateRequest",
				"type": "object",
				"required": [],
				"properties": {},
				"examples": [
					{}
				]
			},
			"BroadcastPlayerInstance": {
				"title": "BroadcastPlayerInstance",
				"type": "object",
				"required": [
					"playerId",
					"windowId"
				],
				"properties": {
					"playerId": {
						"description": "The id of player which can be used to load media or control the player",
						"type": "string"
					},
					"windowId": {
						"description": "The id of window which will render the media in, can be used to control on screen where the media is shown",
						"type": "string"
					}
				},
				"examples": [
					{
						"playerId": "123",
						"windowId": "456"
					},
					{
						"playerId": "abc",
						"windowId": "def"
					}
				]
			},
			"BroadcastPlayerStatus": {
				"title": "BroadcastPlayerStatus",
				"type": "object",
				"required": [
					"locked",
					"frequency",
					"signalStrength",
					"signalQuality"
				],
				"properties": {
					"locked": {
						"description": "Whether the current media has been locked",
						"type": "boolean"
					},
					"frequency": {
						"description": "The signal frequency in hertz",
						"type": "integer"
					},
					"signalStrength": {
						"description": "The strength of the signal from 0-100",
						"type": "integer",
						"minimum": 0,
						"maximum": 100
					},
					"signalQuality": {
						"description": "The quality of the signal from 0-100",
						"type": "integer",
						"minimum": 0,
						"maximum": 100
					}
				},
				"examples": [
					{
						"locked": false,
						"frequency": 1,
						"signalStrength": 90,
						"signalQuality": 90
					}
				]
			},
			"FederatedRequest": {
				"title": "FederatedRequest",
				"type": "object",
				"properties": {
					"correlationId": {
						"type": "string"
					}
				},
				"required": [
					"correlationId"
				],
				"propertyNames": {
					"enum": [
						"correlationId",
						"parameters"
					]
				},
				"examples": [
					{
						"correlationId": "xyz"
					}
				]
			},
			"FederatedResponse": {
				"title": "FederatedResponse",
				"type": "object",
				"properties": {
					"correlationId": {
						"type": "string"
					}
				},
				"required": [
					"correlationId",
					"result"
				],
				"propertyNames": {
					"enum": [
						"correlationId",
						"result"
					]
				},
				"examples": [
					{
						"correlationId": "xyz"
					}
				]
			},
			"EntityInfoParameters": {
				"title": "EntityInfoParameters",
				"type": "object",
				"properties": {
					"entityId": {
						"type": "string"
					},
					"assetId": {
						"type": "string"
					}
				},
				"required": [
					"entityId"
				],
				"additionalProperties": false,
				"examples": [
					{
						"entityId": "345"
					}
				]
			},
			"PurchasedContentParameters": {
				"title": "PurchasedContentParameters",
				"type": "object",
				"properties": {
					"limit": {
						"type": "integer",
						"minimum": -1
					},
					"offeringType": {
						"$ref": "#/x-schemas/Entertainment/OfferingType"
					},
					"programType": {
						"$ref": "#/x-schemas/Entertainment/ProgramType"
					}
				},
				"required": [
					"limit"
				],
				"additionalProperties": false,
				"examples": [
					{
						"limit": 100
					}
				]
			},
			"Availability": {
				"title": "Availability",
				"type": "object",
				"properties": {
					"type": {
						"type": "string",
						"enum": [
							"channel-lineup",
							"program-lineup"
						]
					},
					"id": {
						"type": "string"
					},
					"catalogId": {
						"type": "string"
					},
					"startTime": {
						"type": "string",
						"format": "date-time"
					},
					"endTime": {
						"type": "string",
						"format": "date-time"
					}
				},
				"required": [
					"type",
					"id"
				]
			},
			"KeyboardParameters": {
				"title": "KeyboardParameters",
				"type": "object",
				"required": [
					"message"
				],
				"properties": {
					"message": {
						"description": "The message to display to the user so the user knows what they are entering",
						"type": "string"
					}
				},
				"examples": [
					{
						"type": "standard",
						"message": "Enter your user name."
					}
				]
			},
			"EventObjectPrimitives": {
				"title": "EventObjectPrimitives",
				"anyOf": [
					{
						"type": "string",
						"maxLength": 256
					},
					{
						"type": "number"
					},
					{
						"type": "integer"
					},
					{
						"type": "boolean"
					},
					{
						"type": "null"
					}
				]
			},
			"EventObject": {
				"title": "EventObject",
				"type": "object",
				"maxProperties": 256,
				"additionalProperties": {
					"anyOf": [
						{
							"$ref": "#/components/schemas/EventObjectPrimitives"
						},
						{
							"type": "array",
							"maxItems": 256,
							"items": {
								"anyOf": [
									{
										"$ref": "#/components/schemas/EventObjectPrimitives"
									},
									{
										"$ref": "#/components/schemas/EventObject"
									}
								]
							}
						},
						{
							"$ref": "#/components/schemas/EventObject"
						}
					]
				}
			},
			"PinChallenge": {
				"title": "PinChallenge",
				"type": "object",
				"required": [
					"requestor",
					"pinSpace"
				],
				"properties": {
					"pinSpace": {
						"type": "string",
						"description": "The pin space that this challenge is for",
						"enum": [
							"purchase",
							"content"
						]
					},
					"capability": {
						"type": "string",
						"description": "The capability that is gated by a pin challenge"
					},
					"requestor": {
						"description": "The identity of which app is requesting access to this capability",
						"$ref": "#/components/schemas/ChallengeRequestor"
					}
				}
			},
			"ResultReason": {
				"title": "ResultReason",
				"type": "string",
				"description": "The reason for the result of challenging the user",
				"enum": [
					"noPinRequired",
					"noPinRequiredWindow",
					"exceededPinFailures",
					"correctPin",
					"cancelled"
				]
			},
			"PlayerLoadRequest": {
				"title": "PlayerLoadRequest",
				"type": "object",
				"required": [
					"playerId",
					"locator"
				],
				"properties": {
					"playerId": {
						"description": "The id of the player instance to load the locator into",
						"type": "string"
					},
					"locator": {
						"description": "A locator to the content to load",
						"type": "string",
						"format": "uri"
					},
					"metadata": {
						"description": "An opaque set of metadata that will be relevant to the player.",
						"type": "object"
					},
					"autoPlay": {
						"description": "Start playing immediately on load without needing to call Player.play",
						"type": "boolean"
					}
				},
				"examples": [
					{
						"playerId": "app1:123",
						"locator": "https://cdn.rdkcentral.com/media/assets/asset.hls"
					},
					{
						"playerId": "app2:345",
						"locator": "https://cdn.rdkcentral.com/media/assets/asset-2.hls",
						"metadata": {
							"assetType": "linear"
						},
						"autoPlay": true
					}
				]
			},
			"PlayerMediaSession": {
				"title": "PlayerMediaSession",
				"type": "object",
				"required": [
					"mediaSessionId"
				],
				"properties": {
					"mediaSessionId": {
						"description": "The id of media session that was started, when the content was loaded. This should be a new value on each load",
						"type": "string"
					}
				},
				"examples": [
					{
						"mediaSessionId": "sess1"
					},
					{
						"mediaSessionId": "sess2"
					}
				]
			},
			"PlayerStatus": {
				"title": "PlayerStatus",
				"type": "object",
				"required": [
					"mediaSessionId",
					"state"
				],
				"properties": {
					"mediaSessionId": {
						"description": "The id of media session that is currently loaded",
						"type": "string"
					},
					"state": {
						"description": "The state of the player",
						"type": "string",
						"enum": [
							"IDLE",
							"PENDING",
							"PLAYING",
							"BLOCKED",
							"FAILED"
						]
					},
					"blockedReason": {
						"description": "The state of the player",
						"type": "string",
						"enum": [
							"NO_NETWORK",
							"CONTENT_NOT_FOUND",
							"DRM_ERROR",
							"NOT_ENTITLED",
							"GEO_BLOCKED",
							"CHANNEL_NOT_SCANNED",
							"NO_SIGNAL",
							"TECHNICAL_FAULT",
							"CHANNEL_OFF_AIR",
							"PLAYER_FAILURE"
						]
					}
				},
				"examples": [
					{
						"mediaSessionId": "sess1",
						"state": "IDLE"
					},
					{
						"mediaSessionId": "sess2",
						"state": "BLOCKED",
						"blockedReason": "CONTENT_NOT_FOUND"
					}
				]
			},
			"PlayerProgress": {
				"title": "PlayerProgress",
				"type": "object",
				"required": [
					"speed",
					"startPosition",
					"position",
					"endPosition",
					"liveSyncTime"
				],
				"properties": {
					"speed": {
						"description": "The playback speed as a multiplier",
						"type": "number"
					},
					"startPosition": {
						"description": "The position that the media starts at in milliseconds",
						"type": "integer"
					},
					"position": {
						"description": "The current position in milliseconds",
						"type": "integer"
					},
					"endPosition": {
						"description": "The position that the media stops at in milliseconds",
						"type": "integer"
					},
					"liveSyncTime": {
						"description": "The time to sync to live",
						"type": "string",
						"format": "date-time"
					}
				},
				"examples": [
					{
						"speed": 1,
						"startPosition": 0,
						"position": 5000,
						"endPosition": 3600000,
						"liveSyncTime": "2021-04-23T18:25:43.511Z"
					},
					{
						"speed": 3,
						"startPosition": 5000,
						"position": 10000,
						"endPosition": 3600000,
						"liveSyncTime": "2021-04-23T18:25:43.511Z"
					}
				]
			},
			"PlayerLoadProviderRequest": {
				"title": "PlayerLoadProviderRequest",
				"type": "object",
				"required": [
					"correlationId",
					"parameters"
				],
				"properties": {
					"correlationId": {
						"type": "string",
						"description": "An id to correlate the provider response with this request"
					},
					"parameters": {
						"description": "The request to load media in the player",
						"$ref": "#/components/schemas/PlayerLoadRequest"
					}
				}
			},
			"StreamingPlayerCreateProviderRequest": {
				"title": "StreamingPlayerCreateProviderRequest",
				"type": "object",
				"required": [
					"correlationId",
					"parameters"
				],
				"properties": {
					"correlationId": {
						"type": "string",
						"description": "An id to correlate the provider response with this request"
					},
					"parameters": {
						"description": "The request to load media in the player",
						"$ref": "#/components/schemas/StreamingPlayerCreateRequest"
					}
				},
				"examples": [
					{}
				]
			},
			"StreamingPlayerCreateRequest": {
				"title": "StreamingPlayerCreateRequest",
				"type": "object",
				"required": [],
				"properties": {},
				"examples": [
					{}
				]
			},
			"StreamingPlayerInstance": {
				"title": "StreamingPlayerInstance",
				"type": "object",
				"required": [
					"playerId",
					"windowId"
				],
				"properties": {
					"playerId": {
						"description": "The id of player which can be used to load media or control the player",
						"type": "string"
					},
					"windowId": {
						"description": "The id of window which will render the media in, can be used to control on screen where the media is shown",
						"type": "string"
					}
				},
				"examples": [
					{
						"playerId": "123",
						"windowId": "456"
					},
					{
						"playerId": "abc",
						"windowId": "def"
					}
				]
			},
			"AppInfo": {
				"description": "Information about an app that a grant was for",
				"type": "object",
				"properties": {
					"id": {
						"type": "string"
					},
					"title": {
						"type": "string"
					}
				},
				"additionalProperties": false,
				"required": [
					"id"
				]
			},
			"GrantState": {
				"description": "The state the grant is in",
				"type": "string",
				"enum": [
					"granted",
					"denied"
				]
			},
			"WifiSecurityMode": {
				"title": "WifiSecurityMode",
				"description": "Security Mode supported for Wifi",
				"type": "string",
				"enum": [
					"none",
					"wep64",
					"wep128",
					"wpaPskTkip",
					"wpaPskAes",
					"wpa2PskTkip",
					"wpa2PskAes",
					"wpaEnterpriseTkip",
					"wpaEnterpriseAes",
					"wpa2EnterpriseTkip",
					"wpa2EnterpriseAes",
					"wpa2Psk",
					"wpa2Enterprise",
					"wpa3PskAes",
					"wpa3Sae"
				]
			},
			"WifiSignalStrength": {
				"title": "WifiSignalStrength",
				"description": "Strength of Wifi signal, value is negative based on RSSI specification.",
				"type": "integer",
				"default": -255,
				"minimum": -255,
				"maximum": 0
			},
			"WifiFrequency": {
				"title": "WifiFrequency",
				"description": "Wifi Frequency in Ghz, example 2.4Ghz and 5Ghz.",
				"type": "number",
				"default": 0,
				"minimum": 0
			},
			"AccessPoint": {
				"title": "AccessPoint",
				"description": "Properties of a scanned wifi list item.",
				"type": "object",
				"properties": {
					"ssid": {
						"type": "string",
						"description": "Name of the wifi."
					},
					"securityMode": {
						"$ref": "#/components/schemas/WifiSecurityMode"
					},
					"signalStrength": {
						"$ref": "#/components/schemas/WifiSignalStrength"
					},
					"frequency": {
						"$ref": "#/components/schemas/WifiFrequency"
					}
				}
			}
		}
	},
	"x-schemas": {
		"Types": {
			"uri": "https://meta.comcast.com/firebolt/types",
			"SemanticVersion": {
				"title": "SemanticVersion",
				"type": "object",
				"properties": {
					"major": {
						"type": "integer",
						"minimum": 0
					},
					"minor": {
						"type": "integer",
						"minimum": 0
					},
					"patch": {
						"type": "integer",
						"minimum": 0
					},
					"readable": {
						"type": "string"
					}
				},
				"required": [
					"major",
					"minor",
					"patch",
					"readable"
				],
				"additionalProperties": false
			},
			"ListenResponse": {
				"title": "ListenResponse",
				"type": "object",
				"required": [
					"event",
					"listening"
				],
				"properties": {
					"event": {
						"type": "string",
						"pattern": "[a-zA-Z]+\\.on[A-Z][a-zA-Z]+"
					},
					"listening": {
						"type": "boolean"
					}
				},
				"additionalProperties": false
			},
			"ProviderResponse": {
				"title": "ProviderResponse",
				"type": "object",
				"required": [
					"correlationId"
				],
				"additionalProperties": false,
				"properties": {
					"correlationId": {
						"type": "string",
						"description": "The id that was passed in to the event that triggered a provider method to be called"
					},
					"result": {
						"description": "The result of the provider response."
					}
				}
			},
			"ProviderRequest": {
				"title": "ProviderRequest",
				"type": "object",
				"required": [
					"correlationId"
				],
				"additionalProperties": false,
				"properties": {
					"correlationId": {
						"type": "string",
						"description": "The id that was passed in to the event that triggered a provider method to be called"
					},
					"parameters": {
						"description": "The result of the provider response.",
						"type": [
							"object",
							"null"
						]
					}
				}
			},
			"BooleanMap": {
				"title": "BooleanMap",
				"type": "object",
				"additionalProperties": {
					"type": "boolean"
				}
			},
			"AudioProfile": {
				"title": "AudioProfile",
				"type": "string",
				"enum": [
					"stereo",
					"dolbyDigital5.1",
					"dolbyDigital7.1",
					"dolbyDigital5.1+",
					"dolbyDigital7.1+",
					"dolbyAtmos"
				]
			},
			"LocalizedString": {
				"title": "LocalizedString",
				"description": "Localized string supports either a simple `string` or a Map<string, string> of language codes to strings. When using a simple `string`, the current preferred langauge from `Localization.langauge()` is assumed.",
				"oneOf": [
					{
						"type": "string"
					},
					{
						"type": "object",
						"additionalProperties": {
							"type": "string"
						}
					}
				],
				"examples": [
					"A simple string, with no language code",
					{
						"en": "This is english",
						"es": "esto es español"
					}
				]
			},
			"FlatMap": {
				"type": "object",
				"additionalProperties": {
					"oneOf": [
						{
							"type": "string"
						},
						{
							"type": "number"
						},
						{
							"type": "boolean"
						}
					]
				}
			},
			"Timeout": {
				"title": "Timeout",
				"description": "Defines the timeout in seconds. If the threshold for timeout is passed for any operation without a result it will throw an error.",
				"type": "integer",
				"default": 0,
				"minimum": 0,
				"maximum": 9999
			}
		},
		"Accessibility": {
			"uri": "https://meta.comcast.com/firebolt/accessibility",
			"ClosedCaptionsSettings": {
				"title": "ClosedCaptionsSettings",
				"type": "object",
				"required": [
					"enabled",
					"styles"
				],
				"properties": {
					"enabled": {
						"type": "boolean",
						"description": "Whether or not closed-captions should be enabled by default"
					},
					"styles": {
						"$ref": "#/x-schemas/Accessibility/ClosedCaptionsStyles"
					},
					"preferredLanguages": {
						"type": "array",
						"items": {
							"$ref": "#/x-schemas/Localization/ISO639_2Language"
						}
					}
				},
				"examples": [
					{
						"enabled": true,
						"styles": {
							"fontFamily": "monospaced_serif",
							"fontSize": 1,
							"fontColor": "#ffffff",
							"fontEdge": "none",
							"fontEdgeColor": "#7F7F7F",
							"fontOpacity": 100,
							"backgroundColor": "#000000",
							"backgroundOpacity": 100,
							"textAlign": "center",
							"textAlignVertical": "middle",
							"windowColor": "white",
							"windowOpacity": 50
						},
						"preferredLanguages": [
							"eng",
							"spa"
						]
					}
				]
			},
			"VoiceGuidanceSettings": {
				"title": "VoiceGuidanceSettings",
				"type": "object",
				"required": [
					"enabled",
					"speed"
				],
				"properties": {
					"enabled": {
						"type": "boolean",
						"description": "Whether or not voice guidance should be enabled by default"
					},
					"speed": {
						"$ref": "#/x-schemas/Accessibility/VoiceSpeed",
						"description": "The speed at which voice guidance speech will be read back to the user"
					}
				},
				"examples": [
					{
						"enabled": true,
						"speed": 2
					}
				]
			},
			"VoiceSpeed": {
				"title": "VoiceSpeed",
				"type": "number",
				"minimum": 0.5,
				"maximum": 2
			},
			"ClosedCaptionsStyles": {
				"title": "ClosedCaptionsStyles",
				"type": "object",
				"description": "The default styles to use when displaying closed-captions",
				"properties": {
					"fontFamily": {
						"$ref": "#/x-schemas/Accessibility/FontFamily"
					},
					"fontSize": {
						"$ref": "#/x-schemas/Accessibility/FontSize"
					},
					"fontColor": {
						"$ref": "#/x-schemas/Accessibility/Color"
					},
					"fontEdge": {
						"$ref": "#/x-schemas/Accessibility/FontEdge"
					},
					"fontEdgeColor": {
						"$ref": "#/x-schemas/Accessibility/Color"
					},
					"fontOpacity": {
						"$ref": "#/x-schemas/Accessibility/Opacity"
					},
					"backgroundColor": {
						"$ref": "#/x-schemas/Accessibility/Color"
					},
					"backgroundOpacity": {
						"$ref": "#/x-schemas/Accessibility/Opacity"
					},
					"textAlign": {
						"$ref": "#/x-schemas/Accessibility/HorizontalAlignment"
					},
					"textAlignVertical": {
						"$ref": "#/x-schemas/Accessibility/VerticalAlignment"
					},
					"windowColor": {
						"$ref": "#/x-schemas/Accessibility/Color"
					},
					"windowOpacity": {
						"$ref": "#/x-schemas/Accessibility/Opacity"
					}
				}
			},
			"FontFamily": {
				"type": [
					"string",
					"null"
				],
				"enum": [
					"monospaced_serif",
					"proportional_serif",
					"monospaced_sanserif",
					"proportional_sanserif",
					"smallcaps",
					"cursive",
					"casual",
					null
				]
			},
			"FontSize": {
				"type": [
					"number",
					"null"
				],
				"minimum": 0
			},
			"Color": {
				"type": [
					"string",
					"null"
				]
			},
			"FontEdge": {
				"type": [
					"string",
					"null"
				],
				"enum": [
					"none",
					"raised",
					"depressed",
					"uniform",
					"drop_shadow_left",
					"drop_shadow_right",
					null
				]
			},
			"Opacity": {
				"type": [
					"number",
					"null"
				],
				"minimum": 0,
				"maximum": 100
			},
			"HorizontalAlignment": {
				"type": [
					"string",
					"null"
				]
			},
			"VerticalAlignment": {
				"type": [
					"string",
					"null"
				]
			}
		},
		"Localization": {
			"uri": "https://meta.comcast.com/firebolt/localization",
			"ISO639_2Language": {
				"type": "string",
				"pattern": "^[a-z]{3}$"
			},
			"Locality": {
				"type": "string"
			},
			"CountryCode": {
				"type": "string",
				"pattern": "^[A-Z]{2}$"
			},
			"Language": {
				"type": "string",
				"pattern": "^[A-Za-z]{2}$"
			},
			"Locale": {
				"type": "string",
				"pattern": "^[a-zA-Z]+([a-zA-Z0-9\\-]*)$"
			},
			"TimeZone": {
				"type": "string",
				"pattern": "^[-+_/ A-Za-z 0-9]*$"
			}
		},
		"Advertising": {
			"uri": "https://meta.comcast.com/firebolt/advertising",
			"SkipRestriction": {
				"title": "SkipRestriction",
				"$comment": "xrn:advertising:policy:skipRestriction:",
				"type": "string",
				"enum": [
					"none",
					"adsUnwatched",
					"adsAll",
					"all"
				],
				"description": "The advertisement skip restriction.\n\nApplies to fast-forward/rewind (e.g. trick mode), seeking over an entire opportunity (e.g. jump), seeking out of what's currently playing, and \"Skip this ad...\" features. Seeking over multiple ad opportunities only requires playback of the _last_ opportunity, not all opportunities, preceding the seek destination.\n\n| Value        | Description                                                                    |\n|--------------|--------------------------------------------------------------------------------|\n| none         |No fast-forward, jump, or skip restrictions                                    |\n| adsUnwatched | Restrict fast-forward, jump, and skip for unwatched ad opportunities only.     |\n| adsAll       | Restrict fast-forward, jump, and skip for all ad opportunities                 |\n| all          | Restrict fast-forward, jump, and skip for all ad opportunities and all content |\n\nNamespace: `xrn:advertising:policy:skipRestriction:`\n\n"
			}
		},
		"Player": {
			"uri": "https://meta.comcast.com/firebolt/player",
			"PlayerProviderRequest": {
				"title": "PlayerProviderRequest",
				"type": "object",
				"required": [
					"correlationId",
					"parameters"
				],
				"properties": {
					"correlationId": {
						"type": "string",
						"description": "An id to correlate the provider response with this request"
					},
					"parameters": {
						"description": "The player request",
						"$ref": "#/x-schemas/Player/PlayerRequest"
					}
				}
			},
			"PlayerRequest": {
				"title": "PlayerRequest",
				"type": "object",
				"required": [
					"playerId"
				],
				"properties": {
					"playerId": {
						"description": "The id of the player instance to play in",
						"type": "string"
					}
				},
				"examples": [
					{
						"playerId": "app1:123"
					},
					{
						"playerId": "app2:345"
					}
				]
			}
		},
		"Capabilities": {
			"uri": "https://meta.comcast.com/firebolt/capabilities",
			"Capability": {
				"title": "Capability",
				"type": "string",
				"description": "A Capability is a discrete unit of functionality that a Firebolt device might be able to perform.",
				"pattern": "^xrn:firebolt:capability:([a-z0-9\\-]+)((:[a-z0-9\\-]+)?)$"
			},
			"CapabilityInfo": {
				"title": "CapabilityInfo",
				"type": "object",
				"required": [
					"supported",
					"available",
					"use",
					"manage",
					"provide"
				],
				"properties": {
					"capability": {
						"$ref": "#/x-schemas/Capabilities/Capability"
					},
					"supported": {
						"type": "boolean",
						"description": "Provides info whether the capability is supported"
					},
					"available": {
						"type": "boolean",
						"description": "Provides info whether the capability is available"
					},
					"use": {
						"$ref": "#/x-schemas/Capabilities/CapPermissionStatus"
					},
					"manage": {
						"$ref": "#/x-schemas/Capabilities/CapPermissionStatus"
					},
					"provide": {
						"$ref": "#/x-schemas/Capabilities/CapPermissionStatus"
					},
					"details": {
						"type": "array",
						"items": {
							"$ref": "#/x-schemas/Capabilities/DenyReason"
						},
						"minItems": 1,
						"maxItems": 6
					}
				},
				"additionalProperties": false,
				"examples": [
					{
						"capability": "xrn:firebolt:capability:keyboard",
						"supported": true,
						"available": true,
						"use": {
							"permitted": true,
							"granted": true
						},
						"manage": {
							"permitted": true,
							"granted": true
						},
						"provide": {
							"permitted": true,
							"granted": true
						}
					}
				]
			},
			"Permission": {
				"title": "Permission",
				"description": "A sapability combined with a Role, which an app may be permitted (by a distributor) or granted (by an end user).",
				"type": "object",
				"properties": {
					"role": {
						"$ref": "#/x-schemas/Capabilities/Role"
					},
					"capability": {
						"$ref": "#/x-schemas/Capabilities/Capability"
					}
				},
				"additionalProperties": false
			},
			"Role": {
				"title": "Role",
				"description": "Role provides access level for the app for a given capability.",
				"type": "string",
				"enum": [
					"use",
					"manage",
					"provide"
				]
			},
			"CapPermissionStatus": {
				"type": "object",
				"properties": {
					"permitted": {
						"type": "boolean",
						"description": "Provides info whether the capability is permitted"
					},
					"granted": {
						"oneOf": [
							{
								"type": "boolean",
								"description": "Provides info whether the capability is granted"
							},
							{
								"const": null
							}
						]
					}
				},
				"additionalProperties": false
			},
			"DenyReason": {
				"title": "DenyReason",
				"description": "Reasons why a Capability might not be invokable",
				"type": "string",
				"enum": [
					"unpermitted",
					"unsupported",
					"disabled",
					"unavailable",
					"grantDenied",
					"ungranted"
				]
			}
		},
		"Discovery": {
			"uri": "https://meta.comcast.com/firebolt/discovery",
			"EntityInfoResult": {
				"title": "EntityInfoResult",
				"description": "The result for an `entityInfo()` push or pull.",
				"type": "object",
				"properties": {
					"expires": {
						"type": "string",
						"format": "date-time"
					},
					"entity": {
						"$ref": "#/x-schemas/Entertainment/EntityInfo"
					},
					"related": {
						"type": "array",
						"items": {
							"$ref": "#/x-schemas/Entertainment/EntityInfo"
						}
					}
				},
				"required": [
					"expires",
					"entity"
				],
				"additionalProperties": false
			},
			"PurchasedContentResult": {
				"title": "PurchasedContentResult",
				"type": "object",
				"properties": {
					"expires": {
						"type": "string",
						"format": "date-time"
					},
					"totalCount": {
						"type": "integer",
						"minimum": 0
					},
					"entries": {
						"type": "array",
						"items": {
							"$ref": "#/x-schemas/Entertainment/EntityInfo"
						}
					}
				},
				"required": [
					"expires",
					"totalCount",
					"entries"
				],
				"additionalProperties": false
			}
		},
		"Entertainment": {
			"uri": "https://meta.comcast.com/firebolt/entertainment",
			"ContentIdentifiers": {
				"title": "ContentIdentifiers",
				"type": "object",
				"properties": {
					"assetId": {
						"type": "string",
						"description": "Identifies a particular playable asset. For example, the HD version of a particular movie separate from the UHD version."
					},
					"entityId": {
						"type": "string",
						"description": "Identifies an entity, such as a Movie, TV Series or TV Episode."
					},
					"seasonId": {
						"type": "string",
						"description": "The TV Season for a TV Episode."
					},
					"seriesId": {
						"type": "string",
						"description": "The TV Series for a TV Episode or TV Season."
					},
					"appContentData": {
						"type": "string",
						"description": "App-specific content identifiers.",
						"maxLength": 1024
					}
				},
				"description": "The ContentIdentifiers object is how the app identifies an entity or asset to\nthe Firebolt platform. These ids are used to look up metadata and deep link into\nthe app.\n\nApps do not need to provide all ids. They only need to provide the minimum\nrequired to target a playable stream or an entity detail screen via a deep link.\nIf an id isn't needed to get to those pages, it doesn't need to be included."
			},
			"Entitlement": {
				"title": "Entitlement",
				"type": "object",
				"properties": {
					"entitlementId": {
						"type": "string"
					},
					"startTime": {
						"type": "string",
						"format": "date-time"
					},
					"endTime": {
						"type": "string",
						"format": "date-time"
					}
				},
				"required": [
					"entitlementId"
				]
			},
			"EntityInfo": {
				"title": "EntityInfo",
				"description": "An EntityInfo object represents an \"entity\" on the platform. Currently, only entities of type `program` are supported. `programType` must be supplied to identify the program type.\n\nAdditionally, EntityInfo objects must specify a properly formed\nContentIdentifiers object, `entityType`, and `title`.  The app should provide\nthe `synopsis` property for a good user experience if the content\nmetadata is not available another way.\n\nThe ContentIdentifiers must be sufficient for navigating the user to the\nappropriate entity or detail screen via a `detail` intent or deep link.\n\nEntityInfo objects must provide at least one WayToWatch object when returned as\npart of an `entityInfo` method and a streamable asset is available to the user.\nIt is optional for the `purchasedContent` method, but recommended because the UI\nmay use those data.",
				"type": "object",
				"required": [
					"identifiers",
					"entityType",
					"programType",
					"title"
				],
				"properties": {
					"identifiers": {
						"$ref": "#/x-schemas/Entertainment/ContentIdentifiers"
					},
					"title": {
						"type": "string",
						"description": "Title of the entity."
					},
					"entityType": {
						"const": "program",
						"description": "The type of the entity. If `program`, then `programType` must be provided."
					},
					"programType": {
						"$ref": "#/x-schemas/Entertainment/ProgramType"
					},
					"synopsis": {
						"type": "string",
						"description": "Short description of the entity."
					},
					"seasonNumber": {
						"type": "number",
						"description": "For TV seasons, the season number. For TV episodes, the season that the episode belongs to."
					},
					"seasonCount": {
						"type": "number",
						"description": "For TV series, seasons, and episodes, the total number of seasons."
					},
					"episodeNumber": {
						"type": "number",
						"description": "For TV episodes, the episode number."
					},
					"episodeCount": {
						"type": "number",
						"description": "For TV seasons and episodes, the total number of episodes in the current season."
					},
					"releaseDate": {
						"type": "string",
						"format": "date-time",
						"description": "The date that the program or entity was released or first aired."
					},
					"contentRatings": {
						"type": "array",
						"items": {
							"$ref": "#/x-schemas/Entertainment/ContentRating"
						},
						"description": "A list of ContentRating objects, describing the entity's ratings in various rating schemes."
					},
					"waysToWatch": {
						"type": "array",
						"items": {
							"$ref": "#/x-schemas/Entertainment/WayToWatch"
						},
						"description": "An array of ways a user is might watch this entity, regardless of entitlements."
					}
				}
			},
			"OfferingType": {
				"title": "OfferingType",
				"type": "string",
				"enum": [
					"free",
					"subscribe",
					"buy",
					"rent"
				],
				"description": "The offering type of the WayToWatch."
			},
			"ProgramType": {
				"title": "ProgramType",
				"type": "string",
				"description": "In the case of a program `entityType`, specifies the program type.",
				"enum": [
					"movie",
					"episode",
					"season",
					"series",
					"other",
					"preview",
					"extra",
					"concert",
					"sportingEvent",
					"advertisement",
					"musicVideo",
					"minisode"
				]
			},
			"ContentRating": {
				"title": "ContentRating",
				"type": "object",
				"required": [
					"scheme",
					"rating"
				],
				"properties": {
					"scheme": {
						"type": "string",
						"enum": [
							"CA-Movie",
							"CA-TV",
							"CA-Movie-Fr",
							"CA-TV-Fr",
							"US-Movie",
							"US-TV"
						],
						"description": "The rating scheme."
					},
					"rating": {
						"type": "string",
						"description": "The content rating."
					},
					"advisories": {
						"type": "array",
						"items": {
							"type": "string"
						},
						"description": "Optional list of subratings or content advisories."
					}
				},
				"description": "A ContentRating represents an age or content based of an entity. Supported rating schemes and associated types are below.\n\n## United States\n\n`US-Movie` (MPAA):\n\nRatings: `NR`, `G`, `PG`, `PG13`, `R`, `NC17`\n\nAdvisories: `AT`, `BN`, `SL`, `SS`, `N`, `V`\n\n`US-TV` (Vchip):\n\nRatings: `TVY`, `TVY7`, `TVG`, `TVPG`, `TV14`, `TVMA`\n\nAdvisories: `FV`, `D`, `L`, `S`, `V`\n\n## Canada\n\n`CA-Movie` (OFRB):\n\nRatings: `G`, `PG`, `14A`, `18A`, `R`, `E`\n\n`CA-TV` (AGVOT)\n\nRatings: `E`, `C`, `C8`, `G`, `PG`, `14+`, `18+`\n\nAdvisories: `C`, `C8`, `G`, `PG`, `14+`, `18+`\n\n`CA-Movie-Fr` (Canadian French language movies):\n\nRatings: `G`, `8+`, `13+`, `16+`, `18+`\n\n`CA-TV-Fr` (Canadian French language TV):\n\nRatings: `G`, `8+`, `13+`, `16+`, `18+`\n"
			},
			"WayToWatch": {
				"title": "WayToWatch",
				"type": "object",
				"required": [
					"identifiers",
					"audioProfile"
				],
				"properties": {
					"identifiers": {
						"$ref": "#/x-schemas/Entertainment/ContentIdentifiers"
					},
					"expires": {
						"type": "string",
						"format": "date-time",
						"description": "Time when the WayToWatch is no longer available."
					},
					"entitled": {
						"type": "boolean",
						"description": "Specify if the user is entitled to watch the entity."
					},
					"entitledExpires": {
						"type": "string",
						"format": "date-time",
						"description": "Time when the entity is no longer entitled."
					},
					"offeringType": {
						"$ref": "#/x-schemas/Entertainment/OfferingType"
					},
					"hasAds": {
						"type": "boolean",
						"description": "True if the streamable asset contains ads."
					},
					"price": {
						"type": "number",
						"description": "For \"buy\" and \"rent\" WayToWatch, the price to buy or rent in the user's preferred currency."
					},
					"videoQuality": {
						"type": "array",
						"items": {
							"type": "string",
							"enum": [
								"SD",
								"HD",
								"UHD"
							]
						},
						"description": "List of the video qualities available via the WayToWatch."
					},
					"audioProfile": {
						"type": "array",
						"items": {
							"$ref": "#/x-schemas/Types/AudioProfile"
						},
						"description": "List of the audio types available via the WayToWatch."
					},
					"audioLanguages": {
						"type": "array",
						"items": {
							"type": "string"
						},
						"description": "List of audio track languages available on the WayToWatch. The first is considered the primary language. Languages are expressed as ISO 639 1/2 codes."
					},
					"closedCaptions": {
						"type": "array",
						"items": {
							"type": "string"
						},
						"description": "List of languages for which closed captions are available on the WayToWatch. Languages are expressed as ISO 639 1/2 codes."
					},
					"subtitles": {
						"type": "array",
						"items": {
							"type": "string"
						},
						"description": "List of languages for which subtitles are available on the WayToWatch. Languages are expressed as ISO 639 1/2 codes."
					},
					"audioDescriptions": {
						"type": "array",
						"items": {
							"type": "string"
						},
						"description": "List of languages for which audio descriptions (DVD) as available on the WayToWatch. Languages are expressed as ISO 639 1/2 codes."
					}
				},
				"description": "A WayToWatch describes a way to watch a video program. It may describe a single\nstreamable asset or a set of streamable assets. For example, an app provider may\ndescribe HD, SD, and UHD assets as individual WayToWatch objects or rolled into\na single WayToWatch.\n\nIf the WayToWatch represents a single streamable asset, the provided\nContentIdentifiers must be sufficient to play back the specific asset when sent\nvia a playback intent or deep link. If the WayToWatch represents multiple\nstreamable assets, the provided ContentIdentifiers must be sufficient to\nplayback one of the assets represented with no user action. In this scenario,\nthe app SHOULD choose the best asset for the user based on their device and\nsettings. The ContentIdentifiers MUST also be sufficient for navigating the user\nto the appropriate entity or detail screen via an entity intent.\n\nThe app should set the `entitled` property to indicate if the user can watch, or\nnot watch, the asset without making a purchase. If the entitlement is known to\nexpire at a certain time (e.g., a rental), the app should also provide the\n`entitledExpires` property. If the entitlement is not expired, the UI will use\nthe `entitled` property to display watchable assets to the user, adjust how\nassets are presented to the user, and how intents into the app are generated.\nFor example, the the Aggregated Experience could render a \"Watch\" button for an\nentitled asset versus a \"Subscribe\" button for an non-entitled asset.\n\nThe app should set the `offeringType` to define how the content may be\nauthorized. The UI will use this to adjust how content is presented to the user.\n\nA single WayToWatch cannot represent streamable assets available via multiple\npurchase paths. If, for example, an asset has both Buy, Rent and Subscription\navailability, the three different entitlement paths MUST be represented as\nmultiple WayToWatch objects.\n\n`price` should be populated for WayToWatch objects with `buy` or `rent`\n`offeringType`. If the WayToWatch represents a set of assets with various price\npoints, the `price` provided must be the lowest available price."
			}
		},
		"Intents": {
			"uri": "https://meta.comcast.com/firebolt/intents",
			"NavigationIntent": {
				"title": "NavigationIntent",
				"description": "A Firebolt compliant representation of a user intention to navigate to a specific place in an app.",
				"anyOf": [
					{
						"$ref": "#/x-schemas/Intents/HomeIntent"
					},
					{
						"$ref": "#/x-schemas/Intents/LaunchIntent"
					},
					{
						"$ref": "#/x-schemas/Intents/EntityIntent"
					},
					{
						"$ref": "#/x-schemas/Intents/PlaybackIntent"
					},
					{
						"$ref": "#/x-schemas/Intents/SearchIntent"
					},
					{
						"$ref": "#/x-schemas/Intents/SectionIntent"
					},
					{
						"$ref": "#/x-schemas/Intents/TuneIntent"
					}
				]
			},
			"HomeIntent": {
				"description": "A Firebolt compliant representation of a user intention to navigate an app to it's home screen, and bring that app to the foreground if needed.",
				"title": "HomeIntent",
				"allOf": [
					{
						"title": "HomeIntent",
						"$ref": "#/x-schemas/Intents/Intent"
					},
					{
						"title": "HomeIntent",
						"$ref": "#/x-schemas/Intents/IntentProperties"
					},
					{
						"title": "HomeIntent",
						"type": "object",
						"properties": {
							"action": {
								"const": "home"
							}
						}
					}
				],
				"examples": [
					{
						"action": "home",
						"context": {
							"source": "voice"
						}
					}
				]
			},
			"LaunchIntent": {
				"description": "A Firebolt compliant representation of a user intention to launch an app.",
				"title": "LaunchIntent",
				"allOf": [
					{
						"$ref": "#/x-schemas/Intents/Intent"
					},
					{
						"$ref": "#/x-schemas/Intents/IntentProperties"
					},
					{
						"type": "object",
						"properties": {
							"action": {
								"const": "launch"
							}
						}
					}
				],
				"examples": [
					{
						"action": "launch",
						"context": {
							"source": "voice"
						}
					}
				]
			},
			"EntityIntent": {
				"description": "A Firebolt compliant representation of a user intention to navigate an app to a specific entity page, and bring that app to the foreground if needed.",
				"title": "EntityIntent",
				"allOf": [
					{
						"$ref": "#/x-schemas/Intents/Intent"
					},
					{
						"$ref": "#/x-schemas/Intents/IntentProperties"
					},
					{
						"type": "object",
						"required": [
							"data"
						],
						"properties": {
							"action": {
								"const": "entity"
							},
							"data": {
								"anyOf": [
									{
										"$ref": "#/x-schemas/Intents/MovieEntity"
									},
									{
										"$ref": "#/x-schemas/Intents/TVEpisodeEntity"
									},
									{
										"$ref": "#/x-schemas/Intents/TVSeriesEntity"
									},
									{
										"$ref": "#/x-schemas/Intents/TVSeasonEntity"
									},
									{
										"$ref": "#/x-schemas/Intents/AdditionalEntity"
									},
									{
										"$ref": "#/x-schemas/Intents/UntypedEntity"
									}
								]
							}
						}
					}
				],
				"examples": [
					{
						"action": "entity",
						"context": {
							"source": "voice"
						},
						"data": {
							"entityType": "program",
							"programType": "movie",
							"entityId": "el-camino"
						}
					}
				]
			},
			"PlaybackIntent": {
				"description": "A Firebolt compliant representation of a user intention to navigate an app to a the video player for a specific, playable entity, and bring that app to the foreground if needed.",
				"title": "PlaybackIntent",
				"allOf": [
					{
						"$ref": "#/x-schemas/Intents/Intent"
					},
					{
						"$ref": "#/x-schemas/Intents/IntentProperties"
					},
					{
						"type": "object",
						"required": [
							"data"
						],
						"properties": {
							"action": {
								"const": "playback"
							},
							"data": {
								"anyOf": [
									{
										"$ref": "#/x-schemas/Intents/MovieEntity"
									},
									{
										"$ref": "#/x-schemas/Intents/TVEpisodeEntity"
									},
									{
										"$ref": "#/x-schemas/Intents/AdditionalEntity"
									}
								]
							}
						}
					}
				],
				"examples": [
					{
						"action": "playback",
						"data": {
							"entityType": "program",
							"programType": "episode",
							"entityId": "breaking-bad-pilot",
							"seriesId": "breaking-bad",
							"seasonId": "breaking-bad-season-1"
						},
						"context": {
							"source": "voice"
						}
					}
				]
			},
			"SearchIntent": {
				"description": "A Firebolt compliant representation of a user intention to navigate an app to it's search UI with a search term populated, and bring that app to the foreground if needed.",
				"title": "SearchIntent",
				"allOf": [
					{
						"$ref": "#/x-schemas/Intents/Intent"
					},
					{
						"$ref": "#/x-schemas/Intents/IntentProperties"
					},
					{
						"type": "object",
						"properties": {
							"action": {
								"const": "search"
							},
							"data": {
								"type": "object",
								"required": [
									"query"
								],
								"properties": {
									"query": {
										"type": "string"
									}
								},
								"additionalProperties": false
							}
						}
					}
				],
				"examples": [
					{
						"action": "search",
						"data": {
							"query": "walter white"
						},
						"context": {
							"source": "voice"
						}
					}
				]
			},
			"SectionIntent": {
				"description": "A Firebolt compliant representation of a user intention to navigate an app to a section not covered by `home`, `entity`, `player`, or `search`, and bring that app to the foreground if needed.",
				"title": "SectionIntent",
				"allOf": [
					{
						"$ref": "#/x-schemas/Intents/Intent"
					},
					{
						"$ref": "#/x-schemas/Intents/IntentProperties"
					},
					{
						"type": "object",
						"properties": {
							"action": {
								"const": "section"
							},
							"data": {
								"type": "object",
								"required": [
									"sectionName"
								],
								"properties": {
									"sectionName": {
										"type": "string"
									}
								},
								"additionalProperties": false
							}
						}
					}
				],
				"examples": [
					{
						"action": "section",
						"data": {
							"sectionName": "settings"
						},
						"context": {
							"source": "voice"
						}
					}
				]
			},
			"TuneIntent": {
				"description": "A Firebolt compliant representation of a user intention to 'tune' to a traditional over-the-air broadcast, or an OTT Stream from an OTT or vMVPD App.",
				"title": "TuneIntent",
				"allOf": [
					{
						"$ref": "#/x-schemas/Intents/Intent"
					},
					{
						"$ref": "#/x-schemas/Intents/IntentProperties"
					},
					{
						"type": "object",
						"required": [
							"data"
						],
						"properties": {
							"action": {
								"const": "tune"
							},
							"data": {
								"type": "object",
								"required": [
									"entity"
								],
								"additionalProperties": false,
								"properties": {
									"entity": {
										"$ref": "#/x-schemas/Intents/ChannelEntity"
									},
									"options": {
										"description": "The options property of the data property MUST have only one of the following fields.",
										"type": "object",
										"required": [],
										"additionalProperties": false,
										"minProperties": 1,
										"maxProperties": 1,
										"properties": {
											"assetId": {
												"type": "string",
												"description": "The ID of a specific 'listing', as scoped by the target App's ID-space, which the App should begin playback from."
											},
											"restartCurrentProgram": {
												"type": "boolean",
												"description": "Denotes that the App should start playback at the most recent program boundary, rather than 'live.'"
											},
											"time": {
												"type": "string",
												"format": "date-time",
												"description": "ISO 8601 Date/Time where the App should begin playback from."
											}
										}
									}
								}
							}
						}
					}
				],
				"examples": [
					{
						"action": "tune",
						"data": {
							"entity": {
								"entityType": "channel",
								"channelType": "streaming",
								"entityId": "an-ott-channel"
							},
							"options": {
								"restartCurrentProgram": true
							}
						},
						"context": {
							"source": "voice"
						}
					}
				]
			},
			"Intent": {
				"description": "A Firebolt compliant representation of a user intention.",
				"type": "object",
				"required": [
					"action",
					"context"
				],
				"properties": {
					"action": {
						"type": "string"
					},
					"context": {
						"type": "object",
						"required": [
							"source"
						],
						"properties": {
							"source": {
								"type": "string",
								"enum": [
									"voice",
									"channel-lineup",
									"editorial",
									"device"
								]
							}
						}
					}
				}
			},
			"IntentProperties": {
				"type": "object",
				"propertyNames": {
					"enum": [
						"action",
						"data",
						"context"
					]
				}
			},
			"MovieEntity": {
				"title": "MovieEntity",
				"allOf": [
					{
						"$ref": "#/x-schemas/Intents/ProgramEntity"
					},
					{
						"description": "A Firebolt compliant representation of a Movie entity.",
						"title": "MovieEntity",
						"type": "object",
						"required": [
							"entityType",
							"programType",
							"entityId"
						],
						"properties": {
							"entityType": {
								"const": "program"
							},
							"programType": {
								"const": "movie"
							},
							"entityId": {
								"$ref": "#/x-schemas/Intents/Identifier"
							},
							"assetId": {
								"$ref": "#/x-schemas/Intents/Identifier"
							},
							"appContentData": {
								"type": "string",
								"maxLength": 256
							}
						},
						"additionalProperties": false
					}
				],
				"examples": [
					{
						"entityType": "program",
						"programType": "movie",
						"entityId": "el-camino"
					}
				]
			},
			"TVEpisodeEntity": {
				"title": "TVEpisodeEntity",
				"allOf": [
					{
						"$ref": "#/x-schemas/Intents/ProgramEntity"
					},
					{
						"description": "A Firebolt compliant representation of a TV Episode entity.",
						"title": "TVEpisodeEntity",
						"type": "object",
						"required": [
							"entityType",
							"programType",
							"entityId",
							"seriesId",
							"seasonId"
						],
						"properties": {
							"entityType": {
								"const": "program"
							},
							"programType": {
								"const": "episode"
							},
							"entityId": {
								"$ref": "#/x-schemas/Intents/Identifier"
							},
							"seriesId": {
								"$ref": "#/x-schemas/Intents/Identifier"
							},
							"seasonId": {
								"$ref": "#/x-schemas/Intents/Identifier"
							},
							"assetId": {
								"$ref": "#/x-schemas/Intents/Identifier"
							},
							"appContentData": {
								"type": "string",
								"maxLength": 256
							}
						},
						"additionalProperties": false
					}
				],
				"examples": [
					{
						"entityType": "program",
						"programType": "episode",
						"entityId": "breaking-bad-pilot",
						"seriesId": "breaking-bad",
						"seasonId": "breaking-bad-season-1"
					}
				]
			},
			"TVSeriesEntity": {
				"title": "TVSeriesEntity",
				"allOf": [
					{
						"$ref": "#/x-schemas/Intents/ProgramEntity"
					},
					{
						"description": "A Firebolt compliant representation of a TV Series entity.",
						"type": "object",
						"required": [
							"entityType",
							"programType",
							"entityId"
						],
						"properties": {
							"entityType": {
								"const": "program"
							},
							"programType": {
								"const": "series"
							},
							"entityId": {
								"$ref": "#/x-schemas/Intents/Identifier"
							},
							"assetId": {
								"$ref": "#/x-schemas/Intents/Identifier"
							},
							"appContentData": {
								"type": "string",
								"maxLength": 256
							}
						},
						"additionalProperties": false
					}
				],
				"examples": [
					{
						"entityType": "program",
						"programType": "series",
						"entityId": "breaking-bad"
					}
				]
			},
			"TVSeasonEntity": {
				"title": "TVSeasonEntity",
				"description": "A Firebolt compliant representation of a TV Season entity.",
				"allOf": [
					{
						"$ref": "#/x-schemas/Intents/ProgramEntity"
					},
					{
						"type": "object",
						"required": [
							"entityType",
							"programType",
							"entityId",
							"seriesId"
						],
						"properties": {
							"entityType": {
								"const": "program"
							},
							"programType": {
								"const": "season"
							},
							"entityId": {
								"$ref": "#/x-schemas/Intents/Identifier"
							},
							"seriesId": {
								"$ref": "#/x-schemas/Intents/Identifier"
							},
							"assetId": {
								"$ref": "#/x-schemas/Intents/Identifier"
							},
							"appContentData": {
								"type": "string",
								"maxLength": 256
							}
						},
						"additionalProperties": false
					}
				],
				"examples": [
					{
						"entityType": "program",
						"programType": "season",
						"entityId": "breaking-bad-season-1",
						"seriesId": "breaking-bad"
					}
				]
			},
			"AdditionalEntity": {
				"title": "AdditionalEntity",
				"allOf": [
					{
						"$ref": "#/x-schemas/Intents/ProgramEntity"
					},
					{
						"description": "A Firebolt compliant representation of the remaining entity types.",
						"type": "object",
						"required": [
							"entityType",
							"entityId"
						],
						"properties": {
							"entityType": {
								"const": "program"
							},
							"programType": {
								"type": "string",
								"enum": [
									"concert",
									"sportingEvent",
									"preview",
									"other",
									"advertisement",
									"musicVideo",
									"minisode",
									"extra"
								]
							},
							"entityId": {
								"$ref": "#/x-schemas/Intents/Identifier"
							},
							"assetId": {
								"$ref": "#/x-schemas/Intents/Identifier"
							},
							"appContentData": {
								"type": "string",
								"maxLength": 256
							}
						},
						"additionalProperties": false
					}
				],
				"examples": [
					{
						"entityType": "program",
						"programType": "concert",
						"entityId": "live-aid"
					}
				]
			},
			"UntypedEntity": {
				"title": "UntypedEntity",
				"allOf": [
					{
						"description": "A Firebolt compliant representation of the remaining entity types.",
						"type": "object",
						"required": [
							"entityId"
						],
						"properties": {
							"entityId": {
								"$ref": "#/x-schemas/Intents/Identifier"
							},
							"assetId": {
								"$ref": "#/x-schemas/Intents/Identifier"
							},
							"appContentData": {
								"type": "string",
								"maxLength": 256
							}
						},
						"additionalProperties": false
					}
				],
				"examples": [
					{
						"entityId": "an-entity"
					}
				]
			},
			"ChannelEntity": {
				"title": "ChannelEntity",
				"type": "object",
				"properties": {
					"entityType": {
						"const": "channel"
					},
					"channelType": {
						"type": "string",
						"enum": [
							"streaming",
							"overTheAir"
						]
					},
					"entityId": {
						"type": "string",
						"description": "ID of the channel, in the target App's scope."
					},
					"appContentData": {
						"type": "string",
						"maxLength": 256
					}
				},
				"required": [
					"entityType",
					"channelType",
					"entityId"
				],
				"additionalProperties": false
			},
			"ProgramEntity": {
				"title": "ProgramEntity",
				"type": "object",
				"properties": {
					"entityType": {
						"const": "program"
					},
					"programType": {
						"$ref": "#/x-schemas/Entertainment/ProgramType"
					},
					"entityId": {
						"type": "string"
					}
				},
				"required": [
					"entityType",
					"programType",
					"entityId"
				]
			},
			"Identifier": {
				"type": "string"
			}
		},
		"Lifecycle": {
			"uri": "https://meta.comcast.com/firebolt/lifecycle",
			"CloseReason": {
				"title": "CloseReason",
				"description": "The application close reason",
				"type": "string",
				"enum": [
					"remoteButton",
					"userExit",
					"done",
					"error"
				]
			},
			"LifecycleState": {
				"title": "LifecycleState",
				"description": "The application lifecycle state",
				"type": "string",
				"enum": [
					"initializing",
					"inactive",
					"foreground",
					"background",
					"unloading",
					"suspended"
				]
			}
		},
		"SecondScreen": {
			"uri": "https://meta.comcast.com/firebolt/secondscreen",
			"SecondScreenEvent": {
				"title": "SecondScreenEvent",
				"description": "An a message notification from a second screen device",
				"type": "object",
				"required": [
					"type"
				],
				"properties": {
					"type": {
						"type": "string",
						"enum": [
							"dial"
						]
					},
					"version": {
						"type": "string"
					},
					"data": {
						"type": "string"
					}
				}
			}
		}
	}
}