{
	"_copyright": "Copyright (C) 2012 - 2013, Digium, Inc.",
	"_author": "David M. Lee, II <dlee@digium.com>",
	"_svn_revision": "$Revision$",
	"apiVersion": "2.0.0",
	"swaggerVersion": "1.1",
	"basePath": "http://localhost:8088/ari",
	"resourcePath": "/api-docs/channels.{format}",
	"since": [
		"12.0.0"
	],
	"requiresModules": [
		"res_stasis_answer",
		"res_stasis_playback",
		"res_stasis_recording",
		"res_stasis_snoop"
	],
	"apis": [
		{
			"path": "/channels",
			"description": "Active channels",
			"operations": [
				{
					"httpMethod": "GET",
					"since": [
						"12.0.0"
					],
					"summary": "List all active channels in Asterisk.",
					"nickname": "list",
					"responseClass": "List[Channel]"
				},
				{
					"httpMethod": "POST",
					"since": [
						"12.0.0"
					],
					"summary": "Create a new channel (originate).",
					"notes": "The new channel is created immediately and a snapshot of it returned. If a Stasis application is provided it will be automatically subscribed to the originated channel for further events and updates.",
					"nickname": "originate",
					"responseClass": "Channel",
					"parameters": [
						{
							"name": "endpoint",
							"description": "Endpoint to call.",
							"paramType": "query",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "extension",
							"description": "The extension to dial after the endpoint answers. Mutually exclusive with 'app'.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "context",
							"description": "The context to dial after the endpoint answers. If omitted, uses 'default'. Mutually exclusive with 'app'.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "priority",
							"description": "The priority to dial after the endpoint answers. If omitted, uses 1. Mutually exclusive with 'app'.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "long"
						},
						{
							"name": "label",
							"description": "The label to dial after the endpoint answers. Will supersede 'priority' if provided. Mutually exclusive with 'app'.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "app",
							"description": "The application that is subscribed to the originated channel. When the channel is answered, it will be passed to this Stasis application. Mutually exclusive with 'context', 'extension', 'priority', and 'label'.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "appArgs",
							"description": "The application arguments to pass to the Stasis application provided by 'app'. Mutually exclusive with 'context', 'extension', 'priority', and 'label'.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "callerId",
							"description": "CallerID to use when dialing the endpoint or extension.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "timeout",
							"description": "Timeout (in seconds) before giving up dialing, or -1 for no timeout.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "int",
							"defaultValue": 30
						},
						{
							"name": "variables",
							"description": "The \"variables\" key in the body object holds variable key/value pairs to set on the channel on creation. Each variable value may be either a string or an object containing \"value\" (string) and optional \"report_events\" (boolean) to include updates for that variable in channel events (defaults to false). Other keys in the body object are interpreted as query parameters. Ex. { \"endpoint\": \"SIP/Alice\", \"variables\": { \"CALLERID(name)\": \"Alice\", \"Call_State\": { \"value\": \"WaitingForAgent\", \"report_events\": true } } }",
							"paramType": "body",
							"required": false,
							"dataType": "containers",
							"allowMultiple": false
						},
						{
							"name": "channelId",
							"description": "The unique id to assign the channel on creation.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "otherChannelId",
							"description": "The unique id to assign the second channel when using local channels.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "originator",
							"description": "The unique id of the channel which is originating this one.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "formats",
							"description": "The format name capability list to use if originator is not specified. Ex. \"ulaw,slin16\".  Format names can be found with \"core show codecs\".",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 400,
							"reason": "Invalid parameters for originating a channel."
						},
						{
							"code": 409,
							"reason": "Channel with given unique ID already exists."
						}
					]
				}
			]
		},
		{
			"path": "/channels/create",
			"description": "Create a channel and place it in a Stasis app, but do not dial the channel yet.",
			"operations": [
				{
					"httpMethod": "POST",
					"since": [
						"14.0.0"
					],
					"summary": "Create channel.",
					"nickname": "create",
					"responseClass": "Channel",
					"parameters": [
						{
							"name": "endpoint",
							"description": "Endpoint for channel communication",
							"paramType": "query",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "app",
							"description": "Stasis Application to place channel into",
							"paramType": "query",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "appArgs",
							"description": "The application arguments to pass to the Stasis application provided by 'app'. Mutually exclusive with 'context', 'extension', 'priority', and 'label'.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "channelId",
							"description": "The unique id to assign the channel on creation.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "otherChannelId",
							"description": "The unique id to assign the second channel when using local channels.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "originator",
							"description": "Unique ID of the calling channel",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "formats",
							"description": "The format name capability list to use if originator is not specified. Ex. \"ulaw,slin16\".  Format names can be found with \"core show codecs\".",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "variables",
							"description": "The \"variables\" key in the body object holds variable key/value pairs to set on the channel on creation. Each variable value may be either a string or an object containing \"value\" (string) and optional \"report_events\" (boolean) to include updates for that variable in channel events (defaults to false). Other keys in the body object are interpreted as query parameters. Ex. { \"endpoint\": \"SIP/Alice\", \"variables\": { \"CALLERID(name)\": \"Alice\", \"Call_State\": { \"value\": \"WaitingForAgent\", \"report_events\": true } } }",
							"paramType": "body",
							"required": false,
							"dataType": "containers",
							"allowMultiple": false
						}
					],
					"errorResponses": [
						{
							"code": 409,
							"reason": "Channel with given unique ID already exists."
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}",
			"description": "Active channel",
			"operations": [
				{
					"httpMethod": "GET",
					"since": [
						"12.0.0"
					],
					"summary": "Channel details.",
					"nickname": "get",
					"responseClass": "Channel",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Channel not found"
						}
					]
				},
				{
					"httpMethod": "POST",
					"since": [
						"12.2.0"
					],
					"summary": "Create a new channel (originate with id).",
					"notes": "The new channel is created immediately and a snapshot of it returned. If a Stasis application is provided it will be automatically subscribed to the originated channel for further events and updates.",
					"nickname": "originateWithId",
					"responseClass": "Channel",
					"parameters": [
						{
							"name": "channelId",
							"description": "The unique id to assign the channel on creation.",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "endpoint",
							"description": "Endpoint to call.",
							"paramType": "query",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "extension",
							"description": "The extension to dial after the endpoint answers. Mutually exclusive with 'app'.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "context",
							"description": "The context to dial after the endpoint answers. If omitted, uses 'default'. Mutually exclusive with 'app'.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "priority",
							"description": "The priority to dial after the endpoint answers. If omitted, uses 1. Mutually exclusive with 'app'.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "long"
						},
						{
							"name": "label",
							"description": "The label to dial after the endpoint answers. Will supersede 'priority' if provided. Mutually exclusive with 'app'.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "app",
							"description": "The application that is subscribed to the originated channel. When the channel is answered, it will be passed to this Stasis application. Mutually exclusive with 'context', 'extension', 'priority', and 'label'.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "appArgs",
							"description": "The application arguments to pass to the Stasis application provided by 'app'. Mutually exclusive with 'context', 'extension', 'priority', and 'label'.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "callerId",
							"description": "CallerID to use when dialing the endpoint or extension.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "timeout",
							"description": "Timeout (in seconds) before giving up dialing, or -1 for no timeout.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "int",
							"defaultValue": 30
						},
						{
							"name": "variables",
							"description": "The \"variables\" key in the body object holds variable key/value pairs to set on the channel on creation. Each variable value may be either a string or an object containing \"value\" (string) and optional \"report_events\" (boolean) to include updates for that variable in channel events (defaults to false). Other keys in the body object are interpreted as query parameters. Ex. { \"endpoint\": \"SIP/Alice\", \"variables\": { \"CALLERID(name)\": \"Alice\", \"Call_State\": { \"value\": \"WaitingForAgent\", \"report_events\": true } } }",
							"paramType": "body",
							"required": false,
							"dataType": "containers",
							"allowMultiple": false
						},
						{
							"name": "otherChannelId",
							"description": "The unique id to assign the second channel when using local channels.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "originator",
							"description": "The unique id of the channel which is originating this one.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "formats",
							"description": "The format name capability list to use if originator is not specified. Ex. \"ulaw,slin16\".  Format names can be found with \"core show codecs\".",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 400,
							"reason": "Invalid parameters for originating a channel."
						},
						{
							"code": 409,
							"reason": "Channel with given unique ID already exists."
						}
					]

				},
				{
					"httpMethod": "DELETE",
					"since": [
						"12.0.0"
					],
					"summary": "Delete (i.e. hangup) a channel.",
					"nickname": "hangup",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "reason_code",
							"description": "The reason code for hanging up the channel for detail use. Mutually exclusive with 'reason'. See detail hangup codes at here. https://docs.asterisk.org/Configuration/Miscellaneous/Hangup-Cause-Mappings/",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "reason",
							"description": "Reason for hanging up the channel for simple use. Mutually exclusive with 'reason_code'.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string",
							"allowableValues": {
								"valueType": "LIST",
								"values": [
									"normal",
									"busy",
									"congestion",
									"no_answer",
									"timeout",
									"rejected",
									"unallocated",
									"normal_unspecified",
									"number_incomplete",
									"codec_mismatch",
									"interworking",
									"failure",
									"answered_elsewhere"
								]
							}
						}
					],
					"errorResponses": [
						{
							"code": 400,
							"reason": "Invalid reason for hangup provided"
						},
						{
							"code": 404,
							"reason": "Channel not found"
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}/continue",
			"description": "Exit application; continue execution in the dialplan",
			"operations": [
				{
					"httpMethod": "POST",
					"since": [
						"12.0.0"
					],
					"summary": "Exit application; continue execution in the dialplan.",
					"nickname": "continueInDialplan",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "context",
							"description": "The context to continue to.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "extension",
							"description": "The extension to continue to.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "priority",
							"description": "The priority to continue to.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "int"
						},
						{
							"name": "label",
							"description": "The label to continue to - will supersede 'priority' if both are provided.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Channel not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						},
						{
							"code": 412,
							"reason": "Channel in invalid state"
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}/move",
			"description": "Move the channel from one Stasis application to another.",
			"operations": [
				{
					"httpMethod": "POST",
					"since": [
						"13.26.0",
						"16.3.0"
					],
					"summary": "Move the channel from one Stasis application to another.",
					"nickname": "move",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "app",
							"description": "The channel will be passed to this Stasis application.",
							"paramType": "query",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "appArgs",
							"description": "The application arguments to pass to the Stasis application provided by 'app'.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": "404",
							"reason": "Channel not found"
						},
						{
							"code": "409",
							"reason": "Channel not in a Stasis application"
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}/redirect",
			"description": "Inform the channel that it should redirect itself to a different location. Note that this will almost certainly cause the channel to exit the application.",
			"operations": [
				{
					"httpMethod": "POST",
					"since": [
						"13.3.0"
					],
					"summary": "Redirect the channel to a different location.",
					"nickname": "redirect",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "endpoint",
							"description": "The endpoint to redirect the channel to",
							"paramType": "query",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 400,
							"reason": "Endpoint parameter not provided"
						},
						{
							"code": 404,
							"reason": "Channel or endpoint not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						},
						{
							"code": 422,
							"reason": "Endpoint is not the same type as the channel"
						},
						{
							"code": 412,
							"reason": "Channel in invalid state"
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}/answer",
			"description": "Answer a channel",
			"operations": [
				{
					"httpMethod": "POST",
					"since": [
						"12.0.0"
					],
					"summary": "Answer a channel.",
					"nickname": "answer",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Channel not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						},
						{
							"code": 412,
							"reason": "Channel in invalid state"
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}/ring",
			"description": "Send a ringing indication to a channel",
			"operations": [
				{
					"httpMethod": "POST",
					"since": [
						"12.0.0"
					],
					"summary": "Indicate ringing to a channel.",
					"nickname": "ring",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Channel not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						},
						{
							"code": 412,
							"reason": "Channel in invalid state"
						}
					]
				},
				{
					"httpMethod": "DELETE",
					"since": [
						"12.0.0"
					],
					"summary": "Stop ringing indication on a channel if locally generated.",
					"nickname": "ringStop",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Channel not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						},
						{
							"code": 412,
							"reason": "Channel in invalid state"
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}/progress",
			"description": "Indicate progress on a channel",
			"operations": [
				{
					"httpMethod": "POST",
					"since": [
						"22.6.0",
						"21.11.0",
						"20.16.0"
					],
					"summary": "Indicate progress on a channel.",
					"nickname": "progress",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Channel not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						},
						{
							"code": 412,
							"reason": "Channel in invalid state"
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}/dtmf",
			"description": "Send DTMF to a channel",
			"operations": [
				{
					"httpMethod": "POST",
					"since": [
						"12.0.0"
					],
					"summary": "Send provided DTMF to a given channel.",
					"nickname": "sendDTMF",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "dtmf",
							"description": "DTMF To send.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "before",
							"description": "Amount of time to wait before DTMF digits (specified in milliseconds) start.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "int",
							"defaultValue": 0
						},
						{
							"name": "between",
							"description": "Amount of time in between DTMF digits (specified in milliseconds).",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "int",
							"defaultValue": 100
						},
						{
							"name": "duration",
							"description": "Length of each DTMF digit (specified in milliseconds).",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "int",
							"defaultValue": 100
						},
						{
							"name": "after",
							"description": "Amount of time to wait after DTMF digits (specified in milliseconds) end.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "int",
							"defaultValue": 0
						}
					],
					"errorResponses": [
						{
							"code": 400,
							"reason": "DTMF is required"
						},
						{
							"code": 404,
							"reason": "Channel not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						},
						{
							"code": 412,
							"reason": "Channel in invalid state"
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}/mute",
			"description": "Mute a channel",
			"operations": [
				{
					"httpMethod": "POST",
					"since": [
						"12.0.0"
					],
					"summary": "Mute a channel.",
					"nickname": "mute",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "direction",
							"description": "Direction in which to mute audio",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string",
							"defaultValue": "both",
							"allowableValues": {
								"valueType": "LIST",
								"values": [
									"both",
									"in",
									"out"
								]
							}
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Channel not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						},
						{
							"code": 412,
							"reason": "Channel in invalid state"
						}
					]
				},
				{
					"httpMethod": "DELETE",
					"since": [
						"12.0.0"
					],
					"summary": "Unmute a channel.",
					"nickname": "unmute",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "direction",
							"description": "Direction in which to unmute audio",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string",
							"defaultValue": "both",
							"allowableValues": {
								"valueType": "LIST",
								"values": [
									"both",
									"in",
									"out"
								]
							}
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Channel not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						},
						{
							"code": 412,
							"reason": "Channel in invalid state"
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}/hold",
			"description": "Put a channel on hold",
			"operations": [
				{
					"httpMethod": "POST",
					"since": [
						"12.0.0"
					],
					"summary": "Hold a channel.",
					"nickname": "hold",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Channel not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						},
						{
							"code": 412,
							"reason": "Channel in invalid state"
						}
					]
				},
				{
					"httpMethod": "DELETE",
					"since": [
						"12.0.0"
					],
					"summary": "Remove a channel from hold.",
					"nickname": "unhold",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Channel not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						},
						{
							"code": 412,
							"reason": "Channel in invalid state"
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}/moh",
			"description": "Play music on hold to a channel",
			"operations": [
				{
					"httpMethod": "POST",
					"since": [
						"12.0.0"
					],
					"summary": "Play music on hold to a channel.",
					"notes": "Using media operations such as /play on a channel playing MOH in this manner will suspend MOH without resuming automatically. If continuing music on hold is desired, the stasis application must reinitiate music on hold.",
					"nickname": "startMoh",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "mohClass",
							"description": "Music on hold class to use",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Channel not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						},
						{
							"code": 412,
							"reason": "Channel in invalid state"
						}
					]
				},
				{
					"httpMethod": "DELETE",
					"since": [
						"12.0.0"
					],
					"summary": "Stop playing music on hold to a channel.",
					"nickname": "stopMoh",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Channel not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						},
						{
							"code": 412,
							"reason": "Channel in invalid state"
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}/silence",
			"description": "Play silence to a channel",
			"operations": [
				{
					"httpMethod": "POST",
					"since": [
						"12.0.0"
					],
					"summary": "Play silence to a channel.",
					"notes": "Using media operations such as /play on a channel playing silence in this manner will suspend silence without resuming automatically.",
					"nickname": "startSilence",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Channel not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						},
						{
							"code": 412,
							"reason": "Channel in invalid state"
						}
					]
				},
				{
					"httpMethod": "DELETE",
					"since": [
						"12.0.0"
					],
					"summary": "Stop playing silence to a channel.",
					"nickname": "stopSilence",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Channel not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						},
						{
							"code": 412,
							"reason": "Channel in invalid state"
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}/play",
			"description": "Play media to a channel",
			"operations": [
				{
					"httpMethod": "POST",
					"since": [
						"12.0.0"
					],
					"summary": "Start playback of media.",
					"notes": "The media URI may be any of a number of URI's. Currently sound:, recording:, number:, digits:, characters:, and tone: URI's are supported. This operation creates a playback resource that can be used to control the playback of media (pause, rewind, fast forward, etc.)",
					"nickname": "play",
					"responseClass": "Playback",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "media",
							"description": "Media URIs to play.",
							"paramType": "query",
							"required": true,
							"allowMultiple": true,
							"dataType": "string"
						},
						{
							"name": "lang",
							"description": "For sounds, selects language for sound.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "offsetms",
							"description": "Number of milliseconds to skip before playing. Only applies to the first URI if multiple media URIs are specified.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "int"
						},
						{
							"name": "skipms",
							"description": "Number of milliseconds to skip for forward/reverse operations.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "int",
							"defaultValue": 3000
						},
						{
							"name": "playbackId",
							"description": "Playback ID.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Channel not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						},
						{
							"code": 412,
							"reason": "Channel in invalid state"
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}/play/{playbackId}",
			"description": "Play media to a channel",
			"operations": [
				{
					"httpMethod": "POST",
					"since": [
						"12.2.0"
					],
					"summary": "Start playback of media and specify the playbackId.",
					"notes": "The media URI may be any of a number of URI's. Currently sound:, recording:, number:, digits:, characters:, and tone: URI's are supported. This operation creates a playback resource that can be used to control the playback of media (pause, rewind, fast forward, etc.)",
					"nickname": "playWithId",
					"responseClass": "Playback",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "playbackId",
							"description": "Playback ID.",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "media",
							"description": "Media URIs to play.",
							"paramType": "query",
							"required": true,
							"allowMultiple": true,
							"dataType": "string"
						},
						{
							"name": "lang",
							"description": "For sounds, selects language for sound.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "offsetms",
							"description": "Number of milliseconds to skip before playing. Only applies to the first URI if multiple media URIs are specified.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "int"
						},
						{
							"name": "skipms",
							"description": "Number of milliseconds to skip for forward/reverse operations.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "int",
							"defaultValue": 3000
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Channel not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						},
						{
							"code": 412,
							"reason": "Channel in invalid state"
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}/record",
			"description": "Record audio from a channel",
			"operations": [
				{
					"httpMethod": "POST",
					"since": [
						"12.0.0"
					],
					"summary": "Start a recording.",
					"notes": "Record audio from a channel. Note that this will not capture audio sent to the channel. The bridge itself has a record feature if that's what you want.",
					"nickname": "record",
					"responseClass": "LiveRecording",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "name",
							"description": "Recording's filename",
							"paramType": "query",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "format",
							"description": "Format to encode audio in",
							"paramType": "query",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "maxDurationSeconds",
							"description": "Maximum duration of the recording, in seconds. 0 for no limit",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "int",
							"defaultValue": 0,
							"allowableValues": {
								"valueType": "RANGE",
								"min": 0
							}
						},
						{
							"name": "maxSilenceSeconds",
							"description": "Maximum duration of silence, in seconds. 0 for no limit",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "int",
							"defaultValue": 0,
							"allowableValues": {
								"valueType": "RANGE",
								"min": 0
							}
						},
						{
							"name": "ifExists",
							"description": "Action to take if a recording with the same name already exists.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string",
							"defaultValue": "fail",
							"allowableValues": {
								"valueType": "LIST",
								"values": [
									"fail",
									"overwrite",
									"append"
								]
							}
						},
						{
							"name": "beep",
							"description": "Play beep when recording begins",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "boolean",
							"defaultValue": false
						},
						{
							"name": "terminateOn",
							"description": "DTMF input to terminate recording",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string",
							"defaultValue": "none",
							"allowableValues": {
								"valueType": "LIST",
								"values": [
									"none",
									"any",
									"*",
									"#"
								]
							}
						}
					],
					"errorResponses": [
						{
							"code": 400,
							"reason": "Invalid parameters"
						},
						{
							"code": 404,
							"reason": "Channel not found"
						},
						{
							"code": 409,
							"reason": "Channel is not in a Stasis application; the channel is currently bridged with other channels; A recording with the same name already exists on the system and can not be overwritten because it is in progress or ifExists=fail"
						},
						{
							"code": 422,
							"reason": "The format specified is unknown on this system"
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}/variable",
			"description": "Variables on a channel",
			"operations": [
				{
					"httpMethod": "GET",
					"since": [
						"12.0.0"
					],
					"summary": "Get the value of a channel variable or function.",
					"nickname": "getChannelVar",
					"responseClass": "Variable",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "variable",
							"description": "The channel variable or function to get",
							"paramType": "query",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 400,
							"reason": "Missing variable parameter."
						},
						{
							"code": 404,
							"reason": "Channel or variable not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						}
					]
				},
				{
					"httpMethod": "POST",
					"since": [
						"12.0.0"
					],
					"summary": "Set the value of a channel variable or function.",
					"nickname": "setChannelVar",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "variable",
							"description": "The channel variable or function to set",
							"paramType": "query",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "value",
							"description": "The value to set the variable to",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "report_events",
							"description": "Whether this variable should be included in channel events. Defaults to false.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "boolean",
							"defaultValue": false
						}
					],
					"errorResponses": [
						{
							"code": 400,
							"reason": "Missing variable parameter."
						},
						{
							"code": 404,
							"reason": "Channel not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}/variables",
			"description": "Multiple variables on a channel",
			"operations": [
				{
					"httpMethod": "GET",
					"since": [
						"20.20.0",
						"22.10.0",
						"23.4.0"
					],
					"summary": "Get the value of multiple channel variables or functions.",
					"nickname": "getChannelVars",
					"responseClass": "Variables",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "variables",
							"description": "The channel variables or functions to get",
							"paramType": "query",
							"required": true,
							"allowMultiple": true,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 400,
							"reason": "Missing variables parameter."
						},
						{
							"code": 404,
							"reason": "Channel or variable not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						}
					]
				},
				{
					"httpMethod": "POST",
					"since": [
						"20.20.0",
						"22.10.0",
						"23.4.0"
					],
					"summary": "Set the values of multiple channel variables or functions.",
					"nickname": "setChannelVars",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "variables",
							"description": "The \"variables\" key in the body object holds variable key/value pairs to set on the channel. Each variable value may be either a string or an object containing \"value\" (string) and optional \"report_events\" (boolean) to include updates for that variable in channel events (defaults to false). Ex. { \"variables\": { \"CALLERID(name)\": \"Alice\", \"Call_State\": { \"value\": \"WaitingForAgent\", \"report_events\": true } } }",
							"paramType": "body",
							"required": true,
							"dataType": "containers",
							"allowMultiple": false
						}
					],
					"errorResponses": [
						{
							"code": 400,
							"reason": "Missing variables parameter."
						},
						{
							"code": 404,
							"reason": "Channel not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						}
					]

				}
			]
		},
		{
			"path": "/channels/{channelId}/snoop",
			"description": "Snoop (spy/whisper) on a channel",
			"operations": [
				{
					"httpMethod": "POST",
					"since": [
						"12.0.0"
					],
					"summary": "Start snooping.",
					"notes": "Snoop (spy/whisper) on a specific channel.",
					"nickname": "snoopChannel",
					"responseClass": "Channel",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "spy",
							"description": "Direction of audio to spy on",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string",
							"defaultValue": "none",
							"allowableValues": {
								"valueType": "LIST",
								"values": [
									"none",
									"both",
									"out",
									"in"
								]
							}
						},
						{
							"name": "whisper",
							"description": "Direction of audio to whisper into",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string",
							"defaultValue": "none",
							"allowableValues": {
								"valueType": "LIST",
								"values": [
									"none",
									"both",
									"out",
									"in"
								]
							}
						},
						{
							"name": "app",
							"description": "Application the snooping channel is placed into",
							"paramType": "query",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "appArgs",
							"description": "The application arguments to pass to the Stasis application",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "snoopId",
							"description": "Unique ID to assign to snooping channel",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 400,
							"reason": "Invalid parameters"
						},
						{
							"code": 404,
							"reason": "Channel not found"
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}/snoop/{snoopId}",
			"description": "Snoop (spy/whisper) on a channel",
			"operations": [
				{
					"httpMethod": "POST",
					"since": [
						"12.2.0"
					],
					"summary": "Start snooping.",
					"notes": "Snoop (spy/whisper) on a specific channel.",
					"nickname": "snoopChannelWithId",
					"responseClass": "Channel",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "snoopId",
							"description": "Unique ID to assign to snooping channel",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "spy",
							"description": "Direction of audio to spy on",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string",
							"defaultValue": "none",
							"allowableValues": {
								"valueType": "LIST",
								"values": [
									"none",
									"both",
									"out",
									"in"
								]
							}
						},
						{
							"name": "whisper",
							"description": "Direction of audio to whisper into",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string",
							"defaultValue": "none",
							"allowableValues": {
								"valueType": "LIST",
								"values": [
									"none",
									"both",
									"out",
									"in"
								]
							}
						},
						{
							"name": "app",
							"description": "Application the snooping channel is placed into",
							"paramType": "query",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "appArgs",
							"description": "The application arguments to pass to the Stasis application",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 400,
							"reason": "Invalid parameters"
						},
						{
							"code": 404,
							"reason": "Channel not found"
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}/dial",
			"description": "Dial a channel",
			"operations": [
				{
					"httpMethod": "POST",
					"since": [
						"14.0.0"
					],
					"summary": "Dial a created channel.",
					"nickname": "dial",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "caller",
							"description": "Channel ID of caller",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "timeout",
							"description": "Dial timeout",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "int",
							"defaultValue": 0,
							"allowableValues": {
								"valueType": "RANGE",
								"min": 0
							}
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Channel cannot be found."
						},
						{
							"code": 409,
							"reason": "Channel cannot be dialed."
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}/rtp_statistics",
			"description": "Get RTP statistics information for RTP on a channel",
			"operations": [
				{
					"httpMethod": "GET",
					"since": [
						"13.27.0",
						"16.4.0"
					],
					"summary": "RTP stats on a channel.",
					"nickname": "rtpstatistics",
					"responseClass": "RTPstat",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 404,
							"reason": "Channel cannot be found."
						}
					]
				}
			]
		},
		{
			"path": "/channels/externalMedia",
			"description": "Create a channel to an External Media source/sink.",
			"operations": [
				{
					"httpMethod": "POST",
					"since": [
						"16.6.0",
						"17.1.0"
					],
					"summary": "Start an External Media session.",
					"notes": "Create a channel to an External Media source/sink.  The combination of transport and encapsulation will select one of chan_rtp(udp/rtp), chan_audiosocket(tcp/audiosocket) or chan_websocket(websocket/none) channel drivers.",
					"nickname": "externalMedia",
					"responseClass": "Channel",
					"parameters": [
						{
							"name": "channelId",
							"description": "The unique id to assign the channel on creation.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "app",
							"description": "Stasis Application to place channel into",
							"paramType": "query",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "variables",
							"description": "The \"variables\" key in the body object holds variable key/value pairs to set on the channel on creation. Each variable value may be either a string or an object containing \"value\" (string) and optional \"report_events\" (boolean) to include updates for that variable in channel events (defaults to false). Other keys in the body object are interpreted as query parameters. Ex. { \"endpoint\": \"SIP/Alice\", \"variables\": { \"CALLERID(name)\": \"Alice\", \"Call_State\": { \"value\": \"WaitingForAgent\", \"report_events\": true } } }",
							"paramType": "body",
							"required": false,
							"dataType": "containers",
							"allowMultiple": false
						},
						{
							"name": "external_host",
							"description": "Hostname/ip:port or websocket_client connection ID of external host.  May be empty for a websocket server connection.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "encapsulation",
							"description": "Payload encapsulation protocol.  Must be 'none' for the websocket transport.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string",
							"defaultValue": "rtp",
							"allowableValues": {
								"valueType": "LIST",
								"values": [
									"rtp",
									"audiosocket",
									"none"
								]
							}
						},
						{
							"name": "transport",
							"description": "Transport protocol",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string",
							"defaultValue": "udp",
							"allowableValues": {
								"valueType": "LIST",
								"values": [
									"udp",
									"tcp",
									"websocket"
								]
							}
						},
						{
							"name": "connection_type",
							"description": "Connection type (client/server). 'server' is only valid for the websocket transport.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string",
							"defaultValue": "client",
							"allowableValues": {
								"valueType": "LIST",
								"values": [
									"client",
									"server"
								]
							}
						},
						{
							"name": "format",
							"description": "Format to encode audio in",
							"paramType": "query",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "direction",
							"description": "External media direction",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string",
							"defaultValue": "both",
							"allowableValues": {
								"valueType": "LIST",
								"values": [
									"both"
								]
							}
						},
						{
							"name": "data",
							"description": "An arbitrary data field",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "transport_data",
							"description": "Transport-specific data. For websocket this is appended to the dialstring.",
							"paramType": "query",
							"required": false,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 400,
							"reason": "Invalid parameters"
						},
						{
							"code": 409,
							"reason": "Channel is not in a Stasis application; Channel is already bridged"
						}
					]
				}
			]
		},
		{
			"path": "/channels/{channelId}/transfer_progress",
			"description": "Inform the channel that the transfer is in progress.",
			"operations": [
				{
					"httpMethod": "POST",
					"since": [
						"22.3.0",
						"21.8.0",
						"20.13.0"
					],
					"summary": "Inform the channel about the progress of the attended/blind transfer.",
					"nickname": "transfer_progress",
					"responseClass": "void",
					"parameters": [
						{
							"name": "channelId",
							"description": "Channel's id",
							"paramType": "path",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						},
						{
							"name": "states",
							"description": "The state of the progress",
							"paramType": "query",
							"required": true,
							"allowMultiple": false,
							"dataType": "string"
						}
					],
					"errorResponses": [
						{
							"code": 400,
							"reason": "Endpoint parameter not provided"
						},
						{
							"code": 404,
							"reason": "Channel or endpoint not found"
						},
						{
							"code": 409,
							"reason": "Channel not in a Stasis application"
						},
						{
							"code": 412,
							"reason": "Channel in invalid state"
						}
					]
				}
			]
		}
	],
	"models": {
		"Dialed": {
			"id": "Dialed",
			"description": "Dialed channel information.",
			"properties": {}
		},
		"DialplanCEP": {
			"id": "DialplanCEP",
			"description": "Dialplan location (context/extension/priority)",
			"properties": {
				"context": {
					"required": true,
					"type": "string",
					"description": "Context in the dialplan"
				},
				"exten": {
					"required": true,
					"type": "string",
					"description": "Extension in the dialplan"
				},
				"priority": {
					"required": true,
					"type": "long",
					"description": "Priority in the dialplan"
				},
				"app_name": {
					"required": true,
					"type": "string",
					"description": "Name of current dialplan application"
				},
				"app_data": {
					"required": true,
					"type": "string",
					"description": "Parameter of current dialplan application"
				}
			}
		},
		"CallerID": {
			"id": "CallerID",
			"description": "Caller identification",
			"properties": {
				"name": {
					"required": true,
					"type": "string"
				},
				"number": {
					"required": true,
					"type": "string"
				}
			}
		},
		"RTPstat": {
			"id": "RTPstat",
			"description": "A statistics of a RTP.",
			"properties": {
				"txcount": {
					"required": true,
					"type": "int",
					"description": "Number of packets transmitted."
				},
				"rxcount": {
					"required": true,
					"type": "int",
					"description": "Number of packets received."
				},
				"txjitter": {
					"required": false,
					"type": "double",
					"description": "Jitter on transmitted packets."
				},
				"rxjitter": {
					"required": false,
					"type": "double",
					"description": "Jitter on received packets."
				},
				"remote_maxjitter": {
					"required": false,
					"type": "double",
					"description": "Maximum jitter on remote side."
				},
				"remote_minjitter": {
					"required": false,
					"type": "double",
					"description": "Minimum jitter on remote side."
				},
				"remote_normdevjitter": {
					"required": false,
					"type": "double",
					"description": "Average jitter on remote side."
				},
				"remote_stdevjitter": {
					"required": false,
					"type": "double",
					"description": "Standard deviation jitter on remote side."
				},
				"local_maxjitter": {
					"required": false,
					"type": "double",
					"description": "Maximum jitter on local side."
				},
				"local_minjitter": {
					"required": false,
					"type": "double",
					"description": "Minimum jitter on local side."
				},
				"local_normdevjitter": {
					"required": false,
					"type": "double",
					"description": "Average jitter on local side."
				},
				"local_stdevjitter": {
					"required": false,
					"type": "double",
					"description": "Standard deviation jitter on local side."
				},
				"txploss": {
					"required": true,
					"type": "int",
					"description": "Number of transmitted packets lost."
				},
				"rxploss": {
					"required": true,
					"type": "int",
					"description": "Number of received packets lost."
				},
				"remote_maxrxploss": {
					"required": false,
					"type": "double",
					"description": "Maximum number of packets lost on remote side."
				},
				"remote_minrxploss": {
					"required": false,
					"type": "double",
					"description": "Minimum number of packets lost on remote side."
				},
				"remote_normdevrxploss": {
					"required": false,
					"type": "double",
					"description": "Average number of packets lost on remote side."
				},
				"remote_stdevrxploss": {
					"required": false,
					"type": "double",
					"description": "Standard deviation packets lost on remote side."
				},
				"local_maxrxploss": {
					"required": false,
					"type": "double",
					"description": "Maximum number of packets lost on local side."
				},
				"local_minrxploss": {
					"required": false,
					"type": "double",
					"description": "Minimum number of packets lost on local side."
				},
				"local_normdevrxploss": {
					"required": false,
					"type": "double",
					"description": "Average number of packets lost on local side."
				},
				"local_stdevrxploss": {
					"required": false,
					"type": "double",
					"description": "Standard deviation packets lost on local side."
				},
				"rtt": {
					"required": false,
					"type": "double",
					"description": "Total round trip time."
				},
				"maxrtt": {
					"required": false,
					"type": "double",
					"description": "Maximum round trip time."
				},
				"minrtt": {
					"required": false,
					"type": "double",
					"description": "Minimum round trip time."
				},
				"normdevrtt": {
					"required": false,
					"type": "double",
					"description": "Average round trip time."
				},
				"stdevrtt": {
					"required": false,
					"type": "double",
					"description": "Standard deviation round trip time."
				},
				"local_ssrc": {
					"required": true,
					"type": "int",
					"description": "Our SSRC."
				},
				"remote_ssrc": {
					"required": true,
					"type": "int",
					"description": "Their SSRC."
				},
				"txoctetcount": {
					"required": true,
					"type": "int",
					"description": "Number of octets transmitted."
				},
				"rxoctetcount": {
					"required": true,
					"type": "int",
					"description": "Number of octets received."
				},
				"channel_uniqueid": {
					"required": true,
					"type": "string",
					"description": "The Asterisk channel's unique ID that owns this instance."
				}
			}
		},
		"Channel": {
			"id": "Channel",
			"description": "A specific communication connection between Asterisk and an Endpoint.",
			"properties": {
				"id": {
					"required": true,
					"type": "string",
					"description": "Unique identifier of the channel.\n\nThis is the same as the Uniqueid field in AMI."
				},
				"protocol_id": {
					"required": true,
					"type": "string",
					"description": "Protocol id from underlying channel driver (i.e. Call-ID for chan_pjsip; will be empty if not applicable or not implemented by driver)."
				},
				"name": {
					"required": true,
					"type": "string",
					"description": "Name of the channel (i.e. SIP/foo-0000a7e3)"
				},
				"state": {
					"required": true,
					"type": "string",
					"allowableValues": {
						"valueType": "LIST",
						"values": [
							"Down",
							"Rsrved",
							"OffHook",
							"Dialing",
							"Ring",
							"Ringing",
							"Up",
							"Busy",
							"Dialing Offhook",
							"Pre-ring",
							"Unknown"
						]
					}
				},
				"caller": {
					"required": true,
					"type": "CallerID"
				},
				"connected": {
					"required": true,
					"type": "CallerID"
				},
				"accountcode": {
					"required": true,
					"type": "string"
				},
				"dialplan": {
					"required": true,
					"type": "DialplanCEP",
					"description": "Current location in the dialplan"
				},
				"creationtime": {
					"required": true,
					"type": "Date",
					"description": "Timestamp when channel was created"
				},
				"language": {
					"required": true,
					"type": "string",
					"description": "The default spoken language"
				},
				"channelvars": {
					"required": false,
					"type": "object",
					"description": "Channel variables"
				},
				"caller_rdnis": {
					"type": "string",
					"description": "The Caller ID RDNIS"
				},
				"tenantid": {
					"required": false,
					"type": "string",
					"description": "The Tenant ID for the channel"
				}
			}
		}
	}
}
